DB

BigQueryで2つのテーブルのMINUS差分をとる方法

BigQueryでテーブルの差分を求める方法がわからない

データの分析や処理に便利なBigQuery(BQ)

大規模データの処理に優れており、テーブルに保存した大きなデータでも短時間で集計することができる。

そして容量単価に優れているので、データを大量に作っても懐が痛まないのも特徴だ。


ちょっとしたデータ分析なら全然気にならないくらいですね


そんなBQを使う際に、テーブルのデータ比較をしたい場合がある。

例えば、とある処理を変更したときに変更前後で出力データのうちどのレコードが変わったか差分をとって確認するだろう。

しかしBigQueryで2つのテーブルの差分をどうやってとればいいのか。

そこで今回はBigQueryで2つのテーブルのMINUS差分をとる方法について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

BigQueryで2つのテーブルのMINUS差分をとる方法がわかり、データ処理で躓かなくなる


データ準備

まずはデータを準備する。

今回は2つのテーブルの差分を撮るので、2つデータを用意する。

ひとつはテーブル名 minus_sample01 として以下のCSVをインポート。

col1,col2,col3
a,b,c
aa,bb,cc
aaa,bbb,ccc
aaaa,bbbb,cccc

もうひとつは minus_sample02 として以下のCSVをインポートする。

col1,col2,col3
a,b,c
aa,bb,cc2
aaa2,bbb,ccc
aaaa,bbbb,cccc



差分なのでMINUSを試してみる。

ではこの2つのテーブルの差分をとるにはどうしたらいいのか。


Oracleなら minus が使えるんだけど・・・


実際に試してみる。

SELECT * FROM test.minus_sample01
MINUS
SELECT * FROM test.minus_sample02

結果は以下の通り。

Syntax error: Expected end of input but got keyword SELECT at [3:1]

Syntax error、つまりSQLの構文エラーとなる。


BQで MINUS は使えませんね



BigQueryで2つのテーブルのMINUS差分をとる方法

BigQueryで2つのテーブルのMINUS差分をとるには集合演算子の EXCEPT DISTINCT を用いる。


使い方は MINUS と同じ。

SELECT * FROM test.minus_sample01
EXCEPT DISTINCT
SELECT * FROM test.minus_sample02


結果は以下のようになる。

Rowcol1col2col3
1aabbcc
2aaabbbccc


minus_sample01 にあって minus_sample02 に無い行だけ抽出することができた。

逆に minus_sample02 だけにある行を抽出したければ前後を入れ替えれば良い。

SELECT * FROM test.minus_sample02
EXCEPT DISTINCT
SELECT * FROM test.minus_sample01

結果はこの通り。

Rowcol1col2col3
1aabbcc2
2aaa2bbbccc

2つめのテーブルにしか無い行が抽出できた。



まとめ

今回はBigQueryで2つのテーブルのMINUS差分をとる方法について解説した。

BigQueryで2つのテーブルの差分(差集合)をとる方法は以下の通り。

ココがポイント

集合演算子の EXCEPT DISTINCT を用いる。

和集合の UNION ALL と同じようなものですね



他にもBigQueryに関する記事もあるので、興味があれば見てみて欲しい。

ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-DB
-

Translate »

© 2021 ITips