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]代表昨天的年月,跟我们数仓抽取昨天的数据进行计算业务吻合。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值