Size: a a a

ClickHouse не тормозит

2020 August 18

K

Kos in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
зависит от версии КХ , вообще раз в сутки TTL срабатывает, и есть ALTER MATERIALIZE TTL
хмм
Cannot MATERIALIZE TTL as there is no TTL set for table system.query_thread_log (version 20.5.3.27 (official build))
вот вырезка из конфига
<query_thread_log>
       <database>system</database>
       <table>query_thread_log</table>

       <engine>ENGINE = MergeTree PARTITION BY (event_date) ORDER BY (event_date, event_time) TTL  event_date + toIntervalWeek(1)   SETTINGS min_bytes_for_wide_part = '10M', index_granularity = 8192, ttl_only_drop_parts=1 </engine>
       <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_thread_log>
источник

AK

Andrii Kakoichenko in ClickHouse не тормозит
Artem Zuikov
если ключи уникальны, можно сделать словарь над большой и join об этот словарь. сколько подгрузится из большой таблицы зависит от лэйаута словаря
Не очень понимаю. Например, если в большой хранятся все посещения страниц всеми юзерами, и PK user_id, timestamp .
А в маленькой предварительно обработанный батч юзеров, по которым надо добавить инфу по посещениям.
И я хочу сделать аналог join, но не фуллсканить большую, а 1000 раз сходить в нее по ПК
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Kos
хмм
Cannot MATERIALIZE TTL as there is no TTL set for table system.query_thread_log (version 20.5.3.27 (official build))
вот вырезка из конфига
<query_thread_log>
       <database>system</database>
       <table>query_thread_log</table>

       <engine>ENGINE = MergeTree PARTITION BY (event_date) ORDER BY (event_date, event_time) TTL  event_date + toIntervalWeek(1)   SETTINGS min_bytes_for_wide_part = '10M', index_granularity = 8192, ttl_only_drop_parts=1 </engine>
       <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_thread_log>
таблица уже была, ваши изменения применятся при создании таблицы, (когда ее нет), переименуйте rename table system.query_thread_log to system.query_thread_log_old и еще рестарт КХ нужен, иначе эти изменения конфига не видны
источник

l

lnuynxa in ClickHouse не тормозит
Artem Zuikov
попробуйте построить отдельно для части построения hash-таблицы (join с 0 строк слева), пока гипотеза, что все тормоза там
Хеш таблицы же в начала только строятся? 1600 samples против 100к
Выполнилось за 2 секунды
Сам основной запрос за секунд 200 выполняется.
источник

AZ

Artem Zuikov in ClickHouse не тормозит
Andrii Kakoichenko
Не очень понимаю. Например, если в большой хранятся все посещения страниц всеми юзерами, и PK user_id, timestamp .
А в маленькой предварительно обработанный батч юзеров, по которым надо добавить инфу по посещениям.
И я хочу сделать аналог join, но не фуллсканить большую, а 1000 раз сходить в нее по ПК
вешаете на большую словарь с PK user_id. Делаете "SELECT * FROM small_table SEMI LEFT JOIN dict WHERE ...". Внутри это будет выглядеть как dictGet(user_id) для каждого левого ключа small_table.user_id, без предварительного построения hash-таблицы по большой. работает не для всех типов join-а (по понятным причинам). какой-нибудь FULL JOIN без сообщений об ошибке свалится в построение таблицы и обычный hash join в этом случае
источник

K

Kos in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
таблица уже была, ваши изменения применятся при создании таблицы, (когда ее нет), переименуйте rename table system.query_thread_log to system.query_thread_log_old и еще рестарт КХ нужен, иначе эти изменения конфига не видны
спасибо.  рестар делал после изменения конфига. на существующей таблице не применилось получается.
переименовал и тут же появилась новая таблица,  с правилами. спасибо!
ps. скопировал данные со старой  в новую. применил ALTER table system.query_thread_log  MATERIALIZE TTL.
и данные старше недели удалились!
источник

AZ

Artem Zuikov in ClickHouse не тормозит
lnuynxa
Хеш таблицы же в начала только строятся? 1600 samples против 100к
Выполнилось за 2 секунды
Сам основной запрос за секунд 200 выполняется.
это asof или обычный?
источник

l

lnuynxa in ClickHouse не тормозит
Artem Zuikov
это asof или обычный?
обычный
два INNER JOIN
multiple_join_rewriter = 2
источник

AZ

Artem Zuikov in ClickHouse не тормозит
multiple_join_rewriter = 2 - не влияет на скорость, только на корректность
источник

AZ

Artem Zuikov in ClickHouse не тормозит
lnuynxa
обычный
два INNER JOIN
multiple_join_rewriter = 2
давайте issue сделаем. на вскидку не ясно, что там. нужна схема и какой-то простенький генератор данных типа insert select в таблицу.
источник

AZ

Artem Zuikov in ClickHouse не тормозит
надо как-то воспроизвести, чтобы погонять с большим количеством диагностики
источник

AZ

Artem Zuikov in ClickHouse не тормозит
если можете, запустите дебажную сборку с тем же флеймом, там будет получше стек - может по нему что-то станет видно. сейчас кондвар непонятно где
источник

l

lnuynxa in ClickHouse не тормозит
Artem Zuikov
давайте issue сделаем. на вскидку не ясно, что там. нужна схема и какой-то простенький генератор данных типа insert select в таблицу.
Да, хорошо.
Данные это Star Schema Benchmark.
Но 300гб грузить смысл не думаю, что есть.
Попробую генератор накидать.
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Ivan Solyakin
Всем привет. Про оконные функции на КХ часто спрашивают. Пока команда этот функционал не реализовала. Я написал небольшую статью про эмуляцию оконных функций на КХ. https://habr.com/ru/post/515606/ Буду рад любым конструктивным комментариям.
arrayMap(x -> arraySlice(summ, 1, x), arrayEnumerate(summ)) AS cum_summ

лучше так не делать, жопа в том что summ будет размножаться лямбдой, т.е. arrayEnumerate(summ) создаст массив [1...1000], summ тысячу раз скопируется в памяти.

лучше избегать arrayEnumerate и передачи массива в лямбду, почти всегда это достижимо потому что все (нужные) ФВП принимают несколько массивов (аргументов лямбды)
источник

OF

Oleksandr Forostiany... in ClickHouse не тормозит
Доброго всем дня. Подскажите можно ли в качестве HTTP(s)  source для External Dictionary подсунуть url/file.csv.gz  (gzip archive) ?
источник

A

Alex in ClickHouse не тормозит
привет! подскажите пожалуйста, нормальным ли будет удаление части данных в какой-то из партиций? не вызовит неприятностей/потерь? партиционирование по месяцам.
источник

AK

Andrii Kakoichenko in ClickHouse не тормозит
Artem Zuikov
вешаете на большую словарь с PK user_id. Делаете "SELECT * FROM small_table SEMI LEFT JOIN dict WHERE ...". Внутри это будет выглядеть как dictGet(user_id) для каждого левого ключа small_table.user_id, без предварительного построения hash-таблицы по большой. работает не для всех типов join-а (по понятным причинам). какой-нибудь FULL JOIN без сообщений об ошибке свалится в построение таблицы и обычный hash join в этом случае
Спасибо, то есть, это обыкновенный secondary index, по аналогии с другими субд, получается по сути?
источник

AZ

Artem Zuikov in ClickHouse не тормозит
Andrii Kakoichenko
Спасибо, то есть, это обыкновенный secondary index, по аналогии с другими субд, получается по сути?
с точки зрения join-а это ближе к lookup алгоритму (или nested loop), со вторичным индексом не очень понял аналогию
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Alex
привет! подскажите пожалуйста, нормальным ли будет удаление части данных в какой-то из партиций? не вызовит неприятностей/потерь? партиционирование по месяцам.
в смысле alter delete ?  не вызовет.
источник

AZ

Artem Zuikov in ClickHouse не тормозит
Andrii Kakoichenko
Спасибо, то есть, это обыкновенный secondary index, по аналогии с другими субд, получается по сути?
user_id все равно надо иметь где-то в первичном ключе большой таблицы, чтобы не перечитывать ее всю
источник