Azure Synapse Analytics中如何获取ADLS Gen2文件路径并传入Foreach活动?
解决ADLS Gen2 Parquet文件批量处理并覆盖原位置的方案
方法一:用ADF递归Get Metadata+动态数据集搞定
- 给Get Metadata活动配置根文件夹路径,勾选递归选项,无需在数据集里加通配符,就能拿到所有子文件夹和文件的列表。
- 从Get Metadata的输出里筛选出Parquet文件,用这个表达式:
@filter(activity('Get Metadata').output.childItems, equals(item().type, 'File') and endswith(item().name, '.parquet')) - 把筛选后的文件列表传入Foreach活动,循环时动态拼接文件完整路径:
- 给源数据集添加
FilePath参数,数据集的文件路径直接引用该参数:@dataset().FilePath - 每次迭代中,将当前文件的
folderPath和name拼接成完整路径:@concat(item().folderPath, '/', item().name),传给源数据集的参数 - 处理完成后,目标数据集同样使用这个动态路径,开启覆盖写入配置,确保替换原文件
- 给源数据集添加
方法二:用脚本获取文件列表+ADF自定义活动
- 编写PowerShell脚本,调用Azure Storage命令递归扫描ADLS Gen2文件系统,提取所有Parquet文件的路径,示例代码:
$files = Get-AzDataLakeGen2ChildItem -FileSystemName "你的文件系统名" -Path "根文件夹路径" -Recurse | Where-Object { $_.Name -like "*.parquet" } $filePaths = $files | ForEach-Object { $_.Path } ConvertTo-Json $filePaths - 在ADF中添加自定义活动运行该脚本,将输出的路径列表传给后续的Foreach活动,后续步骤同方法一,动态配置源和目标路径,处理后覆盖原文件。
方法三:用ADF数据流批量处理(无需逐个遍历)
- 如果处理逻辑可通过数据流实现,直接将源数据集指向根文件夹,勾选递归和通配符路径(填写
*.parquet),一次性读取所有Parquet文件。 - 数据流内完成数据处理后,配置目标数据集时选择输出到单一文件夹,开启
覆盖选项,同时将文件名选项设为作为列中的数据,在数据流中添加派生列提取源文件路径信息,确保处理后的文件精准覆盖对应原文件。
内容的提问来源于stack exchange,提问作者user19504539
相关产品推荐
相关产品推荐

