Dataformアサーションで直近一週間にNull値が含まれているかを実装してみた!

Dataformは、BigQuery上でデータ変換のワークフローを開発するためのGoogle Cloudのサービスです。
Dataformにはアサーションという機能があり、データ品質のテストを実装することができます。
今回はこのアサーションを利用して、直近一週間の対象のカラムにNull値が含まれているかを確認するアサーションを実装してみました。

概要

Dataformのアサーションについて

Dataformには組み込みアサーションと手動アサーションがあります。

  • 組み込みアサーション
    • SQLXファイルのテーブルのconfigブロックに追加する
    • Dataformでテーブルを作成した後に実行される
    • 以下を検査することができる
      • nonNull:対象の列にNull値がないこと
      • rowConditions:対象の列がカスタムロジックの条件を満たすこと
      • uniqueKey/uniqueKeys:対象の列に重複した値がないこと
  • 手動アサーション
    • 専用のSQLXファイルにSQLクエリを定義する
    • 組み込みアサーションよりも複雑なロジックを実装できる
    • クエリの実行結果が0件の場合は成功、1行以上ある場合は失敗となる

詳細についてはリンクをご参照ください。

Null値のアサーションは以下のように組み込みアサーションのnonNullでも実装可能です。
一方で、nonNullで実装した場合、作成されたテーブルへの実行となるため、スキャン量が多くなってしまうことがあります。

config {
  type: "table",
  assertions: {
    nonNull: ["order_id", "quantity"]
  }
}
SELECT ...

そのため、今回は直近1週間にアップデートされたデータにNull値が含まれているかどうかを手動アサーションで実装してみたいと思います。

実際にやってみる

以下のようなテーブルがあるとします。

order_date order_id quantity updated_at
2026-02-03 xxxxx 3 2026-02-01 13:30:00
2026-02-05 yyyyy 1 2026-02-03 10:00:00
2026-02-11 zzzzz 5 2026-02-10 18:00:00

今回は以下の通りに実装します。

  • 直近一週間でアップデートされたデータをアサーション対象とすること
  • order_idquantityにNull値が含まれていないこと

実装したコード

2つのパターンで記述しています。
どちらもNull値が含まれていないことをチェックできます。

例1
該当するorder_id, quantity, order_dateを出力し、エラー原因の特定がしやすいクエリ

SELECT
  *
FROM
  `my_table`
WHERE
  updated_at >= DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 7 DAY)
  AND (order_id IS NULL OR quantity IS NULL)

例2
件数だけのシンプルな結果を確認できるクエリ
以下のようにカスタムエラーメッセージを追加することも可能

SELECT
  COUNT(1) AS error_count,
  '直近1週間のデータのorder_id, quantityにNULL値が含まれています。件数=' || CAST(COUNT(1) AS STRING) AS error_message
FROM
  `my_table`
WHERE
  updated_at >= DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 7 DAY)
  AND (order_id IS NULL OR quantity IS NULL)
HAVING error_count > 0

まとめ

今回は、手動アサーションで直近1週間のデータにNull値が含まれているかどうかの検査をするアサーションを実装しました。

アサーションは、データの信頼性を担保し、分析や業務判断を支える重要な役割を果たします。
データの不備や異常値を早期に発見し対応することで、品質の高いデータを活用したビジネス上の判断ができるかと思います。

最後まで読んでいただきありがとうございました。

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