@clickhouse_ru

Страница 265 из 723
Edya
19.09.2017
17:41:25
В PG есть запрос: select array(select id from table) Как сделать аналогичное?
select arrayElement(groupArray(a),2) from ( select 1 a union all select 2)

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
Господа ) Что-то мы давно не собирались)
Будет митап в Москве, но не очень скоро - скорее всего в ноябре или конце октября. А пока ближайший вариант - митап в Берлине 5 октября.

Всем привет! А есть ли либы для CH, которые могут общаться с сервером по https искаропки?
У нас в планах есть добавление SSL, в том числе, к нативному протоколу.

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
> при использовании не строгой функции Это какая?

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 было больше. Мы остановили запись во весь шард, там где вот такая нода. и файлики начали рассасыватся. Какое назначение этих файлов и самое главное какие могут быть причины их накопление?

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

Navern
20.09.2017
10:46:29
мы пробовали, нам не понравилось, очень сырое вот это постабильнее работало - fdw_odbc postgres extension, но все равно ограничено и нужно определенные типы преобразовывать в что-то поддерживаемое
а расскажите как odbc настраивали? мне его пришлось подправить под 9.6 иначе не компиллось, а как подключение настроить не понял. Нужно ли дополнительно компилить clickhouse_odbc на хост с постгерсом?

я ща посмотрел питоновский 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
Так odbc для кликхауса я так понимаю вы компили и подключали отдельно?
нет, просто odbc_fdw extension - http://www.postgresonline.com/journal/archives/372-ODBC-FDW-now-supports-9.5-and-9.6.html

Страница 265 из 723