目录:
1. 概念编辑
1.1 应用场景
FineBI 提供定时更新功能,可以设定时间面对所有业务包中的非实时数据表全部更新到本地。
1.2 功能介绍
定时更新可以设置「全局定时更新」和「单表定时更新」。
更新频率有4种方式来设置,分别是:只执行一次、简单重复执行、明细频率设置、表达式设定。
注:不建议设定过于频繁的更新频率。过于频繁容易带来数据还没更新完,系统就开始下一次更新的情况,而这样的情况会带来宕机风险。
2. 操作步骤编辑
2.1 建立定时更新
2.1.1 全局定时更新
注:只有超级管理员可以全局更新,其他用户不具备全局更新的功能。
1)进入「数据准备>更新设置」,如下图所示:
2)点击定时更新,如下图所示:
3)自动弹出定时更新设置框,可以对定时更新进行具体的设置。
任务名称:点击可以更改定时更新任务的名字;
开始时间和结束时间:是指更新任务开始和结束的时间,并不是指
更新的时间。开始和结束的时间粒度可细化到时分秒。点击可选择开始时间;
执行频率:「只执行一次」、「简单重复执行」有「明细频率设置」、「表达式设定」四种执行频率方式。如下图所示:
4)点击「确定」,可以看到设定好的定时更新任务出现在更新任务框中。可以建立多个定时任务,并且对定时任务进行编辑和删除。如下图所示:
2.1.2 单表定时更新
1)进入「数据准备」,选择需要定时更新的单表,点击「更新信息>单表更新」。如下图所示:
2)点击「定时设置」,如下图所示:
3)弹出定时设置框,设置方法与界面与全局定时更新一致(参考 2.1.1 建立全局定时更新),如下图所示:
4)点击「确定」,可以看到设定好的定时更新任务出现在更新任务框中。可以建立多个定时任务,并且对定时任务进行编辑和删除。如下图所示:
2.2 执行频率
2.2.1 只执行一次
在设置的开始时间开始后,该定时更新任务只执行一次更新,无需设置结束时间。
2.2.2 简单重复执行
1)包含四种时间粒度,分别是:「分钟、小时、天、周」,可进行简单的间隔时间设置。如下图所示:
2)执行频率选择「简单重复执行」后,结束时间有三种选项,如下图所示:
无限期:无结束时间,定时更新任务会一直定时执行;
设定结束时间:和开始时间设定方法一致,当设定的结束时间到了后,将不再执行该定时更新的任务。
额外重复执行次数:在设置的开始时间执行了定时任务之后会在间隔时间达到后再执行任务的次数,可手动设置次数。
2.2.3 明细频率设置
1)选择明细频率设置可进行细化的间隔时间设置。如下图所示:
执行时间:细化到分钟,需要输入 0-23 内的整数;
执行日:可选每天、每周和每月。其中每周可在周一至周日之间单选或多选,每月可在 1 号到 31 号之间单选或多选;
执行月:可在一年中的 1 月到 12 月单选或多选。
2)执行频率选择「明细频率设置」后,任务结束时间只能选择两种:无限期或设定结束时间。如下图所示:
无限期:无结束时间,定时更新任务会一直定时执行;
设定结束时间:和开始时间设定方法一致,当设定的结束时间到了后,将不再执行该定时更新的任务。
2.2.4 表达式设定
选择表达式设定即指设定一些特定时间的更新频率。
系统中的预置表达式包含五种,如下图所示:
自定义表达式设置
填入时间频率的 Cron 表达式,需填写正确的表达式才能进行定时更新,如下图所示:
执行频率选择「自定义表达式」后,任务结束时间只能选择两种:无限期或设定结束时间,可参考本章「2.2.3明细频率设置」。
Cron表达式的详细使用方法可参考本章「3. Cron表达式」。
3. Cron表达式编辑
Cron表达式为一个字符串,由 5 个或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个时间范围。Cron有如下两种语法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year
Seconds Minutes Hours DayofMonth Month DayofWeek
从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份(可选)。
3.1 域
每一个域可出现的字符如下:
域 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0-59的整数 | , - * / 四个字符 |
小时(Hours) | 0-23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 0-31的整数(但是需要考虑月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1-12的整数或英文JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1-7的整数或英文SUN-SAT(1=SUN, 2=MON,...) | , - * ? / L C # 八个字符 |
年份(Year) | 1970-2099 | , - * / 四个字符 |
3.1.1 字符含义
每一个域除了使用数字还可以出现特殊字符,其中特殊字符的含义如下:
字符 | 含义 |
* | 表示匹配该域的任意值,假如在 Minutes 域使用 *,即表示每分钟都会触发事件; |
? | 只能用在 DayofMonth(日期)和 DayofWeek(星期)两个域。它也匹配域的任意值,但实际不会。因为 DayofMonth 和 DayofWeek 会相互影响。例如想在每月的 20 日触发调度,不管 20 日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?,其中最后一位只能用 ?,而不能使用 *,如果使用 * 表示不管星期几都会触发,实际上并不是这样; |
- | 表示范围,例如在 Minutes 域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次; |
/ | 表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用 5/20,则意味着 5 分钟触发一次,而 25,45等分别触发一次; |
, | 表示列出枚举值。例如:在Minutes域使用 5,20,则意味着在 5 和 20 分每分钟触发一次; |
L | 该字符只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的 31 号,非闰年二月的 28 号;如果L用在星期中,则表示星期六,等同于7。但是,如果 L 在前面有一个数值 X ,它就具有其他含义了。例如,月份中的 6L 表示该月的倒数第六天;星期域中的 FRIL 表示这个月的最后一个星期五。 |
W | 该字符只能出现在 DayofMonth(日期)域里,是对前导日期的修饰,表示离该日期最近的工作日。例如 15W 表示离该月15 号最近的工作日,如果该月15 号是星期六,则匹配 14 号星期五;如果15 日是星期日,则匹配 16 号星期一;如果 15 号是星期二,那结果就是15 号星期二。但必须注意关联的匹配日期不能够跨月,如你指定 1W,如果 1 号是星期六,结果匹配的是 3 号星期一,而非上个月最后的那天。W 字符串只能指定单一日期,而不能指定日期范围; |
LW | 在 DayofMonth 字段可以组合使用 LW,它的意思是当月的最后一个工作日; |
C | 该字符只在 DayofMonth(日期)和 DayofWeek(星期)域中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如:5C 在日期字段中就相当于日历 5 日以后的第一天;1C 在星期字段中相当于星期日后的第一天; |
# | 该字符只能在 DayofWeek(星期)域中使用,表示当月某个工作日。如 6#3 表示当月的第三个星期五( 6 表示星期五,#3表示当前的第三个);而 4#5 表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发; |
3.2 示例
Cron表达式示例:
每隔 5 秒执行一次:*/5 * * * * ?
每隔 1 分钟执行一次:0 */1 * * * ?
每隔 1 小时执行一次:0 0 */1 * * ?
每天 23 点执行一次:0 0 23 * * ?
每天凌晨 1 点执行一次:0 0 1 * * ?
每月 1 号凌晨 1 点执行一次:0 0 1 1 * ?
在 26 分、29 分、33 分执行一次:0 26,29,33 * * * ?
每天的 0 点、13 点、18 点、21 点都执行一次:0 0 0,13,18,21 * * ?
根据上面的表达式规则获取 Cron 表达式以后,可参考链接 http://www.pppet.net/ 检查写的表达式是否正确,确保正确以后填入。