OPTIMIZE
適用対象: Databricks SQL Databricks Runtime
Delta Lake データのレイアウトを最適化します。 必要に応じて、データのサブセットを最適化するか、列単位でデータを併置します。 コロケーションを指定しておらず、テーブルがリキッド クラスタリングで定義されていない場合は、ビンパッキングの最適化が実行されます。
構文
OPTIMIZE table_name [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
注意
- ビンパッキングの最適化は "べき等" です。つまり、同じデータセットでそれを 2 回実行した場合、2 回目の実行に効果はありません。 その目的は、ディスク上でサイズ (必ずしもファイルあたりのタプルの数ではなく) に関して、均等にバランスの取れたデータ ファイルを生成することです。 ただし、ほとんどの場合、その 2 つの量は相関しています。
- Z オーダーは "べき等ではありません" が、増分操作を意図したものです。 複数回実行しても Z オーダーにかかる時間の削減は保証されません。 ただし、Z オーダーが実行されたばかりのパーティションに新しいデータが追加されていない場合、そのパーティションでもう一度 Z オーダーを実行しても効果はありません。 その目的は、タプルの数 (必ずしもディスク上のデータ サイズではなく) に関して、均等にバランスの取れたデータ ファイルを生成することです。 ほとんどの場合、2 つの量は相関していますが、それが該当せず、最適化タスクの時間に偏りが生じる場合があります。
Note
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
コマンドの詳細については、「データ ファイル レイアウトを最適化する」を参照してください。