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

如何传递ADF Get Metadata输出至Databricks Notebook实现文件名比对

ADF对接Databricks实现双文件夹文件存在性校验方案

前置配置确认

两个Get Metadata活动的「字段列表」必须勾选Child items,否则拿不到路径下的文件/文件夹清单。活动输出的childItems数组包含路径下所有对象,每个对象自带name(对象名)、type(对象类型,值为File或Folder)两个属性。

步骤1:过滤提取纯文件名数组

不需要额外加中间活动做转换,直接在Databricks活动的参数配置里用ADF内置表达式过滤掉文件夹,只保留文件名数组,减少Notebook侧的冗余处理:

  • 基准文件列表(即要求必须全部存在的文件所在文件夹)的文件名提取表达式:
    @activity('你的第一个Get Metadata活动名称').output.childItems.where(item => item.type == 'File').select(item => item.name)
  • 待校验文件夹的文件名提取表达式:
    @activity('你的第二个Get Metadata活动名称').output.childItems.where(item => item.type == 'File').select(item => item.name)

步骤2:配置Databricks Notebook活动的参数映射

  • 新建Databricks Notebook活动,绑定对应Databricks工作区,选中提前写好逻辑的Notebook。
  • 在活动的「基参数」栏新增两个Array类型参数,比如命名为base_file_list和check_file_list,参数值分别填入上面写的两个提取表达式。
  • 校验结果会自动存在活动输出的runOutput字段里,不需要额外配置输出参数就能回传给ADF后续流程。

步骤3:Notebook侧比对逻辑实现

用Python写逻辑即可,集合做存在性判断的效率远高于列表遍历,文件量大的时候优势很明显:

# 接收ADF传入的两个文件列表参数
import json
base_files = json.loads(dbutils.widgets.get("base_file_list"))
check_files = json.loads(dbutils.widgets.get("check_file_list"))

# 统一做去空格处理,避免前后空格导致的匹配误差
# 如果需要不区分大小写匹配,就在strip()后再加.lower()
base_set = {file.strip() for file in base_files}
check_set = {file.strip() for file in check_files}

# 核心判断:基准列表是待校验列表的子集,说明所有基准文件都存在,返回true;否则返回false
match_result = base_set.issubset(check_set)

# 结果回传给ADF
dbutils.notebook.exit(match_result)

注意:如果基准文件列表和待校验列表的对应关系反过来,只需要调换issubset前后的集合对象即可,逻辑通用。如果要求两个文件夹文件名完全一致,就把判断条件改成base_set == check_set。

步骤4:ADF后续流程分支判断

Notebook活动后面接If Condition活动做流程分支,条件表达式直接填:
@bool(activity('你的Databricks Notebook活动名称').output.runOutput)

  • 条件为true时,走所有文件存在的后续业务流程
  • 条件为false时,走缺失文件的告警、流程终止等逻辑

注意事项

  • 如果单文件夹下文件量超过10万,不建议用Get Metadata拉全量清单,性能很差,直接在Notebook里通过文件系统API读两个路径的文件清单做比对效率更高。
  • 如果文件名存在特殊字符、编码差异,提前在ADF表达式或者Notebook里做统一格式化,避免匹配误差。
  • 两个Get Metadata活动记得加依赖配置,确保两个活动都跑完之后再触发Databricks活动,不要出现并行跑没拿到输出的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:06:22