Dataphin資料品質分區運算式,用於控制品質規則按照資料產出日期匹配觸發,系統內建了常用的分區運算式,也允許通過自訂方式進行個人化控制。本文為您介紹分區運算式格式說明、分區運算式計算邏輯、內建分區運算式類型以及常用業務樣本說明。
使用建議
對於不需要明確指定校正分區,而是代碼更新哪些分區就校正哪些分區的情境,建議使用代碼檢查觸發調度-任務更新的分區。這種情況不需要配置校正分區運算式,會自動從代碼中檢測更新了哪些資料分區。
注意,任務更新分區模式暫不支援觸發需要指定分區的波動性校正規則(如分區大小、分區行數、欄位統計值)。
對於不需要限制觸發日期,希望每天或者表有新分區的時候,就對指定分區進行校正,這時,建議直接使用業務日期
ds='${yyyyMMdd}'、執行日期ds='$[yyyyMMdd]'、每月ds='${yyyyMM}'的分區 。對於希望指定時間才校正的,如每月1號、月末日、工作日才校正,則可以開啟條件調度。可以根據公用日曆的條件(月份、星期、日期、工作日假日、標籤等)和任務的類型(定時調度、手動調度)判斷是否進行品質校正。
分區運算式格式說明
分區運算式格式定義:
column1=${FORMAT[OPERATE NUM DELTA]} and columnN=$[FORMAT[OPERATE NUM DELTA]];
樣本:
ds=${yyyyMMdd-1M} and city='cn-hangzhou' and hour=${HH:mm:ss};
格式說明:
${運算式}:
計算時將按照資料產出的業務日期為基準進行計算,例如:產出20220101的資料,將按照20220101執行計算。
對於不同格式分區運算式,需要使用${yyyy}、${MM}、${dd}等基礎資料表達式進行拼接,例如:ds=${yyyy}-${MM}-${dd}運算式產出20220101的資料將會產生ds=2022-01-01的分區條件,且各基礎資料表達式可通過OPERATE進行相關操作。
$[運算式]:
計算時將當前執行日期作為基準進行計算,適用於表達當天,可用表達於小時分鐘級准即時任務的分區,例如:20220101這一天執行,將把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就是加一月。
-:減少,例如-1y就是減1年,-1M就是減一月。
~:指定,例如~3M,就是指定為3月,~1q就是指定為一季度最後一月。
%:取餘,例如%1m,就是將月份歸零,%1h,就是將小時部分歸零。
NUM 數字,用於控制DETA的數量。
DETA 標識符,支援如下表格中的標識符:
標識
含義
類型
執行個體
y
year
Number
2009
M
month in year
Text & Number
July & 07
d
day in month
Number
10
h
hour in am/pm (1-12)
Number
12
H
hour in day (0-23)
Number
0
m
minute in hour
Number
30
s
second in minute
Number
55
S
millisecond
Number
978
E
day in week
Text
1(周日)
2(周一)
3(周二)
4(周三)
5(周四)
6(周五)
7(周六)
D
day in year
Number
189
F
day of week in month
Number
2 (2nd Wed in July)
w
week in year
Number
27
W
week in month
Number
2
a
am/pm marker
Text
PM
k
hour in day (1-24)
Number
24
K
hour in am/pm (0-11)
Number
0
z
time zone
Text
Pacific Standard Time
Q
季度,取首月
Number
月份=1,4,7,10
q
季度,取末月
Number
月份=3,6,9,12
分區運算式計算邏輯
計算執行個體1:日期運算式、執行條件與觸發條件說明
ds=${yyyyMMld-1d};
日期運算式說明,當5月份的分區資料產出的時候,將進行如下計算:
第一步:計算yyyyMMld,即是取給定日期所在月的最後一天,5月最後一天為31日,得到結果:20220531。
第二步:計算DELTA,DELTA為減1天,20220531減1天為20220530。
最終結果為20220530。
計算執行個體2:
ds=$[yyyyMMdd-1M];
當使用$[]時,計算依據將是執行日期,而不是資料的業務日期。假設今天是2022年5月3日,現在補了4月3日的資料,將進行如下計算:
第一步,計算yyyyMMdd,按照當前執行時間5月3日,計算得到20220503。
第二步,計算DELTA,DELTA為-1M,將計算上月同一天的資料,計算得到20220403。
最終結果為20220403。
當補4月3日資料時就會觸發規則執行,如果補5月3日,或者3月3日,則不會觸發規則,$[]主要用於實現與執行日期相關的分區表達。
內建分區運算式類型
業務日期(時間):按照資料產出的業務日期為基準進行計算,例如:產出20220101的資料,將按照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];
分鐘級任務每小時最後一分鐘檢查
通常分鐘級任務的ds格式為:yyyyMMdd HH:mm,每小時最後一分鐘就是59分鐘,可以通過如下分區運算式:ds=$[yyyyMMdd HH:59];