すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Data Quality Spec 設定ガイド

最終更新日:Oct 15, 2025

この JSON 仕様は、DataWorks のデータ品質モニタリングルールとリソースを定義します。DataWorks API 操作を呼び出してデータ品質ルールを作成および管理する際に、リクエストパラメーターとして使用します。

基本的な定義

以下は、テーブルの行数を検証する簡単なデータ品質ルールの例です。

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "dataSource": {
        "name": "odps_first", 
        "envType": "Dev"
      }
    }
  ],
  "rules": [
    {
      "assertion": "row_count > 0"
    }
  ]
}

設定リファレンス

この例では、以下のプロパティを持つ基本的なデータ品質モニタリングルールを定義しています。

  • datasets: 監視するデータオブジェクト。各データセットには以下が含まれます:

    • type: 監視するオブジェクトタイプ。現在、Table のみがサポートされています。

    • dataSource: データを含むデータソース。name および envType パラメーターを設定してデータソースを識別できます。データソース名を取得するには、ListDataSources 操作を呼び出します。

      説明

      現在、一部のデータソースのみがサポートされています。詳細については、「サポートされているデータソースタイプ」をご参照ください。

    • tables: 監視するテーブル名 (typeTable の場合に必須)。

      説明

      データソースがデータベースレベルで接続されており、デフォルト以外のスキーマのテーブルを監視する必要がある場合は、schema.table のフォーマットを使用します。

  • rules: データが満たすべき検証ルール。各モニタリング設定には複数のルールを含めることができます。

    検証の仕組み:

    1. システムは監視対象オブジェクトのデータをスキャンします。

    2. 各ルールのメトリック値を計算します。

    3. 定義されたしきい値と値を比較します。

    4. 以下の 3 つのステータスのいずれかを返します:

      1. pass: メトリック値が許容されるしきい値の範囲内です。

      2. fail: メトリック値がしきい値の範囲外です。

      3. error: 検証で例外が発生しました (例: 構文エラー)。

説明

しきい値のタイプ

以下のいずれかのメソッドを使用してしきい値を定義します:

静的しきい値

メトリックを固定値と直接比較します。

  • メトリック

  • 引数 (オプション)

  • 比較記号 (オプション)

  • しきい値 (オプション)

{
  "rules": [
    {
      // テーブルにはデータが含まれている必要があります
      "assertion": "row_count > 0"
    },
    {
      // Size フィールドの最大値は 500 を超えてはなりません
      "assertion": "max(size) <= 500"
    }
  ]
}

式の内訳:

式の部分

row_count > 0

max(size) <= 500

メトリック

row_count

max

引数 (オプション)

(size)

比較記号 (オプション)

>

<=

しきい値 (オプション)

0

500

利用可能なオペレーターの詳細については、「サポートされている比較オペレーター」をご参照ください。

変動しきい値

現在のメトリックを過去のベースラインと比較して異常を検出します。

ユースケース:

  • 1 日のユーザー数は昨日から 100 を超えて変動してはなりません

  • 今日の収益は、7 日間の平均から 10% を超えて変動してはなりません

通常、変動しきい値を定義するには、metric の前に change for を追加します。変動しきい値の定義には、次の部分が含まれます:

  • change (キーワード)

  • 集計タイプ (オプション)

  • タイムウィンドウ (オプション)

  • percent (キーワード、オプション)

  • for (キーワード)

  • メトリック

  • 引数 (オプション)

  • 比較記号 (オプション)

  • しきい値 (オプション)

式のフォーマットは change [aggregate_type] [time_window] [percent] for metric [argument] [comparison_symbol threshold] です。

例 1: 最後のチェックとの比較

{
  "rules": [
    {
      // 前回の検証からの行数の変更は 10,000 以内でなければなりません
      "assertion": "change for row_count < 10000"
    }
  ]
}

例 2: 特定のタイムウィンドウとの比較

比較対象の過去のメトリックを指定します:

{
  "rules": [
    {
      // 7 日前からの行数の変更は 10,000 以内でなければなりません
      "assertion": "change 7 days ago for row_count < 10000"
    }
  ]
}

例 3: 集計された過去の値との比較

比較前に過去のデータを集計します:

{
  "rules": [
    {
      // 7 日間の平均からの行数の変更は 10,000 以内でなければなりません
      "assertion": "change average last 7 days for row_count < 10000"
    }
  ]
}

サポートされている集計方法:

  • avg: 平均値。

  • var: 分散。

集計方法を省略すると、システムは各過去のレコードと個別に比較し、最も深刻なステータスを返します。

例 4: パーセンテージベースの変動

比較前にパーセンテージの変化を計算します:

{
  "rules": [
    {
      // 前回のチェックからの行数のパーセンテージ変化は 50% 以内でなければなりません
      "assertion": "change percent for row_count < 50%"
    }
  ]
}

パーセンテージの計算: 現在の値 c と以前の値 p が与えられた場合、percent = (c - p) / p となります。エッジケース:

  • 両方の値が 0 の場合: パーセンテージ = 0。

  • 以前の値が 0 で現在の値が 0 でない場合: 検証は error を返します。

重要
  • % 記号はオプションですが、可読性を向上させます

  • 結果は負になることがあります。範囲構文を使用して、許容される変動帯を定義します。

範囲しきい値

区間表記を使用して、許容される値の範囲を定義します。

閉区間 (デフォルト)

両方の境界が含まれます:

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "filter": "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'",
      "dataSource": {
        "name": "odps_first", 
        "envType": "Dev"
      }
    }
  ],
  "rules": [
    {
      "assertion": "row_count between 10 and 15"
    }
  ]
}

開区間

括弧を使用して境界を除外します:

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "filter": "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'",
      "dataSource": {
        "name": "odps_first", 
        "envType": "Dev"
      }
    }
  ],
  "rules": [
    {
      "assertion": "row_count between (10 and 15"
    }, {
      "assertion": "row_count between (10 and 15)"
    }
  ]
}

明示的な区間境界

閉じた境界には角括弧 [ ] を使用します:

  • [10, 15]

  • [10, 15)

  • (10, 15]

  • [10, 15]

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "filter": "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'",
      "dataSource": {
        "name": "odps_first"
      }
    }
  ],
  "rules": [
    {
      "assertion": "row_count between 10 and 15"
    }, {
      "assertion": "row_count between [10 and 15"
    }, {
      "assertion": "row_count between 10 and 15]"
    }, {
      "assertion": "row_count between [10 and 15]"
    }
  ]
}

複数レベルのしきい値定義

アサーションにしきい値を埋め込む代わりに、warnfail のしきい値を別々のプロパティとして定義します:

{
  "rules": [
    {
      "assertion": "duplicate_count(phone)",
      "warn": "when between 1 and 10",
      "fail": "when > 10"
    }
  ]
}

上記のコードスニペットは、warnfail の 2 つのしきい値レベルを定義しています:

  • phone フィールドの重複行数が 0 の場合、チェックは成功します。

  • phone フィールドの重複行数が 10 より大きい場合、チェック結果は fail になります。

  • phone フィールドの重複行数が 1 から 10 の間の場合、チェック結果は warn になります。

配列ベースのしきい値

各重要度レベルに対して複数の条件を定義します:

{
  "rules": [
    {
      "assertion": "duplicate_count(phone)",
      "warn": [
        "when > 2",
        "when < 0"
      ]
    }
  ]
}

重複数が 2 より大きいか 0 より小さい場合、warn しきい値がトリガーされます。

重複するしきい値

しきい値の範囲が重複する場合、システムは最も深刻なステータスを返します。

区間の補集合

not between...and... を使用して、区間外の許容範囲を定義します:

{
  "rules": [
    {
      "assertion": "duplicate_count(phone)",
      "warn": "when not between -10 and 10",
      "fail": "when not between -20 and 20"
    }
  ]
}

視覚的な表現:

ルール識別子

ルールに identify を指定して、そのグローバルに一意な識別子として機能させることができます。

  • ルール作成時に identify を指定しない場合、システムは自動的にルールに id を割り当てます。

  • identify がグローバルに一意であることを確認する必要があります。そうしないと、更新が失敗したり、誤って他のルールを更新したりする可能性があります。uuid を使用することをお勧めします。

  • 変動しきい値ルール (change...for...) および外れ値検出ルール (anomaly detection for ...) の場合、システムはルールの identify に基づいてチェック履歴をクエリします。

  • システムが Data Quality モニタリングルールの更新リクエストを受信すると、次のようにリクエストを処理します:

    • まず、システムは更新リクエスト内の各ルールを走査し、ルールの id を使用して Data Quality モニタリング設定内の既存のルールを照合および更新します。

    • システムは、リクエスト内に一致する id がない Data Quality モニタリング設定内の既存のルールを削除します。

    • システムは、更新リクエストから残りのルールを Data Quality モニタリング設定の新しいルールとして作成します。

次の例は、identify を指定する方法を示しています:

{
  "rules": [
    {
      "assertion": "row_count > 0",
      "name": "Number of data rows is greater than 0",
      // グローバルに一意な識別子を指定します。
      "identify": "3de219e2-cb3c-4e3c-bff0-15f607c641f2"
    }
  ]
}

ビジネスの重要度レベル

ビジネスへの影響の重要度でルールをタグ付けします:

{
  "rules": [
    {
      "assertion": "row_count > 0",
      "severity": "High"
    }
  ]
}

サポートされているレベル:

  • 通常 (デフォルト)

ルールの有効化または無効化

設定を削除せずにルールの実行を制御します:

{
  "rules": [
    {
      "assertion": "row_count > 0",
      "enabled": false  // 検証中にルールは実行されません
    }
  ]
}

予備 SQL 文

メトリック計算の前に SET 文を実行します:

{
  "rules": [
    {
      "assertion": "row_count > 0",
      "settingConfig": "SET odps.sql.udf.timeout=600s; SET odps.sql.python.version=cp27;"
    }
  ]
}

問題のあるデータの保持

検証の失敗を引き起こした行を自動的に保存します:

{
  "rules": [
    {
      "assertion": "duplicate_count(phone) = 0",
      "collectFailedRows": true
    }
  ]
}

検証が warn または fail を返した場合、システムは問題のある行をフィルター処理し、同じデータベース内の別のテーブルに保存します。

カスタム SQL ルールの場合、フィルタークエリを明示的に定義します:

{
  "rules": [
    {
      "assertion": "id_null_count = 0",
      "id_null_count": {
        "expression": "id IS NULL"
      },
      "collectFailedRows": true,
      "failedRowsQuery": "SELECT * FROM tb_d_spec_demo WHERE dt = '$[yyyymmdd-1]' AND id IS NULL"
    }
  ]
}

データ保持でサポートされているメトリック:

  • missing_count

  • missing_percent

  • duplicate_count

  • duplicate_percent

  • distinct_count

  • distinct_percent

ルール名と説明

より良い編成のためにメタデータを追加します。これらの値は、検証結果と DataWorks UI に表示されます。

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "filter": "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'",
      "dataSource": {
        "name": "odps_first", 
        "envType": "Dev"
      }
    }
  ],
  "rules": [
    {
      "assertion": "row_count > 0",
      // ルール名と説明
      "name": "Number of data rows is greater than 0",
      "description": "Output data cannot be empty"
    }
  ]
}

データフィルタリング

ルールレベルのフィルター

特定のルールにフィルターを適用します:

{
  "rules": [
    {
      "assertion": "row_count > 0",
      "filter": "id IS NOT NULL"
    }
  ]
}

データセットレベルのフィルター

モニタリング設定のすべてのルールにグローバルにフィルターを適用します:

{
  "datasets": [
    {
      "type": "Table",
      "tables": [
        "tb_d_spec_demo"
      ],
      "filter": "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'",
      "dataSource": {
        "name": "odps_first"
      }
    }
  ]
  "rules": [
    {
      "assertion": "row_count > 0"
    }
  ]
}
説明

この例では、時間式 $[yyyymmdd-1] を使用しています。検証の実行時に、システムはこれを triggerTime パラメーターの実際のタイムスタンプに置き換えます。サポートされているパラメーターフォーマットについては、「データフィルタリング設定」をご参照ください。

付録

サポートされている比較オペレーター

  • >

  • >=

  • <

  • <=

  • =

  • !=

  • between ... and ...

サポートされているデータソースタイプ

  • maxcompute

  • hologres

  • emr

  • mysql

  • analyticdb_for_mysql

  • analyticdb_for_postgresql

  • cdh

  • starrocks

サポートされている組み込みメトリックタイプ

  • avg

  • row_count

  • sum

  • min

  • max

  • distinct_count

  • distinct_percent

  • table_size

  • missing_count

  • missing_percent

  • duplicate_percent

  • duplicate_count

  • group_by

  • invalid_count

  • invalid_distinct_count

タイムウィンドウの構文

これらのフォーマットを使用して、過去の比較期間を定義します:

  • n タイムユニット前: n (minute[s]|hour[s]|day[s]|week[s]|month[s]) ago。例には、n months agon days agon hours ago が含まれます。

    • 1 日前: 1 day ago

    • 7 日前: 7 days ago

    • 1 か月前: 1 month ago

    • 8 時間前: 8 hours ago

    • 15 分前: 15 minutes ago

  • 最後の期間: last n (minute[s]|hour[s]|day[s]|week[s]|month[s]) [with interval m (minute[s]|hour[s]|day[s]|week[s]|month[s])]。例には、the last 15 minutesthe last 7 daysthe last 1 month が含まれます。

    • 過去 15 分間: last 15 minutes

    • 過去 24 時間、1 時間ごとに 1 つのデータポイントを収集: last 24 hours with interval 1 hour

      説明

      データポイントは、現在の時刻の 24 時間前から現在の時刻まで、1 時間ごとに収集されます。

    • 過去 7 日間: last 7 days

    • 過去 1 か月間: last 1 month

  • 月内の特定の日または週内の特定の曜日の同じ時刻: 1/2/3/.../-3/-2/-1 of (current|last|n) (months|weeks) (ago)

    • 当月の 1 日の同じ時刻: 1 of current month

    • 先月の最終日の同じ時刻: -1 of last month

    • 3 週間前の火曜日の同じ時刻: 2 of 3 weeks ago

  • `n` 個のタイムウィンドウの連結: time window and time window [and time window]

    • 1 日前、7 日前、1 か月前、および当月の 1 日: 1 day ago and 7 days ago and 1 month ago and 1 of current month