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

如何使用ADF对比数据湖与CSV文件名并完成复制/邮件告警

基于Azure Data Factory的解决方案

1. 读取CSV中的文件名列表

使用Lookup活动读取存储文件名的CSV文件:

  • 数据源选择你的CSV文件,确保仅读取存储文件名的列(例如列名filename)。
  • 取消勾选「First row only」,这样Lookup输出会包含所有文件名的数组,格式为@activity('Lookup CSV').output.value,每个元素结构为{ "filename": "目标文件名" }。

2. 提取并整理两个文件名集合

  • 从Get Metadata活动的输出中提取数据湖的文件名数组,用以下表达式:
    @activity('Get Metadata').output.childItems[*].name
    
    得到格式如["file1.csv", "file2.txt"]的字符串数组。
  • 从Lookup活动输出中提取CSV里的文件名数组,表达式:
    @activity('Lookup CSV').output.value[*].filename
    

3. 对比集合,标记缺失文件

添加Set Variable活动,定义字符串类型变量MissingFiles,用表达式计算CSV中有但数据湖里没有的文件:

@join(setDifference(variables('CSVFileNames'), variables('DataLakeFileNames')), ', ')

注:可以先将两个文件名数组存入变量,再代入表达式;若需忽略大小写,用toLower()统一转换后再对比,例如@tolower(activity('Get Metadata').output.childItems[*].name)

4. 复制匹配的文件

用For Each活动遍历CSV的文件名列表:

  • 迭代项设为@activity('Lookup CSV').output.value
  • 内部添加If Condition活动,判断当前文件名是否存在于数据湖:
    条件表达式:
    @contains(activity('Get Metadata').output.childItems[*].name, item().filename)
    
  • 条件为真时,执行Copy Data活动:源配置为数据湖文件夹,文件名用动态内容@item().filename;目标设为你指定的存储位置。

5. 发送缺失文件通知

添加If Condition活动,判断MissingFiles是否非空:

  • 条件表达式:@not(empty(variables('MissingFiles')))
  • 条件为真时,执行Send Email活动,邮件内容示例:
    数据湖中缺失以下文件:@{variables('MissingFiles')}
    
    配置好收件人、主题等信息即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:15:34