重要
此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版。
本页介绍如何使用切碎来优化列中具有半结构化数据的表的 VARIANT 查询性能。
请参阅 VARIANT 类型、 变体类型支持和 查询变体数据。
什么是粉碎?
切分通过将常见字段以独立列的形式存储在 Parquet 文件中,从而提高 VARIANT 数据的查询性能。 此过程减少了读取字段所需的 I/O,并使用列式格式(而不是二进制 blob)提高压缩效果。
要求
读取和写入分片VARIANT表需要Databricks Runtime 17.2或更新版本。
启用粉碎
通过门户为整个工作区启用粉碎。 无需更改代码即可读取或写入 VARIANT 带有切碎的数据。
在为工作区启用该功能后,以下情境会自动启用数据销毁:
-
CREATE TABLE包含一个或多个VARIANT列。 -
CREATE AND REPLACE TABLE包含一个或多个VARIANT列。 -
ALTER TABLE添加一个或多个VARIANT列时。
对于现有表,可以通过将表属性enableVariantShredding设置为TRUE来手动选择进入分片,并通过将属性设置为FALSE来选择退出,前提是在工作区级别启用了分片:
Delta 表
ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'true');
冰山表
ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'true');
通过检查表属性 enableVariantShredding 是否设置为 true,验证是否启用了切碎。
选择退出对特定表的未来写入进行切碎
如果为工作区启用切碎 Beta,但想要排除特定表,请设置 enableVariantShredding 表属性:
Delta 表
ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'false');
冰山表
ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'false');
删除现有表上的切碎
若要删除现有表上的切碎,请使用命令删除该功能 ALTER TABLE 。 此操作还会将分散的 VARIANT 数据重写为未分散的 VARIANT 格式,并将 enableVariantShredding 表属性设置为 false。
ALTER TABLE my_table DROP FEATURE "variantShredding-preview";
局限性
- 数据碎片化会导致写入产生一些开销。
- 启用粉碎功能不会自动转换表中的现有
VARIANT数据。 它仅适用于启用该功能后写入的数据。 若要重写现有VARIANT数据,请使用REORG TABLE my_table APPLY (SHRED VARIANT)。 - 粉碎适用于结构中的顶级
VARIANT列或VARIANT字段,不包括VARIANT存储在数组或映射中的数据。