Optimize (Delta Lake on Azure Databricks) Optimize (Delta Lake on Azure Databricks)

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

DBFS に格納されているデータのレイアウトを最適化します。Optimize the layout of data stored in DBFS. 必要に応じて、データのサブセットを最適化するか、列によってデータを併置します。Optionally optimize a subset of data or colocate data by column. コロケーションを指定しない場合は、ビンパッキングの最適化が実行されます。If you do not specify colocation, bin-packing optimization is performed.


  • ビンパッキングの最適化は_べき等_です。つまり、同じデータセットで2回実行された場合、2番目のインスタンスは効果がありません。Bin-packing optimization is idempotent, meaning that if it is run twice on the same dataset, the second instance has no effect.
  • ZOrdering は_べき等_ではなく、指定されたフィルターに一致するすべてのデータを再配置します。ZOrdering is not idempotent and rearranges all of the data that matches the given filter. そのため、可能な場合はパーティションフィルターを使用して、新しいデータに制限することをお勧めします。Therefore we suggest that you limit it to new data, using partition filters when possible.


指定されたパーティション述語に一致する行のサブセットを最適化します。Optimize the subset of rows matching the given partition predicate. パーティションキー属性を含むフィルターのみがサポートされています。Only filters involving partition key attributes are supported.


同じファイルセットに列情報を併置します。Colocate column information in the same set of files. 併置は、読み取る必要があるデータの量を大幅に削減するために、デルタレイクデータをスキップするアルゴリズムによって使用されます。Co-locality is used by Delta Lake data-skipping algorithms to dramatically reduce the amount of data that needs to be read. @No__t_0 に複数の列を指定するには、コンマ区切りのリストを使用します。You can specify multiple columns for ZORDER BY as a comma-separated list. ただし、局所性の有効性は、追加の列ごとに削除されます。However, the effectiveness of the locality drops with each additional column.



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

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