Clickhouse uniqExact Aggregate函数无法正常运行

问题描述

我有带有此架构的表

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;