找回密码
 立即注册
首页 业界区 安全 DolphinScheduler 6 个高频 SQL 操作技巧

DolphinScheduler 6 个高频 SQL 操作技巧

谯梨夏 6 天前
摘要: Apache DolphinScheduler系列4-后台SQL经验分享
关键词: 大数据、数据质量、数据调度
整体说明

在调研了 DolphinScheduler 之后,在项目上实际使用了一段时间,有了一些后台SQL实际经验,分享如下。
1.jpeg

进入DolphinScheduler 后台数据库,我这里使用的是MySQL数据库。
以任务名称包含“ods_xf_act” 的任务为例。
一、修改任务组操作
  1. UPDATE t_ds_task_definition a
  2. join t_ds_task_definition_log b on a.`code`=b.`code`and a.version=b.version
  3. set a.task_group_id = 19,b.task_group_id=19
  4. where a.name like'%ods_xf_act%'
复制代码
二、批量修改任务执行类型
  1. UPDATE t_ds_process_definition a
  2. join t_ds_process_definition_log b on a.code=b.code and a.version=b.version
  3. set a.execution_type = 1,b.execution_type=1
  4. where a.name like'%ods_xf_act%';
复制代码
三、查看定时器配置情况

根据此来选择配置定时器
  1. select crontab,count(*) from t_ds_schedules
  2. groupby crontab
  3. orderbycount(*) desc
复制代码
四、批量更改定时器

定时器,在前台页面修改很麻烦,一个个改很慢,所以想着从后台批量修改。

  • 确定需要更新的定时器列表
  1. select t1.id,t1.process_definition_code,crontab,t2.name from t_ds_schedules t1
  2. join t_ds_process_definition t2
  3. on t1.process_definition_code = t2.`code`
  4. wherenamelike'%ods_xf_act%'
  5. and crontab like'%0 0 5 *%'
复制代码

  • 更新成需要的crontab定时器
  1. update t_ds_schedules t1
  2. join t_ds_process_definition t2
  3. on t1.process_definition_code = t2.`code`
  4. set t1.crontab = '0 0 11 * * ? *'
  5. wherenamelike'%ods_xf_act%'
  6. and crontab like'%0 0 5 *%'
复制代码

  • 更新成需要的crontab定时器触发表 由于定时器已经 5 -> 11修改完成, 所以后面的where 条件都是 11
  1. update qrtz_cron_triggers t1
  2. set t1.CRON_EXPRESSION = '0 0 11 * * ? *'
  3. where t1.TRIGGER_NAME in (
  4. selectconcat("job_",t1.id) from t_ds_schedules t1
  5. join t_ds_process_definition t2
  6. on t1.process_definition_code = t2.`code`
  7. wherenamelike'%ods_xf_act%'
  8. and crontab like'%0 0 11 *%'
  9. )
复制代码

  • 更新成最新crontab定时触发时间的起始时间 由于NEXT_FIRE_TIME有更新时差,所以往前推8小时
  1. update qrtz_triggers t1
  2. set t1.NEXT_FIRE_TIME = round(UNIX_TIMESTAMP(date_sub("2024-07-23 11:00:00", INTERVAL8HOUR) )*1000)
  3. where t1.TRIGGER_NAME in (
  4. selectconcat("job_",t1.id) from t_ds_schedules t1
  5. join t_ds_process_definition t2
  6. on t1.process_definition_code = t2.`code`
  7. wherenamelike'%ods_xf_act%'
  8. and crontab like'%0 0 11 *%'
  9. )
复制代码
五、通知策略修改为“都不发”,仍然告警

现象: 原先选择“失败发”,后面修改为“都不发”
2.jpeg

原因: 原先有告警组,然后修改为都不发,原告警组后台并没有修改,是一个bug。
临时解决方案:
  1. select t1.*
  2. from t_ds_schedules t1
  3. join t_ds_process_definition t2
  4. on t1.process_definition_code = t2.`code`
  5. wherenamelike'%ods_xf_act%'
复制代码
把warning_type = 0 的,对应warning_group_id 都修改为 0
3.jpeg

六、任务组队列,页面没有任务,已用资源却占满

查看任务组列表
  1. select * from t_ds_task_group
  2. orderby create_time desc
复制代码
如果遇到任务组是满的,页面查询却没有任务,可以手动修改字段值图片
4.jpeg

查看任务组队列列表,找出没有完成,修改成已完成,就是修改值为2。
  1. -- t_ds_task_group_queue.`status` tinyint(4) DEFAULT '-1' COMMENT '-1: waiting  1: running  2: finished'
  2. select * from t_ds_task_group_queue
  3. where1=1
  4. andstatus <> 2  -- finished 完成
  5. orderby create_time desc
复制代码
查看任务列表,找出没有完成,修改成已完成,就是修改值为7。
  1. -- t_ds_task_instance.`state` tinyint(4) DEFAULT NULL COMMENT 'Status: 0 commit succeeded, 1 running, 2 prepare to pause, 3 pause, 4 prepare to stop, 5 stop, 6 fail, 7 succeed, 8 need fault tolerance, 9 kill, 10 wait for thread, 11 wait for dependency to complete'
  2. -- id 是上面t_ds_task_group_queue的task_id
  3. select * from t_ds_task_instance
  4. where state <> 7-- success
  5. andidin (
  6. selectidfrom t_ds_task_group_queue
  7. where1=1
  8. andstatus <> 2-- finished 完成
  9. orderby create_time desc
  10. )
  11. orderby submit_time desc
  12. limit100
复制代码
转载自鹏说大数据
原文链接:Apache DolphinScheduler系列4-后台SQL经验分享
本文由 白鲸开源 提供发布支持!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册