Size: a a a

ClickHouse не тормозит

2021 March 16

RG

Rodion Gorbachev in ClickHouse не тормозит
так - стоп. При чем здесь плагиат : )) Посчитайте хэш суммы каждой строки и если это массив - решение что я привел/ Если это последовательность упорядоченных строк - https://clickhouse.tech/docs/ru/sql-reference/functions/other-functions/#runningdifferencex
источник

АР

Андрей Романов... in ClickHouse не тормозит
Dmitry Titov
Скорее всего groupArray  но в подзапросе нужно будет сделать ORDER BY timestamp

SELECT
   [1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3] AS a,
   arraySplit((x, y) -> (y != 0), a, arrayDifference(a)) AS d,
   arrayFilter(x -> (x != 0), arrayMap(x -> countEqual(x, 2), d)) AS v

Query id: 0d09384e-b8bf-4863-87e3-bb22abad52e4

┌─a─────────────────────────┬─d───────────────────────────────────┬─v─────┐
│ [1,2,2,2,2,2,4,2,2,2,2,3] │ [[1],[2,2,2,2,2],[4],[2,2,2,2],[3]] │ [5,4] │
└───────────────────────────┴─────────────────────────────────────┴───────┘
красиво, не поспоришь
источник

АР

Андрей Романов... in ClickHouse не тормозит
я бы даже так не сделал (
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Mary Charikova
Видимо все таки совсем непонятно вопрос сформулировала, речь идёт о последовательности событий, то есть строк, я их цифрами условно обозначила)
на самом деле ваша задача в итоге сводится к массивам как раз https://youtu.be/KumFUCRQnGY?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ https://youtu.be/3dI4D2wve00?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ
в каком-то из этих видео, что-то подобное
источник
2021 March 17

DG

David Gobronidze in ClickHouse не тормозит
Столкнулся с удивительной (или нет?) проблемой. Упрощенно:

У меня есть ReplicatedSummingMergeTree. Там есть ключ user_id и поле profit UInt64. Ну и event_time там есть еще.

1. Я вставляю user_id: 20 и profit: 100.
2. SELECT sum(profit) FROM table; // все отлично, выводится 100
3. Я еще раз вставляю user_id: 20 и profit: 100.
4. SELECT sum(profit) FROM table; // все равно выводится 100
5. Я вставляю user_id: 20 и profit: 101.
5. SELECT sum(profit) FROM table; // Выводится 201

Короче говоря, повторный инсерт с теми же данными в SummingMergeTree игнорируется. Меня то ли поплавило окончательно под ночь, то ли он в какой-то момент считает profit ключем (?!), то ли я внезапно перестал понимать, как работает SummingMergeTree
источник

DT

Dmitry Titov in ClickHouse не тормозит
David Gobronidze
Столкнулся с удивительной (или нет?) проблемой. Упрощенно:

У меня есть ReplicatedSummingMergeTree. Там есть ключ user_id и поле profit UInt64. Ну и event_time там есть еще.

1. Я вставляю user_id: 20 и profit: 100.
2. SELECT sum(profit) FROM table; // все отлично, выводится 100
3. Я еще раз вставляю user_id: 20 и profit: 100.
4. SELECT sum(profit) FROM table; // все равно выводится 100
5. Я вставляю user_id: 20 и profit: 101.
5. SELECT sum(profit) FROM table; // Выводится 201

Короче говоря, повторный инсерт с теми же данными в SummingMergeTree игнорируется. Меня то ли поплавило окончательно под ночь, то ли он в какой-то момент считает profit ключем (?!), то ли я внезапно перестал понимать, как работает SummingMergeTree
> Короче говоря, повторный инсерт с теми же данными в SummingMergeTree игнорируется.

Добро пожаловать дедубликация инсертов при вставке
источник

DT

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

DG

David Gobronidze in ClickHouse не тормозит
Наверное, стоит добавить, что колонка profit была добавлена после. В system.columns выглядит точно так же, как и те, что успешно суммировались.
источник

DT

Dmitry Titov in ClickHouse не тормозит
Кх хранит хеш суммы от последних 100 блоков вставок, если какая то из них повторяется, то инсерт тихо скипается
источник

DG

David Gobronidze in ClickHouse не тормозит
🙁
источник

DG

David Gobronidze in ClickHouse не тормозит
Спасибо.
источник

DG

David Gobronidze in ClickHouse не тормозит
Да, это первое мое столкновение с реплицированными аггрегатами. А ведь когда-то я смотрел, как Миловидов именно про это рассказывал.
источник

DG

David Gobronidze in ClickHouse не тормозит
Еще раз спасибо, теперь все хорошо.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
В реальной жизни это не приводит к проблемам, потому что инсерты никогда не повторяются до бита из-за большого кол-ва строк, или из-за того что SummingMergeTree в MV и дедупликация MV делается дедупликацией основной широкой таблицы.

можно добавить дополнительное поле insertid, заполнять чем-нибудь на клиенте, и если не включать это поле в order by , то SummingMergeTree будет коллапсировать это поле ANY( )
источник

DG

David Gobronidze in ClickHouse не тормозит
На всякий случай уточню, что проверить сам факт вставки возможности не было, там летит огромный поток, да а и мусорить своими левыми ключами я тоже не хотел, т.к. даже не думал, что проблема именно тут.
источник

DG

David Gobronidze in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
В реальной жизни это не приводит к проблемам, потому что инсерты никогда не повторяются до бита из-за большого кол-ва строк, или из-за того что SummingMergeTree в MV и дедупликация MV делается дедупликацией основной широкой таблицы.

можно добавить дополнительное поле insertid, заполнять чем-нибудь на клиенте, и если не включать это поле в order by , то SummingMergeTree будет коллапсировать это поле ANY( )
Ну в реальной жизни видимо и не будет. Проблема по сути была только в том, что я тестировал вручную новую колонку.
источник

DG

David Gobronidze in ClickHouse не тормозит
Да, в общем все понятно, еще раз спасибо.
источник

S

Se in ClickHouse не тормозит
после обновления кликхауса перестал отрабатывать запрос
ALTER TABLE event_log DELETE where (today() - date) > 125
ошибка
DB::Exception: ALTER UPDATE/ALTER DELETE statements must use only deterministic functions! Function 'today' is non-deterministic.

Подскажите как его теперь переписать правильно.
источник

DT

Dmitry Titov in ClickHouse не тормозит
Se
после обновления кликхауса перестал отрабатывать запрос
ALTER TABLE event_log DELETE where (today() - date) > 125
ошибка
DB::Exception: ALTER UPDATE/ALTER DELETE statements must use only deterministic functions! Function 'today' is non-deterministic.

Подскажите как его теперь переписать правильно.
today() заменить на дату
источник

pk

papa karlo in ClickHouse не тормозит
ALTER TABLE event_log DELETE where date < '2020-11-12'
источник