メインコンテンツまでスキップ

Databricks での低シャッフル マージ

注記

低シャッフル マージは、Databricks Runtime 10.4 lTS 以降と Databricks Runtime 9.1 LTSの パブリック プレビューで 一般提供 (GA) されます 。Databricks Preview のお客様は、 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 以降では無効です。