最佳化

適用於:check marked yes Databricks SQL check marked yes Databricks Runtime

優化 Delta Lake 數據的版面配置。 選擇性地優化數據子集或依數據行共置數據。 如果您未指定組合,且數據表未使用液體群集定義,則會執行量化封裝優化。

Syntax

OPTIMIZE table_name [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

注意

  • 量化封裝優化是 等冪的,這表示如果在相同的數據集上執行兩次,則第二次執行沒有任何作用。 其目標是在磁碟上產生平均平衡的數據檔,但不一定是每個檔案的 Tuple 數目。 不過,這兩個量值最常相互關聯。
  • Z 排序 不是等冪的 ,而是要做為累加作業。 Z 排序所花費的時間不保證會減少多次執行。 不過,如果未將任何新數據新增至只是 Z 排序的數據分割,該數據分割的另一個 Z 排序將不會有任何作用。 其目標是針對 Tuple 數目產生平均平衡的數據檔,但不一定是磁碟上的數據大小。 這兩個量值最常相互關聯,但在某些情況下,情況並非如此,導致優化工作時間發生扭曲。

注意

使用 Databricks Runtime 時,若要控制輸出檔案大小,請設定 Spark 組 spark.databricks.delta.optimize.maxFileSize。 默認值為 1073741824,其會將大小設定為1 GB。 指定值 104857600 會將檔案大小設定為 100 MB。

參數

  • table_name

    識別現有的 Delta 數據表。 名稱不得包含 時態規格

  • WHERE

    優化符合指定數據分割述詞的數據列子集。 僅支援涉及分割區索引鍵屬性的篩選。

    您無法在使用 液體群集的數據表上使用這個子句。

  • ZORDER BY

    在同一組檔案中共置數據行資訊。 Delta Lake 數據略過演算法會使用共同位置,大幅減少需要讀取的數據量。 您可以將的 ZORDER BY 多個資料列指定為逗號分隔清單。 不過,位置的有效性會隨著每個額外的數據行而減少。

    您無法在使用 液體群集的數據表上使用這個子句。

範例

> OPTIMIZE events;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

如需命令的詳細資訊 OPTIMIZE ,請參閱 在 Delta Lake 上使用優化來壓縮數據檔。