アサーションについて
アサーションは、クエリで指定された 1 つ以上の条件に違反する行を検出するデータ品質テストクエリです。クエリが行を返す場合、アサーションは失敗します。Dataform は、ワークフローを更新するたびにアサーションを実行し、アサーションが失敗した場合にアラートを送信します。
Dataform は、コンパイルされたアサーション クエリの結果を含むビューを BigQuery に自動的に作成します。ワークフロー設定ファイルで構成されているように、Dataform は、アサーションの結果を検査できるアサーション スキーマにこれらのビューを作成します。
たとえば、デフォルトの dataform_assertions
スキーマの場合、Dataform は BigQuery に dataform_assertions.assertion_name
という形式でビューを作成します。
すべての Dataform テーブルタイプ(テーブル、増分テーブル、ビュー、マテリアライズド ビュー)に対してアサーションを作成できます。
次の方法でアサーション値を作成できます。
テーブルの config ブロックに組み込みアサーションを追加します。
組み込みアサーションをテーブルの
config
ブロックに追加して、その条件を指定できます。-
高度なユースケースの場合や Dataform で作成されていないデータセットの場合は、別の SQLX ファイルにカスタム アサーションを手動で記述します。
始める前に
Google Cloud コンソールで、[Dataform] ページに移動します。
リポジトリを作成または選択します。
開発ワークスペースを作成または選択します。
必要なロール
アサーションの作成に必要な権限を取得するには、ワークスペースに対する 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 ブロックにアサーションを追加する手順は次のとおりです。
- 開発ワークスペースの [ファイル] ペインで、テーブル定義 SQLX ファイルを選択します。
- テーブル ファイルの
config
ブロックに「assertions: {}
」と入力します。 assertions: {}
内にアサーションを追加します。- 省略可: [書式] をクリックします。
次のコードサンプルは、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 ファイルに手動アサーションを追加する手順は次のとおりです。
- [ファイル] ペインで、
definitions/
の横にある[その他] メニューをクリックします。
- [ファイルを作成] をクリックします。
[ファイルパスを追加] フィールドに、ファイルの名前に続けて
.sqlx
を入力します。例:definitions/custom_assertion.sqlx
ファイル名 には数字、英字、ハイフン、アンダースコアのみを使用できます。
[ファイルを作成] をクリックします。
[ファイル] パネルで、新しいファイルをクリックします。
ファイルに次のように入力します。
config { type: "assertion" }
config
ブロックの下に、SQL クエリまたは複数のクエリを記述します。省略可: [書式] をクリックします。
次のコードサンプルは、フィールド A、B、c
が sometable
で NULL
ではないことをアサートする SQLX ファイルでの手動アサーションを示しています。
config { type: "assertion" }
SELECT
*
FROM
${ref("sometable")}
WHERE
a IS NULL
OR b IS NULL
OR c IS NULL
次のステップ
- アサーション タイプの詳細については、Dataform API をご覧ください。
- JavaScript を使用してアサーションを定義する方法については、JavaScript のみを使用してワークフローを作成するをご覧ください。
- ワークフローを手動で実行する方法については、実行を手動でトリガーするをご覧ください。