Size: a a a

ClickHouse не тормозит

2020 September 04

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Dmitry Kozeev
Привет всем. вопрос пытаюсь загрузить данные так :
cat report_labexa_main_requests.csv | clickhouse-client -h 172.20.140.44  --format_csv_delimiter=";" --format_csv_allow_single_quotes=0  --query="INSERT INTO reports.click_report_labexa_main_requests_log FORMAT CSV"
и получаю ошибку через несколько секунд Killed файл на 6млн строк.
Как понять по какой именно причине не загрузилось?
sudo dmesg|tail -20
скорее всего убит oomkiller

Попробуйте --input_format_parallel_parsing=0
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Многопоточный парсинг кушает память но парсит csv значительно быстрее.
Сколько памяти?
источник

DK

Dmitry Kozeev in ClickHouse не тормозит
16 гигов и ничего кроме клика там нет
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Dmitry Kozeev
16 гигов и ничего кроме клика там нет
Гм а ошибка как выглядит? убит процесс клиента? Или сессия сервера?
источник

DK

Dmitry Kozeev in ClickHouse не тормозит
решил перезагрузить машину и пробовать еще раз и теперь проблемы с самим  csv спасибо про oomkiller видимо действительно был убит теперь ошибки killed нет.
источник

ДА

Давид Авагимян... in ClickHouse не тормозит
Всем привет. Имеется таблица с данными пользователями размер таблицы около 8 миллиардов и постоянно растет.  Есть поле uid и attribute_id. Задача состоит в том что нужно  получить другие атрибуты у пользователя по какому то конкретному. Пример:  Взять всех пользователей с атрибутов А и посчитать у них суммы других атрибутов.  Может ли кх такую задачу решить ?
источник

SA

Sergei Alekseev in ClickHouse не тормозит
Добрый день! никто не сталкивался с таким:  StorageKafka (Trackers): Can't get assignment. It can be caused by some issue with consumer group (not enough partitions?). Will keep trying.
источник

ПП

Павел Прохоров... in ClickHouse не тормозит
Всем привет!
Как кто решает проблему консистентности данных? Есть ли best practice?
К примеру - при заливке куска данных, хочется чтобы был некий аналог транзакции.
источник

S

Slach in ClickHouse не тормозит
Павел Прохоров
Всем привет!
Как кто решает проблему консистентности данных? Есть ли best practice?
К примеру - при заливке куска данных, хочется чтобы был некий аналог транзакции.
транзакция ... и консистентность две немного разные вещи ;)

консистентность обеспечивается не транзакциями как таковыми, а уровнями изолированности транзакций

с этой точки зрения в clickhouse с консистентностью все впорядке
пока клиенту не сказали что INSERT прошел
SELECT не будут видеть данные которые идут в INSERT

ну и кроме физической консистентности, есть еще  и логическая
типа когда ваши данные и связи между данными в разных таблицах, не противоречивы по логике приложения

но best practice в clickhouse это ШИРОКИЕ ТАБЛИЦЫ с большим кол-вом столбцов + словари если нужна star schema для данных
источник

НГ

Николай Гусев... in ClickHouse не тормозит
Добрый день!

Мне нужно вывести столбец с датой и столбец со значением даты предыдущей строки. Каким образом это можно реализовать в ClickHouse?

Спасибо
источник

ПП

Павел Прохоров... in ClickHouse не тормозит
Slach
транзакция ... и консистентность две немного разные вещи ;)

консистентность обеспечивается не транзакциями как таковыми, а уровнями изолированности транзакций

с этой точки зрения в clickhouse с консистентностью все впорядке
пока клиенту не сказали что INSERT прошел
SELECT не будут видеть данные которые идут в INSERT

ну и кроме физической консистентности, есть еще  и логическая
типа когда ваши данные и связи между данными в разных таблицах, не противоречивы по логике приложения

но best practice в clickhouse это ШИРОКИЕ ТАБЛИЦЫ с большим кол-вом столбцов + словари если нужна star schema для данных
Спасибо!
Я неправильно сформулировал
У меня есть кусок данных, который я лью. Это явно несколько батчей инсертов.
А если я хочу чтобы он был доступен только после окончания всей заливки?
источник

S

Slach in ClickHouse не тормозит
Павел Прохоров
Спасибо!
Я неправильно сформулировал
У меня есть кусок данных, который я лью. Это явно несколько батчей инсертов.
А если я хочу чтобы он был доступен только после окончания всей заливки?
лейте неделимые данные ОДНИМ INSERT ЗАПРОСОМ...
и смотрите настройки (можно переопределить в clickhouse-client через параметры коммандной строки или через INSERT ... SETTINGS попробуйте, но не факт что сработает)
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max_insert_block_size

по умолчанию у вас размер неделимого батча 1 миллион строк
источник

S

Slach in ClickHouse не тормозит
Павел Прохоров
Спасибо!
Я неправильно сформулировал
У меня есть кусок данных, который я лью. Это явно несколько батчей инсертов.
А если я хочу чтобы он был доступен только после окончания всей заливки?
если 1 INSERT у вас меньше миллиона строк, то просто лейте одним INSERT неделимый блок без изменения настроек
источник

ПП

Павел Прохоров... in ClickHouse не тормозит
Slach
лейте неделимые данные ОДНИМ INSERT ЗАПРОСОМ...
и смотрите настройки (можно переопределить в clickhouse-client через параметры коммандной строки или через INSERT ... SETTINGS попробуйте, но не факт что сработает)
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max_insert_block_size

по умолчанию у вас размер неделимого батча 1 миллион строк
Ага, спасибо, посмотрю настройки
А вот что если нет? Выхода нет?
источник

S

Slach in ClickHouse не тормозит
Павел Прохоров
Ага, спасибо, посмотрю настройки
А вот что если нет? Выхода нет?
перефразируйте, не понял
источник

ПП

Павел Прохоров... in ClickHouse не тормозит
Slach
перефразируйте, не понял
есть таблица, в ней логи
каждый день заливается порция логов, миллионы записей
есть ли способы сделать порцию логов как бы в транзакции для клиента? чтобы клиент ее только целиком увидел
вариант поместить эту порцию в один батч понял, но там больше миллиона
источник

S

Slach in ClickHouse не тормозит
Павел Прохоров
есть таблица, в ней логи
каждый день заливается порция логов, миллионы записей
есть ли способы сделать порцию логов как бы в транзакции для клиента? чтобы клиент ее только целиком увидел
вариант поместить эту порцию в один батч понял, но там больше миллиона
ну увеличьте настройки, я ссылку дал
и лейте больше миллиона одним INSERT
если у вас там данные в логах по первичному ключу отсортированы, то оно нормально вставляться будет
источник

AK

Aleksey Korsakov in ClickHouse не тормозит
Всем привет! Подскажите по созданию MATERIALIZED VIEW и AggregatingMergeTree. Хочу использовать AggregatingMergeTree в представлении для группировки данных по полям UId, SId, Name, с дополнительными условиями - минимальным timestamp и минимальным непустым значением Ver.

create MATERIALIZED VIEW UidSid_MV
engine = AggregatingMergeTree()
PARTITION BY toYYYYMM(Timestamp)
PRIMARY KEY SId
ORDER BY SId
SETTINGS index_granularity = 8192
POPULATE
as
   SELECT
      min(Timestamp) Timestamp,
      UId,
      SId,
      Name,
      minIf(Ver, Ver <> '') Ver
FROM table
GROUP BY UId, SId, Name
ORDER BY UId, SId;

Создал это Mat View, и ещё одно с таким же запросом, но с движком MergeTree, чтобы сравнить производительность. Результаты производительности примерно одинаковы, если делать "SELECT *" по одному конкретному UId (1.2-1.5 сек в моем случае в каждом запросе). Я ожидал лучшую производительность в случае использования AggregatingMergeTree. Почему так? Может я неверно написал запрос?
источник

VS

Vladyslav Sakun in ClickHouse не тормозит
Aleksey Korsakov
Всем привет! Подскажите по созданию MATERIALIZED VIEW и AggregatingMergeTree. Хочу использовать AggregatingMergeTree в представлении для группировки данных по полям UId, SId, Name, с дополнительными условиями - минимальным timestamp и минимальным непустым значением Ver.

create MATERIALIZED VIEW UidSid_MV
engine = AggregatingMergeTree()
PARTITION BY toYYYYMM(Timestamp)
PRIMARY KEY SId
ORDER BY SId
SETTINGS index_granularity = 8192
POPULATE
as
   SELECT
      min(Timestamp) Timestamp,
      UId,
      SId,
      Name,
      minIf(Ver, Ver <> '') Ver
FROM table
GROUP BY UId, SId, Name
ORDER BY UId, SId;

Создал это Mat View, и ещё одно с таким же запросом, но с движком MergeTree, чтобы сравнить производительность. Результаты производительности примерно одинаковы, если делать "SELECT *" по одному конкретному UId (1.2-1.5 сек в моем случае в каждом запросе). Я ожидал лучшую производительность в случае использования AggregatingMergeTree. Почему так? Может я неверно написал запрос?
Зачем Вы разделяете PRIMARY KEY и ORDER BY, если они одинаковые?
По какому полю делаете выборку?
Сколько записей в таблице?
источник

DO

Dmitrii Oslavskii in ClickHouse не тормозит
всем привет. а есть какой-то механизм ротации логов в system.query_log из коробки? если нет, кто как решает данный вопрос?
источник