Google Cloudを活用する上でのさまざまなコツを、できるだけ分かりやすく説明する連載「Google Cloudチートシート」。今回はBigQueryのテーブル間でのデータの一致をチェックする代表的な方法を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Google Cloudの代表的なサービスの一つにBigQueryがあります。高性能なデータウェアハウスサービスで 、PB(ペタバイト)級のデータを扱うことができます。とはいえ、大規模なデータを扱うことには課題も伴います。
その一つはシステムの新規開発や追加開発、データ移行などにおけるデータの検証です。
小規模なデータでは、カラム1個1個を検証していくこともできますが、大規模なデータではこれが時間的に難しくなります。従って、テーブルなどの単位で間違いのあるなしを判定していく必要があります。例えば以下のようなケースが考えられます。
このようなデータ検証は、システムの信頼性や品質を確保するために非常に重要です。データの不一致は、システムの誤動作やデータの損失につながる可能性があります。
今回は膨大なデータがある場合でも対応できる、BigQueryのコンソール上のSQLエディタを使ったデータ比較の代表的な方法を紹介します。
比較したいテーブル同士のカラムレベルでの比較を行います。
全ての列のデータを比較するのではなく、特定の列のデータを比較したいケースに適しています。複数列チェックを行う場合にはチェック列を追加することで対応できます。どの列にデータ差分があるのかが一目で判別できるため、全体の簡易的なチェックができます。
データに `null` が含まれる場合は正しい結果を返しません。 `null = null` は偽と判断されるためです。
下では、全体の行数と、比較した結果の一致件数を返しています。
SELECT COUNT(*) AS total_rows, SUM(CASE WHEN table1.column_name = table2.column_name THEN 1 ELSE 0 END) AS matching_rows FROM table1 FULL OUTER JOIN table2 ON table1.primary_key = table2.primary_key
対象項目をハッシュ化し、排他的論理和でチェックサムを取得し、比較を行います。厳密なデータ一致チェックや異なるデータベース間でのデータ整合性を確認するケースに適しています。
データ全体をハッシュ化すること、さらに排他的論理和を取るため、データ量によっては膨大な計算資源が必要になる場合があります。そのため、パーティションやクラスタ単位で処理を分割するなどの工夫が必要になってきます。
BigQuery同士での比較例です。
TO_JSON_STRINGでテーブル全体をJSON構造体に変換し、 FARM_FINGERPRINT( Fingerprint64でハッシュ化し、結果をINT64で戻すようにしたBigQueryの独自関数)でハッシュ化、結果をBIT_XORで排他的論理和を取っています。
データが一致していれば同じ値が取得できます。
SELECT BIT_XOR(FARM_FINGERPRINT(TO_JSON_STRING(table1))) AS checksum1, BIT_XOR(FARM_FINGERPRINT(TO_JSON_STRING(table2))) AS checksum2 FROM table1, table2
BigQueryと異なるデータベースを比較することは可能か?
Google Cloud内においては直接的な比較が行えます。BigQueryには他のデータベースに直接 SQLを発行できる連携クエリの機能があります。
データベースが異なっていても可能ですが、下記の点に注意する必要があります。これらについては事前に調査を行い、差分をどのように吸収するか定義しておかなければなりません。
データに `null` がある場合、 `null` をどのように変換すればよいか?
`null` をどのように変換するか、ということより、どのように扱うか定義することが重要です。その上で変換をするか、 `null` は省くかなどを決定してください。
BigQueryで比較すると料金が高くならないか?
比較したいデータ量によります。費用の問題がある場合はチェックしたい範囲を厳密に定義し、不要な比較を行わないようにすることが重要です。例えば一部の列のみ一致していればよいケースで、テーブル全体を比較しないようにすることです。
チェックサム形式において不一致が発生した場合、不一致の原因となっている箇所の特定は可能か?
特定はできません。確認できるのはデータ全体が一致しているかのみです。
参考リンク
BIT_XOR
Aggregate functions | BigQuery | Google Cloud
FARM_FINGERPRINT
Hash functions | BigQuery | Google Cloud
TO_JSON_STRING
JSON functions | BigQuery | Google Cloud
今回はBigQueryでのデータ比較を行う方法を紹介しました。比較演算子と集計関数を使う方法、チェックサムを使う方法、それぞれの特徴と注意点を押さえて適切な手法を選択することで、効率的かつ正確なデータ検証を行うことができます。
データ検証はシステムの信頼性や品質を確保するために不可欠なプロセスです。BigQueryの強力な機能を活用し、データの整合性を保ち、安心してシステムを利用できる環境を構築しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.