如何用Synapse Pipelines复制Git仓库中带日期命名的多份CSV文件至Azure存储
Synapse Pipelines批量同步Git仓库带日期的CSV到Azure存储
核心思路
用Synapse的ForEach活动遍历目标日期范围,逐个复制对应日期的CSV文件到Azure存储,或者先获取仓库内的文件列表再筛选处理。
具体实现步骤
1. 生成待处理的日期集合
根据你的需求选以下两种方式之一:
- 历史数据批量同步:如果要同步某段时间的所有文件,用表达式生成日期数组。比如生成过去90天的日期,可在Set Variable活动里设置变量值为:
要是日期范围大,更高效的方式是用Lookup活动从Azure SQL的日期维度表读取日期列表,或者用Script活动生成日期集合。@createArray( formatDateTime(addDays(utcNow(), -90), 'dd-MM-yyyy'), formatDateTime(addDays(utcNow(), -89), 'dd-MM-yyyy'), ... ) - 动态获取仓库现有文件:调用GitHub的内容API(公开仓库无需认证),用Web活动请求
GET /repos/{你的用户名}/{仓库名}/contents/{文件所在目录},拿到所有文件名后,用Filter活动筛选出符合DA-\d{2}-\d{2}-\d{4}格式的文件名,再提取日期部分作为遍历集合。
2. 配置ForEach循环
- 将ForEach的
Items参数绑定到第一步生成的日期数组(或筛选后的文件名集合)。 - 如果仓库有访问频率限制,建议开启
Sequential顺序执行;无限制的话保持默认并行执行即可。
3. 循环内的文件复制操作
在ForEach内部添加Copy Data活动,分别配置源和目标:
源端(Git公开文件)
- 源类型选
HTTP,URL用表达式拼接:
替换占位符为实际信息,分支默认是@concat('https://raw.githubusercontent.com/{你的用户名}/{仓库名}/{分支名}/DA-', item(), '.csv')main。 - 认证方式选
Anonymous,格式设为DelimitedText,配置CSV的分隔符、是否含表头等参数。
目标端(Azure存储)
- 目标类型选
Azure Blob Storage或ADLS Gen2,配置好存储账户连接。 - 文件路径设为你要保存的容器/文件夹,文件名用表达式保持原命名:
@concat('DA-', item(), '.csv')
4. 异常处理
- 如果担心某日期的文件不存在导致管道失败,可在Copy Data前加If Condition活动:先用Web活动发送HEAD请求到文件URL,判断返回状态码是否为200,只有存在时才执行复制。
- 若只需每日同步当天文件,不用循环,直接用
formatDateTime(utcNow(), 'dd-MM-yyyy')生成当日日期,拼接URL后执行一次Copy Data,再把管道设为每日触发即可。
内容的提问来源于stack exchange,提问作者LightningStack575
相关产品推荐
相关产品推荐

