@clickhouse_ru

Страница 722 из 723
Arkady
26.10.2018
10:46:47
Привет! Помогите составить запрос пожалуйста. Есть таблица kw | ids ----|------------ kw1 | [id1, id2, id3] kw2 | [id3, id4, id5] Мне надо получить массив, который является конкатеницией всех записей второй колонки. Я попробовал функцию arrayConcat(groupArray(ids)). Не получается. Она возвращает массив из двух элементов, потому что по документации: аргумент функции arrayConcat - это "Перечисленные через запятую массивы"

Lamobot
26.10.2018
10:49:09
а я все команды выполняю внутри контейнера из под root (docker exec -it clickhouse sh)
ps afx посмотрите, может у вас уже все запущено там

Vitaly
26.10.2018
10:50:36
# ps afx PID TTY STAT TIME COMMAND 58 pts/1 Ss+ 0:00 sh 1 pts/0 Ss 0:00 sh 136 pts/0 R+ 0:00 ps afx

Google
Ivan
26.10.2018
10:54:20
Скажите, кто-нибудь использует resharding?

Yaroslav
26.10.2018
10:54:45
(Solved на v18.14.10 работает нормально) Привет ! Необходимо получить из таблицы записи не ранее определенного времени DESCRIBE TABLE streams ┌─name───┬─type─┬─default_type─┬─default_expression─┐ │ date │ Date │ DEFAULT │ today() │ │ time │ DateTime │DEFAULT │ now() │ │ name │ String │ │ │ Делаю запрос SELECT time, now(), name FROM streams WHERE (time > (now() - 30)) AND (name = 'yv') ┌───────time─┬──────now()─┬─name─┐ │ 2018-10-26 13:37:11 │ 2018-10-26 13:46:32 │ yv │ │ 2018-10-26 13:37:12 │ 2018-10-26 13:46:32 │ yv │ └─────────────────────┴────┘ И такой результат, в случае если данные таблицы не меняются относительно where всегда Далее, меняем условие where , ранее не использованное SELECT time,now(),name FROM streams WHERE time>now()-28 and name='yv' SELECT time, now(), name FROM streams WHERE (time > (now() - 28)) AND (name = 'yv') Ok. 0 rows in set. Elapsed: 0.009 sec. Методом проб и ошибок нахожу, что запрос вида SELECT time, now() - 30, name FROM streams WHERE (time > (now() - 30)) AND (name = 'yv') работает всегда корректно

Daniel
26.10.2018
10:54:53
то что вы можете найти в гугле устарело давно

Ivan
26.10.2018
10:55:25
Ясно, так и подозревал

Daniel
26.10.2018
10:55:45
погуглите по истории чата "решардинг", я решил этот вопрос ребалансировкой записей на новую шарду

или пояндексите

что ближе ?

Ivan
26.10.2018
10:57:18
Перечитать и переписать?

Kirill
26.10.2018
11:03:52
@kshvakov Кирилл подскажите пожалуйста каким образом можно посмотреть данные из конкретной партиции ?
В новых версиях вот так kshvakov :) CREATE TABLE T (Date Date , Value String) Engine MergeTree PARTITION BY toYYYYMM(Date) ORDER BY Date CREATE TABLE T ( Date Date, Value String ) ENGINE = MergeTree PARTITION BY toYYYYMM(Date) ORDER BY Date Ok. 0 rows in set. Elapsed: 0.006 sec. kshvakov :) INSERT INTO T VALUES (today(), 'X') INSERT INTO T VALUES Ok. 1 rows in set. Elapsed: 0.015 sec. kshvakov :) SELECT *, _partition_id FROM T SELECT *, _partition_id FROM T ┌───────Date─┬─Value─┬─_partition_id─┐ │ 2018-10-26 │ X │ 201810 │ └────────────┴───────┴───────────────┘ 1 rows in set. Elapsed: 0.014 sec.

Google
Mike
26.10.2018
11:07:57
Коллеги, подскажите плиз, в prometheus пуляться метриками КХ какой способ предпочтительней? clickhouse_exporter ? Хочется красивых картинок в графане

Kirill
26.10.2018
11:08:25
Alexey
26.10.2018
11:08:45
Andrey
26.10.2018
11:08:57
ловил кто-нибудь с jdbc-драйвером такие проблемы ? Caused by: java.io.IOException: Attempted read on closed stream. at org.apache.http.conn.EofSensorInputStream.isReadAllowed(EofSensorInputStream.java:109) ~[httpclient-4.5.2.jar:4.5.2] at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:118) ~[httpclient-4.5.2.jar:4.5.2] at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.readNextBlock(ClickHouseLZ4Stream.java:82) ~[clickhouse-jdbc-0.1.42.jar:na] at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.checkNext(ClickHouseLZ4Stream.java:74) ~[clickhouse-jdbc-0.1.42.jar:na] at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.read(ClickHouseLZ4Stream.java:50) ~[clickhouse-jdbc-0.1.42.jar:na] at ru.yandex.clickhouse.response.StreamSplitter.readFromStream(StreamSplitter.java:92) ~[clickhouse-jdbc-0.1.42.jar:na] at ru.yandex.clickhouse.response.StreamSplitter.next(StreamSplitter.java:54) ~[clickhouse-jdbc-0.1.42.jar:na] at ru.yandex.clickhouse.response.ClickHouseResultSet.hasNext(ClickHouseResultSet.java:116) ~[clickhouse-jdbc-0.1.42.jar:na] ... 70 common frames omitted версия jdbc 0.1.42

https://github.com/yandex/clickhouse-jdbc/issues/253

Kirill
26.10.2018
11:09:38
Коллеги, подскажите плиз, в prometheus пуляться метриками КХ какой способ предпочтительней? clickhouse_exporter ? Хочется красивых картинок в графане
Да, он достаточно метрик собирает. У меня еще свой есть, но мы его так пока и не начали использовать

Ivan
26.10.2018
11:30:04
А есть у кого нибудь опыт использования внешних словарей с миллиардами значений?

papa
26.10.2018
11:33:10
<layout> <cache>

Denis
26.10.2018
11:34:16
А есть у кого нибудь опыт использования внешних словарей с миллиардами значений?
это зависит от. Для обычных словарей памяти не хватит. Для cached будет sql запросы мегабайтные строить. Что у вас за бекэнд?

Denis
26.10.2018
11:43:07
Не знаю такого. Odbc? В общем для cached кх построит sql запрос select where id in (100 млн. значений через запятую).

через http будет работать

Michal
26.10.2018
11:54:11
Aerospike например
Поплюсуйте этот ишью: https://github.com/yandex/ClickHouse/issues/2718 :)

А есть у кого нибудь опыт использования внешних словарей с миллиардами значений?
есть. Но удачным этот опыт я бы его назвал. Cached - очень медленный и жрет память.

Не знаю такого. Odbc? В общем для cached кх построит sql запрос select where id in (100 млн. значений через запятую).
Мы как раз пробовали через HTTP. Это выглядит так - для каждого блока данных (примерно по 65 тысяч) он идет спрашивать в словаре внешние данные. Словарь ищет их в кеше, не находит почти ничего. После чего идет греть кэш. Разогревка кэша идет в один поток. Он делает 1 запрос в HTTP с 65 тысячами ключей, обновляет кэш, отдает результат. Всё это время остальные 15 потоков стоят в очереди каждый ожидая пока обслужат первого. ПОсле этого каждые следующие 65 тысяч записей обслуживаются по тому же сценарию, с той лишь разницей что есть небольшая вероятность что часть ключей уже лежит в кэше.

Там можно конечно развлекаться с улучшением работы кэша - чтоб могло многопоточно и обновляться и запрашивать данные. Но прикрутить внешний источник данных по-моему дешевле.

Denis
26.10.2018
12:09:09
так этот источник данных придётся точно так же спрашивать, как мисс кэша сейчас. по 65к строк вычитывать на блок. или я что-то не понимаю?

Google
Michal
26.10.2018
12:18:05
Так а что делать с внешним источником? Join? Также память и сожрет на хештаблицу на миллиард уйдет 500гб.
Есть всякие key-value хранилища, которые могут обслуживать миллионы запросов в секунду многопоточно, если обращаться к ним непосредственно. Т.е. без дополнительной накладки в виде скопированной в память процесса ClickHouse словаря. Почитайте https://github.com/yandex/ClickHouse/issues/2718 я там описывал подробности.

Denis
26.10.2018
12:24:56
Есть всякие key-value хранилища, которые могут обслуживать миллионы запросов в секунду многопоточно, если обращаться к ним непосредственно. Т.е. без дополнительной накладки в виде скопированной в память процесса ClickHouse словаря. Почитайте https://github.com/yandex/ClickHouse/issues/2718 я там описывал подробности.
я понял, да такое сработает. Ну и для начала еще хорошо бы иметь компактные словари на хештаблицах с коллизиями в КХ. Сейчас словари супержрут память, для каждого атрибута строится разреженная хештаблица, в итоге память уходит просто невероятно.

Michal
26.10.2018
12:30:58
я понял, да такое сработает. Ну и для начала еще хорошо бы иметь компактные словари на хештаблицах с коллизиями в КХ. Сейчас словари супержрут память, для каждого атрибута строится разреженная хештаблица, в итоге память уходит просто невероятно.
Ну это вещи ортогональные. Улучшение memory-layout словарей тоже нужно, но если бы был прямой / быстрый / многопоточный доступ к примеру к аэроспайку или хоть тому же редису, то возможно словарь лежажий в памяти кликхауса и вовсе не понадобился бы (а в key-value хранилищах память организована хорошо).

Denis
26.10.2018
12:32:55
меня немного смущает перспектива кинуть 10 миллионов запросов в спайк на один запрос в клике

Ivan
26.10.2018
12:34:07
Ещё вариант таки http сервис и enrichment данных делать как materialized полей

Denis
26.10.2018
12:35:21
Ещё вариант таки http сервис и enrichment данных делать как materialized полей
materialized это тоже самое что и дефолт, при мерже и инстерте просто запишутся в таблицу навсегда т.е. если слделать alias через dictGet , будет тоже самое что и без alias, просто dictget в select

Michal
26.10.2018
12:35:39
меня немного смущает перспектива кинуть 10 миллионов запросов в спайк на один запрос в клике
вовсе не обязательно 10 млн. В аероспайк (и других key-value) есть пакетные запросы, когда в одном запросе сразу скажем 100 тысяч ключей запрашиваешь.

Конечно если можно сделать без этого - то лучше без этого.

У нас проблема была (и отчасти по прежнему есть) с графом разных ид пользователей, который может весьма динамически меняться и есть такая странная идея использовать самое свежее состояние графа на момент построения рапорта. Граф большой и никакие MATERIALIZED не сработают т.к. динамический.

Denis
26.10.2018
12:40:53
граф айди - это как?

Michal
26.10.2018
12:41:43
граф айди - это как?
Ну когда по каким-то признакам выясняется что пользователи X и Y это на самом деле одно лицо.

А через месяц к тому же что и Z - тоже он же, но с нарисованными усиками.

На HL Siberia был целый доклад на эту же тему https://www.highload.ru/siberia/2018/abstracts/3664

Denis
26.10.2018
12:43:28
и как это было бы в спайке? таблица соответствий юзер_ид и юник_юзер_ид с датами начала/конца?

Ivan
26.10.2018
12:43:40
А через месяц к тому же что и Z - тоже он же, но с нарисованными усиками.
А как вы решаете эту проблему? У нас почти тоже самое

Я думал потом просто как то переписывать данные

Michal
26.10.2018
12:44:26
Я думал потом просто как то переписывать данные
Переписывать данные в бигдата - боль.

Google
Ivan
26.10.2018
12:45:06
Слава богу с GDPR справились

Daniel
26.10.2018
13:43:56


Вроде обсуждали, что не страшно, но глаз мозолит =)



Alexey
26.10.2018
13:49:07
Привет, вопрос, а это нормально, что на новом сервере после аттача партишенев взятых их бекапа, systems.parts.name отличают от тех, что на сервере с которого бекап брался? И если нормально, по какой логике названия выбираются, что-то не нашел в доке

M
26.10.2018
13:52:57
Да, нормально. Название меняется при аттаче. В название входит номер блока и глубина кажись, эта информация есть в доке. Выбор названия, наверное идет по текущим блокам что есть (наверное)

Denis
26.10.2018
13:58:02
вообще-то too many parts (300) одна из самых больших проблем, ведет к падению insert-в, потере ( неконсистентности) данных. Вы бы проверили у вас мержи вообще идут? И данные у вас не вставляются 100%

Mike
26.10.2018
14:15:01
Коллеги, а подскажите плиз по clickhouse_exporter. я его завел, судя по логам, запросы в КХ он шлет и данные получает. но в прометеусе у меня пусто и дашборды пустые. Нужно еще какое-то шаманство, чтобы из экспортера в прометеус данные шли?

Andrii
26.10.2018
14:22:47
а ты скрапаешь прометеусом експортер?)

Shazo
26.10.2018
14:23:01
А что за с показателем background_pool_task? можешь попробовать лимиты завысить, в купе с увеличение backgroundpool может помоьч разгрести и уменьшить число кусков, но увеличится нагрузка на cpu.

Daniel
26.10.2018
14:23:32
По процесслисту инсерты идут все же, но не без делейд инсертс

Shazo
26.10.2018
14:25:01
делей в дефолтных настройках уже на 150 будет.

Denis
26.10.2018
14:25:04
потому что он не может создать кусок сверх лимита

Daniel
26.10.2018
14:25:36
Shazo
26.10.2018
14:25:50
config.xml

Daniel
26.10.2018
14:26:10
Каким параметром?

Shazo
26.10.2018
14:26:30
<merge_tree> <parts_to_delay_insert>6000</parts_to_delay_insert> <parts_to_throw_insert>10000</parts_to_throw_insert> </merge_tree>

Daniel
26.10.2018
14:26:41
Спасибо

Google
Shazo
26.10.2018
14:27:02
При достижении parts_to_delay_insert будет замедление, по умолчанию на 1 сек. При parts_to_throw_insert ошибка.

Denis
26.10.2018
14:27:36
Не понятно только, почему в таком случае количество частей не растёт, а стоит на одном месте.
потому что там backpressure и insert начинает тормозить, а дальше падают с ошибкой toomany parts

Shazo
26.10.2018
14:28:00
Но ещё глянь в параметр user.xml для профилей: <background_pool_size>512</background_pool_size> когда он в лимитах (по умолчанию 16), то как раз число кусков активно растет.

Denis
26.10.2018
14:28:51
судя по полочке, мержи не идут, надо читать логи -- почему.

Mike
26.10.2018
14:29:26
а ты скрапаешь прометеусом експортер?)
а вот этот момент я не понял, https://github.com/f1yegor/clickhouse_exporter по этому ману запустился

Shazo
26.10.2018
14:31:49
а вот этот момент я не понял, https://github.com/f1yegor/clickhouse_exporter по этому ману запустился
exporter выплевывает по url значение метрик. А их должен собирать prometheus server. В графане долен быть указать prometheus сервер как datasource

Daniel
26.10.2018
14:32:14
А когда таблица типа distributed натыкается на throw insert, она сохраняет кусок не вставленный для попыток вставить позже, или он теряется? Очень интересно...

Mike
26.10.2018
14:33:05
exporter выплевывает по url значение метрик. А их должен собирать prometheus server. В графане долен быть указать prometheus сервер как datasource
я понял, что я упустил в конфиге прометеуса, где нужно из экспортера данные брать. сейчас дополню, спасибо

Daniel
26.10.2018
14:35:45
Интересно было бы услышать комментарий разработчиков... и как выкарабкиваться из ситуации с множеством кусков? Сервер по процесслисту ничего не делает, а инсерты отвергает

Daniel
26.10.2018
14:37:45
Все есть. Но кх ничего не делает.

Shazo
26.10.2018
14:38:05
уверен? pool пустой?

Denis
26.10.2018
14:39:08
Все есть. Но кх ничего не делает.
у ну тогда все ок. Ждите телепатов третьего уровня.

Shazo
26.10.2018
14:40:21
Все есть. Но кх ничего не делает.
select * from system.metrics where metric = 'BackgroundPoolTask'

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