Azure Data Factory:如何在HTTP数据集Relative URI中用触发时间作参数?
实现Relative URI中动态生成"since time"(epoch时间)的方案
这问题我之前帮团队配置过类似的,其实完全可以用数据流/数据工厂的动态表达式来自动化搞定,不用手动改时间参数。核心就是利用内置的时间函数,精准计算出触发时间前一天的epoch时间,再注入到URI里。
步骤1:锁定触发时间的基准值
因为你的管道是每日凌晨2点固定调度触发,直接用管道的内置调度时间变量就最准确:@trigger().scheduledTime,这个值就是每次触发时的凌晨2点时间戳,不会因为管道延迟执行出现偏差。
步骤2:编写动态计算epoch时间的表达式
根据REST接口需要的是秒级还是毫秒级epoch,用下面对应的表达式:
情况1:接口需要秒级epoch时间
@string(sub(ticks(addDays(trigger().scheduledTime, -1)), ticks('1970-01-01T00:00:00Z'))/10000000)
简单拆解逻辑:
addDays(trigger().scheduledTime, -1):把凌晨2点的调度时间往前推1天,得到前一天的凌晨2点ticks(...):将时间转换为100纳秒单位的计数(系统底层时间格式)- 减去1970-01-01的ticks值,再除以10000000转成秒级时间戳,最后用
string()转成字符串方便拼接
情况2:接口需要毫秒级epoch时间
把最后除以的数值改成10000即可:
@string(sub(ticks(addDays(trigger().scheduledTime, -1)), ticks('1970-01-01T00:00:00Z'))/10000)
步骤3:注入到Relative URI参数中
在HTTP数据集的Relative URI配置里,直接把表达式嵌入到参数位置。比如你的URI原本是/api/records?since={epoch_time},现在写成:
/api/records?since=@{string(sub(ticks(addDays(trigger().scheduledTime, -1)), ticks('1970-01-01T00:00:00Z'))/10000000)}
额外验证小技巧
你可以手动触发一次管道,查看运行日志里的URI参数,确认生成的epoch时间是否对应前一天的凌晨2点。比如今天2024-05-20凌晨2点触发,生成的时间戳应该对应2024-05-19T02:00:00Z的epoch值,完全符合你要的“获取该时间点之后所有响应”的需求。
内容的提问来源于stack exchange,提问作者Gagan
相关产品推荐
相关产品推荐

