Обсуждаем ClickHouse
Вам надо понять, что отъедает память в момент падения. (total) memory limit показывает, что есть еще процессы, влияющие на потребление. Возможно, мержи (system.merges), возможно мутации (system.mutations where not is_done) или кучка параллельных запросов.
Найдя причину, найдете и решение.
Может быть, как-то можно более агрессивно освобождать память? Мне сейчас кеш особо не нужен, я только загружаю данные, запросов не делаю.
Читать полностью…В принципе полно примеров в доке с использованием curl, я реверсинженерил примеры из доки чтобы понять, как составляется POST запрос. Там есть разные способы, но суть вроде у всех одна.
А сорян, с инфером схемы не знаю.
Если версия новая
SELECT
pair[1] AS field1,
pair[2] AS field2
FROM tbl
ARRAY JOIN payload.a AS pair
лучше, но не настолько драматически. я бы ожидал в этом случае, что у них uncompressed rate будет сравним с другими мерджами, но он тоже заметно ниже (см. скриншот)
Читать полностью…подскажи, чат, в какую сторону копать, если у одной отдельно взятой таблицы систематически, в несколько раз, более тугие мерджи чем у остальных? довольно обычный MergeTree, без фанатизма, как и остальные
Читать полностью…Контекст: хотелось бы использовать под tmp два диска, ssd+hdd. Использовать первый, второй использовать только в случае если на первом нет места.
Сначала попробовал использовать для эти цели storage_policy с двумя volume c приоритетами, но клик бодро при старте ругнулся
Code: 139. DB::Exception: Policy 'tmp_two_tiers' is used temporary files, such policy should have exactly one volume. (NO_ELEMENTS_IN_CONFIG)
Был бы рад положиться на то, то это будет работать из коробки по описанию в tmp_policy, но его описание расходится с описанием того, как работают диски в вольюме в общем случае
Ну его в 25.8 его из эксперементального переместели в бета. Так что всё еще не продакшн реди. Использование на свой страх и риск.
Читать полностью…добавьте в SETTINGS
grace_hash_join_initial_buckets=8, grace_hash_join_max_buckets=8;
Один джоин.
Использую setting grace_join
Ого, спасибо. Просто стал сталкиваться часто с тем что не хватает конфигурации 8GB*3, а ценник за 16GB*3 уже достаточно большой.
Хотя по идеи запрос должен отработать с 24 GB памяти...
Коллеги, добрый день!
Вопрос по Clickhouse Cloud ☁️:
Чтобы у меня запросы выполнялись распределенно, мне нужно создать над SharedMergeTree создать Distributed?
Я помню, спарк там чёт хотел получать сначала от кх . Посмотрите в query_log может там ошибки есть в запросах спарка )
Читать полностью…Покопал этот вопрос еще. Вижу через inotify, что запись работает через round-robin на оба диска.
Место в документации следует понимать так: есть фэйловер. Если первый диск переполнен, то запись будет идти только на второй диск. Не более того.
Можно-ли как-то настроить поведение при запросе, когда в данный момент памяти мало?
Заливаю датасет в CH довольно большими кусками. Если делать в один поток, то медленно, если делаю в несколько потоков - время от времени заканчивается память и запрос рубится, хотя можно было бы подождать, и выполнить.
Причем увеличение памяти не улучшает ситуацию, CH спокойно хавает всю память, работает медленнее и падает чаще:
Code: 241. DB::Exception: (total) memory limit exceeded: would use 42.38 GiB (attempt to allocate chunk of 64.67 MiB bytes), current RSS: 41.16 GiB, maximum: 42.34 GiB. OvercommitTracker decision: Query was selected to stop by OvercommitTracker. (MEMORY_LIMIT_EXCEEDED) (version 25.8.2.29 (official build))
При этом работало и на 16 GB. Любой запрос если перезапустить спокойно отработает.
Коллеги, добрый день. Есть задача сделать временную таблицу из данных в фомате JSONEachRow используя HTTP POST. Т.е. для локального файла все ок - create temporary table t as select * from file 'file.jsonl' отрабатывает и создает схему и вставляет данные. Но как загнать данные с выводом схемы используя POST на порт 8123 я не нашел в доке (возможно не увидел). Спасибо.
Читать полностью…Argument for function arrayJoin must be Array or Map (
Читать полностью…SELECTЧитать полностью…
arr[1] AS field1,
arr[2] AS field2
FROM
(
SELECT
arrayJoin(
JSON_QUERY(payload, '$.a')
) AS arr
FROM your_table
)
Подскажите, можно как развернуть массив, хранящийся в поле json array?
У меня есть поле payload JSON, там {"a" : [["1", "2"], ["3", "4"]]}
мне нужно сделать селект, который выведет:
field1 field2
1 2
3 4
Я так понимаю, обычный массив можно развернуть с помощью array join, но как развернуть массив, который как поле в JSON?
Добрый день, коллеги.
Прошу помощи с трактовкой неясного места из святого августина документации
Storage policy. Как будет выполняться запись на несколько дисков в одном volume?
Отсюда https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree
можно сделать вывод, что указание нескольких дисков в одном вольюеме приведёт к записи через
round-robin
"In given example, the hdd_in_order policy implements the round-robin approach."
Здесь же
https://clickhouse.com/docs/operations/server-configuration-parameters/settings#tmp_policy
пишут, что запись в вольюм с несколькими дисками будет выполняться в режиме "failover"
"When /disk1 is full, temporary data will be stored on /disk2"
Не очень понимаю, как без дополнительных настроек один и тот же volume будет настолько по-разному работать в разных случаях указания.
При этом название hdd_in_order само по себе сбивает с толку, я бы от него ожидал режима "failover"
Ребят, насколько lightweight update production-ready?
Читать полностью…вообще это в саппорте надо спрашивать, там настоящие сварщики, а не как тут.
Читать полностью…SETTINGS join_algorithm = 'grace_hash',
max_memory_usage = 15000000000,
max_bytes_before_external_group_by = 1000000000,
max_bytes_before_external_sort = 1000000000;
ну это совешенно иная проблема, обратная даже, и решение у нее другое, в саппорт клауда лучше.
у вас джойн наверное в запросе, или несколько?
в КХ клауд все по другому. Надо спрашивать их саппорт как распаллелить запрос.
Там всегда один шард. Там нельзя создать Distributed.
Чтобы несколько реплик выполняли один запрос, они пилят max_parallel_replicas.
Что-то я действительно не подумал об этом. Все зарпосы от спарка падают вот с такой ошибкой
<failed to load>
java.sql.SQLException: Method: getLong("normalized_query_hash") encountered an exception.
at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:74)
at com.clickhouse.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:320)
at com.clickhouse.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:175)
in CHouseJdbcHelper.tryGetObject(CHouseJdbcHelper.java:156)
Caused by: java.lang.ArithmeticException: integer overflow: 15722048748544463130 cannot be presented as long
at com.clickhouse.client.api.data_formats.internal.NumberConverter.toLong(NumberConverter.java:87)
at com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader.readNumberValue(AbstractBinaryFormatReader.java:378)
at com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader.getLong(AbstractBinaryFormatReader.java:402)
at com.clickhouse.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:314)
... 22 more
Да. Сейчас проверю дополнительно конечно
Читать полностью…Я пробую вставлять в ReplicatedReplacingMergeTreeEngine и мне ловлю экзепшен что данная таблица не поддерживается. У нас сейчас официальный коннектор от Clickhouse.
Читать полностью…