这是 Databricks 官方 Agent Skills 仓库中的一项技能,主题是「Apache Iceberg on Databricks」,说明如何在 Databricks 上使用 Apache Iceberg。资料基于 Databricks 提供的三种主要方式:原生托管型 Iceberg 表、用于 Delta 到 Iceberg 互操作的 UniForm,以及供外部引擎访问的 Iceberg REST Catalog(IRC)。
用途 用于在 Databricks 环境中创建和管理 Iceberg 表、让既有 Delta 表可被外部引擎以 Iceberg 方式读取、以及将 Databricks 表暴露给外部引擎。技能资料按用途给出明确的文档导航建议,例如创建新 Iceberg 表、让 Delta 表可被读取为 Iceberg、让流式表或物化视图可被读取为 Iceberg、在 Managed Iceberg 与 UniForm 及兼容模式之间做选择、通过 REST API 暴露表、与 Snowflake 集成、连接 PyIceberg/OSS Spark/Flink/EMR/Kafka 等,分别指向对应的参考文件。
主要能力 资料列出了若干核心概念:托管型 Iceberg 表(使用 USING ICEBERG 原生创建,可在 Databricks 与外部 Iceberg 引擎中进行完整读写);外部 Iceberg 读取(即 Uniform,Delta 表自动生成 Iceberg 元数据,外部以 Iceberg 读取、内部以 Delta 写入);兼容模式(用于 SDP 管道中流式表与物化视图的 UniForm 变体);Iceberg REST Catalog(Unity Catalog 内置的实现 Iceberg REST Catalog 规范的 REST 端点,供外部引擎如 Spark、PyIceberg、Snowflake 访问 UC 管理的 Iceberg 数据);Iceberg v3(下一代格式,Beta,DBR 17.3+,支持删除向量、VARIANT 类型、行谱系)。资料还给出读写能力矩阵,区分 Databricks 读写与外部 IRC 读写,以及常见问题(如不支持的 CDF、UniForm 异步延迟、压缩编解码器、Snowflake 提交数限制、删除向量与 UniForm 的冲突、不支持 SHALLOW CLONE、外部引擎版本不匹配等)。
使用方式 资料给出的快速开始示例包括:用 CREATE TABLE ... USING ICEBERG 创建无聚簇的托管 Iceberg 表;使用 PARTITIONED BY(推荐用于跨平台,标准 Iceberg 语法,在 EMR/OSS Spark/Trino/Flink 上可用);以及在 Iceberg v2 上使用 CLUSTER BY(DBR 专有语法)时需手动将 delta.enableDeletionVectors 与 delta.enableRowTracking 设为 false,在 Iceberg v3 上则不需要 TBLPROPERTIES。对已有 Delta 表启用 UniForm 使用 ALTER TABLE ... SET TBLPROPERTIES,设置 delta.columnMapping.mode = 'name'、delta.enableIcebergCompatV2 = 'true'、delta.universalFormat.enabledFormats = 'iceberg'。资料还列出必须遵循的关键规则:必须使用 Unity Catalog;不得将 Iceberg 库安装到 Databricks Runtime;不得设置 write.metadata.path 或 write.metadata.previous-versions-max;须先确定适合的 Iceberg 模式再写代码;PARTITIONED BY 与 CLUSTER BY 对外部引擎产生相同 Iceberg 元数据;托管 Iceberg 表上不得在 PARTITIONED BY 中使用基于表达式的分区变换(bucket()、years()、months()、days()、hours()),只支持普通列引用。
适用场景 适用于需要在 Databricks 上创建和管理 Iceberg 表、需要让 Delta 表或流式表/物化视图被外部 Iceberg 引擎读取、需要将 Databricks 表开放给外部引擎访问、或需要与 Snowflake 及 PyIceberg/OSS Spark/EMR/Flink/Kafka Connect 等外部引擎互通的场景。
限制 资料明确指出:托管 Iceberg 表不支持 Change Data Feed(CDF);UniForm 元数据生成为异步,写入后外部引擎可能短暂看不到最新数据;托管 Iceberg 表默认使用 zstd 压缩,较旧的读取器可能失败;Snowflake 的 Iceberg 目录集成只能看到最近 1000 次 Iceberg 提交;启用 UniForm 需先禁用删除向量;Iceberg 表不支持 SHALLOW CLONE;Iceberg v3 表需要 Iceberg 库 1.9.0+。Iceberg v3 处于 Beta。资料未提供收费、价格等信息。