数据开发过程中通常需要将一些配置项通过参数的形式进行个性化的配置,比如任务参数、运行参数等等。离线同步任务的开发过程中同样需要通过配置参数去满足不同客户的使用场景,在实际使用过程中用的较多的便是时间参数,本节将围绕时间参数介绍如何在离线同步任务开发过程中参数的使用。

参数的使用位置


在离线同步任务配置过程中,除了较为常见的在数据过滤 - 自定义中使用参数之外,在库名、表名、分区字段值等也支持参数的使用,具体场景如下:

  1. 支持在数据来源和数据去向的库名和表填写参数,参数的格式为${XXX}。
    时间参数用法详解 - 图1

  2. 当数据源为FTP、HDFS等类型时,数据目录支持填写参数,参数格式为${XXX}。
    时间参数用法详解 - 图2

  3. 数据过滤配置项中,选择条件型时,支持在条件处填写参数,参数格式为${XXX}。
    时间参数用法详解 - 图3

  4. 数据过滤配置项中,选择自定义时,支持在文本框中填写带参数的SQL语句,参数格式为${XXX}。
    时间参数用法详解 - 图4

  5. 分区信息支持填写参数,一般主要用于填写时间参数,可在下拉框中进行选择,也支持自定义参数的填写,参数格式为${XXX}。
    时间参数用法详解 - 图5

  6. 在字段映射中,当来源表字段选择自定义表达式时支持填写参数,填写格式为表达式 as 列名,表达式可以用参数表示。
    时间参数用法详解 - 图6

时间参数


数据传输支持内置的时间参数和自定义参数,系统内置的时间参数可直接使用,自定义参数需要先在离线开发中的公共资源的参数组中进行登记才能进行调用。

说明:时间参数不仅支持在数据传输中进行使用,也可在离线开发和自助分析中进行使用。

内置时间参数列表

参数名 示例 含义
azkaban.flow.start.timestamp 2018-08-21T15:23:15.075+08:00 计划执行时间的具体时间
azkaban.flow.start.year 2018 计划执行时间的年
azkaban.flow.start.month 08 计划执行时间的月
azkaban.flow.start.day 21 计划执行时间的日
azkaban.flow.start.hour 15 计划执行时间的小时
azkaban.flow.start.minute 23 计划执行时间的分钟
azkaban.flow.start.second 15 计划执行时间的秒
azkaban.flow.start.milliseconds 075 计划执行时间的豪秒
azkaban.flow.start.timezone Asia/Shanghai 计划执行时间的时区
azkaban.flow.current.date 2018-08-21 计划执行时间日期
azkaban.flow.current.month 2018-08-01 计划执行时间所在月的1号
azkaban.flow.current.hour 2018-08-21 15:00:00 计划执行时间所在小时的0分0秒
azkaban.flow.1.days.ago 2018-08-20 计划执行时间一天前日期
azkaban.flow.2.days.ago 2018-08-19 计划执行时间两天前日期
azkaban.flow.3.days.ago 2018-08-18 计划执行时间三天前日期
azkaban.flow.7.days.ago 2018-08-14 计划执行时间七天前日期
azkaban.flow.30.days.ago 2018-07-22 计划执行时间三十天前日期
schedule.exec.time 1534839814392 计划执行时间的unix时间戳

如果上述列表中的参数无法满足使用需求,则需要通过自定义参数的方式进行解决。

自定义参数


数据传输中使用自定义参数,需要事先在离线开发的公共资源中完成定义。
时间参数用法详解 - 图7

  1. 进入公共资源界面,选择参数组页签,点击新建参数组
    时间参数用法详解 - 图8

  2. 新建参数组页面,完成基本信息参数配置的填写。
    时间参数用法详解 - 图9

  3. 在任务配置过程中使用自定义参数a。
    时间参数用法详解 - 图10

常见时间参数


目前,推荐使用Joda Time来自定义事件以及日期的格式,示例如下:

  • 获取计划执行事件日期,格式如20210101
    参数值:$(new("org.joda.time.DateTime", ${schedule.exec.time}).toString('yyyyMMdd'))

  • 获取计划执行时间日期的前一天的0点,格式如2021-01-01 00:00:00
    参数值:$(new("org.joda.time.DateTime", ${schedule.exec.time}).minusDays(1).toString('yyyy-MM-dd 00:00:00'))

基于上述配置,可按需组合处所需的配置来获取自定义时间。调整时间函数如下表所示:

向前 向后
minusMinutes(n) 前n分 plusMinutes(n) 后n分
minusWeeks(n) 前n周 plusWeeks(n) 后n周
minusYears(n) 前n年 plusYears(n) 后n年
minusDays(n) 前n日 plusDays(n) 后n日
minusHours(n) 前n时 plusHours(n) 后n时
minusMonths(n) 前n月 plusMonths(n) 后n月
minusSeconds(n) 前n秒 plusSeconds(n) 后n秒