Azure Data Factory中HTTP至Blob的文件复制问题咨询(含需求变更)
批量复制公共HTTP站点无规律文件名的CSV/XML文件到Blob存储
由于ADF的HTTP连接器本身不支持遍历未知文件名的文件列表,需结合外部工具获取文件清单后批量处理:
- 编写Azure Function(Python/C#均可),爬取目标HTTP站点的页面HTML,解析出所有CSV/XML文件的完整URL和原文件名,返回JSON格式的文件列表(示例:
[{"url":"http://example.com/random1.csv","filename":"random1.csv"},{"url":"http://example.com/random2.xml","filename":"random2.xml"}])。 - 在ADF管道中添加Lookup活动,调用上述Azure Function获取文件列表。
- 添加For Each活动,遍历Lookup返回的文件条目,在循环内部配置复制活动:
- 源数据集:使用HTTP二进制数据集,动态设置URL为
@item().url。 - 目标数据集:使用Blob存储数据集,动态设置文件名属性为
@item().filename,确保复制后保留原文件名。
- 源数据集:使用HTTP二进制数据集,动态设置URL为
按规则复制单个指定HTTP文件到Blob存储
针对文件名遵循somestring_昨日日期.xml且修改时间在当日凌晨1小时内的需求,可按以下步骤配置:
- 生成目标文件名:在ADF中用表达式构建符合规则的文件名:
@concat('somestring_', formatDateTime(addDays(utcNow(), -1), 'yyyyMMdd'), '.xml') - 定义时间验证范围:计算当日凌晨0点到1点的时间区间:
- 起始时间:
@startOfDay(utcNow()) - 结束时间:
@addHours(startOfDay(utcNow()), 1)
- 起始时间:
- 配置复制活动:
- 源HTTP数据集:动态设置URL为
@concat('http://目标站点域名/', 上述生成的文件名),在高级设置中开启文件修改时间验证,填入起始和结束时间。 - 目标Blob数据集:直接使用生成的文件名作为目标文件名,保留原名称。
- 源HTTP数据集:动态设置URL为
- 可选容错处理:添加If Condition活动,先通过Web活动调用HTTP HEAD请求检查文件是否存在且Last-Modified时间在指定区间内,满足条件再执行复制活动,避免管道因文件不存在或不符合时间条件报错。
内容的提问来源于stack exchange,提问作者odbods
相关产品推荐
相关产品推荐

