1. 概述
1.1 应用场景
定时任务每天运行,用户希望按照运行日期走不同的分支:
每月 1-4 日走 A 分支(月初)。
5-27 日走 B 分支(月中)。
28 日至月底走 C 分支(月末)。
1.2 实现思路
「条件分支」节点中,根据日序号,判断具体走哪条分支:

FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「按日期分流-月初&月中&月末走不同处理分支」。
2. 操作步骤
2.1 获取日序号
1)新建定时任务,点击「参数列表」,新增参数 NOW,類型为日期,值为 yyyy-mm-dd。如下图所示:

2)拖入「参数赋值」节点,获取日序号:
注:表格 SQL 语句中的 NOW 为参数名,需点击输入。
注:建议按照本文方法使用静态参数获取日序号;不建议使用CURDATE()、SYSDATE、NOW() 等数据库当前时间获取,若数据库时区和 FDL 服务器时区不一致,将判断失误,且不便于后期补数据或者按业务日期重试。
| 数据库 | SQL语句 |
|---|---|
| MySQL / Doris / StarRocks | SELECT DAY('NOW') AS day_no |
| SQL Server | SELECT DAY('NOW') AS day_no |
| Oracle / 达梦 | SELECT TO_NUMBER(TO_CHAR(TO_DATE('NOW','YYYY-MM-DD'),'DD')) AS day_no FROM dual |
| PostgreSQL / GaussDB | SELECT CAST(EXTRACT(DAY FROM DATE 'NOW') AS INTEGER) AS day_no |

并输出为参数:

2.2 按日序号分流

1)拖入「条件分支」节点,以及后续三个分支的节点。
注:后续三个分支的节点,用户需根据实际情况设置;本文示例拖入三个虚拟节点模拟三个分支场景,无实际业务意义。
2)「条件分支」节点设置:

2.3 内容扩展
1)若用户定时任务每天运行多次,为避免重复写入问题,提供以下两种方案供用户使用:
目标表设置物理主键或逻辑主键,主键冲突则更新数据。
在写入前加「SQL 脚本」节点,按 '${NOW}' 删除当天数据。
2)设置定时调度时,触发时刻要晚于上游数据全部落库的时间。
