首页 > 解决方案 > Clickhouse uniqExact 聚合函数无法正常工作

问题描述

我有这个模式的表

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;

现在,当我查询查找uniqExactfield3

select uniqExact(uniq_field3_state) from aggregated_table;

我的回答是:

┌─uniqExact(uniq_field3_state)─┐
│                       356948 │
└──────────────────────────────┘

但是当我查询源表时,我的答案是:

┌─uniqExact(field3)─┐
│             15548 │
└───────────────────┘

这个工作流程有什么问题吗?

标签: clickhouse

解决方案


您必须通过 -Merge 或 -Finalize 函数完成状态计算。

在您的示例中,您必须使用uniqExactMergenot uniqExact。

select uniqExactMerge(uniq_field3_state) 
from aggregated_table;

推荐阅读