简而言之本指南通过实践演示如何查询数据湖表、使用 MergeTree 对其进行加速,以及将结果回写到 Iceberg。所有步骤均使用公开数据集,并同时适用于 Cloud 和 OSS。
1
直接查询 Iceberg 数据
最快的开始方式是使用icebergS3() table function——将其指向 S3 中的 Iceberg 表,即可立即发起查询,无需任何设置。查看 schema:deltaLake()、hudi() 和 paimon()。了解更多: 直接查询开放表格式 涵盖这四种格式、用于分布式读取的集群变体,以及存储后端选项 (S3、Azure、HDFS、本地) 。2
3
连接到目录
大多数组织都会通过数据目录管理 Iceberg 表,以集中管理表元数据并进行数据发现。ClickHouse 支持使用DataLakeCatalog 数据库引擎连接到你的目录,并将目录中的所有表公开为一个 ClickHouse 数据库。这种方式扩展性更好,因此随着新的 Iceberg 表不断创建,无需额外操作,即可始终在 ClickHouse 中访问它们。下面是一个连接到 AWS Glue 的示例:由于 ClickHouse 原生不支持多个命名空间,因此
<database>.<table> 必须用反引号括起来。4
执行查询
无论你在上文使用的是哪种方式——表函数、表引擎还是 catalog——同一套 ClickHouse SQL 都适用于这三者:FROM 子句会发生变化。无论使用哪个数据源,所有 ClickHouse SQL 函数、JOIN 和聚合的用法都相同。5
将部分数据加载到 ClickHouse
直接查询 Iceberg 很方便,但其性能受限于网络吞吐量和文件布局。对于分析型工作负载,建议将数据加载到原生 MergeTree 表中。首先,对 Iceberg 表运行带过滤条件的查询,建立一个基线:counterid 过滤条件——预计需要几秒钟。现在创建一个 MergeTree 表并加载数据:counterid 是 ORDER BY 键中的第一列,ClickHouse 的稀疏主索引可以直接跳到相关粒度——只读取 counterid = 38 对应的行,而不必扫描全部 1 亿行。因此,查询速度会大幅提升。加速分析 指南在此基础上进一步介绍了 LowCardinality 类型、全文索引和优化后的排序键,并展示了在一个 2.83 亿行数据集上实现 约 40 倍性能提升 的效果。了解更多:使用 MergeTree 加速分析 涵盖了 schema 优化、全文索引,以及完整的性能优化前后对比。6