mcpField
D
databricks-iceberg

databricks-iceberg

github.com/databricks数据与数据库373285 次安装今天更新
代码仓库

关于 databricks-iceberg

此 Databricks 技能介绍 Apache Iceberg 表的使用方式,包括托管 Iceberg 表、UniForm 和 Iceberg REST Catalog。它帮助数据工程师配置 Unity Catalog 表、连接外部引擎,并遵循 Databricks 特定限制。

主要功能

  1. 01托管 Iceberg 表指南
  2. 02通过 UniForm 实现 Delta 互操作
  3. 03Iceberg REST Catalog 配置
  4. 04连接外部引擎
  5. 05格式与模式选择

适用场景

  1. 01创建原生 Iceberg 表
  2. 02让 Delta 数据可作为 Iceberg 读取
  3. 03向外部引擎开放 Unity Catalog 表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/databricks/databricks-agent-skills --skill databricks-iceberg

安装后在 Claude Code 中输入/databricks-iceberg确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
databricks.svg
references/
1-managed-iceberg-tables.md
2-uniform-and-compatibility.md
3-iceberg-rest-catalog.md
4-snowflake-interop.md
5-external-engine-interop.md

详细介绍

Databricks 上的 Apache Iceberg

Databricks 提供多种使用 Apache Iceberg 的方式:原生托管 Iceberg 表、用于 Delta 与 Iceberg 互操作的 UniForm,以及供外部引擎访问的 Iceberg REST Catalog(IRC)。


关键规则(始终遵循)

  • 必须使用 Unity Catalog — 所有 Iceberg 功能都要求工作区启用 UC
  • 不得在 Databricks Runtime(DBR)中安装 Iceberg 库(DBR 内置了 Iceberg 支持;添加库会导致版本冲突)
  • 不得设置 write.metadata.path 或 write.metadata.previous-versions-max — Databricks 会自动管理元数据位置;覆盖这些设置会导致数据损坏
  • 必须在编写代码前确定适合用例的 Iceberg 模式 — 请参阅下文的适用场景部分
  • 必须了解 PARTITIONED BY 和 CLUSTER BY 为外部引擎生成相同的 Iceberg 元数据 — UC 会维护一个 Iceberg 分区规范,其中的分区字段对应于聚类键,因此通过 IRC 读取的外部引擎会看到一张分区化的 Iceberg 表(不是 Hive 风格的分区表,而是使用规范 Iceberg 分区字段的表),并且可以按这些字段进行分区裁剪;UC 内部会将这些字段用作 liquid clustering 键;两种语法的唯一区别是:(1) PARTITIONED BY 是标准 Iceberg DDL(任何引擎都可以创建该表),而 CLUSTER BY 是仅限 DBR 的 DDL;(2) PARTITIONED BY 会自动处理 DV/行跟踪属性,而在 v2 上使用 CLUSTER BY 时需要手动设置 TBLPROPERTIES
  • 不得在托管 Iceberg 表上将基于表达式的分区转换(bucket()、years()、months()、days()、hours())与 PARTITIONED BY 搭配使用 — 仅支持直接引用列;表达式转换会导致错误
  • 在 Iceberg v2 表上使用 CLUSTER BY 时,必须禁用删除向量和行跟踪 — 在 TBLPROPERTIES 中设置 'delta.enableDeletionVectors' = false 和 'delta.enableRowTracking' = false(Iceberg v3 会自动处理;PARTITIONED BY 在 v2 和 v3 上都会自动处理)

核心概念

概念概述
托管 Iceberg 表使用 USING ICEBERG 创建的原生 Iceberg 表 — 可在 Databricks 和外部 Iceberg 引擎中完整读写
外部 Iceberg 读取(Uniform)自动生成 Iceberg 元数据的 Delta 表 — 外部按 Iceberg 读取,内部按 Delta 写入
兼容模式适用于 SDP 管道中流式表和物化视图的 UniForm 变体
Iceberg REST Catalog(IRC)Unity Catalog 内置的 REST 端点,实现 Iceberg REST Catalog 规范 — 使外部引擎(Spark、PyIceberg、Snowflake)能够访问由 UC 管理的 Iceberg 数据
Iceberg v3新一代格式(DBR 18 LTS+)— 删除向量、VARIANT 类型、行谱系

快速入门

创建托管 Iceberg 表
-- No clustering
CREATE TABLE my_catalog.my_schema.events
USING ICEBERG
AS SELECT * FROM raw_events;

-- PARTITIONED BY (recommended for cross-platform): standard Iceberg syntax, works on EMR/OSS Spark/Trino/Flink
-- auto-disables DVs and row tracking — no TBLPROPERTIES needed on v2 or v3
CREATE TABLE my_catalog.my_schema.events
USING ICEBERG
PARTITIONED BY (event_date)
AS SELECT * FROM raw_events;

-- CLUSTER BY on Iceberg v2 (DBR-only syntax): must manually disable DVs and row tracking
CREATE TABLE my_catalog.my_schema.events
USING ICEBERG
TBLPROPERTIES (
  'delta.enableDeletionVectors' = false,
  'delta.enableRowTracking' = false
)
CLUSTER BY (event_date)
AS SELECT * FROM raw_events;

-- CLUSTER BY on Iceberg v3 (DBR-only syntax): no TBLPROPERTIES needed
CREATE TABLE my_catalog.my_schema.events
USING ICEBERG
TBLPROPERTIES ('format-version' = '3')
CLUSTER BY (event_date)
AS SELECT * FROM raw_events;
在现有 Delta 表上启用 UniForm
ALTER TABLE my_catalog.my_schema.customers
SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

读写能力矩阵

表类型Databricks 读取Databricks 写入外部 IRC 读取外部 IRC 写入
托管 Iceberg(USING ICEBERG)是是是是
Delta + UniForm是(按 Delta 读取)是(按 Delta 写入)是(按 Iceberg 读取)否
Delta + 兼容模式是(按 Delta 读取)是是(按 Iceberg 读取)否

参考文件

文件摘要关键词
references/1-managed-iceberg-tables.md创建和管理原生 Iceberg 表 — DDL、DML、Liquid Clustering、Predictive Optimization、Iceberg v3、限制CREATE TABLE USING ICEBERG、CTAS、MERGE、时间旅行、删除向量、VARIANT
references/2-uniform-and-compatibility.md将 Delta 表设为可读的 Iceberg 表 — 常规表使用 UniForm,流式表和 MV 使用 Compatibility ModeUniForm、universalFormat、Compatibility Mode、流式表、物化视图、SDP
references/3-iceberg-rest-catalog.md通过 IRC 端点向外部引擎开放 Databricks 表 — 身份验证、凭据发放、IP 访问列表IRC、REST Catalog、凭据发放、EXTERNAL USE SCHEMA、PAT、OAuth
references/4-snowflake-interop.mdSnowflake 与 Databricks 双向集成 — 目录集成、外部目录、发放的凭据Snowflake、目录集成、外部卷、发放的凭据、REFRESH_INTERVAL_SECONDS
references/5-external-engine-interop.md通过 IRC 连接 PyIceberg、OSS Spark、AWS EMR、Apache Flink 和 Kafka ConnectPyIceberg、OSS Spark、EMR、Flink、Kafka Connect、pyiceberg.yaml

适用场景


常见问题

问题解决方案
不支持更改数据馈送(CDF)托管的 Iceberg 表不支持 CDF。如果需要 CDF,请使用 Delta + UniForm。
UniForm 异步延迟Iceberg 元数据是异步生成的。写入后,外部引擎可能需要短暂等待才能看到最新数据。使用 DESCRIBE EXTENDED table_name 检查状态。
压缩编解码器变更托管的 Iceberg 表默认使用 zstd 压缩(而非 snappy)。不支持 zstd 的旧版 Iceberg 读取器会运行失败。请验证读取器兼容性,或将 write.parquet.compression-codec 设为 snappy。
Snowflake 的 1000 次提交限制Snowflake 的 Iceberg 目录集成只能查看最近的 1000 次 Iceberg 提交。高频写入器必须压缩元数据,否则 Snowflake 将无法查看较早的数据。
UniForm 与删除向量UniForm 要求禁用删除向量(delta.enableDeletionVectors = false)。如果表已启用删除向量,请先将其禁用,再启用 UniForm。
Iceberg 不支持浅克隆Iceberg 表不支持 SHALLOW CLONE。请改用 DEEP CLONE 或 CREATE TABLE ... AS SELECT。
与外部引擎的版本不匹配确保外部引擎使用的 Iceberg 库版本与表的格式版本兼容。Iceberg v3 表需要 Iceberg 库 1.9.0+。

相关技能


资源

评论

支持 Markdown