Data Quality は、Spec の作成を簡素化するためのルールテンプレートを提供します。システムには、一般的な組み込みテンプレートのセットが含まれており、独自のカスタムテンプレートを作成することもできます。テンプレートには必要な Spec 設定のほとんどが含まれているため、テンプレートからルールを作成するときは、残りの設定を構成するだけで済みます。
システムルールテンプレートの使用
次の例は、1、7、30 日間の平均ボラティリティ システムルールテンプレートを使用してルールを作成する方法を示しています。
datasets:
- type: Table
tables:
- tb_d_spec_demo
filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'"
dataSource:
name: odps_first
envType: Dev
rules:
- templateId: "SYSTEM:field:avg:flux:1_7_1m_bizdate"
fields:
- col_income
warn: "when > 1%"
fail: "when > 10%"上記のコードスニペットは、1、7、30 日間の平均ボラティリティ システムルールテンプレートを参照して Data Quality モニタリングルールを作成します。パラメーターは次のように構成されます。
templateId: ルールテンプレートのIDです。その他のルールテンプレート ID については、「システムルールテンプレートリスト」をご参照ください。カスタムルールテンプレートを作成し、「カスタムルールテンプレートの使用」を参照してルールを作成することもできます。templateParameters: ルールテンプレートが必要とするパラメーターです。テンプレートごとに必要なパラメーターは異なります。共通パラメーターはfieldsで、ルールがモニターするフィールドのリストを指定します。各ルールテンプレートで必要なパラメーターについては、「システムルールテンプレートリスト」をご参照ください。
warn/fail: しきい値です。
カスタムルールテンプレートの使用
システムルールテンプレートがニーズを満たさない場合、または同じ SQL 文を含むカスタム SQL ルールが多数ある場合は、カスタムルールテンプレートを作成できます。
カスタムテンプレートの定義
次のコードスニペットは、カスタムルールテンプレートの Spec 構成の例を示しています。
name: "Check for number of rows with non-null ID"
id: "1760d075-00bd-43c9-be8f-3c9a4bac35db"
assertion: "id_not_null_row_count = 0"
id_not_null_row_count:
query: "SELECT COUNT(*) FROM ${table} WHERE dt = '$[yyyymmdd-1]';"
catalog: "ods_layer/real_time_check"上記のコードスニペットは、単純なカスタムルールテンプレートを定義しています。これには、次のフィールドが含まれます。
name: テンプレート名です。id: テンプレートの一意の識別子です。この ID はグローバルに一意である必要があり、テンプレートを参照するために使用されます。assertion: ルールのロジックです。構文の詳細については、「Data Quality Spec 構成」のassertionフィールドをご参照ください。id_not_null_row_count: この例のassertionによって参照されるmetric定義です。queryでは、テーブル名のプレースホルダーとして${tableName}を使用できます。このルールテンプレートからルールを作成すると、このプレースホルダーはルールがモニターするテーブルの名前に置き換えられます。システム時間パラメーターを直接参照することもできます。詳細については、「データフィルタリング構成」をご参照ください。catalog: ルールテンプレートのカテゴリで、管理に使用されます。複数のレベルのカテゴリを区切るには、スラッシュ (/) を使用します。
カスタムテンプレートでのしきい値設定
固定しきい値と非固定しきい値
次のコードスニペットは、非固定しきい値を持つ構成の例を示しています。
name: "Check for number of rows with non-null ID"
id: "1760d075-00bd-43c9-be8f-3c9a4bac35db"
assertion: "id_not_null_row_count"
id_not_null_row_count:
query: "SELECT COUNT(*) FROM ${table} WHERE dt = '$[yyyymmdd-1]';"ボラティリティしきい値
name: "Check for number of rows with non-null ID"
id: "1760d075-00bd-43c9-be8f-3c9a4bac35db"
assertion: "change avg last 7 days percent for id_not_null_row_count"
id_not_null_row_count:
query: "SELECT COUNT(*) FROM ${table} WHERE dt = '$[yyyymmdd-1]';"カスタムテンプレートを使用したルールの作成
例 1
datasets: - type: Table tables: - tb_d_spec_demo filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'" dataSource: name: odps_first envType: Dev rules: - templateId: "1760d075-00bd-43c9-be8f-3c9a4bac35db" # fail を使用して失敗のしきい値を定義します fail: "when != 0"例 2
datasets: - type: Table tables: - tb_d_spec_demo filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'" dataSource: name: odps_first envType: Dev rules: - templateId: "1760d075-00bd-43c9-be8f-3c9a4bac35db" warn: "when between 1 and 10)" fail: "when > 10"例 2
datasets: - type: Table tables: - tb_d_spec_demo filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'" dataSource: name: odps_first envType: Dev rules: - templateId: "1760d075-00bd-43c9-be8f-3c9a4bac35db" warn: "when not between -1% and 1%" fail: "when not between -10% and 10%"
システムルールテンプレートリスト
Id | テンプレート | 必須フィールド | 例 |
| テーブル行数、静的フィールド |
| |
| テーブル行数が 0 より大きい | - | |
| テーブル行数、1 日差分 |
| |
| テーブル行数、前のエポックとの差分 |
| |
| テーブル行数、1、7、30 日間のボラティリティ率 |
| |
| テーブル行数、1、7、30 日間、および月初日のボラティリティ率 |
| |
| テーブル行数、1 日のボラティリティ率 |
| |
| テーブル行数、30 日間のボラティリティ率 |
| |
| テーブル行数、7 日間のボラティリティ率 |
| |
| テーブル行数、動的しきい値 | - | |
| テーブル行数、7 日間の平均ボラティリティ率 |
| |
| テーブル行数、30 日間の平均ボラティリティ率 |
| |
| テーブル行数、前のエポックのボラティリティ率 |
| |
| テーブルサイズ、静的フィールド |
| |
| テーブルサイズ、1 日前との差分 (バイト) |
| |
| テーブルサイズ、前のエポックとの差分 |
| |
| テーブルサイズ、1 日のボラティリティ率 |
| |
| テーブルサイズ、30 日間のボラティリティ率 |
| |
| テーブルサイズ、7 日間のボラティリティ率 |
| |
| テーブルサイズ、動的しきい値 | - | |
| NULL 値の数、静的フィールド |
| |
| NULL レコード数が 0 |
| |
| NULL 値の数/総行数、静的フィールド |
| |
| 正規表現チェック |
| |
| 日付フォーマットチェック |
| |
| メールフォーマットチェック |
| |
| ID カードフォーマットチェック |
| |
| 携帯電話番号フォーマットチェック |
| |
| 通貨フォーマットチェック |
| |
| 数値フォーマットチェック |
| |
| 電話番号フォーマットチェック |
| |
| 重複値の数、静的フィールド |
| |
| フィールドに重複値が 0 |
| |
| 複数フィールドに重複値が 0 |
| |
| 重複値の数/総行数、静的フィールド |
| |
| 一意の値の数、静的フィールド |
| |
| 一意の値の数、1、7、30 日間のボラティリティ率 |
| |
| 一意の値の数、動的しきい値 |
| |
| 一意の値の数/総行数、静的フィールド |
| |
| 最小値、1、7、30 日間のボラティリティ率 |
| |
| 最小値、動的しきい値 |
| |
| 最小値、1 日のボラティリティ率 |
| |
| 最小値、前のエポックのボラティリティ率 |
| |
| 最大値、1、7、30 日間のボラティリティ率 |
| |
| 最大値、動的しきい値 |
| |
| 最大値、1 日のボラティリティ率 |
| |
| 最大値、前のエポックのボラティリティ率 |
| |
| 平均値、1、7、30 日間のボラティリティ率 |
| |
| 平均値、動的しきい値 |
| |
| 平均値、1 日のボラティリティ率 |
| |
| 合計、1、7、30 日間のボラティリティ率 |
| |
| 合計、動的しきい値 |
| |
| 合計、1 日のボラティリティ率 |
| |
| 合計、前のエポックのボラティリティ率 |
| |
| 列挙に一致しない一意の値の数、静的フィールド |
| |
| 列挙に一致しない行数、静的フィールド |
| |
| 列挙に一致しない行数が 0 |
| |
| 列挙値、カスタム、静的フィールド |
| |
| 離散値 (ステータス値)、静的フィールド |
| |
| 離散値 (グループ数)、静的フィールド |
| |
| 離散値 (グループ数)、動的しきい値 |
| |
| 離散値 (ステータス値)、動的しきい値 |
| |
| 離散値 (グループ数)、1 日のボラティリティ率 |
| |
| 離散値 (グループ数とステータス値)、1、7、30 日間のボラティリティ率 |
| |
付録: カスタム範囲システムテンプレートの構成手順
次のカスタム範囲システムテンプレートは、標準のシステムテンプレートとは構成が異なり、個別の構成が必要です。
条件付き一致率、カスタム範囲
rules: - assertion: "matched_row_percent = 0" filter: "id IS NULL"フィールド最小値、カスタム範囲
rules: - assertion: "anomal detection for min(income)"フィールド最大値、カスタム範囲
rules: - assertion: "max(income) の過去 7 日間の平均変化率" warn: "> 0.1% の場合" fail: "> 0.5% の場合"フィールド平均値、カスタム範囲
rules: - assertion: "change var last 30 days percent for avg(income)" warn: "when < -0.1%" fail: "when < -0.5%"フィールド合計、カスタム範囲
rules: - assertion: "change 1 days ago percent for sum(income)" warn: "when not between -0.1% and 0.1%" fail: "when not between -0.5% and 0.5%"カスタム SQL
assertionパラメーターについては、「カスタムメトリックルールを定義する」をご参照ください。rules: - assertion: "change percent for id_not_null_count" id_not_null_count: query: "SELECT COUNT(*) AS cnt FROM tb_spec_demo WHERE dt = '$[yyyymmdd]'" warn: "when not between -0.1% and 0.1%" fail: "when not between -0.5% and 0.5%"