Azure Synapse Analytics中如何智能归集层级文件夹底部文件?
解决方案
可以通过Get Metadata + For Each 循环的组合实现自动化归集,无需手动维护21条路径,具体步骤如下:
1. 顶层Get Metadata:获取所有目标父文件夹
- 创建一个Get Metadata活动,数据源指向包含21个子文件夹的顶层目录
- 在活动的"字段"选项中勾选
Child Items,获取该目录下所有子项(文件夹+文件) - 添加筛选逻辑,只保留类型为
Folder的项,动态内容示例:@filter(activity('Get Metadata 1').output.childItems, item().type == 'Folder')
2. For Each循环遍历子文件夹
- 将For Each的"Items"设置为上述筛选后的文件夹列表
- 根据文件体量选择开启
Sequential(顺序执行)或保持并行执行
3. 内部Get Metadata:获取当前文件夹下的目标文件
- 在For Each内部添加第二个Get Metadata活动,数据源路径用动态内容拼接当前文件夹路径:
(可提前定义@{pipeline().parameters.rootFolder}/@{item().name}rootFolder参数存储顶层目录路径,方便后续维护) - 同样勾选
Child Items,筛选出类型为File的项,动态内容示例:@filter(activity('Get Metadata 2').output.childItems, item().type == 'File')
4. 内部Copy活动:复制文件到目标文件夹
- 若单个子文件夹仅含一个目标文件,直接在For Each内添加Copy活动:
- 源数据集路径:
@{pipeline().parameters.rootFolder}/@{item().name}/@{activity('Get Metadata 2').output.childItems[0].name} - 目标数据集路径设置为归集文件夹,文件名按需自定义:
- 保留原文件名:
@{activity('Get Metadata 2').output.childItems[0].name} - 避免重名(如不同文件夹有同名文件):
@{item().name}_@{activity('Get Metadata 2').output.childItems[0].name}
- 保留原文件名:
- 源数据集路径:
- 若单个子文件夹含多个目标文件,需嵌套一层For Each遍历文件列表后执行Copy
5. 触发配置
- 为管道设置定时触发(每日固定时间执行)或Blob存储触发(源文件夹有文件更新时自动触发),适配每日更新场景
内容的提问来源于stack exchange,提问作者user19504539
相关产品推荐
相关产品推荐

