重要
此功能在 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:
启用表上的任何 v3 功能。
将数据表的 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,但有以下例外:
- 不支持默认值(包括写入默认值和初始默认值)。
- 不支持以下数据类型:
- 地理空间类型
- 未知类型
- 纳秒精度时间戳。
- 不支持多参数转换。