Size: a a a

ClickHouse не тормозит

2019 December 05

YY

Yury Yurochko in ClickHouse не тормозит
Sergey Safonov
я про то, что обещанное схлопывание не происходит
Наверное просто мало данных и кх решает, что вообще можно не мержить их пока.
Можете принудительно схлопнуть с optomize, ну или нагенерить больше данных.
источник

SS

Sergey Safonov in ClickHouse не тормозит
Так я специально делаю: сторнирую исходные данные за последний месяц и вставляю актуальные данные за месяц без проверки на реальные изменения, т.е. утраиваю их при каждом проходе
источник

SS

Sergey Safonov in ClickHouse не тормозит
Yury Yurochko
Наверное просто мало данных и кх решает, что вообще можно не мержить их пока.
Можете принудительно схлопнуть с optomize, ну или нагенерить больше данных.
если только несколько десятков миллионов строк это мало и collapsing работает только от миллиардов строк.
источник

YY

Yury Yurochko in ClickHouse не тормозит
Не, миллионов должно хватать)
Покажите создание таблицы.
источник

SS

Sergey Safonov in ClickHouse не тормозит
Yury Yurochko
Не, миллионов должно хватать)
Покажите создание таблицы.
CREATE TABLE
 edw.fact_table
(
 id Int32,
 creation_datetime DateTime,
 deposit_creation_date Nullable(Date),
 amount Decimal(18,3),
 sign Int8,
 load_datetime DateTime('UTC')
)
   ENGINE = CollapsingMergeTree(sign)
   PARTITION BY toYYYYMM(creation_datetime)
   ORDER BY (id);;
источник

YY

Yury Yurochko in ClickHouse не тормозит
А у вас данные за несколько месяцев? Схлопывание работает в пределах одной партиции, если у вас данные размазаны на несколько - будут дубликаты в select *.
источник

YY

Yury Yurochko in ClickHouse не тормозит
Сделайте запрос с отсечением по creation_datetime и посмотрите на дубликаты там
источник

YY

Yury Yurochko in ClickHouse не тормозит
(чтобы из одной партиции взялись)
источник

SS

Sergey Safonov in ClickHouse не тормозит
Yury Yurochko
А у вас данные за несколько месяцев? Схлопывание работает в пределах одной партиции, если у вас данные размазаны на несколько - будут дубликаты в select *.
сейчас только практически 1 партиция: ноябрь и начало декабря. Дубли есть естесственно и внутри партиции (ноябрь)
источник

SS

Sergey Safonov in ClickHouse не тормозит
т.е., скажу больше - вообще ничего не схлопывалось еще, при том что дублей сильно больше чем актуальных данных
источник

SS

Sergey Safonov in ClickHouse не тормозит
может это баг 19.13 версии?
источник

YY

Yury Yurochko in ClickHouse не тормозит
Не уверен, есть ли проблема в том, что sign - не последнее поле в таблице у вас. Еще можно логи посмотреть на предмет того, что он по какой-то причине не может смержить. Куда-то он об этом пишет (в описании CollapsingMT видел что-то про это).
источник

AB

Andrey Bodrov in ClickHouse не тормозит
Всем привет. А подскажите, пожалуйста, про ArrayIf
В доке написано, что
Комбинаторы -If и -Array можно сочетать. При этом, должен сначала идти Array, а потом If. Примеры: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Из-за такого порядка получается, что аргумент cond не должен быть массивом.

А как тогда указывать условие на элемент массива cond?
источник

AP

Alexander Petrov in ClickHouse не тормозит
Оно так и так не должено быть массивом. Это же фильтр для строк которые попадут или нет в итоге в функцию агрегации.
источник

AP

Alexander Petrov in ClickHouse не тормозит
Соответственно это UInt8
источник

AP

Alexander Petrov in ClickHouse не тормозит
Т.е. в данном случае это условие на массив целиком а не на его элементы.
источник

pk

papa karlo in ClickHouse не тормозит
Andrey Bodrov
Всем привет. А подскажите, пожалуйста, про ArrayIf
В доке написано, что
Комбинаторы -If и -Array можно сочетать. При этом, должен сначала идти Array, а потом If. Примеры: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Из-за такого порядка получается, что аргумент cond не должен быть массивом.

А как тогда указывать условие на элемент массива cond?
например так
SELECT sumIfArray(v, c)
FROM
(
   SELECT
       [1, 2, 3] AS v,
       [1, 0, 1] AS c
)
┌─sumIfArray(v, c)─┐
│                4 │
└──────────────────┘
источник

AB

Andrey Bodrov in ClickHouse не тормозит
гм, я думал оно должно работать как фильтр на элементы массива (
источник

AP

Alexander Petrov in ClickHouse не тормозит
Если надо фильтровать массив, можно попробовать что-то типа arraySum: https://clickhouse.yandex/docs/ru/query_language/functions/higher_order_functions/#higher_order_functions-array-sum
источник

AM

Alex ⭕️ More in ClickHouse не тормозит
Andrey Bodrov
гм, я думал оно должно работать как фильтр на элементы массива (
вот фильтр на элементы массива
select arrayFilter(x -> x > 2, [1,2,3,4,5])
источник