实战干货:Apache DolphinScheduler 参数使用与优化总结

使用DolphinScheduler调度参数相关的案例与总结。

17629986447007f6f45544e1f1548



点击蓝字 关注我们



在使用 DolphinScheduler 进行数据调度开发的过程中,参数的灵活运用是提升任务复用性、动态化执行逻辑的关键。无论是日常跑批任务中的日期处理,还是复杂工作流中的上下游传参,掌握参数的正确使用方式,能极大提高开发效率与任务健壮性。

本文基于海豚调度3.1.9版本将系统梳理 DolphinScheduler 中各类参数的使用方法,涵盖内置参数、衍生函数、日期计算、全局变量设置以及跨任务参数传递等核心场景,助你彻底掌握参数使用的“正确姿势”。


内置

参数


DolphinScheduler 提供了几个常用的系统级内置参数,主要用于获取调度实例的执行时间。这些参数无需定义,直接引用即可。

基础参数

参数名
声明方式
含义
system.biz.date
${system.biz.date}
日常调度实例定时的定时时间前一天,格式为 yyyyMMdd
system.biz.curdate
${system.biz.curdate}
日常调度实例定时的定时时间,格式为 yyyyMMdd
system.datetime
${system.datetime}
日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss
  • SHELL 案例
176299864620357fa2fdaf7aa8a61176299866138258c1853801b2e4ea

但是这种方式在SQL节点下 不适用,SQL下使用衍生内置函数会比较方便


衍生

内置参数


为解决 SQL 节点无法使用 ${} 参数的问题,DolphinScheduler 提供了强大的 $[...] 衍生函数语法,支持任意格式的日期拼接与运算,推荐在所有场景中优先使用

我们定义这种基准参数为 $[...] 格式的,$[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等

简单案例

  • shell案例
17629986638387266fb3b5251c92b

结果如下:


  • SQL案例
1762998664408b239add8ccb12c70

结果如下

176299867149553661661b298d688

日期月份增减变化

若需按月计算(考虑大小月、闰年),可使用 add_months() 函数

  • shell 案例,获取前一个月日期
1762998677530a97cf3d800b16d11

执行结果如下

176299868016868f9fd193fb35596
  • PG案例,下一个月
176299868089741c2cdf328e52ae9

执行结果如下

17629986838725f1de25e694f9f78

其他时期增减

直接加减数字 在自定义格式后直接“+/-”数字

后 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]
  • shell案例
17629986847728f442146c7f469d9

执行结果如下

176299868716359f6555766013138
  • SQL案例
1762998688703d05c69d772462d79

执行结果如下:

1762998694739e4155e9f5779050d

TIPS :一般建议使用衍生内置函数,即$[] 的方式,比较直观且通用。


单个任务节点

中使用参数


17629986952131e735be627c98aa6

TIPS: 不要在别名的地方使用自定义参数,会触发BUG

例如 下图,

1762998697282e6a57933d8eaae8f

工作流

全局参数

当多个任务需要使用相同的自定义变量(如环境标识、项目编号等),可通过工作流全局参数统一管理。

  • 案例

下面三个节点用一个参数

shell案例

echo ${my_param}

SQL案例

SELECT name  
FROM test_datax_hive 
WHERE 
dt = DATE_FORMAT('$[yyyy-MM-dd-1]', 'yyyy-MM-dd')  
and name = ${my_param}

python案例

print('${my_param}')

在每个节点的地方不需要设置参数,只需要在工作流保存的时候设置参数即可。如下图。

17629986979727ab002546d021b92


工作流

参数传递


DolphinScheduler 支持在任务之间传递运行时生成的参数,适用于“上游查询结果 → 下游处理”的场景。

只有SQL和SHELL任务可以往下传递参数。

SQL SHELL PYTHON可以接受上一个节点传递的参数。

下面通过案例来演示实际操作。

1 SQL向下传递参数

在工作流中新建一个SQL节点。如下图。

17629986988494db65236de46582a
  1. 参数名要始终保持相同,这里使用my_name作为参数
  2. 自定义参数中也使用my_name作为参数,选择OUT类型,用于往下传递

然后建SHELL类型任务,如下图

1762998699708ad8733af487c9f2c

参数名保持相同,依旧是OUT类型。

再建一个PYTHON类型任务。如下图

1762998701288ae01b0c6d4973657

参数名保持相同。

最后,把工作流连起来,如下图

1762998706956c21f5cf363c07083

最后看运行日志,来验证

SQL执行结果

17629987079325ef6b35669cd81b4

SHELL 运行结果,参数被成功赋值

1762998708657d379ef1fd6b5218a

PYTHON运行结果,参数被成功赋值

2 SHELL向下传递参数

创建shell脚本,参数名要一致

17629987094359b5f24dfd443827e

${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。

在SQL节点接收参数

1762998710155b31879714dd9d465

参数名保持一致

PYTHON任务中接收参数

1762998721146e1254896d97861b0

执行结果

  • SHELL
17629987262070d9b24970dd3e2ac
  • SQL
17629987313667573965a9d94987e
  • PYTHON
17629987336278f9061239481d8ed

参数使用

总结

  1. IN 表示局部参数仅能在当前节点使用

  2. OUT 表示局部参数可以向下游传递

  3. 参数优先级:DolphinScheduler 参数的优先级从高到低为:本地参数 > 上游任务传递的参数 > 全局参数


17629987395687a930f8814bdeb3f
17629987336278f9061239481d8ed

17629987404483b0af496dea826c2



用户案例



天翼云Zoom网易邮箱 
每日互动 惠生工程  作业帮 
博世智驾 蔚来汽车 长城汽车
集度长安汽车思科网讯
食行生鲜联通医疗联想
新网银行唯品富邦消费金融 
自如有赞伊利当贝大数据
珍岛集团传智教育Bigo
YY直播  拈花云科太美医疗
Cisco Webex兴业证券


17629987404483b0af496dea826c2



迁移实战



Azkaban   Ooize(当贝迁移案例)
airflow (有赞迁移案例)
Air2phin(迁移工具)
Airflow迁移实践

17629987404483b0af496dea826c2



发版消息




Apache DolphinScheduler 3.2.2版本正式发布!
Apache DolphinScheduler 3.2.1 版本发布:增强功能与安全性的全面升级
Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!


17629987404483b0af496dea826c2



加入社区



关注社区的方式有很多:

  • GitHub: https://github.com/apache/dolphinscheduler
  • 官网:https://dolphinscheduler.apache.org/en-us
  • 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
  • X.com:@DolphinSchedule
  • YouTube:https://www.youtube.com/@apachedolphinscheduler
  • Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg

同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。

非代码方式包括:

完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。

‍代码方式包括:

查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22

优先级问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh

如何参与贡献链接https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menu

如果你❤️小海豚,就来为我点亮Star吧!

https://github.com/apache/dolphinscheduler

17629987563934f33ce91bb9eaa4a


1762998762414202f47b6464bafe7

你的好友秀秀子拍了拍你

并请你帮她点一下“分享”