如何在管道(Data Factory v2)中设置触发器,以将特定的开始时间安排到具有夏时制更改的国家/地区?
答案 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
}
}
]
}
}