Variant 分解會將常見欄位儲存為底層 Parquet 檔案中的個別欄位,從而提升對 VARIANT 欄位的查詢效能。 分拆可減少讀取欄位所需的 I/O,並藉由使用欄式格式而非二進位 blob 來提升壓縮效果。
請參閱 VARIANT 類型、Apache Iceberg 和 Delta Lake 的變體類型支援,以及 查詢變體資料。
要求
讀取與寫入碎碼的 VARIANT 資料表,必須使用 Databricks Runtime 17.3 或以上版本。 為了在變體統計收集與資料跳過時達到最佳查詢效能,Databricks 建議使用 Databricks Runtime 18.1 或更高版本。
啟用粉碎
從 Databricks Runtime 17.3 開始,當你使用 VARIANT 建立含有一個或多個 CREATE TABLE 資料行的新資料表時,系統會自動啟用 shredding。
CREATE OR REPLACE TABLE 和 ALTER TABLE 不會自動啟用銷毀功能。 這可避免變更現有資料表和工作負載的 shredding 行為。
對於現有的資料表,你可以將 enableVariantShredding 資料表屬性設為 TRUE,以手動啟用 shredding;也可以將該屬性設為 FALSE 來停用:
三角洲湖
ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'true');
冰山表
ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'true');
確認是否啟用刪除,請檢查表格屬性 enableVariantShredding 是否設定為 true。
選擇不對特定資料表進行分割
若要將特定資料表排除在後續寫入時進行分割,請將 enableVariantShredding 資料表屬性設為 FALSE:
三角洲湖
ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'false');
冰山表
ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'false');
移除現有表格上的碎紙
若要移除現有表格上的拆分功能,請使用命令 ALTER TABLE。 此作業也會將已切碎的資料 VARIANT 就地重寫為未切碎的 VARIANT 格式,並將 table 屬性設定 enableVariantShredding 為 false。
ALTER TABLE my_table DROP FEATURE "variantShredding";
Limitations
- 粉碎資料會在寫入時引入一些額外負荷。
- 啟用碎紙並不會自動轉換資料表中的現有
VARIANT資料。 它僅適用於啟用該功能後寫入的資料。 若要重寫現有VARIANT資料,請使用REORG TABLE my_table APPLY (SHRED VARIANT)。 - 粉碎適用於結構中的頂層
VARIANT列或VARIANT字段,不包括VARIANT儲存在陣列或地圖內的資料。