Databricks での低シャッフル マージ
低シャッフルマージは、Databricks Runtime 10.4 LTS以降で一般提供(GA)されており、Databricks Runtime 9.1 LTSではパブリックプレビューとして利用可能です。Databricks 、プレビュー版をご利用のお客様に対しDatabricks Runtime 10.4 LTS以降への移行を推奨します。
MERGE コマンドは、Delta Lake テーブルからの更新、挿入、および削除を同時に実行するために使用されます。Databricks には最適化された MERGE の実装があり、シャッフル操作の数を減らすことで一般的なワークロードのパフォーマンスが大幅に向上します。
Databricksの低シャッフルマージ機能は、変更されていない行を、変更された行と一緒に処理するのではなく、より効率的な別の処理モードで処理することで、パフォーマンスを向上させます。その結果、シャッフルされるデータ量が大幅に削減され、パフォーマンスが向上します。シャッフルマージを低くすることで、ユーザーがMERGE操作を実行した後にOPTIMIZE再実行する必要性も軽減されます。
最適化されたパフォーマンス
多くの MERGE ワークロードは、テーブル内の比較的少数の行しか更新しません。 ただし、Delta テーブルはファイルごとにのみ更新できます。 MERGE コマンドは、特定のファイルに格納されている少数の行を更新または削除する必要がある場合、同じファイルに格納されている残りのすべての行も処理して再書き込みする必要があります (これらの行が変更されていない場合でも)。低シャッフルマージは、変更されていない行の処理を最適化します。 以前は、変更された行と同じ方法で処理され、複数のシャッフル ステージとコストの高い計算が行われていました。 低シャッフル マージでは、変更されていない行は、シャッフル、高価な処理、またはその他の追加のオーバーヘッドなしで処理されます。
最適化されたデータレイアウト
シャッフル回数の少ないマージは実行速度が速く、後続の操作にもメリットがあります。以前のMERGE実装では、変更されていないデータのデータレイアウトが完全に変更され、後続の操作のパフォーマンスが低下していました。低シャッフル マージでは、リキッドクラスタリング レイアウトを含む変更されていないレコードの既存のデータ レイアウトがベストエフォート方式で保存され、1 つ以上のMERGEコマンドを実行した後はパフォーマンスの低下が遅くなります。
ローシャッフルマージは、変更されていない既存データのデータレイアウトを維持しようとします。更新されたデータや新規挿入されたデータのデータレイアウトは最適ではない可能性があるため、リキッドクラスタリングが有効になっているテーブルでは、 OPTIMIZE実行する必要がある場合があります。
可用性
低シャッフルマージは、 Databricks Runtime 10.4以降ではデフォルトで有効になります。 以前にサポートされている Databricks Runtime バージョンでは、構成 spark.databricks.delta.merge.enableLowShuffle を true に設定することで有効にできます。 このフラグは、 Databricks Runtime 10.4 以降では無効です。
従来のZ-Ordering
Z-Ordering使用するテーブルの場合、ロー シャッフル マージでは、変更されていないデータの既存のZ-Orderレイアウトをベストエフォート方式で保存しようとします。 更新されたデータや新しく挿入されたデータのデータレイアウトは最適ではない可能性があるため、 MERGE操作の後にOPTIMIZE ZORDER BY を実行する必要がある場合があります。Databricks 、すべての新しいテーブルにリキッドクラスタリングを使用することをお勧めします。