共用方式為


優化數據檔配置

預測性優化會在 Unity 目錄受控數據表上自動執行 OPTIMIZE。 Databricks 建議為所有 Unity 目錄受控數據表啟用預測優化,以簡化數據維護並減少記憶體成本。 請參閱 Unity Catalog 受控數據表的預測性優化

OPTIMIZE 命令會重寫數據檔,以改善 Delta 數據表的數據配置。 針對已啟用液體叢集的數據表,OPTIMIZE 重寫數據檔,以依液體叢集索引鍵來分組數據。 對於已定義數據分割的數據表,檔案壓縮和數據配置會在數據分割內執行。

不含液體叢集的數據表可以選擇性地包含 ZORDER BY 子句,以改善重寫時的數據叢集。 Databricks 建議使用液體叢集,而不是數據分割、 ZORDER或其他數據配置方法。

請參閱 OPTIMIZE

重要

在 Databricks Runtime 16.0 和更新版本中,您可以使用 OPTIMIZE FULL 來強制啟用液體叢集的數據表重新叢集。 請參閱 以強制重新分群所有記錄

語法範例

您可以執行 命令來 OPTIMIZE 觸發壓縮:

SQL

OPTIMIZE table_name

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

如果您有大量數據,而且只想要優化它的子集,您可以使用 WHERE指定選擇性的數據分割述詞:

SQL

OPTIMIZE table_name WHERE date >= '2022-11-18'

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

注意

  • 量化封裝優化是 等冪的,這表示如果在相同的數據集上執行兩次,則第二次執行沒有任何作用。
  • Bin 封裝的目標是針對磁碟上的大小產生平均平衡的數據檔,但不一定是每個檔案的 Tuple 數目。 不過,這兩個量值最常相互關聯。
  • 適用於執行 OPTIMIZE 作業的 Python 和 Scala API 可從 Databricks Runtime 11.3 LTS 和更新版本取得。

Delta 表的使用者會使用快照隔離,這表示當 OPTIMIZE 從事務日誌中移除不必要的檔案時,他們的操作不會被中斷。 OPTIMIZE 不會對數據表進行任何數據相關的變更,因此在 OPTIMIZE 前後讀取的結果相同。 在串流來源的數據表上執行 OPTIMIZE 不會影響將這個數據表視為來源的任何目前或未來數據流。 OPTIMIZE 會針對已移除的檔案和作業新增的檔案,傳回檔案統計數據(最小值、最大值、總計等等)。 優化統計資料還包含 Z 排序統計資料、批次數量,以及優化的分割區。

您也可以使用自動壓縮自動壓縮來自動壓縮小型檔案。 請參閱 Azure Databricks 上 Delta Lake 的自動壓縮

OPTIMIZE應該執行的頻率?

啟用 Unity 目錄受控數據表的預測優化,以確保 OPTIMIZE 在符合成本效益時自動執行。

當您選擇執行 OPTIMIZE的頻率時,效能與成本之間會有取捨。 如需更好的用戶查詢效能,請更頻繁地執行 OPTIMIZE 。 這會產生較高的成本,因為資源使用量增加。 若要優化成本,請減少執行次數。

Databricks 建議您從每天執行 OPTIMIZE 開始,然後調整頻率以平衡成本和效能取捨。

執行的最佳實例類型 OPTIMIZE 為何(bin-packing 和 Z-Ordering) ?

這兩個作業都是執行大量 Parquet 解碼和編碼的 CPU 密集作業。

Databricks 建議 計算優化的 實例類型。 OPTIMIZE 也受益於附加 SSD。