データ品質のテスト

このドキュメントでは、Dataform コアを使用して Dataform テーブル アサーションを作成し、ワークフロー コードをテストする方法について説明します。

アサーションについて

アサーションは、クエリで指定された 1 つ以上の条件に違反する行を検出するデータ品質テストクエリです。クエリが行を返す場合、アサーションは失敗します。Dataform は、ワークフローを更新するたびにアサーションを実行し、アサーションが失敗した場合にアラートを送信します。

Dataform は、コンパイルされたアサーション クエリの結果を含むビューを BigQuery に自動的に作成します。ワークフロー設定ファイルで構成されているように、Dataform は、アサーションの結果を検査できるアサーション スキーマにこれらのビューを作成します。

たとえば、デフォルトの dataform_assertions スキーマの場合、Dataform は BigQuery に dataform_assertions.assertion_name という形式でビューを作成します。

すべての Dataform テーブルタイプ(テーブル、増分テーブル、ビュー、マテリアライズド ビュー)に対してアサーションを作成できます。

次の方法でアサーション値を作成できます。

始める前に

  1. Google Cloud コンソールで、[Dataform] ページに移動します。

    [Dataform] ページに移動

  2. リポジトリを作成または選択します。

  3. 開発ワークスペースを作成または選択します。

  4. テーブルを作成する

必要なロール

アサーションの作成に必要な権限を取得するには、ワークスペースに対する Dataform 編集者 roles/dataform.editor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

組み込みアサーションを作成する

組み込みの Dataform アサーションをテーブルの config ブロックに追加できます。Dataform は、テーブルの作成後にこれらのアサーションを実行します。Dataform がテーブルを作成した後、ワークスペースの [ワークフロー実行ログ] タブでアサーションが合格したかどうかを確認できます。

テーブルの config ブロックに、次のアサーションを作成できます。

  • nonNull

    この条件は、指定された列がすべてのテーブル行で null ではないことをアサートします。この条件は、null にならない列に使用されます。

    次のサンプルコードは、テーブルの config ブロックでの nonNull アサーションを示しています。

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    この条件は、すべてのテーブル行が定義したカスタム ロジックを満たすことをアサートします。各行の条件はカスタム SQL 式であり、テーブルの各行は各行の条件に対して評価されます。テーブル行が false を返す場合、アサーションは失敗します。

    次のサンプルコードは、増分テーブルの config ブロック内のカスタム rowConditions アサーションを示しています。

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    この条件は、指定した列でテーブル行に同じ値がないことをアサートします。

    次のサンプルコードは、ビューの config ブロックでの uniqueKey アサーションを示しています。

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    この条件は、指定した列でテーブル行に同じ値がないことをアサートします。指定されたすべての列に同じ値を持つ行が複数あると、アサーションは失敗します。

    次のサンプルコードは、テーブルの config ブロックでの uniqueKeys アサーションを示しています。

config {
  type: "table",
  assertions: {
    uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
  }
}
SELECT ...

config ブロックにアサーションを追加する

テーブルの config ブロックにアサーションを追加する手順は次のとおりです。

  1. 開発ワークスペースの [ファイル] ペインで、テーブル定義 SQLX ファイルを選択します。
  2. テーブル ファイルの config ブロックに「assertions: {}」と入力します。
  3. assertions: {} 内にアサーションを追加します。
  4. 省略可: [書式] をクリックします。

次のコードサンプルは、config ブロックに追加された条件を示しています。

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
    rowConditions: [
      'signup_date is null or signup_date > "2019-01-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...

SQLX を使用して手動アサーションを作成する

手動アサーションは専用の SQLX ファイルに書き込む SQL クエリです。手動アサーション SQL クエリは行を返さないようにする必要があります。クエリの実行時にクエリが行を返すと、アサーションは失敗します。

新しい SQLX ファイルに手動アサーションを追加する手順は次のとおりです。

  1. [ファイル] ペインで、definitions/ の横にある [その他] メニューをクリックします。
  2. [ファイルを作成] をクリックします。
  3. [ファイルパスを追加] フィールドに、ファイルの名前に続けて .sqlx を入力します。例: definitions/custom_assertion.sqlx

    ファイル名 には数字、英字、ハイフン、アンダースコアのみを使用できます。

  4. [ファイルを作成] をクリックします。

  5. [ファイル] パネルで、新しいファイルをクリックします。

  6. ファイルに次のように入力します。

    config {
      type: "assertion"
    }
    
  7. config ブロックの下に、SQL クエリまたは複数のクエリを記述します。

  8. 省略可: [書式] をクリックします。

次のコードサンプルは、フィールド ABcsometableNULL ではないことをアサートする SQLX ファイルでの手動アサーションを示しています。

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("sometable")}
WHERE
  a IS NULL
  OR b IS NULL
  OR c IS NULL

次のステップ