访问元数据会导致 Azure 数据工厂的嵌套管道

Posted

技术标签:

【中文标题】访问元数据会导致 Azure 数据工厂的嵌套管道【英文标题】:Accessing metadata results in a nested pipeline for Azure Data Factory 【发布时间】:2020-08-08 13:51:08 【问题描述】:

我构建了一个从 blob 容器子文件夹 raw/子文件夹读取元数据的管道。然后我使用另一个获取元数据任务执行一个 foreach 循环来获取每个子文件夹的数据,它返回以下类型的数据。 /raw/subfolder1/folder1、/raw/subfolder2/folder1、/raw/subfolder2/folder1 等等。我需要另一个 foreach 循环来访问每个文件夹内的文件。问题是你不能在另一个 foreach 循环中运行一个 foreach 循环,所以我不能进一步迭代这些文件。

我有一个调用上述管道然后使用 foreach 的执行数据管道。我的问题是我没有找到将 item().name 从上述迭代传递到我的新管道的方法。看来您不能从上一个管道中传递对象?我如何才能完成这种嵌套的 foreach 元数据收集,以便我可以进一步迭代我的文件?

【问题讨论】:

【参考方案1】:

您是否尝试过使用参数?下面是它的样子:

    在您的父管道中,单击触发内部(您的新管道)的“执行管道”活动,转到设置并将项目名称指定为参数“名称”。 在您的内部管道中,单击空白处的任意位置并添加新参数“名称”。 现在您可以像这样引用该参数:pipeline().parameters.name

【讨论】:

我在尝试这个时遇到错误 - "errorCode": "BadRequest", "message": "无法评估表达式 'item().name' 因为属性 'name' 不能selected.", "failureType": "UserError", "target": "ExecutePiplineDetermineFileSize", "details": "" 我在名称字段中添加了@item().name 和@item().child 在子字段中。在我从父级执行的子管道中,具有参数:名称设置为字符串,具有空白值子级设置为数组,具有空白值。不知道怎么发图片:( 您所说的大部分情况下实际上都有效,我错的是嵌套管道的方向。一旦我弄清楚了,我就能够正确地传递参数。我像你说的那样在父级中创建了参数,然后在子级中调用这些参数以进入文件结构的下一个级别。【参考方案2】:

正如@Andrii 提到的,使用参数在这种情况下有效。 有关在活动之间传递参数的更多信息,请参阅此链接。 https://azure.microsoft.com/en-in/resources/azure-data-factory-passing-parameters/

【讨论】:

本文档展示了如何在管道中使用我理解的参数。我现有的管道中有一些非常相似的东西。我从 childItems 的根文件夹中获取元数据。然后我将该信息传递到 foreach 循环中以获取下一层子项。我不能添加另一个 foreach 循环,这是不允许的。因此,我必须创建一个新管道,首先执行另一个管道,然后从另一个管道获取项目和子项目,以便我可以获得每个子文件夹的文件大小。该目录看起来像这样 rootfolder/directory/subdirectory/files。

以上是关于访问元数据会导致 Azure 数据工厂的嵌套管道的主要内容,如果未能解决你的问题,请参考以下文章

Azure 数据工厂 - 删除活动时出错

Azure 数据工厂 - 为每个活动获取内部元数据

在 Azure 管道中设置 conda 元数据的内部版本号

在 Azure 数据工厂中获取元数据没有成功给我多个 excel 文件

从 Azure 存储 Blob 访问元数据

如何从 Azure 应用服务访问外部元数据库配置文件