本页提供 ClickHouse 数据湖集成的完整支持矩阵,涵盖各类开放表格式支持的功能、ClickHouse 可连接的目录,以及各类目录所支持的能力。
ClickHouse Cloud 和自管理 ClickHouse 的支持情况将分别列出。Experimental 功能在 ClickHouse Cloud 中默认处于禁用状态,且必须通过 Support 申请。是否可用取决于具体功能,因此请联系 Support 确认能否启用特定的 Experimental 功能。特定部署的配置和限制将在 Notes 列中说明。
开放表格式支持
ClickHouse 可与四种开放表格式集成:Apache Iceberg、Delta Lake、Apache Hudi 和 Apache Paimon。请选择下方的一种格式以查看其支持矩阵。
图例: ✅ 支持 | ⚠️ 部分支持、Experimental 或已弃用 | ❌ 不支持
| 功能 | ClickHouse Cloud | 自管理 | 说明 |
|---|---|---|---|
| 存储后端 | |||
| AWS S3 | ✅ | ✅ | 通过 icebergS3() 或其别名 iceberg() |
| GCS | ✅ | ✅ | 通过 icebergS3() 或其别名 iceberg() |
| Azure Blob 存储 | ✅ | ✅ | 通过 icebergAzure() |
| HDFS | ❌ | ⚠️ 已弃用 | 通过 icebergHDFS() |
| 本地文件系统 | ❌ | ✅ | 通过 icebergLocal() |
| 访问方式 | |||
| 表函数 | ✅ | ✅ | icebergS3(),各后端均有对应变体 |
| 表引擎 | ✅ | ✅ | IcebergS3,各后端均有对应变体 |
| 集群分布式读取 | ✅ | ✅ | icebergS3Cluster、icebergAzureCluster、icebergHDFSCluster |
| 命名集合 | ⚠️ | ✅ | 部分 ClickHouse Cloud 服务可启用通过 DDL 创建的命名集合。请联系 Support 确认可用性。 |
| 读取功能 | |||
| 读取支持 | ✅ | ✅ | 完整支持 SELECT 及所有 ClickHouse SQL 函数 |
| 分区裁剪 | ✅ | ✅ | 请参阅分区裁剪。 |
| 隐藏分区 | ✅ | ✅ | 支持基于 Iceberg transform 的分区 |
| 分区演进 | ✅ | ✅ | 支持读取分区规范随时间变化的表 |
| schema 演进 | ✅ | ✅ | 支持添加、删除和重新排列列。请参阅schema 演进。 |
| 类型提升 / 扩展 | ✅ | ✅ | int → long、float → double、decimal(P,S) → decimal(P',S),其中 P' > P。请参阅schema 演进。 |
| 时间旅行 / 快照 | ✅ | ✅ | 通过 iceberg_timestamp_ms 或 iceberg_snapshot_id 设置。请参阅时间旅行。 |
| 位置删除 | ✅ | ✅ | 请参阅处理已删除行。 |
| 相等删除 | ✅ | ✅ | 表函数和表引擎自 v25.8+ 起支持。请参阅处理已删除行。 |
| 读取时合并 | ⚠️ | ⚠️ | 实验性功能。支持删除操作。 |
| 格式版本 | ⚠️ 部分支持 | ⚠️ 部分支持 | 支持 v1 和 v2。部分支持 v3;不支持删除向量和清单压缩。 |
| 列统计信息 | ✅ | ✅ | |
| 布隆过滤器 / Puffin 文件 | ❌ | ❌ | 不支持 Puffin 文件中的布隆过滤器索引 |
| 虚拟列 | ✅ | ✅ | _path、_file、_size、_time、_etag。请参阅虚拟列。 |
| 写入功能 | |||
| 表创建 | ⚠️ | ⚠️ | 实验性功能。需要 allow_insert_into_iceberg = 1。自 v25.7+ 起支持。请参阅创建表。 |
INSERT |
✅ Beta | ✅ Beta | 自 26.2 版本起处于 Beta 阶段。需要 allow_insert_into_iceberg = 1。请参阅插入数据。 |
DELETE |
⚠️ | ⚠️ | Experimental。需要 allow_insert_into_iceberg = 1。通过 ALTER TABLE ... DELETE WHERE 执行。请参阅删除数据。 |
ALTER TABLE (schema 变更) |
⚠️ | ⚠️ | Experimental。需要 allow_insert_into_iceberg = 1。支持添加、删除、修改和重命名列。请参阅Schema 演进。 |
| 合并整理 | ⚠️ | ⚠️ | Experimental。需要 allow_experimental_iceberg_compaction = 1。请参阅合并整理。 |
UPDATE / MERGE |
❌ | ❌ | 不支持。请参阅合并整理。 |
| 写时复制 | ❌ | ❌ | 不支持 |
| 快照过期 | ⚠️ | ⚠️ | Experimental。需要 Iceberg v2、allow_insert_into_iceberg = 1 和 allow_experimental_expire_snapshots = 1。请参阅快照过期。 |
| 移除孤立文件 | ⚠️ | ⚠️ | Experimental。需要 Iceberg v2 或更高版本、allow_insert_into_iceberg = 1 和 allow_iceberg_remove_orphan_files = 1。请参阅移除孤立文件。 |
| 写入分区 | ✅ Beta | ✅ Beta | 支持写入 Iceberg。 |
| 修改分区 | ❌ | ❌ | 不支持通过 ClickHouse 更改分区方案。ClickHouse 可以写入采用演进后分区方案的 Iceberg 表。 |
| 元数据 | |||
| 分支和标签 | ❌ | ❌ | 不支持 Iceberg 分支/标签引用。 |
| 元数据文件解析 | ✅ | ✅ | 支持通过目录、目录列表、version-hint 和特定路径进行解析。请参阅元数据文件解析。 |
| 数据缓存 | ✅ | ✅ | 与 S3/Azure/HDFS 存储引擎使用相同的机制。请参阅数据缓存。 |
| 元数据缓存 | ✅ | ✅ | 默认通过 use_iceberg_metadata_files_cache 启用。请参阅元数据缓存。 |
从 25.6 版本起,ClickHouse 使用 Delta Lake Rust 内核读取 Delta Lake 表,支持更多功能;但访问 Azure Blob 存储中的数据时存在已知问题。因此,从 Azure Blob 存储读取数据时会禁用该内核。下文标明了哪些功能需要此内核。
| 功能 | ClickHouse Cloud | 自管理 | 说明 |
|---|---|---|---|
| 存储后端 | |||
| AWS S3 | ✅ | ✅ | 通过 deltaLake() 或 deltaLakeS3() |
| GCS | ✅ | ✅ | 通过 deltaLake() 或 deltaLakeS3() |
| Azure Blob 存储 | ✅ | ✅ | 通过 deltaLakeAzure() |
| HDFS | ❌ | ❌ | 不支持 |
| 本地文件系统 | ❌ | ✅ | 通过 deltaLakeLocal() |
| 访问方法 | |||
| 表函数 | ✅ | ✅ | deltaLake(),不同后端对应不同变体 |
| 表引擎 | ✅ | ✅ | DeltaLake |
| 集群分布式读取 | ✅ | ✅ | deltaLakeCluster、deltaLakeAzureCluster |
| 命名集合 | ⚠️ | ✅ | 可在部分 ClickHouse Cloud 服务上启用通过 DDL 创建的命名集合。请联系支持团队确认是否可用。 |
| 读取功能 | |||
| 读取支持 | ✅ | ✅ | 完整支持 SELECT 及所有 ClickHouse SQL 函数 |
| 分区裁剪 | ✅ Beta | ✅ Beta | 需要 Delta Kernel。 |
| 模式演进 | ✅ Beta | ✅ Beta | 需要 Delta Kernel。 |
| 时间旅行 | ✅ Beta | ✅ Beta | 需要 Delta Kernel。 |
| 删除向量 | ✅ | ✅ | |
| 列映射 | ✅ | ✅ | |
| 变更数据馈送 | ✅ Beta | ✅ Beta | 需要 Delta Kernel。 |
| 虚拟列 | ✅ | ✅ | _path、_file、_size、_time、_etag。请参阅虚拟列。 |
| 写入功能 | |||
INSERT |
✅ Beta | ✅ Beta | 需要 Delta Kernel。支持写入 S3 和 GCS;不支持写入 Azure。从 v26.7 起,需要设置 allow_delta_lake_writes = 1;在更早版本中,请使用 allow_experimental_delta_lake_writes = 1。请参阅Delta Lake 写入。 |
DELETE / UPDATE / MERGE |
❌ | ❌ | 不支持 |
| 创建空表 | ❌ | ❌ | CREATE TABLE 操作假定 Delta Lake 表已存在于对象存储中。 |
| 缓存 | |||
| 数据缓存 | ✅ | ✅ | 与 S3/Azure/HDFS 存储引擎采用相同的机制。请参阅数据缓存。 |
| 功能 | ClickHouse Cloud | 自管理 | 说明 |
|---|---|---|---|
| 存储后端 | |||
| AWS S3 | ✅ | ✅ | 通过 hudi() |
| GCS | ✅ | ✅ | 通过 hudi() |
| Azure Blob 存储 | ❌ | ❌ | 不支持 |
| HDFS | ❌ | ❌ | 不支持 |
| 本地文件系统 | ❌ | ❌ | 不支持 |
| 访问方式 | |||
| 表函数 | ✅ | ✅ | hudi() |
| 表引擎 | ✅ | ✅ | Hudi |
| 集群分布式读取 | ✅ | ✅ | hudiCluster (仅支持 S3) |
| 命名集合 | ⚠️ | ✅ | 可在部分 ClickHouse Cloud 服务中启用通过 DDL 创建的命名集合。请联系支持团队确认是否可用。 |
| 读取功能 | |||
| 读取支持 | ✅ | ✅ | 完整支持 SELECT 以及所有 ClickHouse SQL 函数 |
| schema 演进 | ❌ | ❌ | 不支持 |
| 时间旅行 | ❌ | ❌ | 不支持 |
| 虚拟列 | ✅ | ✅ | _path、_file、_size、_time、_etag。请参阅虚拟列。 |
| 写入功能 | |||
INSERT / DELETE / UPDATE |
❌ | ❌ | 只读集成 |
| 缓存 | |||
| 数据缓存 | ❌ | ❌ | 不支持 |
| 功能 | ClickHouse Cloud | 自管理 | 说明 |
|---|---|---|---|
| 存储后端 | |||
| S3 | ⚠️ | ⚠️ | Experimental。通过 paimon() 或 paimonS3() |
| GCS | ⚠️ | ⚠️ | Experimental。通过 paimon() 或 paimonS3() |
| Azure Blob 存储 | ⚠️ | ⚠️ | Experimental。通过 paimonAzure() |
| HDFS | ❌ | ⚠️ | Experimental,且已弃用。通过 paimonHDFS() |
| 本地文件系统 | ❌ | ⚠️ | Experimental。通过 paimonLocal() |
| 访问方式 | |||
| 表函数 | ⚠️ | ⚠️ | Experimental。paimon(),每种后端均有对应变体 |
| 表引擎 | ⚠️ | ⚠️ | Experimental。Paimon,每种后端均有对应变体。需要 allow_experimental_paimon_storage_engine = 1。 |
| 集群分布式读取 | ⚠️ | ⚠️ | Experimental。paimonS3Cluster、paimonAzureCluster、paimonHDFSCluster |
| 命名集合 | ⚠️ | ⚠️ | Experimental。可在部分 ClickHouse Cloud 服务上启用通过 DDL 创建的命名集合。请联系 Support 确认可用性。 |
| 读取功能 | |||
| 读取支持 | ⚠️ | ⚠️ | Experimental。完整支持 SELECT 以及所有 ClickHouse SQL 函数 |
| schema 演进 | ❌ | ❌ | 不支持 |
| 时间旅行 | ❌ | ❌ | 不支持 |
| 虚拟列 | ⚠️ | ⚠️ | Experimental。_path、_file、_size、_time、_etag。请参阅虚拟列。 |
| 写入功能 | |||
INSERT / DELETE / UPDATE |
❌ | ❌ | 只读集成 |
| 缓存 | |||
| 数据缓存 | ❌ | ❌ | 不支持 |
目录支持
ClickHouse 可以使用 DataLakeCatalog 数据库引擎连接外部数据目录,并将该目录映射为一个 ClickHouse 数据库。注册在目录中的表会自动显示出来,并可使用标准 SQL 查询。
当前支持以下目录。有关完整的设置说明,请参阅各目录的参考指南。
| 目录 | 格式 | 读取 | 创建表 | INSERT | 参考指南 |
|---|---|---|---|---|---|
| AWS Glue Catalog | Iceberg | ✅ Beta | ❌ | ❌ | Glue 目录 指南 |
| BigLake Metastore | Iceberg | ✅ Beta | ❌ | ❌ | BigLake Metastore 指南 |
| Databricks Unity Catalog | Delta, Iceberg | ✅ Beta | ✅ Beta | ✅ Beta | Unity Catalog 指南 |
| Iceberg REST | Iceberg | ✅ Beta | ❌ | ❌ | REST 目录 指南 |
| Lakekeeper | Iceberg | ✅ Beta | ❌ | ❌ | Lakekeeper 目录 指南 |
| Project Nessie | Iceberg | ✅ Experimental | ❌ | ❌ | Nessie 目录 指南 |
| Microsoft OneLake | Iceberg | ✅ Beta | ✅ Beta | ✅ Beta | OneLake 目录 指南 |
| SeaweedFS | Iceberg | ✅ Beta | ✅ Beta | ✅ Beta | SeaweedFS 目录 指南 |
目前所有目录集成都需要启用 Experimental 或 Beta 设置。除 Microsoft OneLake、Databricks Unity Catalog 和 SeaweedFS 外,所有目录都仅提供 read-only 访问——可以查询表,但不能通过目录连接创建表或写入数据。若要将目录中的数据加载到 ClickHouse 以加快分析速度,请使用加速分析指南中所述的 INSERT INTO SELECT。若要将数据写回开放表格式,请按写入数据指南中的说明创建独立的 Iceberg 表。