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 ZORDER BY コマンドを再実行する必要性も減少します。

最適化されたパフォーマンス

多くの MERGE ワークロードは、テーブル内の比較的少数の行のみを更新します。 ただし、Delta テーブルはファイル単位でのみ更新できます。 MERGE コマンドが特定のファイルに格納されている少数の行を更新または削除する必要がある場合は、同じファイルに格納されている残りの行もすべて処理して書き換える必要があります (これらの行は変更されていません)。低シャッフルマージは、変更されていない行の処理を最適化します。 以前は、変更された行と同じ方法で処理され、複数のシャッフル ステージとコストの高い計算を通過していました。 低シャッフル マージでは、変更されていない行は、シャッフル、コストの高い処理、またはその他の追加のオーバーヘッドなしで処理されます。

最適化されたデータレイアウト

実行速度が速いことに加えて、シャッフルマージが低いと、後続の操作にもメリットがあります。 以前の MERGE 実装では、変更されていないデータのデータレイアウトが完全に変更され、後続の操作のパフォーマンスが低下していました。 低シャッフルマージは、ベストエフォート方式での Z-order 最適化 を含め、変更されていないレコードの既存のデータレイアウトを保持しようとします。 したがって、シャッフル マージが低い場合、Delta テーブルに対する操作のパフォーマンスは、1 つ以上の MERGE コマンドを実行した後、よりゆっくりと低下します。

低シャッフルマージは、変更されていない既存のデータのデータレイアウトを保持しようとします。 更新されたデータまたは新しく挿入されたデータのデータ・レイアウトが最適でない可能性があるため、 OPTIMIZE コマンドまたは OPTIMIZE ZORDER BY コマンドを実行する必要がある場合があります。

可用性

低シャッフルマージは、 Databricks Runtime 10.4以降ではデフォルトによって有効になります。 以前にサポートされている Databricks Runtime バージョンでは、構成 spark.databricks.delta.merge.enableLowShuffletrue に設定することで有効にできます。 このフラグは、 Databricks Runtime 10.4 以降では無効です。