如何从 For Each 活动捕获 ADF 管道的输出查询

How to capture output query from ADF pipeline from For Each activity

提问人:Guilherme Matheus 提问时间:11/15/2023 最后编辑:Guilherme Matheus 更新时间:11/17/2023 访问量:133

问:

我在 ADF 上有一个带有活动的管道,在里面我有一个运行 Kusto 查询。在此循环中,我在数组中使用了一个包含 10 个字符串的变量,以便我的数据流将基于这些值作为参数运行。For LoopData Flow

enter image description here

正在发生的事情是,循环中的一些运行失败,而其他一些运行工作正常。

示例如下图所示:

enter image description here

如何查看在数据流中运行的查询以及我正在使用的所有参数和表达式?我的意思是,最终查询作为输出。我想在我的 Kusto 上运行相同的查询,看看是否有问题。

根据 Govindula @Rakesh回答,这是我的数据流,这是我从他的回答中尝试过的:

enter image description here

azure-data-factory pipeline kql azure-data-explorer

评论

0赞 Rakesh Govindula 11/15/2023
您是如何构建查询的?我的意思是,您是否在数据流参数中创建所需的查询并直接将其用作查询?或者只是将一些值传递给参数,并使用参数和表达式的组合在数据流源查询中创建查询?
0赞 Guilherme Matheus 11/15/2023
@RakeshGovindula基本上,我将 For Each 中的值作为参数传递给数据流,然后我将该参数与其他函数一起使用,使用所有这些组合在源查询中构建字符串插值。

答:

1赞 Rakesh Govindula 11/15/2023 #1

数据流活动不会在其输入或输出中提供输入查询。解决方法是尝试以下方法。

将分支引入数据流,并使用派生列转换。在此创建一个列,并为其提供相同的查询表达式

您可以通过将分支添加到当前源来添加此源,也可以创建另一个示例源并继续使用相同的方法。

enter image description here

在这里,我进行了 SQL 查询作为示例。

它将生成查询并将查询字符串存储在列中。使用缓存接收器在管道级别了解此查询。此接收器的写入顺序应为 1。query

enter image description here

在缓存接收器映射中,使用基于规则的映射筛选列,如下所示。query

enter image description here

在“数据流”活动中,将日志记录设置为“无”,并仅选择第一行。

enter image description here

现在,您可以在 Dataflow 输出缓存接收器中找到输入查询。

enter image description here

使用以下表达式在管道中使用它。

@activity('Data flow1').output.runStatus.output.sinkCache.value[0].query

评论

0赞 Guilherme Matheus 11/16/2023
非常感谢您的分步说明。但是我在缓存接收器映射中感到困惑:您只保留派生列还是所有列?将 DF 日志记录级别设置为“无”而不是“详细”,我会在管道运行时丢失一些信息吗?在最后一步中,我在哪里使用表达式,为什么?
0赞 Rakesh Govindula 11/17/2023
在缓存接收器中,我只保留了派生列转换中的列。如果要从数据流在管道中使用查询,则设置日志记录级别不会影响数据转换和表达式,请在数据流活动之后,在循环中使用该表达式。
0赞 Guilherme Matheus 11/17/2023
我仍然没有得到数据流活动中的步骤,您介意添加更多详细信息并打印吗?将日志记录级别设置为“无”,是否会在输入和输出结果中丢失一些信息?在映射中,我是否需要将输入列设置为查询的名称,或者像您一样?另一件事是,如果我设置为,我在上述分支中拥有的另一个“原始”接收器到 ADLS,会受到影响吗?我是否需要在管道级别知道此查询?我更新了我的问题以显示我的数据流name==queryFirst row only
0赞 Rakesh Govindula 11/17/2023
您不会丢失实际 sink 中的任何数据,在这里您可以看到第一行仅用于缓存接收器 i.imgur.com/t61XGQx.png 还可以检查 sink 后继续错误,这是为了即使接收器中发生错误,它也会继续处理其他接收器(缓存接收器)。在缓存接收器中,需要使用基于规则的映射。首先在派生列中指定 any 列名称。在接收器缓存接收器中,给出筛选出我们在派生列中创建的所需列的条件。name==query
1赞 Rakesh Govindula 11/17/2023
我认为您在源代码本身中遇到了错误。如果数据流中的源出现错误,则接收器缓存也将不起作用,因为它也是从该源开始的。如果您要求获取查询,即使源失败,那么 AFAIK,在 ADF 中可能是不可能的。您可以在此处提出您的想法作为功能请求。