【问题标题】:Azure Data Factory - How do I iterate through records in a CSV file using a ForEach loopAzure 数据工厂 - 如何使用 ForEach 循环遍历 CSV 文件中的记录
【发布时间】:2020-09-18 11:46:53
【问题描述】:
我想要达到的目标:
- 我有一个包含以下列的 CSV (FlatnedListDocument.csv)
文档密钥、文档名称
示例值如下(该 CSV 文件中大约有 240,000 行):
12212,银河系搭便车指南
12233, 金钱球
- 我必须为 CSV 文件中的每一行创建一个 JSON 文件,供另一个实用程序使用(每行一个文件)。
- 我不知道如何将 CSV 表中的值推送到 ForEach 活动,以使其在 CSV 文件中迭代循环。
【问题讨论】:
标签:
azure
csv
azure-data-factory
azure-data-flow
【解决方案1】:
这是在数据工厂中解决的一个非常有趣的问题。我看到的唯一选择是拥有一个带有 Sink 分区的数据流,该分区基于派生列输出文件。
- 创建一个派生列以生成唯一的 blob 名称。 一定要包含文件夹路径:
- 在 Sink 中的 Settings 下,将“File name option”更改为“As data in column”,然后选择您在第 1 步中创建的 FileName 列:
- 可选,但在“映射”下的接收器中,删除文件名列:
- 完成后,您应该将其保存在 Blob 存储中:
当然,需要注意的是文件名必须是唯一的,因此我基于示例中的第一列(我将其命名为“Id”)。我不知道 280K 文件的性能如何,但这应该会得到你想要的结果。
【解决方案2】:
我已经实现了以下帮助我解决了我遇到的核心问题(读取 CSV 文件并将值传递给 ForEach 循环)。
第 1 步和第 2 步不是核心问题的一部分,但可以帮助其他阅读本文的人了解 FlattenedListDocument.csv 是如何出现的。
整体架构
第一步:调用Web服务获取JSON文件(XML文件作为数据集,JSON文件作为sink)。
第 2 步:创建数据流以展平文件。创建一个 CSV 作为接收器(并将接收器分成 100 个相等的部分(以允许在 CSV 文件中增长多达 500,000 条记录)。
第 3 步:对文件执行查找并获取其内容(这最终将包含在 GetMetadata / ForEach 循环中,该循环调用另一个管道以提取每个文件的内容)。
第 4 步:使用 ForEach 循环提取内容(这会调用另一个 WebService,并将管道中查找的 Name 值作为参数)。