You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ClickHouse数组类型列提取全局去重值并统计数量

解决ClickHouse数组列全局元素去重及统计问题

1. 提取全局去重的数组元素

使用arrayJoin将数组列拆分为单行元素,再通过DISTINCT实现全局去重,查询语句如下:

SELECT DISTINCT arrayJoin(errors.message_grouping_fingerprint) AS fingerprint
FROM views
WHERE session_date >= toDate('2022-07-21') 
  AND session_date < toDate('2022-07-22')
  AND notEmpty(errors.message) = 1
  AND project_id = 162
SETTINGS distributed_group_by_no_merge=0

执行后将得到目标结果:

-8964675922652096680
-827009490898812590
-1660275624223727714
1852265010681444046
-2552644061611887546
-7142229185866234523

2. 统计去重后的元素总数

直接通过COUNT(DISTINCT ...)统计全局唯一元素的数量,查询语句如下:

SELECT COUNT(DISTINCT arrayJoin(errors.message_grouping_fingerprint)) AS unique_fingerprint_count
FROM views
WHERE session_date >= toDate('2022-07-21') 
  AND session_date < toDate('2022-07-22')
  AND notEmpty(errors.message) = 1
  AND project_id = 162
SETTINGS distributed_group_by_no_merge=0

执行后将返回预期结果:6

逻辑说明

arrayJoin函数会把数组列中的每个元素拆分成独立的行,让原本嵌套在数组内的元素可以被全局去重和统计。原查询仅对整个数组结构做DISTINCT,无法处理数组内部及跨数组的重复元素,而该逻辑正好解决了这个问题。

内容的提问来源于stack exchange,提问作者Luis Urea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:18:26