BigQueryにおけるデータバリデーション手法¶
BigQueryでは標準的なCHECK制約はサポートされていない。
制約の強制力¶
BigQueryでは主キー(Primary Key)や外部キー(Foreign Key)を定義できるが、これらは「強制されない(Not Enforced)」状態。データの整合性を守るためではなく、クエリの最適化(Joinの省略など)のために使われる。
唯一データベースレベルで強制できるのは、カラムのモードをREQUIREDに設定することによるNOT NULL制約のみ。
CREATE TABLE mydataset.products (
product_id INT64 NOT NULL, -- REQUIRED モードになり、NULL を防ぐ
price FLOAT64
);
代替となるデータバリデーション手法¶
1. ERROR関数による手動チェック¶
SQLクエリ内で特定の条件(例:価格がマイナス)を満たした場合に、意図的にエラーを発生させて処理を止める方法。このクエリをスケジュール設定しておけば、異常検知時に通知を飛ばすことも可能。
2. dbtによるテスト(Singular Test)¶
dbtを使用している場合、tests/ディレクトリにSQLファイルを作成する。このクエリが1行でも結果を返すと「失敗」と判定される。
-- tests/assert_no_negative_price.sql
SELECT
order_id,
price
FROM {{ ref('orders') }}
WHERE price < 0
3. Data Validation Tool(DVT)の活用¶
Googleが提供するオープンソースのCLIツール。テーブル間の行数一致や、特定カラムの集計値が正しいかなどを自動で検証できる。
# テーブル間の行数やカラムの一致を検証するコマンド例
data-validation run \
--type Column \
--source-conn $SOURCE_CONN --target-conn $BQ_CONN \
--tables-list source_db.table=bq_dataset.table
関連¶
引用元: NotebookLM