在Azure数据工厂中使用数据流的联合活动合并多个文件

kokeuurv  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(154)

你好,我有相当多的文件,我想使用Azure数据工厂合并。
我目前正在使用联盟活动在埃克塞特洛合并几个文件一次,但我有大约一千个文件,不知道是否有一个更简单的方法来做到这一点?这些文件都放在同一个文件夹中,并且具有相同的列标题
我也尝试过使用Copy活动,但这会弄乱接收器数据集中的文件行,所以我现在避免这样做,因为我需要对行进行排序。

relj7zay

relj7zay1#

在ADF中,复制活动或同步合并文件的顺序是随机的。但是如果你的文件在同一个文件夹中,你可以尝试下面的解决方法使用followlow。
这些是我的示例文件:

我在每个文件中取了一些样本数据,如下所示:

Id,Name,Age
1,Rakesh,22
2,Laddu,22
3,Virat,34

当你想让数据的顺序和文件的顺序一样时,使用文件名作为排序列。

在数据集中给予路径直到容器,并在通配符路径的低给予您的剩余路径,如以上folder/*.csv
您可以看到随机的源数据预览。

但在这里,它并没有改变单个文件中的行顺序。因此,如果我们按filename列对上述数据进行排序,我们可以根据文件名以正确的顺序获得数据。
使用排序转换如下。

你可以看到我们得到了正确的顺序。

然后使用选择转换从上面的数据中删除额外的列filename。把这个变成Flume。

Sink文件:

q43xntqr

q43xntqr2#

实现合并多个文件的要求的最可行的方法是在复制数据活动中使用“合并文件”复制行为。
但是,正如您今天提到的,ADF复制mergeFiles行为无法控制要合并的文件的顺序以及要合并的行的顺序。它随机地考虑数据的副本。
为了以有序的方式合并数据,您可以考虑先将数据加载到SQL表中,通过使用foreach按顺序逐个循环文件。请尝试以下步骤:

  • 创建一个控制(元数据/配置)表/文件,其中包含所有文件名的列表以及要加载文件的序列号:
  • 使用lookup活动按序列号顺序从该控制表中获取文件名
  • 使用foreach活动通过将sequential选项标记为“On”来遍历文件名
  • 使用复制活动将数据加载到接收SQL表中。
  • 一旦数据被加载到表中,使用foreach之外的另一个复制活动将数据加载到目标文件中。

相关问题