如何使用Until Activity获取指定日期的GEN2存储数据?
使用Until Activity获取ADLS Gen2指定日期数据的实现方法
前置准备
- 确保Data Factory已配置好ADLS Gen2的链接服务,可正常访问目标存储。
- 推荐定义两个参数:
TargetDate(指定要获取的日期,格式为yyyy-MM-dd)、MaxRetryTimes(最大轮询次数,防止无限循环);同时定义变量RetryCount,初始值设为0。
步骤1:配置Until Activity的停止条件
Until的核心是判断指定日期的存储路径是否就绪,用Get Metadata Activity实现路径检测:
- 在Until内部添加Get Metadata Activity,命名为
CheckTargetPathExists。 - 配置该活动的数据集:指向ADLS Gen2,路径用动态内容拼接指定日期的格式:
@concat('AAA/', formatDateTime(pipeline().parameters.TargetDate, 'yyyy'), '/', formatDateTime(pipeline().parameters.TargetDate, 'MM'), '/', formatDateTime(pipeline().parameters.TargetDate, 'dd')) - Get Metadata的字段选择
Exists,用于判断路径是否存在。 - 设置Until的停止条件:
@activity('CheckTargetPathExists').output.exists || equals(variables('RetryCount'), pipeline().parameters.MaxRetryTimes)
步骤2:循环内的操作逻辑
在Until内部按顺序添加以下活动:
- Increment Variable Activity:每次循环将
RetryCount加1,达到最大次数时触发停止。 - Wait Activity:设置等待时长(比如5分钟),避免频繁调用存储服务,降低资源开销。
- 数据获取活动:若路径存在,添加Copy Data或其他读取类活动,将指定路径的数据同步到目标位置(如数据库、其他存储),数据集路径同样用上述动态内容拼接。
步骤3:循环结束后的分支处理
在Until之后添加If Condition Activity,区分停止原因:
- 若
@activity('CheckTargetPathExists').output.exists为真:执行后续数据处理逻辑。 - 若
@equals(variables('RetryCount'), pipeline().parameters.MaxRetryTimes)为真:触发告警或标记该日期数据获取失败。
关键动态内容示例
- 指定日期路径拼接:
@concat('AAA/', formatDateTime(pipeline().parameters.TargetDate, 'yyyy'), '/', formatDateTime(pipeline().parameters.TargetDate, 'MM'), '/', formatDateTime(pipeline().parameters.TargetDate, 'dd')) - 重试次数判断:
@equals(variables('RetryCount'), pipeline().parameters.MaxRetryTimes)
注意事项
- 必须设置最大重试次数,避免无限循环消耗资源。
- 等待时长根据数据到达的延迟情况调整,平衡等待效率与请求频率。
- 若需批量获取从起始日期到指定日期的所有数据,可调整逻辑:将
TargetDate改为起始日期,每次循环后日期加1,停止条件设为@equals(variables('CurrentDate'), pipeline().parameters.EndDate)。
内容的提问来源于stack exchange,提问作者otaku
相关产品推荐
相关产品推荐

