日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache DolphinScheduler 海豚调度器自定义时间参数

發布時間:2024/3/13 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 海豚调度器自定义时间参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。