对 Delta 表使用行跟踪

Delta Lake 行跟踪让 Azure Databricks 能够跟踪 Delta 表中的行级世系。 具体化视图的某些增量更新需要此功能。

重要

Delta Lake 行跟踪在 Databricks Runtime 14.1 及更高版本中可用。

行跟踪是一项表功能,它使用比某些 Delta Lake 客户端更高的表编写器协议。 表协议版本不能降级,并且如果 Delta Lake 客户端不支持所有已启用的 Delta 编写器协议表功能,则此客户端无法写入启用了行跟踪的表。 请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?

启用行跟踪

必须通过设置表属性 delta.enableRowTracking = true 显式启用行跟踪。

可以在创建表期间执行此操作,如以下示例所示:

CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;

可以更改现有表以启用行跟踪,如以下示例所示:

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);

重要

对现有表启用行跟踪会自动将行 ID 和行提交版本分配给表中所有现有行。 此过程可能会导致创建多个新版本的表,并且可能需要很长时间。

克隆 Delta 表会创建单独的历史记录,因此克隆表与原始表中的行 ID 和行提交版本不匹配。

行跟踪元数据字段的架构是什么?

行跟踪将两个隐藏的元数据字段添加到表中。 可以将这些字段显式添加到查询以返回值。

列名称 类型 说明
_metadata.row_id Long 行的唯一标识符。 每当使用 MERGEUPDATE 语句修改行时,行将保留相同的 ID。
_metadata.row_commit_version Long 上次插入或更新行的 Delta 日志或表版本。 每当使用 MERGEUPDATE 语句修改行时,将为其分配新版本。

某些操作使用事务日志存储这些元数据字段。 对启用了行跟踪的表运行 OPTIMIZEREORG 操作会重写数据文件以存储这些字段。

禁用行跟踪

可以通过将表属性设置为 false 来禁用行跟踪。

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);

重要

禁用行跟踪不会移除相应的表功能,也不会降级表协议版本。 它也不会从目标表中移除元数据字段。

禁用行跟踪后,生成的行 ID 在跟踪唯一行方面不再可靠。

限制

读取更改数据馈送时,无法访问行 ID 和行提交版本元数据字段。 请参阅在 Azure Databricks 上使用 Delta Lake 更改数据馈送