ClickHouse中SQL Unpivot操作的更优实现方案咨询
ClickHouse中更简洁高效的Unpivot实现方案
针对你的需求,推荐使用ClickHouse的ARRAY JOIN语法来实现Unpivot,相比多次UNION ALL,这个方案只需要扫描一次表,性能更优,代码也更简洁:
SELECT report_date, platform, metric, value FROM platform_table ARRAY JOIN ['viewers', 'effectivePlaytime', 'revenue'] AS metric, [toFloat32(viewers), effectivePlaytime, revenue] AS value
方案优势
- 性能更优:原
UNION ALL方案需要三次扫描表,而该方案仅扫描一次,在数据量较大时性能提升非常明显 - 代码简洁:指标越多,对比效果越显著,后续新增指标只需在两个数组中添加对应元素即可
- 类型兼容:通过
toFloat32将UInt32类型的viewers转换为Float32,确保所有value字段类型统一,符合目标表结构要求
原方案的不足
多次UNION ALL会导致ClickHouse对同一张表执行多次全表扫描,当表数据量较大时,会增加磁盘IO和CPU消耗,同时代码冗余度高,维护成本也会随着指标数量增加而上升
内容的提问来源于stack exchange,提问作者kiril
相关产品推荐
相关产品推荐

