データ品質モニタリングでは通常、テーブル全体ではなく、変更されたデータのみをチェックします。このトピックでは、データフィルタリングの構成方法について説明します。
データフィルタリング構成の例
ほとんどのシナリオでは、時間フィールドに基づいて変更されたデータをフィルタリングします。例えば、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: 2001filter 構文
基本構文
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 > 50000BETWEEN 述語
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 をオフセットの基準として使用します。