分區(qū)表達(dá)式介紹
Dataphin數(shù)據(jù)質(zhì)量分區(qū)表達(dá)式,用于控制質(zhì)量規(guī)則按照數(shù)據(jù)產(chǎn)出日期匹配觸發(fā),系統(tǒng)內(nèi)置了常用的分區(qū)表達(dá)式,也允許通過自定義方式進(jìn)行個性化控制。本文為您介紹分區(qū)表達(dá)式格式說明、分區(qū)表達(dá)式計算邏輯、內(nèi)置分區(qū)表達(dá)式類型以及常用業(yè)務(wù)示例說明。
使用建議
對于不需要明確指定校驗分區(qū),而是代碼更新哪些分區(qū)就校驗?zāi)男┓謪^(qū)的場景,建議使用代碼檢查觸發(fā)調(diào)度-任務(wù)更新的分區(qū)。這種情況不需要配置校驗分區(qū)表達(dá)式,會自動從代碼中檢測更新了哪些數(shù)據(jù)分區(qū)。
注意,任務(wù)更新分區(qū)模式暫不支持觸發(fā)需要指定分區(qū)的波動性校驗規(guī)則(如分區(qū)大小、分區(qū)行數(shù)、字段統(tǒng)計值)。
對于不需要限制觸發(fā)日期,希望每天或者表有新分區(qū)的時候,就對指定分區(qū)進(jìn)行校驗,這時,建議直接使用業(yè)務(wù)日期
ds='${yyyyMMdd}'
、執(zhí)行日期ds='$[yyyyMMdd]'
、每月ds='${yyyyMM}'
的分區(qū) 。對于希望指定時間才校驗的,如每月1號、月末日、工作日才校驗,則可以開啟條件調(diào)度。可以根據(jù)公共日歷的條件(月份、星期、日期、工作日假日、標(biāo)簽等)和任務(wù)的類型(定時調(diào)度、手動調(diào)度)判斷是否進(jìn)行質(zhì)量校驗。
分區(qū)表達(dá)式格式說明
分區(qū)表達(dá)式格式定義:
column1=${FORMAT[OPERATE NUM DELTA]} and columnN=$[FORMAT[OPERATE NUM DELTA]];
示例:
ds=${yyyyMMdd-1M} and city='cn-hangzhou' and hour=${HH:mm:ss};
格式說明:
${表達(dá)式}:
計算時將按照數(shù)據(jù)產(chǎn)出的業(yè)務(wù)日期為基準(zhǔn)進(jìn)行計算,例如:產(chǎn)出20220101的數(shù)據(jù),將按照20220101執(zhí)行計算。
對于不同格式分區(qū)表達(dá)式,需要使用${yyyy}、${MM}、${dd}等基礎(chǔ)表達(dá)式進(jìn)行拼接,例如:ds=${yyyy}-${MM}-${dd}表達(dá)式產(chǎn)出20220101的數(shù)據(jù)將會生成ds=2022-01-01的分區(qū)條件,且各基礎(chǔ)表達(dá)式可通過OPERATE進(jìn)行相關(guān)操作。
$[表達(dá)式]:
計算時將當(dāng)前執(zhí)行日期作為基準(zhǔn)進(jìn)行計算,適用于表達(dá)當(dāng)天,可用表達(dá)于小時分鐘級準(zhǔn)實時任務(wù)的分區(qū),例如:20220101這一天執(zhí)行,將把20220101代入計算。
對于不同格式分區(qū)表達(dá)式,需要使用$[yyyy]、$[MM]、$[dd]等基礎(chǔ)表達(dá)式進(jìn)行拼接,例如:ds=$[yyyy]-$[MM]-$[dd]表達(dá)式產(chǎn)出20220101的數(shù)據(jù)將會生成ds=2022-01-01的分區(qū)條件,且各基礎(chǔ)表達(dá)式可通過OPERATE進(jìn)行相關(guān)操作。
column1..columnN:
分區(qū)字段,多級分區(qū)可以通過and進(jìn)行連接,形成and類型的多級分區(qū)表達(dá)式。暫不支持or類型的多級分區(qū)表達(dá)式。
FORMAT :分區(qū)格式化串,支持如下格式化串:
yyyy:年。
MM:月。
dd:日。
ld:每月最后一天。
HH:24制小時。
hh:12制小時。
mm:分鐘。
ss:秒。
OPERATE 操作符,支持如下操作符:
+:增加,例如+1y就是加1年,+1M就是加一月。
-:減少,例如-1y就是減1年,-1M就是減一月。
~:指定,例如~3M,就是指定為3月,~1q就是指定為一季度最后一月。
%:取余,例如%1m,就是將月份歸零,%1h,就是將小時部分歸零。
NUM 數(shù)字,用于控制DETA的數(shù)量。
DETA 標(biāo)識符,支持如下表格中的標(biāo)識符:
標(biāo)識
含義
類型
實例
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
分區(qū)表達(dá)式計算邏輯
計算實例1:日期表達(dá)式、執(zhí)行條件與觸發(fā)條件說明
ds=${yyyyMMld-1d};
日期表達(dá)式說明,當(dāng)5月份的分區(qū)數(shù)據(jù)產(chǎn)出的時候,將進(jìn)行如下計算:
第一步:計算yyyyMMld,即是取給定日期所在月的最后一天,5月最后一天為31日,得到結(jié)果:20220531。
第二步:計算DELTA,DELTA為減1天,20220531減1天為20220530。
最終結(jié)果為20220530。
計算實例2:
ds=$[yyyyMMdd-1M];
當(dāng)使用$[]時,計算依據(jù)將是執(zhí)行日期,而不是數(shù)據(jù)的業(yè)務(wù)日期。假設(shè)今天是2022年5月3日,現(xiàn)在補(bǔ)了4月3日的數(shù)據(jù),將進(jìn)行如下計算:
第一步,計算yyyyMMdd,按照當(dāng)前執(zhí)行時間5月3日,計算得到20220503。
第二步,計算DELTA,DELTA為-1M,將計算上月同一天的數(shù)據(jù),計算得到20220403。
最終結(jié)果為20220403。
當(dāng)補(bǔ)4月3日數(shù)據(jù)時就會觸發(fā)規(guī)則執(zhí)行,如果補(bǔ)5月3日,或者3月3日,則不會觸發(fā)規(guī)則,$[]主要用于實現(xiàn)與執(zhí)行日期相關(guān)的分區(qū)表達(dá)。
內(nèi)置分區(qū)表達(dá)式類型
業(yè)務(wù)日期(時間):按照數(shù)據(jù)產(chǎn)出的業(yè)務(wù)日期為基準(zhǔn)進(jìn)行計算,例如:產(chǎn)出20220101的數(shù)據(jù),將按照20220101執(zhí)行計算。
執(zhí)行日期(時間):觸發(fā)調(diào)度取任務(wù)定時調(diào)度的執(zhí)行時間(實際執(zhí)行時間可能會因為上游依賴或者資源問題延后,這里取任務(wù)本身的定時時間);定時調(diào)度取定時的時間T。
分區(qū)表達(dá)式 | 新名稱 |
ds=${yyyyMMdd} | 業(yè)務(wù)日期 |
ds=${yyyyMMdd} and hour=${HH} | 業(yè)務(wù)日期時間 |
ds=${HHmmss} | 業(yè)務(wù)時間 |
ds=$[yyyyMMdd] | 執(zhí)行日期 |
ds=$[yyyyMMdd] and hour $[HH] | 執(zhí)行日期時間 |
ds=$[HHmmss] | 執(zhí)行時間 |
ds=$[yyyyMMdd - 1d] | 執(zhí)行日期前一天 |
full table | 全表掃描 |
常用業(yè)務(wù)示例說明
每月某天產(chǎn)出上個月工資
例如:每個月15日發(fā)工資,產(chǎn)出上個月的匯總數(shù)據(jù),匯總數(shù)據(jù)的分區(qū)字段為yyyyMM
格式,這時需要如下配置:
調(diào)度條件配置:日期-屬于-15號。
分區(qū)表達(dá)式配置。
ds=$[yyyyMM-1M];
每月最后一天日產(chǎn)出本月工資
每個月最后一天發(fā)工資,產(chǎn)出上個月的匯總數(shù)據(jù),匯總數(shù)據(jù)的分區(qū)字段為yyyyMM
格式,這時需要如下配置:
調(diào)度條件配置:日期-屬于-月末日。
分區(qū)表達(dá)式配置。
ds=$[yyyyMM];
分鐘級任務(wù)每小時最后一分鐘檢查
通常分鐘級任務(wù)的ds格式為:yyyyMMdd HH:mm
,每小時最后一分鐘就是59分鐘,可以通過如下分區(qū)表達(dá)式:ds=$[yyyyMMdd HH:59];