最佳化
適用於: Databricks SQL 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。
參數
-
識別現有的 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
,請參閱 優化數據檔配置。