使用 Apache Iceberg v3 功能

重要

此功能在 Beta 版中。

本页介绍如何将 Apache Iceberg v3 功能与 Unity 目录配合使用。 Iceberg v3 增强了查询性能,并为具有 UniForm 的托管 Delta Lake 表、托管 Iceberg 表和外部 Iceberg 表引入了新功能。

Iceberg v3 的主要功能包括:

  • 删除向量:在不重写整个数据文件的情况下启用高效的行级删除。
  • VARIANT 数据类型:支持存储和处理半结构化数据。
  • 行世系:跟踪对表数据的增量更改。

所有 Iceberg v3 表都需要行级谱系。 目前没有用于启用或禁用“row lineage”的命令。

要求

若要使用 Iceberg v3 功能,必须满足以下要求:

  • 启用了 Unity Catalog 的工作区
  • Databricks Runtime 17.3 或更高版本,使用 Iceberg v3 读取和写入托管表

使用 Iceberg v3 创建新表

为托管 Delta 表与 UniForm 以及托管 Iceberg 表创建启用了 Iceberg v3 的新表。

UniForm 托管的 Delta 表

若要创建新的启用了 UniForm 和 Iceberg v3 的托管 Delta 表,请使用以下 SQL 命令:

CREATE OR REPLACE TABLE main.schema.table (c1 INT) TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'iceberg',
  'delta.enableIcebergCompatV3' = 'true'
);

有关 UniForm 的详细信息,请参阅 使用 Iceberg 客户端读取 Delta 表

托管冰山表

若要使用 v3 格式创建新的托管 Iceberg 表,请使用以下 SQL 命令:

CREATE OR REPLACE TABLE main.schema.table (c1 INT)
USING iceberg
TBLPROPERTIES ('format-version' = 3);

有关托管的 Iceberg 表的详细信息,请参阅 什么是 Azure Databricks 中的 Apache Iceberg?

将现有表升级到 Iceberg v3

可以通过以下方式将现有表升级到 Iceberg v3:

  1. 启用表上的任何 v3 功能。

  2. 将数据表的 Iceberg 格式版本设置为 3(如下所示)。

    警告

    受管控的 Iceberg 表一旦升级到 v3版后,无法降级。 可以安全地降级具有 UniForm 的托管 Delta 表。

UniForm 托管的 Delta 表

若要使用 UniForm 将托管 Delta 表升级到 v3,请使用以下命令:

ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.enableIcebergCompatV2' = 'false'
);

托管冰山表

若要将托管 Iceberg 表升级到 v3,请使用以下命令:

ALTER TABLE catalog.schema.table SET TBLPROPERTIES (
  'format-version' = 3
);

启用删除向量

删除向量优化行级数据修改操作,并在所有新的 Iceberg v3 表上默认启用。 请参阅什么是删除向量?

注释

在现有的 Iceberg 表上启用删除矢量会将 Iceberg 格式版本升级到 3。

UniForm 托管的 Delta 表

若要创建启用了 UniForm、Iceberg v3 和删除向量的新托管 Delta 表,请设置下表属性:

CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
  'delta.enableDeletionVectors' = 'true',
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

托管冰山表

若要创建新的启用了删除矢量的托管 Iceberg 表,请设置 iceberg.enableDeletionVectors 表属性:

CREATE TABLE catalog.schema.table (c1 INT)
USING ICEBERG TBLPROPERTIES (
  'iceberg.enableDeletionVectors' = 'true'
);

使用 VARIANT 数据类型

VARIANT 数据类型允许存储和查询半结构化数据。

注释

在现有的 Iceberg 表中使用 VARIANT 可将 Iceberg 格式版本升级到 3。

UniForm 托管的 Delta 表

若要使用 UniForm 和 VARIANT 列创建新的托管 Delta 表,请按照以下步骤操作:

CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

托管冰山表

若要使用 VARIANT 列创建新的托管 Iceberg 表,

CREATE TABLE catalog.schema.icebergTable (col VARIANT) USING iceberg;

若要向现有表添加 VARIANT 列,请使用 ALTER TABLE 以下命令:

ALTER TABLE catalog.schema.table ADD COLUMN variant_col VARIANT;

将表还原到以前的版本

如果需要在将表升级到 Iceberg v3 之前将表还原到某个状态,可以使用该 RESTORE 命令。

RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;

局限性

Azure Databricks 支持 Iceberg 规范的版本 3,但有以下例外:

  • 不支持默认值(包括写入默认值和初始默认值)。
  • 不支持以下数据类型:
    • 地理空间类型
    • 未知类型
    • 纳秒精度时间戳。
  • 不支持多参数转换。