Dataphin Data Quality パーティションフィルター式は、データの生成日時に基づいて品質ルールを調整するために使用されます。システムは、標準のパーティションフィルター式とカスタム式の作成機能の両方を提供します。このトピックでは、パーティションフィルター式の構文、計算ロジック、さまざまなタイプの組み込み式、および一般的なビジネスユースケースについて説明します。
使用上の推奨事項
検証パーティションを指定する必要がなく、コードによって更新されたパーティションを検証することが目的である場合は、コードチェックトリガースケジュール - タスク更新パーティションをお勧めします。この方法では、システムが更新されたデータパーティションを自動的に識別するため、検証パーティションフィルター式を構成する必要はありません。
注: タスク更新パーティションパターンは、パーティションサイズ、パーティション行数、フィールド統計など、特定のパーティションを必要とする揮発性検証ルールのトリガーをサポートしていません。
トリガー日が制限されておらず、新しいパーティションの到着時または毎日、指定されたパーティションの検証が必要な場合は、ビジネス日付
ds='${yyyyMMdd}'、実行日付ds='$[yyyyMMdd]'、または月次ds='${yyyyMM}'パーティションを直接使用できます。月の最初または最後の日、営業日など、特定の日付の検証が必要なシナリオでは、条件付きスケジューリングを有効にすることができます。品質検証は、パブリックカレンダーの条件(月、週、日、営業日、休日、タグなど)とタスクタイプ(時間指定スケジューリング、手動スケジューリング)に基づいて決定できます。
パーティションフィルター式の形式
パーティションフィルター式の構文は次のように定義されます。
column1=${FORMAT[OPERATE NUM DELTA]} and columnN=$[FORMAT[OPERATE NUM DELTA]];
例:
ds=${yyyyMMdd-1M} and city='cn-hangzhou' and hour=${HH:mm:ss};
形式の説明:
${expression}:
データ生成のビジネス日付が計算の基準となります。たとえば、20220101に生成されたデータは、その日付を使用して計算されます。
さまざまなパーティションフィルター式の場合、${yyyy}、${MM}、${dd} などの基本式を組み合わせる必要があります。たとえば、式 ds=${yyyy}-${MM}-${dd} は、20220101に生成されたデータに対してパーティション条件 ds=2022-01-01 を生成します。OPERATE は各基本式に適用できます。
$[expression]:
現在の実行日付が計算に使用されるため、時間と分レベルのほぼリアルタイムのタスクに適しています。たとえば、実行日が 20220101 の場合、計算はその日付に基づいて行われます。
異なる形式のパーティションフィルター式の場合、$[yyyy]、$[MM]、$[dd] などの基本式を連結する必要があります。たとえば、式 ds=$[yyyy]-$[MM]-$[dd] は、20220101に生成されたデータに対してパーティション条件 ds=2022-01-01 を生成します。OPERATE は各基本式に適用できます。
column1……columnN:
パーティションフィールド。複数レベルのパーティションは「and」でリンクして、複数レベルの「and」タイプのパーティションフィルター式を作成できます。複数レベルの「or」タイプのパーティションフィルター式は現在サポートされていません。
FORMAT: パーティション形式文字列。次の形式文字列をサポートしています。
yyyy: 年。
MM: 月。
dd: 日。
ld: 月の最終日。
HH: 24時間形式。
hh: 12時間形式。
mm: 分。
ss: 秒。
OPERATE: 演算子。以下をサポートしています。
+: 増加。たとえば、+1y は 1 年の追加を意味し、+1M は 1 か月の追加を意味します。
-: 減少。たとえば、-1y は 1 年の減算を意味し、-1M は 1 か月の減算を意味します。
~: 指定。たとえば、~3M は 3 か月の指定を意味し、~1q は第 1 四半期の最後の月の指定を意味します。
%: 剰余。たとえば、%1m は月をゼロにリセットすることを意味し、%1h は時間をゼロにリセットすることを意味します。
NUM: DELTA の量を制御するために使用される数値。
DELTA: 識別子。以下をサポートしています。
識別子
意味
タイプ
例
y
年
数値
2009
M
年の月
テキストと数値
7月 & 07
d
月の日にち
数値
10
h
午前/午後(1~12)の時間
数値
12
H
日(0~23)の時間
数値
0
m
時間の分
数値
30
s
分の秒
数値
55
S
ミリ秒
数値
978
E
週の日にち
テキスト
1(日曜日)
2(月曜日)
3(火曜日)
4(水曜日)
5(木曜日)
6(金曜日)
7(土曜日)
D
年の日にち
数値
189
F
月の週の日にち
数値
2(7月の第 2 水曜日)
w
年の週
数値
27
W
月の週
数値
2
a
AM/PM マーカー
テキスト
PM
k
日(1~24)の時間
数値
24
K
午前/午後(0~11)の時間
数値
0
z
タイムゾーン
テキスト
太平洋標準時
Q
四半期、最初の月
数値
月=1,4,7,10
q
四半期、最後の月
数値
月=3,6,9,12
パーティションフィルター式の計算ロジック
計算例 1: 日付式、実行条件、およびトリガー条件の説明
ds=${yyyyMMld-1d};
日付式の説明: 5月のパーティションデータが生成されると、次の計算が実行されます。
ステップ 1: yyyyMMld を計算します。これは、指定された月の最終日です。5月の場合は31日なので、20220531になります。
ステップ 2: DELTA を適用します。この場合は1日を減算します。したがって、20220531 から 1 日を引くと 20220530 になります。
最終結果は 20220530 です。
計算例 2:
ds=$[yyyyMMdd-1M];
$[] を使用する場合、計算はデータのビジネス日付ではなく、実行日付に基づいて行われます。今日が 2022 年 5 月 3 日で、4 月 3 日のデータがバックフィルされているとします。次の計算が実行されます。
ステップ 1: yyyyMMdd を計算します。現在の実行時刻である 5 月 3 日に基づいて、結果は 20220503 になります。
ステップ 2: DELTA を適用します。これは -1M なので、前月の同じ日になります。結果は 20220403 になります。
4 月 3 日のデータをバックフィルすると、ルールがトリガーされます。5 月 3 日または 3 月 3 日のデータをバックフィルする場合、ルールはトリガーされません。$[] は、主に実行日付に関連するパーティション式に使用されます。
4 月 3 日のデータのバックフィル時にルールがトリガーされます。ただし、5 月 3 日または 3 月 3 日のデータバックフィルではトリガーされません。$[] 構文は、主に実行日付に関連するパーティション式を作成するために使用されます。
組み込みパーティションフィルター式のタイプ
ビジネス日付(時刻): データ生成のビジネス日付に基づいて計算されます。たとえば、20220101に生成されたデータの場合、計算はその日付を使用して実行されます。
実行日付(時刻): トリガースケジュールは、タスクの時間指定スケジュール実行時刻を使用します(上流の依存関係またはリソースの問題により実際の実行時刻が遅れる場合がありますが、タスクのスケジュールされた時刻が使用されます)。時間指定スケジュールは、スケジュールされた時刻 T を使用します。
パーティションフィルター式 | 新しい名前 |
ds=${yyyyMMdd} | ビジネス日付 |
ds=${yyyyMMdd} and hour=${HH} | ビジネス日付時刻 |
ds=${HHmmss} | ビジネス時刻 |
ds=$[yyyyMMdd] | 実行日付 |
ds=$[yyyyMMdd] and hour $[HH] | 実行日付時刻 |
ds=$[HHmmss] | 実行時刻 |
ds=$[yyyyMMdd - 1d] | 実行日の前日 |
full table | フルテーブルスキャン |
一般的なビジネス例
毎月特定の日に前月の給与を生成する
たとえば、給与が毎月 15 日に発行され、yyyyMM の形式でパーティションフィールドを持つ前月のデータを要約する場合、次の構成が必要です。
スケジュール条件の構成: 日付 - 次のいずれか - 15日。

パーティションフィルター式の構成:
ds=$[yyyyMM-1M];
毎月の最終日に今月の給与を生成する
給与が毎月の最終日に配布され、yyyyMM の形式でパーティションフィールドを持つその月のデータを要約する場合、次の構成が必要です。
スケジュール条件の構成: 日付 - 次のいずれか - 月の最終日。

パーティションフィルター式の構成:
ds=$[yyyyMM];
毎時の最後の分に、分レベルのタスクチェックを実行する
通常 yyyyMMdd HH:mm の形式でフォーマットされた分レベルのタスクの場合、毎時の最後の分は 59 分です。これは、次のパーティションフィルター式で表すことができます: ds=$[yyyyMMdd HH:59];