Size: a a a

ClickHouse не тормозит

2020 September 21

PC

Petr Chalov in ClickHouse не тормозит
А в случае если массив будет многомерный(вложенность - 2), и уникальность определяется одним из полей вложенных массивов, не знаете что делать?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Petr Chalov
А в случае если массив будет многомерный(вложенность - 2), и уникальность определяется одним из полей вложенных массивов, не знаете что делать?
уникальность чего определяется ? Ключ для агрегации задается в Order by таблицы, мерж не смотрит внутрь AggregateFunction, он вычисляет AggregateFunction группируя по полям Order_by таблицы

грубо говоря нельзя сделать

select sum(V), K
group by if(V=5) ,K
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Alexander Kobylyansky
По идее, я планировал только переписать партицию (модифицировав один из ключей сортировки), тобишь данные должны остаться в том же партишине (создав новые куски с модифицироваными данными).

clear column / ttl group by, я так понимаю не дает возможности сохранить некоторые из значений, он хардкорно сетит дефолт всей колонке в партиции.
я не смотрел TTL group by, это совершенно новая фича, но он называется TTL WHERE/group by возможно им и можно такое сделать , конечно для новой таблицы, для старой скорее всего не подойдет, там надо другой первичный ключ задавать скорее всего
источник

PC

Petr Chalov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
уникальность чего определяется ? Ключ для агрегации задается в Order by таблицы, мерж не смотрит внутрь AggregateFunction, он вычисляет AggregateFunction группируя по полям Order_by таблицы

грубо говоря нельзя сделать

select sum(V), K
group by if(V=5) ,K
В конечном итоге MaterializedView должен иметь такой вид:

cityHash(id1, id2, id3, id4)         | events
——————————————————————————————
111211212312321312123        | [[event, datetime], [event, datetime]]

И нужна уникальность массивов в event по полю events, там должны быть только последние добавленные события.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Petr Chalov
В конечном итоге MaterializedView должен иметь такой вид:

cityHash(id1, id2, id3, id4)         | events
——————————————————————————————
111211212312321312123        | [[event, datetime], [event, datetime]]

И нужна уникальность массивов в event по полю events, там должны быть только последние добавленные события.
ни черта не понял. Я плохо по русски понимаю, давайте SQL
источник

НЧ

Николай Чернов... in ClickHouse не тормозит
Скажите, это нормальное поведение?
источник

НЧ

Николай Чернов... in ClickHouse не тормозит
select arrayMap(x -> trimBoth(x), [])
источник

НЧ

Николай Чернов... in ClickHouse не тормозит
Code: 43, e.displayText() = DB::Exception: Illegal type Nothing of argument of function trimBoth (version 20.7.2.30 (official build))
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Николай Чернов
Скажите, это нормальное поведение?
да, так и задумано  , нельзя вывести тип из []

select arrayMap(x -> trimBoth(x), cast([], 'Array(String)'))
источник

НЧ

Николай Чернов... in ClickHouse не тормозит
о! спасибо!
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
точнее у []
desc (select [])
Array(Nothing)

а trimBoth ожидает String, а не Nothing
источник

PC

Petr Chalov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
ни черта не понял. Я плохо по русски понимаю, давайте SQL
Пожалуйста, есть таблица:

CREATE TABLE entity_events
(
   datetime DateTime,
   event    UInt8,
   entity1  String,
   entity2  String,
   entity3  String
) ENGINE = MergeTree()
ORDER BY datetime;


Есть представление:

CREATE MATERIALIZED VIEW user_trace_pool
           ENGINE = AggregatingMergeTree()
           POPULATE AS
SELECT cityHash64(entity1, entity2, entity3) as id,
      groupArrayState(
          [event, datetime]
      ) as events
FROM (
     SELECT any(datetime) as datetime,
            event,
            entity1,
            entity2,
            entity3
     FROM entity_events
     GROUP BY (event, entity1, entity2, entity3)
) GROUP BY id;

Задача стоит, что бы в массиве events представления всегда лежали только последние события сгруппированые по полю event из таблицы, и отсортированные по datetime.

Но, при реалтайм insert, в поле events в представлении оказывается только последнее добавленное событие.
источник

pk

papa karlo in ClickHouse не тормозит
у меня не только последнее
https://pastebin.com/18k741Pq
источник

PC

Petr Chalov in ClickHouse не тормозит
Воот, Ваш результат похож на мой.
Только я до этого не использовал groupArrayState, и получал только последнее событие во view
источник

PC

Petr Chalov in ClickHouse не тормозит
А в конечном итоге должно оказаться событие (1,'2020-09-20 00:00:01').
источник

PC

Petr Chalov in ClickHouse не тормозит
А если сделать arrayReverse, и отфильтровать потом по первым элементам при помощи arrayEnumerateUniq
источник

PC

Petr Chalov in ClickHouse не тормозит
Хотя, не выйдет там datetime разный.
источник

pk

papa karlo in ClickHouse не тормозит
а почему не брать max((datetime,event))
источник

PC

Petr Chalov in ClickHouse не тормозит
Вот про max((datetime,event)) я что - то совсем не понял
источник

pk

papa karlo in ClickHouse не тормозит
зачем groupArray, если можно просто взять последний во времени
источник