触发器中的夏令时更改(Data Factory v2)

时间:2018-08-10 14:17:58

标签: azure-data-factory-2

如何在管道(Data Factory v2)中设置触发器,以将特定的开始时间安排到具有夏时制更改的国家/地区?

3 个答案:

答案 0 :(得分:2)

根据documentation,即使触发器具有时区属性,当前仅支持UTC。如果支持其他时区,则指定该时区将使触发器在该本地时间触发。

答案 1 :(得分:0)

我还没有尝试过,这有点棘手,但是作为一种变通办法,您不能更改为按小时计划的触发器,然后将UTC触发时间传递给管道。然后,您可以拥有另一个触发参数,即您想执行的时区和实际时间。

管道上的第一步将使用Azure函数并将时间转换为本地时区(这将考虑夏时制)。如果结果时间与请求的时区小时相匹配,则IF语句将退出或继续。

出于时间/成本/技术债务的考虑,我可能不会这样做-我将手动计算出不同之处并在夏时制发生时进行更新。

答案 2 :(得分:0)

我发现一个简单的解决方法是使用以下if条件启动管道。

if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)

让if细分为以下几行...

1. if(
2. Equals(
3. addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH')
4. ,utcNow('HH')
5. )
6. ,true,false)

在第3行中,我们以UTC(19:30)获得当前时间,并转换为CST(15:30),加上5小时,然后仅取小时值 19:30 >> 15:30 + 5:00 = 19

在第4行中,我们以UTC为单位获取时间戳,并仅提取小时数(HH),在这种情况下为19。

最后,将其包装在“等于”语句中……如果两个小时值相等,则为true,否则为false。

如果为true,则不执行任何操作,然后继续进行下一步。如果为假,那么我们将不再有日光节约时间,我们需要等待一小时才能继续。即使在UTC和CST之间的差异持续到午夜时,我也发现了这一点。

下面是json…。

{
  "name": "If DST",
  "type": "IfCondition",
  "dependsOn": [],
  "userProperties": [],
  "typeProperties": {
    "expression": {
      "value": "@if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)",
      "type": "Expression"
    },
    "ifFalseActivities": [
      {
        "name": "Wait 1 hour",
        "type": "Wait",
        "dependsOn": [],
        "userProperties": [],
        "typeProperties": {
          "waitTimeInSeconds": 3600
        }
      }
    ]
  }
}