注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

触发器类型参考

Foundry支持任意嵌套的ANDOR触发器,以支持创建特定的自定义触发器。

时间触发器

时间触发器是在指定的时间点满足的触发器。

时间触发器仅在指定的时间点满足。指定的时间点过去后,时间触发器不再满足。

Cron表达式

时间触发器是使用cron表达式 ↗和时区定义的。

提示

计划编辑器提供了一个易于使用的界面,以定义简单的时间触发器,而无需编写cron表达式。

更复杂的时间触发器可能需要编写自定义的cron表达式。

计划编辑器使用标准的Unix cron表达式格式,包含五个字段:

Copied!
1 2 3 4 5 6 7 +--------- Minute (分钟) | +------- Hour (小时) | | +----- Day of Month (月份中的某一天) | | | +--- Month (月份) | | | | +- Day of Week (星期中的某一天) | | | | | * * * * *

这个结构用于定义 Cron 表达式的字段顺序,每个字段用空格分隔。

数据健康使用Quartz cron格式 ↗(六参数),而不是Unix cron格式 ↗(五参数)。Quartz实现了一个额外的秒字段,该字段被添加到标准Unix cron格式之前。

调度编辑器允许以下值用于每个字段:

字段允许值允许的特殊字符备注
分钟0-59* - / ,
小时0-23* - / ,
1-31* - / , L
1-12或JAN-DEC* - / ,
星期0-6或SUN-SAT* - / , L #7也表示星期天

特殊字符的含义如下:

  • 星号(*): 指定所有值。

    示例

    分钟含义
    *每分钟
  • 连字符(-): 指定一个范围的值。

    示例

    分钟含义
    10-20从10到20分钟(包括)
  • 斜杠(/): 指定一个步进范围的值。

    步进范围可以通过值或范围来定义:

    • 当与一个值一起使用时,范围是从指定值到该字段的最大值
    • 当与一个范围一起使用时,范围是指定的范围

    示例

    分钟含义
    25/10从25开始每隔10分钟(25, 35, 45和55)
    25-45/10从25到45之间每隔10分钟(包括)(25, 35和45)
  • 逗号(,): 指定一个值列表、范围和/或步进范围。

    示例

    分钟含义
    10,20,3010, 20和30分钟
    10,20-3010分钟和20到30分钟(包括)
    10,25-45/1010分钟和25到45之间每隔10分钟(包括)
  • L(L): 指定最后一个值。

    L的含义取决于它的使用方式:

    • 当在日期字段中使用时,指定该月的最后一天
    • 当在星期字段中单独使用时,指定一周的最后一天(星期六)
    • 当在星期字段中与一个值一起使用时,指定该月中具有指定星期几的最后一天

    示例

    日期含义
    L该月的最后一天
    星期含义
    L一周的最后一天(星期六)
    2L该月的最后一个星期二
  • 哈希(#): 指定该月的第n个星期几

    示例

    星期含义
    2#4该月的第四个星期二

当cron表达式与当前日期和时间匹配时,时间触发器将被满足。

如果日期字段和星期字段都不是*,则如果任一字段与当前日期和时间匹配,触发器将被满足。

示例

Cron表达式 含义
30 9 * * 1星期一上午9:30
30 17 * 2 1二月份星期一下午5:30
0 9-17 10 * *每月10号上午9:00到下午5:00每小时
0 9-17/2 10 * *每月10号上午9:00到下午5:00每两小时
0 9,17 10 * *每月10号上午9:00和下午5:00
0/5 9-17 15 3 *每年3月15日上午9:00到下午5:55每五分钟
0/5 9,17 15 3 *每年3月15日上午9:00到上午9:55和下午5:00到下午5:55每五分钟
0 9 L * *每月最后一天上午9:00
0 9 L 2 *二月份最后一天上午9:00
0 9 * * L星期六上午9:00
0 9 * * 2L每月最后一个星期二上午9:00
0 9 * 4 3#1每年四月份第一个星期三上午9:00
0 9 20 * 4每月20号和星期四上午9:00

时间变更

所有时间触发器都使用指定时区的壁钟时间进行评估。每当发生满足cron表达式的壁钟时间时,时间触发器将被满足。时间变更按以下方式处理:

  • 如果时间向前移动,则在时间变更之间满足的时间触发器将不会被满足
  • 如果时间向后移动,则在时间变更之间满足的时间触发器将被满足两次

示例

  • 如果时间从凌晨1:00向前移动到凌晨2:00,则在1:30满足的时间触发器将不会被满足,因为1:30从未发生
  • 如果时间从凌晨2:00向后移动到凌晨1:00,则在1:30满足的时间触发器将被满足两次,因为1:30发生了两次

事件触发器

事件触发器是在指定事件发生后满足的触发器。

事件触发器在事件发生后保持满足状态,直到整个触发器满足并且调度运行。

事件类型

调度编辑器目前支持以下事件类型:

  • 新逻辑: 当计算数据集的逻辑更新时发生。
  • 数据更新: 当事务提交更新数据集时发生。
  • 任务成功: 当数据集上的任务完成时发生,无论是否提交事务。
  • 调度成功运行: 当调度成功完成时发生。

复合触发器

复合触发器通过使用AND触发器和OR触发器组合多个组件触发器来创建。

  • 一个AND触发器创建一个由其组件触发器组成的触发器。
  • 一个OR触发器创建一个由其组件触发器组成的触发器。

示例

在以下示例中,T1T2是时间触发器,E1E2是事件触发器。

触发器含义
AND(T1, E1)如果E1已发生,在T1时满足
OR(T1, E1)T1E1发生时满足
AND(T1, T2) [1]在满足T1T2的时间时满足
OR(T1, T2)T1T2时满足
AND(E1, E2)E1E2都发生时满足
OR(E1, E2)E1E2任一发生时满足
AND(T1, OR(E1, E2))如果E1E2任一发生,在T1时满足
OR(T1, AND(E1, E2))T1或当E1E2都发生时满足

[1] 创建一个具有多个时间触发器的AND触发器只有在所有时间触发器重合时才会满足。例如,一个具有每日触发器和每小时触发器的AND触发器每天只会满足一次。相反,应该使用一个更具体的单一时间触发器。在前面的示例中,AND触发器应该被替换为仅每日触发器。