使用 Apache Iceberg v3 功能

Apache Iceberg v3 提升了查询性能,并为 Unity Catalog 中使用 Iceberg 的托管表以及支持 Iceberg 读取的 Delta Lake 托管表引入了新能力。

Iceberg v3 的主要功能包括:

要求

要使用带有 Iceberg v3 功能的托管表,如地理空间类型,您必须满足以下要求:

  • 一个启用了 Unity Catalog 的工作区。
  • Databricks Runtime 18 LTS 及更高版本。

使用 Iceberg v3 创建新表

为支持 Iceberg 读取的托管 Delta Lake 表和托管 Iceberg 表创建启用 Iceberg v3 的新表。

Delta Lake

要使用 Delta Lake 创建新的托管表,支持 Iceberg 读取并启用 Iceberg v3,请使用以下 SQL 命令:

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

有关 Iceberg 读取的更多信息,请参阅 使用 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 且支持 Iceberg 读取的受管表升级到 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创建一个新的管理表,启用Iceberg读取、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

要使用 Delta Lake 创建一个新的托管表,包含 Iceberg 读取和 VARIANT 列:

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

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