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

DataWorks:データフィルタリング構成

最終更新日:Dec 11, 2025

データ品質モニタリングでは通常、テーブル全体ではなく、変更されたデータのみをチェックします。このトピックでは、データフィルタリングの構成方法について説明します。

データフィルタリング構成の例

ほとんどのシナリオでは、時間フィールドに基づいて変更されたデータをフィルタリングします。例えば、MaxCompute の時間パーティションを使用したり、MySQL のビジネストランザクションテーブルでトランザクション作成時間によってフィルタリングしたりします。

データをフィルターするには、モニタリングルールで filter パラメーターを設定します。次のコードは構成例です。

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"
    # ルールレベルでフィルターを追加します。これは Scan.dataset のフィルターと連携して動作します。
    # 実際に実行されるフィルターは (dt = '$[yyyymmdd-1]' AND hh = '$[hh24-1/24]') AND (id IS NOT NULL) です。
    filter: "id IS NOT NULL"
computeResource:
  id: 2001

filter 構文

基本構文

filter 構文は、match 述語と overlaps 述語を除き、SQL-92 標準の WHERE 句とほぼ同じです。構文は次のとおりです。

<search condition> ::=
    <boolean term> | <search condition> OR <boolean term>

<boolean term> ::=
    <boolean factor> | <boolean term> AND <boolean factor>

<boolean factor> ::=
    [ NOT ] <boolean test>

<boolean test> ::=
    <predicate> | ( <search condition> )

<predicate> ::=
    <comparison predicate> | <between predicate> |
    <in predicate> | <like predicate> | <null predicate> |
    <quantified comparison predicate> | <exists predicate>

<comparison predicate> ::=
    <expression> <comparison_operator> <expression>

<between predicate> ::=
    <expression> [NOT] BETWEEN <lower_bound> AND <upper_bound>

<in predicate> ::=
    <expression> [NOT] IN (value_list | subquery)

<like predicate> ::=
    <expression> [NOT] LIKE pattern [ESCAPE escape_character]

<null predicate> ::=
    <expression> IS [NOT] NULL

<quantified comparison predicate> ::=
    <expression> <comparison_operator> { ALL | ANY | SOME } (subquery)

<exists predicate> ::=
    EXISTS (subquery)

構成例

  • 比較述語

    salary > 50000
  • BETWEEN 述語

    price BETWEEN 10 AND 50
  • 述語内

    department IN ('Sales', 'Marketing')
  • LIKE 述語

    name LIKE 'Jo%'
  • NULL 述語

    department IS NOT NULL
  • 量化比較述語

    salary > ALL (SELECT salary FROM employees WHERE department = 'Sales')
  • EXISTS 述語

    EXISTS (SELECT 1 FROM customers cu WHERE cu.country_id = c.country_id)
  • より複雑な検索条件

    -- AND 論理演算子で 2 つの述語を接続
    salary > ALL (SELECT salary FROM employees WHERE department = 'Sales') AND EXISTS (SELECT 1 FROM customers cu WHERE cu.country_id = c.country_id)
    -- OR 論理演算子で接続
    department IS NOT NULL OR name LIKE 'Jo%'

ネイティブクエリを使用したフィルターの定義

基盤となるデータストレージへのクエリが、RLIKE、地理位置情報検索、全文検索などの特徴を使用しているために標準の SQL-92 で表現できない場合は、filter に直接ネイティブクエリを記述できます。ネイティブクエリは query: キーワードで開始します。

たとえば、RLIKE を使用して MaxCompute テーブルのデータをフィルターするには、次の構成を使用します。

datasets:
  - type: Table
    indices:
      - ods_d_customers
    dataSource:
      name: odps_first
      envType: Dev
rules:
  - assertion: "row_count > 0"
    filter: "query: email_address RLIKE '^info@'"

フィルターでの時間変数の使用

時間パーティションを使用する場合、Data Quality は当日または前日 (T-1) のパーティションをスキャンします。システムは、毎日の実行ごとに正しい日付を自動的に決定する必要があります。これを行うには、スケジューリングシステムの時刻オフセット式を使用できます。

たとえば、filter$[yyyymmdd-1] のような時間式を使用すると、Data Quality システムはインスタンスのスケジュールされた時間に基づいてオフセットを自動的に計算し、式を計算された値に置き換えます。

説明

Data Quality モニタリングがスケジューリングインスタンスによってトリガーされない場合は、CreateDataQualityScanRun のトリガーパラメーターで triggerTime を指定します。システムは triggerTime をオフセットの基準として使用します。