DolphinScheduler 之时间参数

DolphinScheduler 中,调度时对时间参数的使用非常重要,尤其是当你在数据处理、ETL 任务或其他需要依赖时间范围的任务场景中。DolphinScheduler 允许通过多种方式灵活地配置时间参数,以适应不同的任务调度需求。以下是时间参数在 DolphinScheduler 调度中的常见使用方法:

1. 全局参数中的时间

DolphinScheduler 支持在工作流或任务中定义全局参数,时间参数可以作为全局参数进行配置,并在整个工作流或任务执行中使用。

定义时间全局参数:

在工作流配置界面,可以在「全局参数」中定义时间相关的参数。例如,定义一个表示当前日期的全局参数:

  • keycurrent_date
  • value${[yyyy-MM-dd]}

这样,你可以在任务的脚本中使用 ${current_date} 作为日期参数。

脚本示例:
#!/bin/bash
echo "Current date is ${current_date}"

当工作流执行时,${current_date} 会被解析为实际的日期(如 2024-10-14)。

2. 时间窗口参数

时间窗口参数通常用于基于时间范围的数据处理任务,如定时从数据源中读取特定时间范围内的数据。DolphinScheduler 提供了通过内置表达式来动态生成时间窗口参数的方式。

常用的时间窗口参数有:

  • ${startTime}:表示任务的开始时间
  • ${endTime}:表示任务的结束时间
时间窗口表达式示例:
  • ${[yyyy-MM-dd 00:00:00 -1d]}:表示前一天的开始时间(如 2024-10-13 00:00:00
  • ${[yyyy-MM-dd 23:59:59 -1d]}:表示前一天的结束时间(如 2024-10-13 23:59:59

这些参数可以在任务脚本中使用,比如在进行前一天数据的批处理时,脚本如下:

#!/bin/bash
startTime=${[yyyy-MM-dd 00:00:00 -1d]}
endTime=${[yyyy-MM-dd 23:59:59 -1d]}

echo "Processing data from $startTime to $endTime"
# 处理数据的命令
动态参数解析:

在任务执行时,DolphinScheduler 会根据调度的时间将时间窗口参数解析为实际的时间值。这让任务能够根据执行时的时间,动态处理不同时间段的数据。

3. Cron表达式

DolphinScheduler 使用 Cron 表达式来配置任务的执行时间或调度频率。Cron 表达式允许用户精确控制任务的调度时间,比如每日执行、每周执行或每隔一段时间执行任务。

Cron表达式示例:
  • 每天的凌晨1点执行任务:
    0 0 1 * * ?
    
  • 每周一的凌晨2点执行任务:
    0 0 2 ? * 1 
    

你可以在调度任务时通过 Cron 表达式定义何时运行任务,适用于定时作业的配置。

4. 补数任务中的时间参数

DolphinScheduler 支持对错过执行的历史任务进行补数操作,补数任务通常也涉及到时间参数。使用补数任务时,可以指定某个时间范围,系统会自动按照这个时间范围重新执行任务。

补数任务设置:
  • 可以选择特定的日期范围来补充某个时间段未执行的任务。
  • DolphinScheduler 在补数过程中,会根据补数的时间范围设置合适的时间参数,比如 ${startTime}${endTime}

5. 时间格式化与操作

DolphinScheduler 提供了一些时间格式化和操作功能,可以在时间参数中进行日期的加减操作。例如:

  • ${[yyyy-MM-dd -1d]}:获取前一天的日期。
  • ${[yyyy-MM-dd HH:mm:ss -7h]}:获取7小时前的时间。

你可以通过这些时间操作灵活设置任务调度的时间范围。例如,处理7天前到今天的数据:

#!/bin/bash
startTime=${[yyyy-MM-dd 00:00:00 -7d]}
endTime=${[yyyy-MM-dd 23:59:59]}

echo "Processing data from $startTime to $endTime"

6. 系统内置时间参数

DolphinScheduler 提供一些内置的时间参数,用户可以直接使用这些参数来实现基于当前调度时间的任务:

  • ${system.biz.date}:业务日期,一般表示调度任务的当前日期,格式为 yyyy-MM-dd
  • ${system.biz.curdate}:当前日期的完整格式,格式为 yyyy-MM-dd HH:mm:ss

这些内置参数可以在任务脚本中直接调用。例如:

#!/bin/bash
echo "Business date is ${system.biz.date}"

7. 时间依赖的任务链

在 DolphinScheduler 中,时间参数不仅可以在单个任务中使用,还可以通过工作流配置时间依赖的任务链。你可以在不同的任务中传递时间参数,使下游任务根据上游任务的时间输出动态生成。

8. 函数

8.1 加减月份:add_months()

* 后 N 年:$[add_months(yyyyMMdd,12*N)]
* 前 N 年:$[add_months(yyyyMMdd,-12*N)]

* 后 N 月:$[add_months(yyyyMMdd,N)]
* 前 N 月:$[add_months(yyyyMMdd,-N)]

8.2 加减天数:+-数字

* 后 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]

总结

在 DolphinScheduler 中,时间参数的使用非常灵活,主要用于以下场景:

  • 定时调度:使用 Cron 表达式配置任务的执行时间。
  • 时间窗口:动态生成任务的时间范围,用于数据处理等场景。
  • 补数操作:在错过执行的任务中重新设置时间范围。
  • 时间格式化与操作:提供丰富的时间操作工具,可以进行日期加减运算。
  • 全局参数与系统内置参数:方便在工作流中传递和使用时间信息。

DolphinScheduler 中这些时间参数帮助用户精确控制任务的调度和执行,尤其是在数据处理、定时任务和流式计算场景中。

### DolphinScheduler SQL 表结构和参数说明 #### 数据库初始化与配置 为了使用 Apache DolphinScheduler,需先安装并配置 MySQL 或 PostgreSQL 数据库,创建数据库和用户,并分配相应权限。接着通过执行 DolphinScheduler 提供的 SQL 脚本完成数据库结构初始化[^1]。 #### 核心表结构解析 DolphinScheduler 的核心表设计旨在支撑多种任务类型的调度需求,包括但不限于 Shell、MR、Spark、Flink、SQL (MySQL, PostgreSQL, Hive, SparkSQL)、Python、HTTP 请求、子流程调用以及存储过程等[^2]。以下是部分重要表格及其字段描述: - **t_ds_process_definition** - `id`: 流程定义唯一标识符。 - `code`: 流程实例编码。 - `name`: 流程名称。 - `project_code`: 所属项目编码。 - **t_ds_task_instance** - `id`: 任务实例 ID。 - `task_code`: 任务模板代码。 - `task_type`: 任务类型(如:SHELL, SPARK 等)。 - `state`: 当前状态(准备中、运行中、成功、失败等)。 - `start_time`, `end_time`: 开始时间和结束时间戳。 - **t_ds_worker_group** - `id`: 工作节点组编号。 - `worker_group_name`: 组名。 - `address_list`: 成员地址列表;多个 IP 地址间以逗号分隔。 ```sql CREATE TABLE IF NOT EXISTS t_ds_process_definition ( id BIGINT AUTO_INCREMENT PRIMARY KEY, code BIGINT COMMENT 'process instance code', name VARCHAR(200), project_code BIGINT ); CREATE TABLE IF NOT EXISTS t_ds_task_instance ( id BIGINT AUTO_INCREMENT PRIMARY KEY, task_code BIGINT, task_type VARCHAR(50), state TINYINT, start_time DATETIME, end_time DATETIME ); ``` 更多详细的表结构信息可以参阅官方文档中的数据库建模章节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值