BigQuery 使い方(6) 〜テーブルの結合(内部・左側・完全外部・交差結合・ユニオン)

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

タイトルとURLをコピーしました