Apache DolphinScheduler 海豚调度器自定义时间参数
在Apache DolphinScheduler 海豚調度器(本文簡稱:小海豚) 官網中,我們看到其自定義時間的參數是這樣介紹的
1.支持代碼中自定義變量名,聲明方式:${變量名}。可以是引用 "系統參數" 或指定 "常量"。
2.我們定義這種基準變量為 [...] 格式的,[yyyyMMddHHmmss] 是可以任意分解組合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等
3.也可以使用以下格式:
* 后 N 年:$[add_months(yyyyMMdd,12*N)]
* 前 N 年:$[add_months(yyyyMMdd,-12*N)]
* 后 N 月:$[add_months(yyyyMMdd,N)]
* 前 N 月:$[add_months(yyyyMMdd,-N)]
* 后 N 周:$[yyyyMMdd+7*N]
* 前 N 周:$[yyyyMMdd-7*N]
* 后 N 天:$[yyyyMMdd+N]
* 前 N 天:$[yyyyMMdd-N]
* 后 N 小時:$[HHmmss+N/24]
* 前 N 小時:$[HHmmss-N/24]
* 后 N 分鐘:$[HHmmss+N/24/60]
* 前 N 分鐘:$[HHmmss-N/24/60]
以上是可以滿足大部分時間需求,但有些我們會受到常規java邏輯思維影響,導致不能很好的使用這些自定時間。
比如:$[yyyyMM-1],首先我們會受到java思維的影響,認為yyyyMM-1就是當上一個月的年月時間。實際上,$[yyyyMM-1]表示的是昨天的年月。
一般小海豚自定義時間格式有兩種:
1.調用函數add_months()函數的:這種是用來加減月份的。
這種有兩個參數,第一個是返回時間的格式(如yyyyMM,202012),第二個加減多少個月(如,輸入-2,則代表前2個月的時間)
2.直接+-數字的:這種用來加減天數的。
這種直接輸入數字的,不管你輸入的時間格式是yyyyMM或者是HHHHmmss都無所謂,這個數字只代表加減多少天(比如-2,就代表兩天前的時間)
他的自定義時間規律是這樣的:先進行加減月/日計算,再將其轉化為指定格式輸出。
就拿上述的$[yyyyMM-1]來說,它是先對當前時間進行減去一天,然后再轉換為yyyyMM的格式輸出。打個比方:今天是2020年03月02日,那么他會“2020年03月02日”減去一天,就得到“2020年03月01日”這個數據,接著再轉化為yyyyMM輸出,輸出202003。
我們java傳統意義上的yyyyMM-1是指當前月份的上個月。比如,今天是2020年03月02日,yyyyMM-1之后會輸出202002,這是java編程中的思維,跟小海豚的思維還是有點不一致。
小海豚自定義時間參數中遇到的問題:
我在大數據批處理中,有時候會碰到一些每天更新的月表數據(比如有張統計累計會員人數的月表,用于統計當月的累計會員人數,每天都在更新并同步到BI可視化系統中)(其實更應該叫日表,但需求就是統計周期為月,但每天要更新數據)
小海豚會在今天的凌晨拉取昨天的數據進行計算,將昨天的數據同步到可視化系統中。
一開始我是按照正常的寫法,讓數倉將$[yyyyMM] (當月)的數據同步到BI可視化系統中并每天更新。一開始是沒問題的,都會同步當月的數據,畢竟今天是2020年03月02日獲取的就是202003(2020年03月)
但到了月初的第一天,就會出現問題。
比如2020年03月31日,$[yyyyMM]輸出202003,會將2020年03月的數據同步到可視化系統(此時小海豚還是抽取昨天2020年03月30日的數據進行累加計算出數據),此時同步是沒問題的。
到了2020年04月01日,小海豚會抽取昨天(2020年03月31日)的數據進行累加,按道理更新的應該是昨天3月份的數據,但是!!!$[yyyyMM]輸出的是202004,而此時4月份沒有數據,因此沒有更新!!!
到了2020年04月02日,小海豚抽取昨天(2020年04月01日)的數據進行4月份累加,$[yyyyMM]輸出的是202004 ,更新4月份數據。
此時從數倉同步到可視化系統的3月份數據就會少了31日,導致明明數倉數據正確,可是到了可視化系統時就不準了。此時不理解的人就會在罵小海豚有bug,可你輸入的指令$[yyyyMM]獲取的是今天的月份,你的業務要求你更新昨天的月份。
正確做法是將$[yyyyMM]替換成$[yyyyMM-1],$[yyyyMM-1]代表昨天的年月,跟我們數倉抽取昨天的數據進行計算業務吻合。
總結
以上是生活随笔為你收集整理的Apache DolphinScheduler 海豚调度器自定义时间参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 茶文化入门 --茶分类
- 下一篇: matplotlib plot画图不弹框