遍历列表并获取列表中的每个值

时间:2020-05-27 21:28:20

标签: azure azure-data-factory azure-data-factory-2

我在ADLS中有一个文件夹,文件很少。为了便于理解,我将使其保持简单。我有以下三个文件。当我循环访问此文件夹时,我想获得“文件名”和“源”作为单独的参数,以便可以将后续的活动/管道传递给它。

employee_crm.txt

contractor_ps.txt

manager_director_sap.txt

我想将其放入数组中,以便可以将其相应地传递给后续活动。

(雇员,承包商,经理主管)

(crm,ps,sap)

我想将两个参数作为usp_foo(employee,crm)传递给我的后续活动(可能是存储过程),它将根据这些参数执行该过程。类似地,usp_foo(承包商,ps)和usp_foo(经理_导演,sap)。

如何获取子项作为两个单独的参数,以便可以将其传递给SP?

1 个答案:

答案 0 :(得分:1)

为重新说明这个问题,您想1)获取blob名称列表,以及2)将这些名称解析为2个变量。这种模式经常发生,因此以下步骤将指导您完成这些任务。

  1. 定义用于指定文件夹的ADLS数据集。您不需要模式,可以选择参数化FileSystem和Directory名称: 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内,添加活动以解析文件名。要访问文件名,请使用“ item()。name”: enter image description here enter image description here

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

要克服这些问题,在这一点上,我会将这些值直接传递到ForEach循环内的另一个管道。 enter image description here

此模式的另一个好处是允许执行除文件夹处理之外的单个文件。

相关问题