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つのテーブル結合方法(内部結合、左側結合、完全外部結合、交差結合、ユニオン)について紹介しました。
 
