共用方式為

使用 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,但有以下例外:

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