レック・テクノロジー・コンサルティング株式会社TECH BLOG

【BigQuery】テーブルデータの比較 EXCEPT DISTINCT

はじめに

システムの移行等を行うと、新旧でテーブルデータの一致確認を行うことがありますが、Oracle環境下では MINUS演算子を使用して検証を行っていました。しかし、MINUS演算子はOracle SQL独自の演算子であるためOracle以外の環境では使用できません。
BigQueryで同様の関数があるのか調べたところ、BigQueryではEXCEPT DISTINCTで、MINUS演算子と同様の検証が出来ることが分かったので、ご紹介します。

EXCEPT DISTINCTの説明

複数のSELECT結果の差(差集合)を取得する関数で、先に書かれている SELECT 文の結果レコードから、後に書かれている SELECT 文の結果レコードを引き算し、差のあるレコードが抽出されます。
テーブルデータの一致確認を行う場合は、双方向で確認を行います。

EXCEPT DISTINCTの文法

SELECT * FROM TABLE_A
EXCEPT DISTINCT
SELECT * FROM TABLE_B

上記では、TABLE_AとTABLE_Bの全てのカラムで比較を行い、TABLE_Aのみに存在するレコードを抽出します。

テーブルデータの比較

パターン① データ不一致

◆データ

以下の例では「店CD = '003'」のレコードは「旧_店別売上データ」テーブルにのみに存在しています。

画像1.png

また、「店CD = '004'」のレコードは「新_店別売上データ」テーブルにのみに存在しています。画像2.png

◆SQL実行&結果

以下のクエリを実行します。クエリ結果として「旧_店別売上データ」のみに存在するレコードが出力されます。画像3.png

次に以下のクエリを実行します。クエリ結果として「新_店別売上データ」のみに存在するレコードが出力されます。画像4.png



パターン② データ一致

◆データ

以下は2つのテーブルに格納されているデータが一致する場合の例になります。
画像5.png

画像6.png

◆SQL実行&結果

テーブルデータに差異がないため、どちらのクエリ結果も該当データなしとなります。

画像8.png画像7.png

【注意点】同値行が存在する場合

テーブル設計上、同値行が存在することはないと思いますが、同値行は差として出力されないので注意が必要です。
制約がないテーブルで一致確認をする場合は、件数の一致確認後にEXCEPT DISTINCTで確認をすることをお勧めします。

画像9.png

画像10.png

画像11.png
→同値行は差として出力されないので、出力なし。

さいごに

テーブル比較EXCEPT DISTINCTの使い方について、実際の例とともに詳しく見てきました。
今回は説明のため単方向ずつSQLを実行しましたが、データが一致していることが前提であれば、副問い合わせを使用し1SQLで実行すると良いかと思います。

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る