#clickhouse
#clickhouse
Вопрос:
У меня есть таблица с этой схемой
event_time DateTime,
field1 String,
field2 String,
field3 String
Я хочу создать новую таблицу ( table
) с SummingMergeTree
механизмом для агрегирования данных для некоторых онлайн-запросов. Для этого я создаю таблицу следующим образом:
CREATE TABLE aggregated_table(
event_day DateTime,
field1 String,
field2 String,
record_num UInt64,
uniq_field3_state AggregateFunction(uniqExact, String)
)
ENGINE = SummingMergeTree()
ORDER BY (event_day, field1, field2);
После этого я вставляю свои данные в новую таблицу:
INSERT INTO aggregated_table
SELECT
toStartOfDay(event_time) as event_day,
field1,
field2,
count(*) AS request_num,
uniqExactState(field3) As uniq_field3_state
FROM table
GROUP BY event_day, field1, field2;
Теперь, когда я запрашиваю, чтобы найти uniqExact
field3
:
select uniqExact(uniq_field3_state) from aggregated_table;
мой ответ:
┌─uniqExact(uniq_field3_state)─┐
│ 356948 │
└──────────────────────────────┘
но когда я запрашиваю исходную таблицу, мой ответ:
┌─uniqExact(field3)─┐
│ 15548 │
└───────────────────┘
Есть ли какие-либо проблемы с этим рабочим процессом?
Ответ №1:
Вы должны завершить вычисления состояний с помощью функций -Merge Или -Finalize.
В вашем примере вы должны использовать uniqExactMerge
не uniqExact.
select uniqExactMerge(uniq_field3_state)
from aggregated_table;