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
- 01
- Dolphin+XXL-JOB监控Hadoop任务执行结果量级 原创01-04
- 02
- 调度Hive定时删除30天之前的分区 原创01-04
- 03
- Java第三方SDK的使用方法 原创12-16