循环浏览一个列表,并获取列表中的每个值。

问题描述 投票:0回答:1

我在ADLS中有一个文件夹,里面的文件不多。为了便于理解,我就简单介绍一下。我有以下三个文件。当我在这个文件夹中循环时,我想把 "文件名 "和 "来源 "作为单独的参数,这样我就可以在后续的活动中传递给它。

employee_crm.txt

承包商_PS.txt

manager_director_sap.txt。

我想把这个放在一个数组中,这样就可以相应地传递给后续的活动。

(employee, contractor, manager_director)

(CRM、PS、SAP)

我想把两个参数以usp_foo(雇员,crm)的形式传递给我的后续活动(可能是一个存储过程),它将根据参数执行流程。同理,usp_foo(contractor,ps)和usp_foo(manager_director,sap)。

我如何将子项目作为两个独立的参数,使其能够传递给SP?

azure azure-data-factory azure-data-factory-2
1个回答
1
投票

换个问题,你想1)得到一个blob名称的列表,2)将这些名称解析成2个变量。这种模式经常出现,所以下面的步骤将指导你如何完成这些任务。

  1. 定义一个ADLS数据集,指定文件夹。你不需要模式,你可以选择参数化文件系统和目录名称。enter image description here
  2. 要获得其中的对象列表,使用 GetMetadata 活动。展开 "字段列表 "部分,在下拉菜单中选择 "子项目"。enter image description here
  3. 添加一个过滤器活动以确保你只处理.txt文件。注意,它的目标是 "childItems "属性。

enter image description here

你可以明显地改变这些表达式以满足你的项目的特定需求。

  1. 使用ForEach活动依次循环浏览Filter中的每个元素。enter image description here
    1. 在ForEach中,添加活动来解析文件名。要访问fileName,使用 "item().name"。enter image description hereenter image description here

在我的例子中,我将这些值存储为管道变量,这些变量是全局的[因此需要按顺序执行这个操作]。由于Pipeline表达式语言对Array和Object的支持有限,将它们存储在Array中供进一步使用在匆忙中变得复杂和棘手。无法进行嵌套的foreach活动也可能是一个因素。

为了克服这些,此时我会直接在ForEach循环里面把这些值传递给另一个管道。enter image description here

这种模式还有一个好处,就是除了文件夹处理之外,还可以执行单个文件。

© www.soinside.com 2019 - 2024. All rights reserved.