clickhouse拆分对应索引的数组原创
# 1. 数据背景
在ClickHouse中我们存放的两列数据,数据类型:Array(UInt64)。
`hour` Array(UInt64) COMMENT '小时',
`request_count` Array(UInt64) COMMENT '小时请求数'
1
2
3
2
3
- 数据存储示例:

相同key,每小时对应的流量频次,数组相同索引为对应同一组数据。
# 2. 数据需求
假使要分析一天内每小时设备的频次分布,就要将这两列进行对应的拆分。我们知道单列拆分直接使用arrayJoin()就可以
- arrayJoin()
2.1 例:select arrayJoin([16,17]) as dst1
1
2.1例 dst |
---|
16 |
17 |
2.2 例:select arrayJoin([16,17]) as dst1, arrayJoin([7,4]) as dst2
1
2.2例 dst1 | 2.2例 dst2 |
---|---|
16 | 7 |
16 | 4 |
17 | 7 |
17 | 4 |
通过观察,arrayJoin() 是可以将数组拆分开来,但是多个组合就会产生笛卡尔积。
# 3. 解决办法
从数据上来看,数组1是小时,不会有重复数据,我们只需要arrayJoin()数组1,拿到数组1元素对应的索引,从数组2中取对应索引的元素就可以。
select
arrayJoin(arr1) as arr1_individual,
arr2[indexOf(arr1,arr1_individual)] as arr2_individual
from
(
select [16,17] as arr1, [7,4] as arr2
)
1
2
3
4
5
6
7
2
3
4
5
6
7
arr1_individual | arr2_individual |
---|---|
16 | 7 |
17 | 4 |
上次更新: 2024/06/28, 14:46:16
- 02
- 2025-03-28拍婚纱照 原创04-02
- 03
- 2024-04-05的晚上 原创04-01