Size: a a a

ClickHouse не тормозит

2021 February 13

DT

Dmitry Titov in ClickHouse не тормозит
Точнее, такой вопрос, "версией" является столбец b?
источник

AK

Andrew Kochen in ClickHouse не тормозит
Версией?  не понял вопрос
Мы выбираем по значению максимального b - значение из c
источник

D

Dj in ClickHouse не тормозит
Andrew Kochen
Версией?  не понял вопрос
Мы выбираем по значению максимального b - значение из c
Т.е. в старой версии вернулось бы 0 же
источник

DT

Dmitry Titov in ClickHouse не тормозит
Но при этом, хотите скипать Null значения?
источник

AK

Andrew Kochen in ClickHouse не тормозит
Как раз старая версия скипала бы Null значения
источник

AK

Andrew Kochen in ClickHouse не тормозит
а при использовании coalsce в новой - Null не скипается
источник

AK

Andrew Kochen in ClickHouse не тормозит
Dj
Т.е. в старой версии вернулось бы 0 же
нет, в старой версии Null значение c пропускается..
источник

DT

Dmitry Titov in ClickHouse не тормозит
Andrew Kochen
нет, в старой версии Null значение c пропускается..
Ну вы их заменяете честным нулем, вот и не скипает


SELECT finalizeAggregation(argMaxStateIf(assumeNotNull(x), y, isNotNull(x)))
FROM
(
   SELECT
       1 AS x,
       1 AS y
   UNION ALL
   SELECT
       NULL AS x,
       2 AS y
)


Грубое решение, но работает (если вам нужно сохранить старый тип данных в таблице агрегаций, иначе лучше пересоздать как DJ показал)
источник

D

Dj in ClickHouse не тормозит
Andrew Kochen
нет, в старой версии Null значение c пропускается..
а если так создать?
CREATE TABLE destination
(
   a UInt64,
   st AggregateFunction(argMax, Nullable(Int32), Int32)
)
ENGINE = AggregatingMergeTree
ORDER BY a;
источник

AK

Andrew Kochen in ClickHouse не тормозит
Dj
а если так создать?
CREATE TABLE destination
(
   a UInt64,
   st AggregateFunction(argMax, Nullable(Int32), Int32)
)
ENGINE = AggregatingMergeTree
ORDER BY a;
Ну тогда же туда будут падать нулы? А мне не хочется этого...
источник

AK

Andrew Kochen in ClickHouse не тормозит
Dmitry Titov
Ну вы их заменяете честным нулем, вот и не скипает


SELECT finalizeAggregation(argMaxStateIf(assumeNotNull(x), y, isNotNull(x)))
FROM
(
   SELECT
       1 AS x,
       1 AS y
   UNION ALL
   SELECT
       NULL AS x,
       2 AS y
)


Грубое решение, но работает (если вам нужно сохранить старый тип данных в таблице агрегаций, иначе лучше пересоздать как DJ показал)
Немного не понял, это такое запрос должен быть в Materialized View ?
источник

D

Dj in ClickHouse не тормозит
Andrew Kochen
Ну тогда же туда будут падать нулы? А мне не хочется этого...
не будут, это ж внутри агг функции...
но можно и проще - не переделывая таблицу

SELECT
   argMaxIf(assumeNotNull(x), y, not isNull(x))
FROM
(
   SELECT
       1 AS x,
       1 AS y
   UNION ALL
   SELECT
       null AS x,
       2 AS y
);
источник

DT

Dmitry Titov in ClickHouse не тормозит
Andrew Kochen
Немного не понял, это такое запрос должен быть в Materialized View ?
Да
argMaxStateIf(assumeNotNull(x), y, isNotNull(x))
источник

D

Dj in ClickHouse не тормозит
Andrew Kochen
Ну тогда же туда будут падать нулы? А мне не хочется этого...
только будет падать если в блоке все НУЛЛ. что старая версия давала в таком случае?
источник

AK

Andrew Kochen in ClickHouse не тормозит
А как State из этого сделать для запроса к mv ? argMaxIfState?
источник

D

Dj in ClickHouse не тормозит
Andrew Kochen
А как State из этого сделать для запроса к mv ? argMaxIfState?
да
источник

DT

Dmitry Titov in ClickHouse не тормозит
Andrew Kochen
А как State из этого сделать для запроса к mv ? argMaxIfState?
Стейт перед If
источник

AK

Andrew Kochen in ClickHouse не тормозит
Dj
только будет падать если в блоке все НУЛЛ. что старая версия давала в таком случае?
Она конвертировала это в 0 )
источник

DT

Dmitry Titov in ClickHouse не тормозит
Сначала фильтруем с помощью If, потом берем стейт
источник

AK

Andrew Kochen in ClickHouse не тормозит
Dmitry Titov
Сначала фильтруем с помощью If, потом берем стейт
Так , кажется , не работает . А вот argMaxStateIf похоже на то что надо
источник