全部產品
Search
文件中心

Dataphin:分區運算式介紹

更新時間:Jan 25, 2025

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月份的分區資料產出的時候,將進行如下計算:

  1. 第一步:計算yyyyMMld,即是取給定日期所在月的最後一天,5月最後一天為31日,得到結果:20220531。

  2. 第二步:計算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號。

    image.png

  • 分區運算式配置。

ds=$[yyyyMM-1M];

每月最後一天日產出本月工資

每個月最後一天發工資,產出上個月的摘要資料,摘要資料的分區欄位為yyyyMM格式,這時需要如下配置:

  • 調度條件配置:日期-屬於-月末日。

    image.png

  • 分區運算式配置。

ds=$[yyyyMM];

分鐘級任務每小時最後一分鐘檢查

通常分鐘級任務的ds格式為:yyyyMMdd HH:mm,每小時最後一分鐘就是59分鐘,可以通過如下分區運算式:ds=$[yyyyMMdd HH:59];