问题描述
我有带有此架构的表
event_time DateTime,field1 String,field2 String,field3 String
我想用table
引擎创建新表(SummingMergeTree
)来汇总一些在线查询的数据。为此,我创建这样的表:
CREATE TABLE aggregated_table(
event_day DateTime,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,field2,count(*) AS request_num,uniqExactState(field3) As uniq_field3_state
FROM table
GROUP BY event_day,field2;
现在,当我查询以找到uniqExact
中的field3
时:
select uniqExact(uniq_field3_state) from aggregated_table;
我的答案是:
┌─uniqExact(uniq_field3_state)─┐
│ 356948 │
└──────────────────────────────┘
但是当我查询源表时,我的答案是:
┌─uniqExact(field3)─┐
│ 15548 │
└───────────────────┘
此工作流程是否有问题?
解决方法
您必须通过-Merge或-Finalize函数完成STATE的计算。
在您的示例中,您必须使用uniqExactMerge
而不是uniqExact。
select uniqExactMerge(uniq_field3_state)
from aggregated_table;