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

Azure Data Factory:如何在ForEach循环中正确使用Lookup结果(Python)

问题描述

我需要让ForEach循环遍历Lookup活动输出中的各个Prop_元素,每次迭代仅传递一个CSV文件名给自定义Batch Python脚本,但当前使用@{item()}传递时,脚本收到的是所有Prop_的集合,而非单个文件名。

编辑:我认为出现方括号的原因是Python脚本返回的文件名是一个列表。Lookup活动的输出如下:

{
    "count": 1,
    "value": [
        {
            "Prop_0": "['BAT.WISCDD1C.SC.DK002001.D2023191.CSV'",
            "Prop_1": " 'BAT.WISCDD1C.SC.DK002001.TOT.D2023191.CSV'",
            "Prop_2": " 'BAT.WISCDD4C.SC.DK002004.D2023191.CSV'",
            "Prop_3": " 'BAT.WISCDE1C.SC.DK003001.D2023191.CSV'",
            "Prop_4": " 'BAT.WISCDE3C.SC.DK003003.D2023191.CSV'",
            "Prop_5": " 'BAT.WISCDE4C.SC.DK003004.D2023191.CSV'",
            "Prop_6": " 'BAT.WISCDE5C.SC.DK003005.D2023191.CSV'",
            "Prop_7": " 'BAT.WISCDP1C.SC.DK001001.D2023191.CSV'",
            "Prop_8": " 'BAT.WISCDU1C.SC.DK004011.D2023191.CSV'",
            "Prop_9": " 'BAT.WISCDU4C.SC.DK004014.D2023191.CSV'",
            "Prop_10": " 'BAT.WISCDU7C.SC.DK004017.D2023191.CSV']"
        }
    ],
    "effectiveIntegrationRuntime": "integrationRuntime1 (West Europe)",
    "billingReference": {
        "activityType": "PipelineActivity",
        "billableDuration": [
            {
                "meterType": "ManagedVNetIR",
                "duration": 0.016666666666666666,
                "unit": "Hours"
            }
        ]
    },
    "durationInQueue": {
        "integrationRuntimeQueue": 0
    }
}

ForEach循环需要遍历这些Prop_元素,逐个传递给自定义Batch Python脚本,但在Batch自定义活动中使用@{item()}引用项时,Python脚本接收到的参数是所有Prop_的集合:

{Prop_0:[
'BAT.WISCDD1C.SC.DK002001.D2023191.CSV',
    Prop_1: 'BAT.WISCDD1C.SC.DK002001.TOT.D2023191.CSV',
    Prop_2: 'BAT.WISCDD4C.SC.DK002004.D2023191.CSV',
    Prop_3: 'BAT.WISCDE1C.SC.DK003001.D2023191.CSV',
    Prop_4: 'BAT.WISCDE3C.SC.DK003003.D2023191.CSV',
    Prop_5: 'BAT.WISCDE4C.SC.DK003004.D2023191.CSV',
    Prop_6: 'BAT.WISCDE5C.SC.DK003005.D2023191.CSV',
    Prop_7: 'BAT.WISCDP1C.SC.DK001001.D2023191.CSV',
    Prop_8: 'BAT.WISCDU1C.SC.DK004011.D2023191.CSV',
    Prop_9: 'BAT.WISCDU4C.SC.DK004014.D2023191.CSV',
    Prop_10: 'BAT.WISCDU7C.SC.DK004017.D2023191.CSV']}

我不清楚如何正确使用value中的Prop_元素,希望每次ForEach迭代仅传递一个CSV文件名。请问我哪里操作错误?


解决方案

1. 先清理Lookup输出的格式问题

从Lookup输出可以看到,部分Prop_的值带有冗余的列表符号([]、'),需要先清理成纯文件名:

  • 添加一个Set Variable活动,创建数组变量存储整理后的文件名,使用表达式逐个处理Prop_值:
    @createArray(
        replace(replace(activity('Lookup').output.value[0].Prop_0, '[', ''), "'", ""),
        replace(activity('Lookup').output.value[0].Prop_1, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_2, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_3, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_4, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_5, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_6, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_7, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_8, "'", ""),
        replace(activity('Lookup').output.value[0].Prop_9, "'", ""),
        replace(replace(activity('Lookup').output.value[0].Prop_10, ']', ''), "'", "")
    )
    
    将结果存入变量(例如FileNameList)。

2. 配置ForEach循环的遍历对象

将ForEach循环的Items属性设置为整理后的文件名数组:

@variables('FileNameList')

3. 在Batch活动中传递单个文件名

在Batch自定义活动的参数中,直接使用@{item()}即可获取每次迭代的单个CSV文件名。

替代方案:直接遍历Prop_属性

如果不想用Set Variable,可直接在ForEach的Items中定义Prop_值的数组:

@createArray(
    activity('Lookup').output.value[0].Prop_0,
    activity('Lookup').output.value[0].Prop_1,
    ...
    activity('Lookup').output.value[0].Prop_10
)

然后在传递参数时清理冗余符号:

@replace(replace(item(), '[', ''), "'", "")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:50:56