Size: a a a

ClickHouse не тормозит

2021 January 20

DT

Dmitry Titov in ClickHouse не тормозит
Плюс всегда был
set send_logs_level='trace';
там все видно
источник

KB

Kirill Bespalov in ClickHouse не тормозит
Еще вопрос наверное очевидный - если искать по «вычисляемому» PK полю, то верно ли, что про индекс можно забыть?

Был индекс по user_id, пытаются искать по hash(user_id) = x
источник

KB

Kirill Bespalov in ClickHouse не тормозит
часто видел в запросах условное time поле, которое участвует в PARTITION BY и PK ищут через toStartOfWeek(time) или что-то похожее
источник

ВВ

Вячеслав Владимиров... in ClickHouse не тормозит
Dmitry Titov
Так есть же, даже в 20.8
Охты, давно ж я не читал notes-ы...  Спасибо
источник

DT

Dmitry Titov in ClickHouse не тормозит
Если ORDER BY user_id то искать по hash(user_id) действительно не выйдет.
Но это странный кейс на самом деле, обычно делают наоборот:
ORDER BY hash(user_id)  и ищут по user_id

тогда можно WHERE hash(user_id) = hash('user_id') AND user_id = user_ud

> часто видел в запросах условное time поле, которое участвует в PARTITION BY и PK ищут через toStartOfWeek(time) или что-то похожее

PARTITION BY хранит не само значение функции поля а min-max значения этого поля встреченные в таблице,
именно по этому можно писать в WHERE просто условие на time без преобразований
источник

KB

Kirill Bespalov in ClickHouse не тормозит
Хорошо, спасибо!
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Titov
Если ORDER BY user_id то искать по hash(user_id) действительно не выйдет.
Но это странный кейс на самом деле, обычно делают наоборот:
ORDER BY hash(user_id)  и ищут по user_id

тогда можно WHERE hash(user_id) = hash('user_id') AND user_id = user_ud

> часто видел в запросах условное time поле, которое участвует в PARTITION BY и PK ищут через toStartOfWeek(time) или что-то похожее

PARTITION BY хранит не само значение функции поля а min-max значения этого поля встреченные в таблице,
именно по этому можно писать в WHERE просто условие на time без преобразований
Из за того, что PARTITION KEY  хранит min-max раньше от него не было смысла если в нем использовался модуль (user_id % 100),

Относительно недавно это исправили
https://github.com/ClickHouse/ClickHouse/pull/16253#issue-508046958

По поводу использования  toStartOfWeek(time) в WHERE не все так просто (если toStart* используется в ORDER BY в условии нужно писать ровно так же toStart*(column_from_pk) = '....' )
https://github.com/ClickHouse/ClickHouse/issues/15257#issue-708510144
источник

MV

Max Vikharev in ClickHouse не тормозит
Коллеги, всем привет.  У нас есть задача - подливать в кликхаус инкрементально измерения SCD Type 1 из Postgresql. Мы уже активно используем словари, но появились таблицы побольше и хотим их в коллапсингмерж, решаем как доставлять попроще. Объем - миллионы строк в день. Выбираем между напилить свое решение на триггерах или дозаморочиться с настройкой дебезиум-кафка-КХ. Мб есть какие то другие/готовые велосипеды чтоб поменьше телодвижений?
источник

D

Dj in ClickHouse не тормозит
Max Vikharev
Коллеги, всем привет.  У нас есть задача - подливать в кликхаус инкрементально измерения SCD Type 1 из Postgresql. Мы уже активно используем словари, но появились таблицы побольше и хотим их в коллапсингмерж, решаем как доставлять попроще. Объем - миллионы строк в день. Выбираем между напилить свое решение на триггерах или дозаморочиться с настройкой дебезиум-кафка-КХ. Мб есть какие то другие/готовые велосипеды чтоб поменьше телодвижений?
а чем словари не подходят на большие таблицы? память? просто учитывая их встроенные рефреш удобней вряд ли будет
источник

MV

Max Vikharev in ClickHouse не тормозит
Dj
а чем словари не подходят на большие таблицы? память? просто учитывая их встроенные рефреш удобней вряд ли будет
О, привет из чата гринплама))
1. Сотни ГБ синкать долго
2. Словари не сжимаются, память кончается
источник

D

Dj in ClickHouse не тормозит
Max Vikharev
О, привет из чата гринплама))
1. Сотни ГБ синкать долго
2. Словари не сжимаются, память кончается
аха, салют
№2. cache SSD подойдет имхо в самый раз

>1. Сотни ГБ синкать долго
нужно ли синкать моментально?
источник

MV

Max Vikharev in ClickHouse не тормозит
Dj
аха, салют
№2. cache SSD подойдет имхо в самый раз

>1. Сотни ГБ синкать долго
нужно ли синкать моментально?
Ага, есть требование в задержке обновлений измерений порядка минут
Ну и вообще как то стремно постоянно пересинкивать всю таблицу. постгрес сам по себе не шибко быстро такие объемы отдает,
источник
2021 January 21

D

Dj in ClickHouse не тормозит
Max Vikharev
Ага, есть требование в задержке обновлений измерений порядка минут
Ну и вообще как то стремно постоянно пересинкивать всю таблицу. постгрес сам по себе не шибко быстро такие объемы отдает,
ну, update_field
т.е. в ПГ таблице иметь что то типа LAST_UPDATED, и будут вам инкрементально обновления данных подвозится
источник

D

Dj in ClickHouse не тормозит
Max Vikharev
Ага, есть требование в задержке обновлений измерений порядка минут
Ну и вообще как то стремно постоянно пересинкивать всю таблицу. постгрес сам по себе не шибко быстро такие объемы отдает,
если и это никак - то уже как-то доп логику делать типа триггер в ПГ/вал/писать источником в два места/ писать в кафку  и оттуда в два места... вот это все
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Владислав Юсюмбели
Добрый день! Может кто-нибудь подсказать сколько раз будет вычиляться функция arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) в этом запросе?
SELECT arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) as last_mailing_result
FROM log_record
having arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) LIKE 'хорошо';
один раз, кстати КХ позволяет алиасы из секции select использовать в where/groupby/order by /having

SELECT arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) as last_mailing_result
FROM log_record
having last_mailing_result LIKE 'хорошо';


это удобно, но создает огромную попаболь из-за несовместимости с ansi sql
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Olexander 1
Здравствуйте!
Помогите, пожалуйста, советом
Есть таблица ReplacingMergeTree

CREATE TABLE table_arrays(id UInt32,docs Array(UInt32)) ENGINE ReplacingMergeTree() ORDER BY id;

И я вставляю данные

INSERT INTO table_arrays
VALUES (1000, [1,2,3]), (1001, [3,4,5]);

INSERT INTO table_arrays
VALUES (1000, [1,4]);

Можно ли сделать так, чтобы после схлопывания или во время вставки, массивы объединялись по ключу сортировки (id)
Сейчас
select * from table_arrays;

┌───id─┬─docs────┐
│ 1000 │ [1,2,3] │
│ 1001 │ [3,4,5] │
└──────┴─────────┘

А нужно
┌───id─┬─docs────┐
│ 1000 │ [1,2,3,4] │
│ 1001 │ [3,4,5] │
└──────┴─────────┘
summingMt/AggregatingMT только такое могут через groupUniqArrayArray
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Demetra Nadya
Можно ли добавлять индексы группировки после создания таблицы?
в кх нет индексов группировки
источник

ВЮ

Владислав Юсюмбели... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
один раз, кстати КХ позволяет алиасы из секции select использовать в where/groupby/order by /having

SELECT arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) as last_mailing_result
FROM log_record
having last_mailing_result LIKE 'хорошо';


это удобно, но создает огромную попаболь из-за несовместимости с ansi sql
Он позволяет и два раза использовать, но говорят, что даже использовать один раз может быть неэффективно. Из-за этого я и хотел продублировать функцию
SELECT arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) as last_mailing_result
FROM log_record
having last_mailing_result LIKE 'хорошо' AND last_mailing_result LIKE 'хорошо2';
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Nickolay Khokhlov
Доброго времени суток, обнаружилась проблема с INSERT в ReplicatedSummingMergeTree (1 шард - 2 реплики).
при INSERT с такими же значениями (даже через большой интервал времени в несколько часов) этот INSERT "игнорируется" в сумме, хотя и выполняется без ошибок.
Это так работает удаление дубликатов?
SELECT version()
20.12.5.14
insert_dedupicate=0
кх дедуплицирует инсерты, читайте Replication
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Владислав Юсюмбели
Он позволяет и два раза использовать, но говорят, что даже использовать один раз может быть неэффективно. Из-за этого я и хотел продублировать функцию
SELECT arrayFirst(m -> m != '', reverse(groupArray(mailing_result))) as last_mailing_result
FROM log_record
having last_mailing_result LIKE 'хорошо' AND last_mailing_result LIKE 'хорошо2';
вы что-то неправильно поняли.

это выражение конечно вычислять надо один раз.
источник