BigQueryは多種多様なビッグデータの格納やインポート処理、分析が可能なGoogleのデータウェアハウスサービスです。
本ページでは、BigQueryでの5つのテーブル結合方法(内部結合、左側結合、完全外部結合、交差結合、ユニオン)について紹介します。
内部結合(INNER JOIN)
内部結合(INNER JOIN
)では、結合するテーブルで共通となるキーが一致するレコードのみが抽出されます。
例えば、以下のような注文テーブルと担当者テーブルを Order_ID
を共通キーとして内部結合する場合を考えます。
BigQuery上での実際の構文は以下のようになります。
実行すると、両方のテーブルで Order_ID
が一致するレコードのみが抽出されます。
ON
句の部分 d.Order_ID = o.Order_ID
の代わりに、Using(Order_ID)
と記述することもできます。
左側結合(LEFT JOIN)
2つのテーブルの左側結合(LEFT JOIN
)または左外部結合(LEFT OUTER JOIN
)では、右側のテーブルに結合条件を満たすレコードがない場合でも、常に左側テーブルのすべてのレコードを保持します。
例えば、以下のような注文テーブルと担当者テーブルを Order_ID
を共通キーとして左側結合する場合を考えます。
BigQuery上での実際の構文は以下のようになります。
実行すると、左側の注文テーブルに存在するすべてのレコードが確認できます。
右側の担当者テーブルに Order_ID
が一致するレコードがない場合には担当者の Operator
値が NULL
になっています。
完全外部結合(FULL OUTER JOIN)
完全外部結合(FULL JOIN
または単にFULL OUTER JOIN
)は、結合条件を満たすレコードと満たさないレコードをすべて返します。
例えば、以下のような注文テーブルと担当者テーブルを Order_ID
を共通キーとして完全外部結合する場合を考えます。
BigQuery上での実際の構文は以下のようになります。
実行すると、両方のテーブルで Order_ID
が一致するレコードと、左側あるいは右側いずれかのテーブルのみに Order_ID
が存在するレコードが作成されます。
右側の担当者テーブルに Order_ID
が一致するレコードがない場合には担当者の Operator
値が NULL
、左側の注文テーブルに Order_ID
が一致するレコードがない場合には Country
値が NULL
になっていることが分かります。
交差結合(CROSS JOIN)
交差結合(CROSS JOIN
)は、2つのテーブルに存在するレコードの総当たりの組み合わせを返します。
M件のレコードのテーブルとN
件のレコードのテーブルを交差結合すると、M*N
件のレコードのテーブルが作成されます。
例えば、以下のような注文テーブルと担当者テーブルを交差結合する場合を考えます。
BigQuery上での実際の構文は以下のようになります。
実行すると、すべてのレコードの組み合わせで構成されたテーブルが作成されます。
CROSS JOIN
は条件を指定しないので ON
句は必要ありません。
UNIONによる連結
UNION
演算子は、複数のクエリの結果の列を組み合わせて縦方向に連結します。ALL
を指定すれば全てのレコードを連結、DISTINCT
を指定すると重複を除外して連結します。
例えば、以下のような毎日の注文テーブルを結合する場合を考えます。
▼2022年6月3日の注文テーブル
▼2022年6月4日の注文テーブル
▼2022年6月5日の注文テーブル
BigQuery上での実際の構文は以下のようになります。
実行すると、各クエリで抽出された Item_Type
が縦方向にすべて連結されていることが分かります。
重複レコードが除外したい場合にはUNION DISTINCT
と指定します。
実行するとすべてユニークなレコードになります。
本ページでは、BigQueryでの5つのテーブル結合方法(内部結合、左側結合、完全外部結合、交差結合、ユニオン)について紹介しました。