OPTIMIZE

適用対象:check marked yes Databricks SQL check marked yes Databricks Runtime

Delta Lake データのレイアウトを最適化します。 必要に応じて、データのサブセットを最適化するか、列単位でデータを併置します。 コロケーションを指定しておらず、テーブルがリキッド クラスタリングで定義されていない場合は、ビンパッキングの最適化が実行されます。

構文

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

注意

  • ビンパッキングの最適化は "べき等" です。つまり、同じデータセットでそれを 2 回実行した場合、2 回目の実行に効果はありません。 その目的は、ディスク上でサイズ (必ずしもファイルあたりのタプルの数ではなく) に関して、均等にバランスの取れたデータ ファイルを生成することです。 ただし、ほとんどの場合、その 2 つの量は相関しています。
  • Z オーダーは "べき等ではありません" が、増分操作を意図したものです。 複数回実行しても Z オーダーにかかる時間の削減は保証されません。 ただし、Z オーダーが実行されたばかりのパーティションに新しいデータが追加されていない場合、そのパーティションでもう一度 Z オーダーを実行しても効果はありません。 その目的は、タプルの数 (必ずしもディスク上のデータ サイズではなく) に関して、均等にバランスの取れたデータ ファイルを生成することです。 ほとんどの場合、2 つの量は相関していますが、それが該当せず、最適化タスクの時間に偏りが生じる場合があります。

注意

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 で最適化を使用してデータ ファイルを圧縮する」を参照してください。