直接查询开放表格式
ClickHouse 提供了表函数,可直接查询以开放表格式存储在对象存储中的数据。无需连接外部目录,而是直接在数据所在位置进行查询,类似于 AWS Athena 从 S3 读取数据的方式。
您只需在函数调用中直接传入存储路径和凭证,其余工作由 ClickHouse 处理。所有 ClickHouse SQL 语法和函数均可用,并且查询还可受益于 ClickHouse 的并行执行能力以及高效的原生 Parquet 读取器。
本指南中的步骤可以在现有的 ClickHouse 服务器安装上执行。对于临时查询,您也可以改用 clickhouse-local,无需运行服务器即可完成相同的工作流。只需做少量调整,也可以使用 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 函数会将读取请求分发到 ClickHouse 集群中的多个节点上。发起节点会动态地将数据文件分派给工作节点进行并行处理。
表引擎
除了在每个查询中都使用表函数外,您还可以通过 Hudi 表引擎 创建持久表。数据仍保留在对象存储中,并在需要时读取——不会将任何数据复制到 ClickHouse 中。这样做的优势在于,表定义存储在 ClickHouse 中,可在不同用户和会话之间共享,无需每位用户都单独指定存储路径和凭据。
语法:
paimon 表函数 (paimonS3 的别名) 用于从对象存储中读取 Paimon 表。针对每种存储后端,都提供了相应的变体:paimonS3、paimonAzure、paimonHDFS 和 paimonLocal。
语法:
集群变体
paimonS3Cluster 函数会将读取请求分发到 ClickHouse 集群中的多个节点。发起节点会将数据文件动态分派给工作节点,以进行并行处理。paimonCluster 是 paimonS3Cluster 的别名。此外,也有适用于 Azure (paimonAzureCluster) 和 HDFS (paimonHDFSCluster) 的变体。
表引擎
Paimon 目前在 ClickHouse 中尚无专用的表引擎。请使用上述表函数查询 Paimon 表。
有关受支持的功能 (包括存储后端等) ,请参阅支持矩阵。如需完整参考,请参阅paimon 表函数文档。