
Edya
19.09.2017
17:41:25

Vladislav
19.09.2017
18:04:13
а можно в кх из json'а вытащить keys и values? в документации не нашел, но аппметрика как-то строит отчеты.

papa
19.09.2017
18:07:39
аппметрика не хранит жсон в виде жсона

Vladislav
19.09.2017
18:10:26

Google

papa
19.09.2017
18:12:16
во-первых есть функции visitParamExtract*
во-вторых Nested со строками на некоторое количество уровней в глубину.

Vladislav
19.09.2017
18:23:55
ок, спасибо. видимо, буду использовать Nested

Alexey
19.09.2017
18:26:28

Oleh
19.09.2017
20:15:28
кто-то сталкивался с проблемой DB::NetException: I/O error: Broken pipe: while reading from socket (176....:9000), e.what() = DB::NetException, Stack trace: ?
пробовал делать перезапуск, не помогло
а, я понял, нужно обновить кликхаус

Stas
19.09.2017
21:35:13
Накопал фичу/баг:
Имеем колонку nullable(string) там числа и NULL, пытаемся сконвертировать в int, получаем вместо NULL - ошибку или 0 (при использовании не строгой функции)
А собственно почему так? Если в колонка типа int может быть nullable...

Alexey
19.09.2017
21:40:51
> при использовании не строгой функции
Это какая?

Stas
19.09.2017
21:43:43

Alexey
19.09.2017
21:44:11
Напишите пример полного запроса с какими-нибудь данными, чтобы разобраться.

Stas
19.09.2017
21:53:02
Напишите пример полного запроса с какими-нибудь данными, чтобы разобраться.
Есть данные:
┌─r──────┐
│ 127253 │
│ 125449 │
│ 1 │
│ 125445 │
│ 272 │
│ 285 │
│ 215 │
└────────┘
┌─r─────────┐
│ 2826 │
│ 401622 │
│ 470784040 │
└───────────┘
┌─r──┐
│ \N │
│ \N │
│ \N │
└────┘
r - string
запрос select sum(toInt64(r)) from table; выведет ошибку - Attempt to read after eof: Cannot parse Int64 from String, because value is too short.
т.е по логике данной функции он не может сконвертировать NULL в типе string в NULL в типе int
ожидаю я же следующего поведения: есть данные -
тут тип int
─r_int2─┐
│ \N │
│ 856 │
└────────┘
при запросе select sum(r_int2) from table
я ожидаемо получаю
┌─sum(r_int2)─┐
│ 856 │
└─────────────┘

Google

Dmitriy
20.09.2017
06:57:27
Подскажите что за файлы могут накапливатся в каталоге distributes таблици
вот к примеру, у нас есть распределенная талица а в ней на сейчас 600К файлов
events_tv20/default@192%2E168%2E1%2E147:9000# ll |wc -l
665566
было больше.
Мы остановили запись во весь шард, там где вот такая нода. и файлики начали рассасыватся.
Какое назначение этих файлов и самое главное какие могут быть причины их накопление?

Tima
20.09.2017
07:02:43

Stas
20.09.2017
07:04:07
По этому я и говорю - выглядит как баг тк при конвертации не работает sum() а при нативном типе int - работает
Мне главное понять - это баг и он исправится или это фича и нужно смириться...

Александр
20.09.2017
07:36:15
У вас в логах нет ошибок на запись?

Dmitriy
20.09.2017
07:37:10
а как они могут выглядить?

Александр
20.09.2017
07:38:10
Просто tail -n 100 /var/log/clickhouse-server/clickhouse-server.err.log
Есть там чего?
Причем смотреть надо на шарде в который отправляете запросы на вставку данных
Если там нет ничего, то возможно это какая то другая информация хранится в файлах
Содержимое файлов не смотрели?


Dmitriy
20.09.2017
07:41:28
содержимое файлов не смотрели
а влоге вот такое сыпится
2017.09.20 07:40:13.305750 [ 14 ] <Warning> nic.events_local_tv20 (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170920_20170920_3230238_3230238_0 from ZooKeeper: no node
2017.09.20 07:40:13.331131 [ 14 ] <Warning> nic.events_local_tv20 (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170917_20170920_3230235_3230235_0 from ZooKeeper: no node
2017.09.20 07:40:13.350994 [ 14 ] <Warning> nic.events_local_tv20 (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170920_20170920_3230233_3230233_0 from ZooKeeper: no node
2017.09.20 07:40:23.060173 [ 27 ] <Error> events_v2_tv11.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (192.168.1.145:9000), e.what() = DB::NetException, Stack trace:
содержимое файлов это инсерты с данными


Oleh
20.09.2017
07:48:10
какая у тебя версия кликхауса?
у меня вчера была ошибка с DB::NetException: I/O error: Broken pipe: на версии 1.1.54236

Dmitriy
20.09.2017
07:53:00
какая у тебя версия кликхауса?
ii clickhouse-client 1.1.54236 amd64 Client binary for clickhouse
ii clickhouse-server-base 1.1.54236 amd64 Server binary for clickhouse
ii clickhouse-server-common 1.1.54236 amd64 clickhouse-server-common

Oleh
20.09.2017
08:00:48
да, я вчера обновился и проблема ушла

Dmitriy
20.09.2017
08:17:09
Дмитрий Анатолиевич вы сюда по каким причинам попали?

Google

Dmitry
20.09.2017
08:18:12
Шуточки подъехали

Dmitriy
20.09.2017
08:50:22

Oleh
20.09.2017
08:51:42
apt-get install --only-upgrade clickhouse-server-common
ну и потом перезапуск /etc/init.d/clickhouse-server restart

Dmitriy
20.09.2017
08:52:13
спасибо

Vsevolod
20.09.2017
08:58:53
Доброе утро!
Скажите пожалуйста, как можно это оптимизировать?
Если в табличке А и в табличке Б по 10к значений с одинаковым id, то это выльется в 100 млн записей по которым потом происходит фильтрация. Но так как нету join по условиям, я даже не представляю как это сделать.
SELECT
id,
local_time,
start_time,
end_time
FROM A
ALL INNER JOIN (
SELECT
id,
start_time,
end_time
FROM B
) USING id
WHERE local_time >= start_time AND local_time < end_time

Александр
20.09.2017
09:01:30
А писать в одну таблицу не получится?

Vsevolod
20.09.2017
09:01:48
К сожалению никак не получится


Александр
20.09.2017
09:03:50
Просто в КХ логика выборки данных сильно отличается от того же MySQL например в котором можно делать констрейны на подзапросы и джоины. В случае с констрейнами сначала выбирается правая таблица, потом на каждую строку с констрейнами в запрос делается подзапрос (в случае подзапроса) и выбираются данные, если это джоин, то происходит почти тоже самое что и при подзапросе. Т.е. будь у вас 10к строк и вы джоините еще 10к строк с констрейнами на джоин, то это будет по сути 10к подзапросов в таблицу, что будет крайне не эффективно.
Ощутил это на своей шкуре, когда джоинил в одном запросе на 40к строк еще кучу таблиц в которых от 10 до 100к строк на каждую строку из правой таблицы )
Перетащил такое добро в КХ...вы не поверите, но даже на двух виртуальных ядрах КХ справляется шустрее чем MySQL на продакшен сервере с 40 ядрами и 190 гигами оперативы и натюненными настройками, причем MySQL отрабатывает за 30 секунд, а КХ за 0.005.


Vsevolod
20.09.2017
09:09:34
У меня это выполняется не в запросе, а при вставке в MV. И я упераюсь в оперативу, несмотря на выставленные настройки.
У нас специфика такая, что не получится мержить перед КХ, так как данные за временные промежутки приходят с задержкой от 1 минуты до нескольких месяцев
Или придется мержить для каждого id, выбирая данные из КХ, что в 90% случаев будет происходит каждые 15 секунд, а так как возможный rps у КХ не высокий, он не выдержит.

Александр
20.09.2017
09:16:27
Это печально. Пока ничего в голову не приходит

Kirill
20.09.2017
09:16:41
Что вы хотите всем этим сделать, задача какая ?

Vsevolod
20.09.2017
09:17:37
Сопоставить данные из таблицы А с данными из таблицы Б по условию что id одинаковы и время события из таблицы A попадает в указанный временной промежуток из таблицы Б
Соответственно вытащив дополнительную информацию из А и Б

Igor
20.09.2017
09:18:33
можно например представить вторую таблицу словарем, если есть точное условие...

Vsevolod
20.09.2017
09:21:16

Google

Igor
20.09.2017
09:21:21
https://clickhouse.yandex/docs/en/dicts/external_dicts.html#range-hashed
а вот это не подходит?

Vsevolod
20.09.2017
09:24:27
К сожалению, там используется только Date, а не DateTime или Int64. Но больше проблема в том, что результат будет схож с условием ANY JOIN, а требуется ALL JOIN

Navern
20.09.2017
09:31:39
Привет,
А кто-нибудь использовал эту обертку дял постгерса?https://github.com/Infinidat/infi.clickhouse_fdw/
задача лезть из постгреса в кликхаус, при импорте схемы не подтягиваются Nullable поля и когда делаешь запросы питон разваливается с KeyError
или может какой-то другой вариант кто посоветует

Alexandr
20.09.2017
10:29:24
мы пробовали, нам не понравилось, очень сырое
вот это постабильнее работало - fdw_odbc postgres extension, но все равно ограничено и нужно определенные типы преобразовывать в что-то поддерживаемое

Paul
20.09.2017
10:30:37
коллеги, подскажите решение простейшей задачи, что-то я лбом уперся. Как инсертит в MergeTree в поле date? какой формат? Пишу из python

Andrew
20.09.2017
10:31:52

Navern
20.09.2017
10:46:29
я ща посмотрел питоновский fdw не поддерживает даже енамы=(


Alexandr
20.09.2017
10:53:16
pg odbc fdw тоже не поддерживает enum, но можно конвертировать toString и тогда работает
CREATE FOREIGN TABLE
test (
id integer,
value text,
ipv6 char(16)
)
SERVER odbc_server
OPTIONS (
schema 'default',
sql_query 'select id, toString(value), ipv6 from default.test',
sql_count 'select count(*) from default.test'
);
CREATE USER MAPPING FOR postgres
SERVER odbc_server;
SELECT id FROM test limit 5;
SELECT * FROM test limit 5;
SELECT count(*) FROM test;
что-то вроде такого
а перед этим еще такое было
CREATE EXTENSION IF NOT EXISTS odbc_fdw;
DROP SERVER IF EXISTS odbc_server CASCADE;
CREATE SERVER odbc_server
FOREIGN DATA WRAPPER odbc_fdw
OPTIONS (dsn 'ClickHouse');

Navern
20.09.2017
11:26:03
Йеее пасиб) ток не вижу где урл доступа к кликхаусу настраивается
в дсн не прописываете так как локалхост?
меня еще смутило, что непонятно к какому порту коннектится в кликхаусе для одбц

Alexandr
20.09.2017
11:30:38
IMPORT FOREIGN SCHEMA "default"
LIMIT TO (requests)
FROM SERVER "clickhouse_server"
INTO "public"
OPTIONS (
db_url 'http://localhost:32798',
db_name 'default'
);
по http работало у нас

Navern
20.09.2017
11:31:56
ясно, пасибо огромное!

Google

Navern
20.09.2017
11:32:00
ща буду разбираться

Alexandr
20.09.2017
11:32:04
но мы все же выбрали вариант с ETL Clickhouse -> Postgres на время пока BI переезжает с Citus (тот же postgres) на Clickhouse

Navern
20.09.2017
11:32:26
ETL это что?
ну я понял, у вас odbc был временный вариант для миграции. вы его долго в продакшене не гоняли

Alexandr
20.09.2017
11:32:56
основная причина выбора - where условие будет работать локально в случае с fdw, т.е. postgres вначале затянет себе всю таблицу, а только потом фильтрации будет делать
etl - extraction transform load
просто преобразование данных с загрузкой

Navern
20.09.2017
11:34:42
если он сначала затягивает всю таблицу, то все преимущество кликхауса вроде как теряется

Alexandr
20.09.2017
11:36:55
смотря как использовать, есть возможность указать sql_where в odbc и тогда будет выполнять только тот запрос что нужно, но если хочется делать произвольные фильтрации, то надо импортить всю таблицу и все where будут локальными

Navern
20.09.2017
11:39:18
выглядит не очень гибко конечно, но в целом примерно принцип понятен. Если хочется чтобы работало на стороне кликхауса, нужно очень конкретно одбц описывать

Alexandr
20.09.2017
11:40:39
верно

Navern
20.09.2017
11:46:57
Так odbc для кликхауса я так понимаю вы компили и подключали отдельно?
https://github.com/yandex/clickhouse-odbc
вот этот?

Alexandr
20.09.2017
12:33:09