Iceberg 表引擎
我们建议使用 Iceberg 表函数 在 ClickHouse 中处理 Iceberg 数据。Iceberg 表函数目前提供足够的功能,为 Iceberg 表提供部分只读接口。
Iceberg 表引擎可用,但可能存在限制。ClickHouse 最初并非设计为支持模式在外部更改的表,这可能会影响 Iceberg 表引擎的功能。因此,某些适用于常规表的功能可能不可用或无法正常运行,尤其是在使用旧分析器时。
为了获得最佳兼容性,我们建议在使用 Iceberg 表函数的同时,我们将继续改进对 Iceberg 表引擎的支持。
此引擎提供与 Amazon S3、Azure、HDFS 和本地存储表中现有 Apache Iceberg 表的只读集成。
创建表
请注意,Iceberg 表必须已存在于存储中,此命令不接受 DDL 参数来创建新表。
CREATE TABLE iceberg_table_s3
ENGINE = IcebergS3(url, [, NOSIGN | access_key_id, secret_access_key, [session_token]], format, [,compression])
CREATE TABLE iceberg_table_azure
ENGINE = IcebergAzure(connection_string|storage_account_url, container_name, blobpath, [account_name, account_key, format, compression])
CREATE TABLE iceberg_table_hdfs
ENGINE = IcebergHDFS(path_to_table, [,format] [,compression_method])
CREATE TABLE iceberg_table_local
ENGINE = IcebergLocal(path_to_table, [,format] [,compression_method])
引擎参数
参数的描述与引擎 S3
、AzureBlobStorage
、HDFS
和 File
中参数的描述一致。format
代表 Iceberg 表中数据文件的格式。
引擎参数可以使用 命名集合 指定
示例
CREATE TABLE iceberg_table ENGINE=IcebergS3('http://test.s3.amazonaws.com/clickhouse-bucket/test_table', 'test', 'test')
使用命名集合
<clickhouse>
<named_collections>
<iceberg_conf>
<url>http://test.s3.amazonaws.com/clickhouse-bucket/</url>
<access_key_id>test</access_key_id>
<secret_access_key>test</secret_access_key>
</iceberg_conf>
</named_collections>
</clickhouse>
CREATE TABLE iceberg_table ENGINE=IcebergS3(iceberg_conf, filename = 'test_table')
别名
表引擎 Iceberg
现在是 IcebergS3
的别名。
模式演变 目前,借助 ClickHouse,您可以读取模式随时间变化的 Iceberg 表。我们目前支持读取已添加和删除列以及列顺序已更改的表。您还可以更改列,将必需值的列更改为允许 NULL 值的列。此外,我们支持简单类型的允许类型转换,即:
- int -> long
- float -> double
- decimal(P, S) -> decimal(P', S),其中 P' > P。
目前,无法更改嵌套结构或数组和映射中元素的类型。
要读取在动态模式推断创建后模式已更改的表,请在创建表时设置 allow_dynamic_metadata_for_data_lakes = true。
分区裁剪
ClickHouse 在 Iceberg 表的 SELECT 查询期间支持分区裁剪,这有助于通过跳过不相关的数据文件来优化查询性能。现在,它仅适用于身份转换和基于时间的转换(小时、天、月、年)。要启用分区裁剪,请设置 use_iceberg_partition_pruning = 1
。
数据缓存
Iceberg
表引擎和表函数支持与 S3
、AzureBlobStorage
、HDFS
存储相同的数据缓存。请参阅此处。