直接查询开放表格式表
ClickHouse 提供表函数,用于直接在对象存储中查询以开放表格式存储的数据。这样无需连接到外部目录——它会就地查询数据,类似于 AWS Athena 从 S3 读取数据的方式。
你可以在函数调用中直接传入存储路径和凭证,其余由 ClickHouse 处理。可以使用全部 ClickHouse SQL 语法和函数,查询还能受益于 ClickHouse 的并行执行以及高效的原生 Parquet 读取器。
本指南中的步骤可以使用现有的 ClickHouse server 安装来执行。对于临时查询,你也可以使用 clickhouse-local,在不运行 server 的情况下完成相同的工作流。经过少量调整后,该流程也可以使用 ClickHouse 的进程内发行版 chDB 来执行。
下面的示例使用存储在 S3 上、以各个 lakehouse 格式保存的 hits 数据集。对于每种 lakehouse 格式,在每个对象存储提供商上都提供了专用函数。
- Apache Iceberg
- Delta Lake
- Apache Hudi
- Apache Paimon
iceberg 表函数(icebergS3 的别名)可直接从对象存储中读取 Iceberg 表。针对每种存储后端均有对应的变体:icebergS3、icebergAzure、icebergHDFS 和 icebergLocal。
示例语法:
这些函数的 S3 变体可用于 Google Cloud Storage (GCS)。
示例:
集群模式
icebergS3Cluster 函数可将读取操作分布到 ClickHouse 集群中的多个节点上。发起节点与所有节点建立连接,并动态分发数据文件。每个工作节点请求并处理任务,直至所有文件读取完毕。icebergCluster 是 icebergS3Cluster 的别名。此外,还提供适用于 Azure(icebergAzureCluster)和 HDFS(icebergHDFSCluster)的变体版本。
示例语法:
示例(ClickHouse Cloud):
表引擎
除了在每次查询中使用表函数外,您也可以使用 Iceberg 表引擎 创建持久化表。数据仍存储在对象存储中,按需读取——不会有任何数据被复制到 ClickHouse 中。其优势在于,表定义存储在 ClickHouse 中,可跨用户和会话共享,无需每个用户单独指定存储路径和凭据。每种存储后端均有对应的引擎变体:IcebergS3(或 Iceberg 别名)、IcebergAzure、IcebergHDFS 和 IcebergLocal。
表引擎和表函数均支持数据缓存,其缓存机制与 S3、AzureBlobStorage 和 HDFS 存储引擎相同。此外,元数据缓存会将清单文件信息存储在内存中,从而减少对 Iceberg 元数据的重复读取。该缓存默认通过 use_iceberg_metadata_files_cache 设置启用。
示例语法:
表引擎 Iceberg 是 IcebergS3 的别名。
表引擎的 S3 变体可用于 Google Cloud Storage (GCS)。
示例:
有关支持的功能(包括分区裁剪、Schema 演进、时间旅行、缓存等),请参阅支持矩阵。如需完整参考,请参阅 iceberg 表函数和 Iceberg 表引擎文档。
deltaLake 表函数(deltaLakeS3 的别名)用于从对象存储中读取 Delta Lake 表。其他后端也有对应的变体:deltaLakeAzure 和 deltaLakeLocal。
示例语法:
这些函数的 S3 变体可用于 Google Cloud Storage (GCS)。
示例:
集群变体
deltaLakeCluster 函数将读取操作分发至 ClickHouse 集群中的多个节点。发起节点动态地将数据文件调度至工作节点以进行并行处理。deltaLakeS3Cluster 是 deltaLakeCluster 的别名。此外,还提供 Azure 变体(deltaLakeAzureCluster)。
示例语法:
这些函数的 S3 变体可用于 Google Cloud Storage (GCS)。
示例(ClickHouse Cloud):
表引擎
作为在每次查询中使用表函数的替代方案,如果使用 S3 兼容存储,您可以使用 DeltaLake 表引擎 创建持久化表。数据仍存储在对象存储中,按需读取——不会有任何数据被复制到 ClickHouse 中。其优势在于,表定义存储在 ClickHouse 中,可在用户和会话之间共享,无需每个用户单独指定存储路径和凭据。
表引擎和表函数均支持数据缓存,使用与 S3、AzureBlobStorage 和 HDFS 存储引擎相同的缓存机制。
示例语法:
此表引擎可用于 Google Cloud Storage (GCS)。
示例:
有关支持的功能(包括存储后端、缓存等),请参阅支持矩阵。如需完整参考,请参阅 deltaLake 表函数和 DeltaLake 表引擎文档。
hudi 表函数会从 S3 读取 Hudi 表。
语法:
集群变体
hudiCluster FUNCTION 会将读取请求分发到 ClickHouse 集群中的多个节点。发起节点会将数据文件动态调度到工作节点,以实现并行处理。
表引擎
作为在每个查询中使用表函数的替代方案,可以使用 Hudi 表引擎 创建一张持久表。数据依然保存在对象存储中,并按需读取——不会有数据被复制到 ClickHouse 中。其优点在于表定义存储在 ClickHouse 中,可以在不同用户和会话之间共享,而无需每个用户都指定存储路径和凭证。
语法:
paimon 表函数(paimonS3 的别名)用于从对象存储中读取 Paimon 表。针对每种存储后端都有对应的变体:paimonS3、paimonAzure、paimonHDFS 和 paimonLocal。
语法:
集群变体
paimonS3Cluster 函数会在 ClickHouse 集群中的多个节点之间分布式地执行读取操作。发起请求的节点会将数据文件动态分派给工作节点,以便进行并行处理。paimonCluster 是 paimonS3Cluster 的别名。也提供适用于 Azure(paimonAzureCluster)和 HDFS(paimonHDFSCluster)的变体。
表引擎
Paimon 目前在 ClickHouse 中没有专用的表引擎。请使用上面的表函数来查询 Paimon 表。
有关受支持的特性(包括存储后端等),请参阅支持矩阵。完整参考请参见 paimon 表函数 文档。