You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse将ADLS文件名列表写入文件时遇转换错误求助

问题分析与解决方案

错误根源

你遇到的类型转换错误核心原因有两点:

  1. Lookup活动返回的是结构化行集对象,而非纯字符串,直接传递给Copy Activity会触发类型转换失败。
  2. 你的SQL逻辑将文件名拼接成[name1,name2]格式的JSON字符串,既不符合“每行一个文件名”的输出需求,也增加了后续处理的复杂度。

修正步骤

方案一:调整Lookup+Copy Activity配置

  1. 修改Lookup的SQL语句
    去掉字符串拼接逻辑,直接返回每行一个文件名的结果集:

    declare @output varchar(max)
    set @output ='@{activity('Get Metadata').output.childitems}'
    select name from OpenJson(@output) with(name varchar(max) '$.name')
    

    此时Lookup会输出包含多行的数据集,每行对应一个文件名。

  2. 配置Copy Activity

    • 源端:选择Lookup作为源,确保读取其返回的行集数据。
    • 接收器端:
      • 目标存储选ADLSv2,文件名为filename_list.txt。
      • 文件格式选择文本格式,设置行分隔符为\n(换行符),列分隔符留空或设为无(仅需单列输出)。
    • 映射:将Lookup输出的name列直接映射到接收器的唯一列。

方案二:简化流程(无需Lookup)

用变量收集文件名,直接写入文件,更高效:

  • 新建字符串变量fileNames,初始值为空。
  • 添加For Each活动,迭代对象设为@activity('Get Metadata').output.childitems。
  • 在For Each内部添加Append Variable活动,追加内容为@{item().name} (注意末尾添加换行符,确保每个文件名占一行)。
  • 最后用Copy Activity:
    • 源选内联数据集,内容设为@variables('fileNames')。
    • 接收器选ADLSv2的filename_list.txt,文件格式为文本。

验证

运行流程后,filename_list.txt会生成你需要的每行一个文件名的格式。

内容的提问来源于stack exchange,提问作者rp346

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:27:43