Databricks での低シャッフル マージ
Delta Lakeは、データ ファイル全体を書き換えることによってテーブルを更新します。MERGE コマンドがファイル内の少数の行を更新または削除する場合、そのファイル内の変更されていないすべての行も書き換える必要があります。ロー シャッフル Mergeがない場合、それらの変更されていない行は、変更された行と同じシャッフル ステージを通過します。これにより、MERGE が遅くなり、既存のデータ Layout が乱れるため、後続のクエリーも低速になります。
低シャッフルMergeは、MERGEの最適化されたDatabricks実装です。変更されていない行を、変更された行とは別に、シャッフルやその他の高価な計算なしで処理します。その結果、MERGEのデータのシャッフルが少なり、実行速度が速くなります。
低シャッフルマージはdefaultで有効になっているため、その利点を享受するために MERGE ステートメントを変更する必要はありません。これは、 MERGE が大規模なテーブル内の比較的少数の行を更新する場合に最も役立ちます。
Merge後のデータLayout
以前の MERGE 実装では、変更されていないデータのデータLayoutが完全に変更され、後続の操作のパフォーマンスが低下していました。低シャッフルマージは、リキッドクラスタリング レイアウトを含む、変更されていない行の既存のレイアウトを保持しようとします。その結果、1つまたは複数の MERGE コマンドの後にパフォーマンスがよりゆっくりと低下し、OPTIMIZE のラン頻度を減らす必要があります。
更新された行や新しく挿入された行のLayoutは最適ではない可能性があります。リキッドクラスタリングが有効になっているテーブルで OPTIMIZE をランする必要がある場合があります。
Z-orderingを使用するテーブルの場合、低シャッフルマージは、変更されていない行の既存のZ-orderレイアウトを保持しようとします。MERGE 操作を実行した後に OPTIMIZE ZORDER BY を実行する必要がある場合もあります。Databricks 、すべての新しいテーブルにリキッドクラスタリングを使用することをお勧めします。