使用變體分解來最佳化效能

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 儲存在陣列或地圖內的資料。