Обсуждаем ClickHouse
да, ну еще главное чтобы PARTITION BY не противоречил sorting key (ORDER BY) ... а то парты из разных партиций не мержатся между собой
Читать полностью…и не забудьте использовать
SELECT ... FROM db.table FINALЧитать полностью…
добрый день! вопрос концептуальный: есть таблица, около 20млн записей в сутки, на 4 нодах (+ по одной реплике на каждую ноду). Для каждой записи будет делаться апдейт, один раз. Какой движок в таком случае лучше использовать - Collapsing, или Replacing с условным полем "время записи"?
хочу делать вставку полностью записи с измененными нужными полями
День добрый. Подскажите, в чем может быть проблема. Кластер 6 реплик, 3 шарда. Вставляю батч 1млн строк в distributed таблицу.
каждая вставка следующая ошибка
Code: 319. DB::Exception: Unknown status of part 202302_240_240_0 (Reason: Session moved to another server, so operation is ignored). Data was written locally but we don't know the status in keeper. The status will be verified automatically in ~300 seconds (the part will be kept if present in keeper or dropped if not). (UNKNOWN_STATUS_OF_INSERT) (version 25.4.3.22 (official build))
и данные укладываются в distributed таблицу по 5 минут(имею в виду,что только через 5 минут появятся все строки в таблице)
Использую данные параметры
SET async_insert = 1;
SET wait_for_async_insert = 0;
SET async_insert_max_data_size = 10485760;
SET async_insert_busy_timeout_ms = 1000;
тогда создавать фиче-реквест, ждать пока сделают и потом ждать пока менеджед кликхаус обновиться на эту версию)
Читать полностью…вот мне бы это стандартными средствами получить. Я в менеджет клике, таким заниматься не могу(((
Читать полностью…-- Code: 46. DB::Exception: Received from ...:9440. DB::Exception: Unknown function json_pretty. Maybe you meant: ['JSON_QUERY']: While processing json_pretty(data). (UNKNOWN_FUNCTION)
у меня что-то нет такой функции
https://fiddle.clickhouse.com/68d33132-e474-4047-aef1-a4e28b033a7f
Я поправил, что если брать дикт из таблицы клика, нужно создать отдельную колонку, но с Монгой оно не работает
Читать полностью…В clickhouse client в format Vertical есть значение с жсоном, яб хотел его отформатить отдельно. Всё остальное смотреть как formatVertical
Читать полностью…Никаких Distributed - будет только хуже. Но Replicated в разумных пределах (до 5) могут быть полезны.
500 QPS размазанное на 5 серверов с запросами по 0.5с выглядит достаточно реалистично.
Есть старая статья - https://altinity.com/blog/clickhouse-in-the-storm-part-1
но все тезисы актуальны и сейчас. Самое главное - никаких JOIN and FINAL.
в external dictionary можно использвать атрибуты - expressions
Читать полностью…Всем привет, после обновления 24.2 -> 25.3
Перестал работать external dictionary из Монги.
Раньше он неявно мог преобразовать String -> Float
Как сейчас это можно сделать? не смог пока найти в документации?
что такое json строка?
String ? надо отформатировать String ?
Большая часть проблем от аналитиков в моей практике, перекрывалась комбинацией ручек:
max_memory_usage
max_bytes_before_external_sort
max_bytes_before_external_group_by
max_result_rows
max_execution_time
max_concurrent_queries_for_user
max_rows_in_join
max_bytes_in_set
причем последние две ручки давали больше всего, ибо аналитики грешили джоинами и кодогенрируемыми WHERE IN (миллионы значений)
отдельного упоминания стоит ручка max_result_rows, ну или если хотите можно и в байтах, это помогает не укладывать BI инструменты, вот например из редаша можно сказать SELECT * в клик, и клик не ляжет от такого фуллскана, а вот реляционная базюка под редашем ещё как лопнет от объемов ответа.
схема с репликами практиковалась такая:
1) фактор репликации 3
2) 2 реплики обслуживают прод, одну насилуют аналитики
3) если продовая реплика отказывает, хук на фейловере обрубает доступ аналитикам и их реплика используется в качестве продовой
4) разумеется в SLA было прописано, что проду мы гарантируем работу при сбоях, а аналитикам нет. бизнес это устраивало.
Всем привет!
Такая ситуация, есть три шарда по которым равномерно распределяются данные. Но хотелось бы их реплицировать. Решение с фактором репликации 3 - очевидно. А есть решение с фактором репликации 2? Я видел статьи от 19 года, там много костылей.. Может появилось решение от ClickHouse?
да, Final обязательно будет. А старые записи будут в фоне сами удаляться, верно?
Читать полностью…Collapsing нужен если еще хотите eventually "удалять"
Читать полностью…я вообще не понимаю что вы имеете в виду, может пример покажете?
Читать полностью…а где такая клика? их официальное облако или яндекс или что то другое?
Читать полностью…а ну json_pretty это кастомная UDF-функция
<functions>Читать полностью…
<function>
<type>executable</type>
<name>json_pretty</name>
<return_type>String</return_type>
<argument>
<type>String</type>
<name>lhs</name>
</argument>
<format>Raw</format>
<command>jq . | tr '\n' '$' | awk 1</command>
<execute_direct>0</execute_direct>
<deterministic>true</deterministic>
</function>
</functions>
SELECT
user_id,
replaceAll(json_pretty(payload), '$', '\n') AS json_formatted
FROM tbl
LIMIT 10
FORMAT Vertical
Query id: d729853b-72c1-457f-bd2d-7c93422c5617
Row 1:
──────
user_id: 635100
json_formatted: {
"event_name": "main_view",
"user_id": 635100,
"module_id": null,
"namespace": "default",
"timestamp": "2025-05-14T15:20:00.123456Z",
"payload": {
"shops_connect": 3,
"connections_total": 2,
"o_connections_total": 1,
"selected_keys_count": 4
"api_key_passed": true
}
}
в смысле?
https://fiddle.clickhouse.com/5ffba02a-59f1-43d5-9f5f-a59e1a273244
типа вот такое не работает?
attr Float64 expression toFloat64OrZero(attr)
У меня это не работает, похоже он в первую очередь ищет это поле в монге
Читать полностью…изменилось потому что передалали https://github.com/ClickHouse/ClickHouse/pull/63279
Читать полностью…Да. Либо новый тип JSON, либо String, да
Если стринг, то это String содержащий JSON
ещё квоты выглядят здраво, но к сожалению не осилил внедрить, если кто то тут да, поделитесь опытом, очень интересно насколько практически применимый инструмент )
Читать полностью…а есть примеры того как пользоваться даной либой?
в описании нет деталей того как создавать миграции и тд.
не могу сам разобраться
Лимиты на самом деле являются вполне правильным способом обеспечивать изоляцию в многопользовательской среде, но, конечно, если лимиты не позволяют использовать всю доступную память и такое требование есть, то репликация это единственный возможный вариант
Читать полностью…