使用 Apache Iceberg v3 功能

Apache Iceberg v3 增强了查询性能,并为在 Unity 目录中将 Iceberg 或 Delta Lake 与 UniForm 配合使用的托管表引入了新功能。

Iceberg v3 的主要功能包括:

要求

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

  • 一个启用了 Unity Catalog 的工作区。
  • Databricks Runtime 18.0 或更高版本,使用 Iceberg v3 读取和写入托管表。
  • Databricks Runtime 18.2 或更高版本将地理空间类型与 Iceberg v3 配合使用。

使用 Iceberg v3 创建新表

为启用 UniForm 的托管 Delta Lake 表和托管 Iceberg 表创建启用 Iceberg v3 的新表。

Delta Lake

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

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

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

Iceberg

若要使用 Iceberg v3 创建新的托管表,请使用以下 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(如下所示)。

    Important

    可以通过将表恢复到升级到 v3 之前的表版本,将表从 v3 降级到 v2 RESTORE。 请参阅 将表降级到以前的版本

Delta Lake

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

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

Iceberg

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

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

启用删除向量

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

注释

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

Delta Lake

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

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

Iceberg

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

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

使用 VARIANT 数据类型

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

注释

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

Delta Lake

若要使用带有 UniForm 和 VARIANT 列的 Delta Lake 创建新的托管表:

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

Iceberg

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

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

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

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

将表降级到以前的 Apache Iceberg 版本

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

set spark.databricks.delta.restore.protocolDowngradeAllowed = true;
RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;
set spark.databricks.delta.restore.protocolDowngradeAllowed = false;

局限性

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

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