Size: a a a

ClickHouse не тормозит

2021 February 21

DT

Dmitry Titov in ClickHouse не тормозит
Alexander
Немного не понял каким образом? Простой IN вернёт строчки, которые содержат хоть один из эвентов.

Есть ещё вариант, конечно, делать только одну строчку на клиента, эвенты сделать массивами и обновлять строчку через Replacing или Aggregating. На самом деле у нас схема примерно такая и есть сейчас. Клиент всегда один, а собираем все его эвенты (их немного, буквально до 10, соответственно массивы тоже небольшие) и в ReplacingMergeTree храним.
Интересует именно быстрота поиска. Будет быстрее смотреть на заранее составленный массив в колонке с типом array или составлять массив через groupArray и искать уже в нем?
IN позволит отбросить все неподходящие строчки -> меньше данных для агрегации -> быстрее агрегация.
источник

A

Alexander in ClickHouse не тормозит
Alexander
Немного не понял каким образом? Простой IN вернёт строчки, которые содержат хоть один из эвентов.

Есть ещё вариант, конечно, делать только одну строчку на клиента, эвенты сделать массивами и обновлять строчку через Replacing или Aggregating. На самом деле у нас схема примерно такая и есть сейчас. Клиент всегда один, а собираем все его эвенты (их немного, буквально до 10, соответственно массивы тоже небольшие) и в ReplacingMergeTree храним.
Интересует именно быстрота поиска. Будет быстрее смотреть на заранее составленный массив в колонке с типом array или составлять массив через groupArray и искать уже в нем?
То есть сейчас у нас что-то вроде

client1 [event1, event2] [data1, data2]
client2 [event1, event2] [data1, data2]
client3 [event3, event2] [data3, data2]

но это сложнее хранить и обрабатывать как отдельные эвенты
источник

A

Alexander in ClickHouse не тормозит
Dmitry Titov
IN позволит отбросить все неподходящие строчки -> меньше данных для агрегации -> быстрее агрегация.
А если не сложно, можно пример запроса? Вы имеете в виду, что перед groupArray сделать фильтр по WHERE IN?
источник

DT

Dmitry Titov in ClickHouse не тормозит
да
источник

DT

Dmitry Titov in ClickHouse не тормозит
SELECT ... FROM table WHERE event IN ('event1', 'event2') GROUP BY client_id HAVING hasAll(groupUniqArray(event_id), [event1, event2])
(или можно даже length(groupUniqArray(event_id))=2)
источник

A

Alexander in ClickHouse не тормозит
Dmitry Titov
SELECT ... FROM table WHERE event IN ('event1', 'event2') GROUP BY client_id HAVING hasAll(groupUniqArray(event_id), [event1, event2])
(или можно даже length(groupUniqArray(event_id))=2)
А как считаете, насколько медленнее будет такая агрегация по сравнению с поиском по заранее собранной колонке с массивом эвентов?
источник

DT

Dmitry Titov in ClickHouse не тормозит
IN думаю быстрее будет чем hasAll
источник

AN

Aleks Nikankin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
партиции дневные? мержится начинает маленькая свежая
Таких не имеем.
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
привет))
подскажите, пожалуйста, почему не работает суммирование?
Создаю таблицу
CREATE TABLE default.messages (
`event_date_time` DateTime,
`system_generated_id` Int64,
......
`registration_tu_code` Nullable(Int64) MATERIALIZED (SUBSTRING(registration_customs_code,1,3)),
`registration_date` Nullable(Date),
`registration_logbook_number` Nullable(String)
 ) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date_time) ORDER BY (system_generated_id) SETTINGS index_granularity = 8192;


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

CREATE TABLE default.m (
`day` Date ,
`message_dir` Int8
)  
ENGINE = SummingMergeTree() PARTITION BY tuple() ORDER BY (day) SETTINGS index_granularity = 8192;



CREATE MATERIALIZED VIEW default.m_mv TO default.m (
`day` Date ,
`message_dir` Int8
) as
select
toStartOfDay(event_date_time) as day,
message_direction
from default.messages;

но
в таблице default.m вижу результат :
2021-02-17  1
2021-02-17  1
2021-02-17  1

Данные не суммируются. Что я делаю не так?
источник

DT

Dmitry Titov in ClickHouse не тормозит
Татьяна Исекеева
привет))
подскажите, пожалуйста, почему не работает суммирование?
Создаю таблицу
CREATE TABLE default.messages (
`event_date_time` DateTime,
`system_generated_id` Int64,
......
`registration_tu_code` Nullable(Int64) MATERIALIZED (SUBSTRING(registration_customs_code,1,3)),
`registration_date` Nullable(Date),
`registration_logbook_number` Nullable(String)
 ) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date_time) ORDER BY (system_generated_id) SETTINGS index_granularity = 8192;


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

CREATE TABLE default.m (
`day` Date ,
`message_dir` Int8
)  
ENGINE = SummingMergeTree() PARTITION BY tuple() ORDER BY (day) SETTINGS index_granularity = 8192;



CREATE MATERIALIZED VIEW default.m_mv TO default.m (
`day` Date ,
`message_dir` Int8
) as
select
toStartOfDay(event_date_time) as day,
message_direction
from default.messages;

но
в таблице default.m вижу результат :
2021-02-17  1
2021-02-17  1
2021-02-17  1

Данные не суммируются. Что я делаю не так?
Summing/Aggregating MergeTree сумируют данные eventually, так что к ним всегда нужно выполнять запросы с агрегацией
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
оно так же не работает, если в материальном представлении у меня count(*) c группировкой по дням
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
может дело в ключе сортировки?
источник

DT

Dmitry Titov in ClickHouse не тормозит
Татьяна Исекеева
оно так же не работает, если в материальном представлении у меня count(*) c группировкой по дням
Какой запрос вы пишете к m таблице?
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
select * from default.m, все просто
источник

AT

Al T in ClickHouse не тормозит
Давно не заходил - от Altinity рябит в глазах )) и Диман и взяли еще джуниор специалиста в чатик ))
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
я поняла, надо доагрегировать данные в звпросе, писать summ(столбец нужный)
источник

DT

Dmitry Titov in ClickHouse не тормозит
Татьяна Исекеева
select * from default.m, все просто
Summing/Aggregating MergeTree  таблицы агрегируют записи во время мержей, которые случаются в произвольный момент времени.

поэтому когда пишете запросы к ним, нужно всегда их агрегировать.
источник

DT

Dmitry Titov in ClickHouse не тормозит
Al T
Давно не заходил - от Altinity рябит в глазах )) и Диман и взяли еще джуниор специалиста в чатик ))
Та озадачили, что если мы отвечаем, то будем повышать узнаваемость:)
источник

ТИ

Татьяна Исекеева... in ClickHouse не тормозит
Dmitry Titov
Summing/Aggregating MergeTree  таблицы агрегируют записи во время мержей, которые случаются в произвольный момент времени.

поэтому когда пишете запросы к ним, нужно всегда их агрегировать.
спасибо большое!
источник

AT

Al T in ClickHouse не тормозит
Dmitry Titov
Та озадачили, что если мы отвечаем, то будем повышать узнаваемость:)
да молодцы конечно, я всячески приветствую их клауд инициативу...
источник