Azure | ADF |如何使用String变量在Object类型的Parameter中查找键并检索其Value

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

我正在使用Azure数据工厂。我正在尝试使用String变量在JSON数组中查找Key并检索其Value。我似乎无法弄清楚如何在ADF中执行此操作。

详细信息:

我已经定义了一个名为“ obj”的管道参数,键入“ Object”和内容:{"values":{"key1":"value1","key2":"value2"}}

Parameter definition

我需要使用此管道来查找名为“ key1”的值,并将其作为“ value1”返回; “ key2”并将其返回为“ value2” ...,依此类推。我打算将我的“ obj”用作字典,以实现此目的。

从技术上讲,如果我想找到key2的值,我可以使用下面的代码,它将返回“ value2”:

@pipeline().parameters.obj.values.key2

我不知道是如何使用变量(而不是硬编码的“ key2”)来实现的。

[清除内容:我有一个for循环,并且在其中,我只有一个复制活动:for-each contents复制活动的目的是复制名为item().name的文件,但根据[obj]将其保存为ADLS item().name所转换的任何内容

这是使用Python可以构建for循环的方式:python-for-loop

[在ADF中,我尝试了很多事情(使用concat,replace ...),但没有任何效果。最简单的是:

@pipeline().parameters.obj.values.item().name

但是会引发以下错误:

{"code":"BadRequest","message":"ErrorCode=InvalidTemplate, ErrorMessage=Unable to parse expression 'pipeline().parameters.obj.values.item().name'","target":"pipeline/name_of_the_pipeline/runid/run_id","details":null,"error":null}

所以,您能提供一些如何定义我的表情的想法吗?我觉得这一定很明显,但我没到那里.....谢谢。

json azure azure-data-factory-2
2个回答
0
投票

根据您的评论,这是Filter活动的输出。 Filter活动的输出是一个包含名为value的数组的对象,因此您需要遍历“ output.value”:enter image description here

在ForEach内部,您使用“ item()。name”引用项目的名称:enter image description here

基于更多信息的编辑:

现在的任务是获取@item()。name值,并将其用作针对JSON数组的动态属性名称。鉴于管道表达语言(PEL)的有限性质,这是一个挑战。 PEL中的数组元素只能由其索引值引用,因此,要进行这种复杂的查找,您将需要遍历数组并进行一些字符串解析。由于您已经在FOR循环中,并且不支持嵌套的FOR循环,因此您将需要执行另一个管道来处理此过程以及Copy活动。警告:这很难看,但是可以。

子管道

用两个参数定义一个管道,一个用于values数组,一个用于item()。名称:enter image description here

执行子管道时,将@ pipeline.parameters.obj.values传递为“ valuesArray”,将@ item()。name传递为“ keyValue”。

  1. 您将需要几个字符串解析操作,因此在管道中创建一些字符串变量:enter image description here

  2. 在子管道中,添加一个ForEach活动。选中Sequential框,然后将Items设置为valuesArray参数:enter image description here

  3. 在ForEach内部,首先要清理当前项目并将其存储为变量,以使其易于使用。enter image description here

  4. 从变量中解析出对象键[这开始变得有点丑陋]:enter image description here

  5. 将IF条件添加到keyValue参数中以测试当前键的值:enter image description here

  6. 向TRUE条件添加活动,该活动将值解析为变量[在这里变得非常丑陋:

    ]

enter image description here

同时,返回管道

此时,在ForEach之后,您将拥有一个变量(IterationValue),其中包含原始数组中的正确值:enter image description here

现在有了这个值,您就可以在Copy活动中将该变量用作DataSet参数。


0
投票

你好,Pythonista朋友!

[ADF中的解决方案实际上就像在Python中那样,通过将方括号内的'变量'括起来来引用。

我创建了一个参数obj这样的管道

enter image description here

并且作为演示,管道具有单个Set Variable活动,该活动将key2的值转换为变量。

enter image description hereenter image description here

已记录在案,但您需要X射线观察才能发现它here

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