跳到主要内容
跳到主要内容

Iceberg 集成

用户可以通过表函数与 Iceberg 表格式集成。

iceberg 表函数

为 Amazon S3、Azure、HDFS 或本地存储中的 Apache Iceberg 表提供只读的类表接口。

语法

icebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
icebergS3(named_collection[, option=value [,..]])

icebergAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
icebergAzure(named_collection[, option=value [,..]])

icebergHDFS(path_to_table, [,format] [,compression_method])
icebergHDFS(named_collection[, option=value [,..]])

icebergLocal(path_to_table, [,format] [,compression_method])
icebergLocal(named_collection[, option=value [,..]])

参数

参数的描述与表函数 s3azureBlobStorageHDFSfile 中参数的描述相符。format 代表 Iceberg 表中数据文件的格式。

返回值 一个具有指定结构的表,用于读取指定 Iceberg 表中的数据。

示例

SELECT * FROM icebergS3('http://test.s3.amazonaws.com/clickhouse-bucket/test_table', 'test', 'test')
信息

ClickHouse 目前通过 icebergS3icebergAzureicebergHDFSicebergLocal 表函数以及 IcebergS3icebergAzureIcebergHDFSIcebergLocal 表引擎支持读取 Iceberg 格式的 v1 和 v2 版本。

定义命名集合

以下是配置用于存储 URL 和凭据的命名集合的示例

<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>
<format>auto</format>
<structure>auto</structure>
</iceberg_conf>
</named_collections>
</clickhouse>
SELECT * FROM icebergS3(iceberg_conf, filename = 'test_table')
DESCRIBE icebergS3(iceberg_conf, filename = 'test_table')

Schema 演变 目前,借助 CH,您可以读取 schema 随时间变化的 iceberg 表。我们目前支持读取已添加和删除列以及其顺序已更改的表。您还可以更改列,将必需值的列更改为允许 NULL 的列。此外,我们还支持简单类型的允许类型转换,即: 

  • int -> long
  • float -> double
  • decimal(P, S) -> decimal(P', S) 其中 P' > P。

目前,无法更改嵌套结构或数组和映射中元素的类型。

分区剪枝

ClickHouse 在 Iceberg 表的 SELECT 查询期间支持分区剪枝,这有助于通过跳过不相关的数据文件来优化查询性能。现在它仅适用于 identity 转换和基于时间的转换(小时、天、月、年)。要启用分区剪枝,请设置 use_iceberg_partition_pruning = 1

别名

表函数 iceberg 现在是 icebergS3 的别名。

参见