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

Databricks での結合の操作

Databricks は ANSI 標準の結合構文をサポートしています。このページでは、バッチ処理とストリーム処理による結合の違いについて説明します。

注記

Databricks は、集合演算子 UNIONINTERSECT、および EXCEPTの標準構文もサポートしています。 「Set 演算子」を参照してください。

ストリーミング結合とバッチ結合の違い

Databricks でのJOINは、ステートフルまたはステートレスのいずれかです。

すべてのバッチ結合はステートレス結合です。 結果はすぐに処理され、クエリの実行時にデータが反映されます。 クエリが実行されるたびに、指定したソースデータに基づいて新しい結果が計算されます。 バッチ結合を参照してください。

2 つのストリーミング データソース間の結合はステートフルです。 ステートフル結合では、 Databricks はデータソースと結果に関する情報を追跡し、結果を繰り返し更新します。 ステートフル結合は、オンラインデータ処理のための強力なソリューションを提供できますが、効果的に実装するのが難しい場合があります。 これらは、出力モード、トリガー間隔、およびウォーターマークに応じて複雑な操作セマンティクスを持っています。 ストリーム-ストリーム結合を参照してください。

ストリーム静的結合はステートレスですが、増分データソース (ファクトテーブルなど) を静的データソース (緩やかに変化するディメンションテーブルなど) を結合するための適切なオプションを提供します。 クエリが実行されるたびに両側のすべてのレコードを結合するのではなく、ストリーミング ソースから新しく受信したレコードのみが現在のバージョンの静的テーブルと結合されます。 ストリーム静的結合を参照してください。

バッチ結合

Databricks では、内部結合、外部結合、半結合、アンチ結合、クロス結合などの標準 SQL 結合構文がサポートされています。 JOIN を参照してください。

ストリーム-ストリーム join

2 つのストリーミング データ ソースを結合すると、状態情報の管理と、結果の計算と出力に関する推論に大きな課題が生じる可能性があります。 ストリーム-ストリーム結合を実装する前に、 Databricks 、ウォーターマークが状態管理にどのような影響を与えるかなど、ステートフル ストリーミングの運用セマンティクスをよく理解することをお勧めします。 次のページを参照してください。

Databricksすべてのストリーム ストリーム結合の両側にウォーターマークを指定することをお勧めします。 次の結合タイプがサポートされています。

  • Inner join
  • Left outer join
  • Right outer join
  • Full outer join
  • Left semi join

ストリーム-ストリーム結合に関するApache Spark構造化ストリーミングのドキュメントを参照してください。

ストリーム静的結合

注記

説明したストリーム静的JOINの動作では、静的データが Delta Lake を使用して保存されていることを前提としています。

ストリームデータと静的データのJOINでは、ステートレス結合を使用して、Delta テーブルの最新の有効なバージョン (静的データ) をデータストリームにJOINします。

Databricks がストリーム静的結合でデータのマイクロバッチを処理する場合、静的 Delta テーブルからの最新の有効なバージョンのデータが、現在のマイクロバッチに存在するレコードと結合されます。結合はステートレスなので、ウォーターマークを構成する必要がなく、低レイテンシで結果を処理できます。結合に使用される静的 Delta テーブル内のデータは、ゆっくりと変化するはずです。

次の例は、このパターンを示しています。

Python
streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")

query = (streamingDF
.join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
.writeStream
.option("checkpointLocation", checkpoint_path)
.table("orders_with_customer_info")
)

Databricks のヒントに参加する

Apache Spark は、範囲結合と傾斜結合の結合ヒントの指定をサポートしています。Databricks はこれらの結合を自動的に最適化するため、傾斜結合のヒントは必要ありません。ヒントを参照してください。

範囲結合のヒントは、結合のパフォーマンスが悪く、等価結合を実行している場合に役立ちます。例としては、タイムスタンプ範囲やクラスタリングID の範囲での結合などがあります。「範囲結合の最適化」と「Databricks での結合パフォーマンスの最適化」を参照してください。