ADLS文件夹名称导出CSV失败:管道运行后无数据写入问题
排查ADLS文件夹名导出CSV无数据问题
1. 先查Get Metadata环节
- 得确认Get Metadata的字段列表勾选了
childItems,没勾的话根本拿不到文件夹列表。 - 检查数据集是不是指向正确的ADLS容器,还有权限够不够——比如用的服务主体得有容器的读取权限,不然读不到内容。
- 调试完去看Get Metadata的输出日志,看看
childItems里是不是真有12个文件夹条目。要是这里是空的,后面全白搭。
2. 检查Foreach和Append Variable
- 确认Foreach的Items表达式是
@activity('Get Metadata1').output.childItems,别写错活动名称(比如少打空格写成GetMetadata1)。 - 变量
Filename得是数组类型,Append Variable里的赋值表达式要写@item().name,别写成item().filename这种错字段。 - 调试完去看变量
Filename的最终值,在管道日志的“变量”标签里能看到,确认数组里是不是已经装了12个文件夹名。要是数组为空,说明Foreach或者Append环节出问题了。
3. Copy Activity是核心,重点排查
这步最容易踩坑:
源数据集(虚拟CSV)
- 源数据集得是DelimitedText类型,而且要设成虚拟数据集(不用指定具体文件,靠表达式生成源数据)。
- Copy Activity的源设置里选“查询”模式,用表达式把数组转成CSV格式的文本,比如:
这个表达式会把数组里的每个文件夹名用换行分隔,变成CSV的每行内容。要是没做这个转换,源数据就是空的,目标自然没东西。@join(variables('Filename'), '\n')
目标数据集
- 确认目标数据集指向ADLS的正确路径,服务主体得有写入权限。
- 检查文件名有没有写错,别因为路径或者文件名不对,导致文件生成了但你找不到。
映射设置
- 因为源是单行单列的文本,要么开自动映射,要么手动确认源列和目标列对应上。映射错了的话,数据也写不进去。
4. 最后看日志和权限细节
- 去看Copy Activity的运行日志,看看“数据读取”“数据写入”的统计数。读取数是0的话,说明源数据没生成;写入数是0的话,大概率是权限或者网络问题。
- 确认ADLS的防火墙/网络规则允许Data Factory访问,别因为网络拦截导致数据写不进去。
内容的提问来源于stack exchange,提问作者Anubhav
相关产品推荐
相关产品推荐

