Цепочка таблиц AggregatingMergeTree

339 views
Skip to first unread message

Юрий Думп

unread,
Mar 16, 2017, 9:09:18 AM3/16/17
to ClickHouse
Здравствуйте.
Есть таблица типа MergeTree  A (dt Date, id_user UInt32) Engine = MergeTree(dt (dt, id_user), 8194)
Есть мат. представление B (dt Date, user_agg AggregateFunction(uniq, UInt32) ) Engine = AggregatingMergeTree(dt, dt, 8194 ) as select dt, uniqState(id_user) from A group by dt

Требуется создать мат. представление C которое будет брать данные из B, но группировать их по неделям

Я попробовал реализовать его следующим образом C (dt Date, user_agg AggregateFunction(uniq, UInt32) ) Engine = AggregatingMergeTree(dt, dt, 8194 ) as select toMonday(dt) dt, uniqMergeState(user_agg) user_agg from `.inner.A` group by dt
Такое представление создается, но при попытке выполнить в него вставку ( insert into `.inner.C` select toMonday(dt) dt, uniqMergeState(user_agg) user_agg from `.inner.A` group by dt) получаю ошибку 
Code: 53, e.displayText() = DB::Exception: Type mismatch for column user_agg. Column has type AggregateFunction(uniq, UInt32), got type AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32)), e.what() = DB::Exception
Что делать?

madm1ke

unread,
Mar 16, 2017, 9:11:32 AM3/16/17
to Юрий Думп, ClickHouse
MT из MT работает, если второй MT делать через subquery, в котором названия колонок будут заменены нормальными алиасами. Это чисто проблема описания языка, не функционала.

16 марта 2017 г., 16:09 пользователь Юрий Думп <u.d...@gmail.com> написал:

--
You received this message because you are subscribed to the Google Groups "ClickHouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clickhouse+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/clickhouse/dbc72cb7-79aa-459a-84ff-ee76cb7f489f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Mikhail U. Petrov.

Юрий Думп

unread,
Mar 16, 2017, 9:55:03 AM3/16/17
to ClickHouse, u.d...@gmail.com
Не очень понял, в запросе ругань не на название столбца, а на его тип, т.к. в мат. представлении тип AggregateFunction(uniq, UInt32), а в результате запроса AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32))

четверг, 16 марта 2017 г., 16:11:32 UTC+3 пользователь Mikhail Petrov написал:
MT из MT работает, если второй MT делать через subquery, в котором названия колонок будут заменены нормальными алиасами. Это чисто проблема описания языка, не функционала.
16 марта 2017 г., 16:09 пользователь Юрий Думп <u.d...@gmail.com> написал:
Здравствуйте.
Есть таблица типа MergeTree  A (dt Date, id_user UInt32) Engine = MergeTree(dt (dt, id_user), 8194)
Есть мат. представление B (dt Date, user_agg AggregateFunction(uniq, UInt32) ) Engine = AggregatingMergeTree(dt, dt, 8194 ) as select dt, uniqState(id_user) from A group by dt

Требуется создать мат. представление C которое будет брать данные из B, но группировать их по неделям

Я попробовал реализовать его следующим образом C (dt Date, user_agg AggregateFunction(uniq, UInt32) ) Engine = AggregatingMergeTree(dt, dt, 8194 ) as select toMonday(dt) dt, uniqMergeState(user_agg) user_agg from `.inner.A` group by dt
Такое представление создается, но при попытке выполнить в него вставку ( insert into `.inner.C` select toMonday(dt) dt, uniqMergeState(user_agg) user_agg from `.inner.A` group by dt) получаю ошибку 
Code: 53, e.displayText() = DB::Exception: Type mismatch for column user_agg. Column has type AggregateFunction(uniq, UInt32), got type AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32)), e.what() = DB::Exception
Что делать?

--
You received this message because you are subscribed to the Google Groups "ClickHouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clickhouse+...@googlegroups.com.



--
Mikhail U. Petrov.

madm1ke

unread,
Mar 16, 2017, 11:30:35 AM3/16/17
to Юрий Думп, ClickHouse
Я написал именно так, как сам пробовал. Нужно написать что-то типа 
C (d1t Date, user_agg1 AggregateFunction(uniq, UInt32) ) Engine = AggregatingMergeTree(dt, dt, 8194 ) as select dt as dt1, user_agg as user_agg1 from (select toMonday(dt) dt, uniqMergeState(user_agg) user_agg from `.inner.A` group by dt)

16 марта 2017 г., 16:55 пользователь Юрий Думп <u.d...@gmail.com> написал:
To unsubscribe from this group and stop receiving emails from it, send an email to clickhouse+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/clickhouse/86f28ac9-8949-455e-a1d7-bf1b02f9cc6b%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Mikhail U. Petrov.

Юрий Думп

unread,
Mar 16, 2017, 12:01:11 PM3/16/17
to ClickHouse, u.d...@gmail.com
К сожалению не помогает. Продолжает ругаться при попытке вставки данных на несовместимость типов столбцов.

четверг, 16 марта 2017 г., 18:30:35 UTC+3 пользователь Mikhail Petrov написал:



--
Mikhail U. Petrov.

Юрий Думп

unread,
Mar 17, 2017, 3:04:48 AM3/17/17
to ClickHouse
Господа разработчики, помогите разобраться в данной проблеме.

четверг, 16 марта 2017 г., 16:09:18 UTC+3 пользователь Юрий Думп написал:

Vitaliy Lyudvichenko

unread,
Mar 17, 2017, 9:31:39 AM3/17/17
to ClickHouse
Здравствуйте.

Сделать второй MV, чтобы в него корректно проходили вставки можно явно указав тип колонки user_agg AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32)) при его создании.
Однако при этом вам потом будет очень неудобно "деагрегировать" AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32)) в Uint32 при селектах из нее.

Но на самом деле типы AggregateFunction(uniqMerge, AggregateFunction(uniq, UInt32)) и AggregateFunction(uniq, UInt32) имеют одинаковое представление, но сейчас ClickHouse не понимает этого и поэтому кидает соотвутсвующую ошибку.
Мы скорее всего в ближайшее время исправим такое поведение модификатора -MergeState, так что ваша текущая схема будет работоспособной.

Сейчас вы можете сделать два параллельных MV, смотрящие на одну таблицу (вместо текущей последовательной схемы Table -> MV -> MV).
У меня есть препдположения, что такая схема не будет сильно отличаться по производительности.

пятница, 17 марта 2017 г., 10:04:48 UTC+3 пользователь Юрий Думп написал:

Vitaliy Lyudvichenko

unread,
May 3, 2017, 3:51:58 PM5/3/17
to ClickHouse
FYI https://github.com/yandex/ClickHouse/pull/759

пятница, 17 марта 2017 г., 16:31:39 UTC+3 пользователь Vitaliy Lyudvichenko написал:
Reply all
Reply to author
Forward
0 new messages