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

如何高效提取ClickHouse中Array(Tuple)列的数据?

ClickHouse数组元组展开为多行的实现与优化

核心实现语句

要将数组中的元组展开为多行,直接使用ARRAY JOIN操作符即可,它会将数组内的每个元组拆分为独立行,同时保留原行的关联字段:

SELECT 
    job_name,
    list_data.s,
    list_data.e,
    list_data.name
FROM default.ntest2
ARRAY JOIN list_data;

执行后就能得到期望的展开结果:每个元组对应一行,job_name字段与原数据保持关联。

优化查询耗时的方法

  1. 利用索引提前过滤
    如果查询只针对特定job_name,先通过WHERE条件过滤数据,借助MergeTree的ORDER BY (job_name)排序键,能快速定位目标数据,减少需要展开的数组规模:
SELECT 
    job_name,
    list_data.s,
    list_data.e,
    list_data.name
FROM default.ntest2
WHERE job_name IN ('job1', 'job2')
ARRAY JOIN list_data;
  1. 使用物化视图预计算
    如果该展开查询是高频操作,创建物化视图预先存储展开后的数据,避免每次查询都实时执行数组展开:
CREATE MATERIALIZED VIEW default.ntest2_expanded
ENGINE = MergeTree
ORDER BY job_name
AS
SELECT 
    job_name,
    list_data.s,
    list_data.e,
    list_data.name
FROM default.ntest2
ARRAY JOIN list_data;

后续直接查询物化视图即可获得最优性能:

SELECT * FROM default.ntest2_expanded;
  1. 仅选择必要字段
    查询时明确指定需要的列,避免使用SELECT *,减少数据传输和处理的开销,进一步提升查询速度。

内容的提问来源于stack exchange,提问作者Yash Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:30:48