使用Azure Data Factory基于列合并存储帐户中的两个或多个文件 [英] Merging two or more files from a storage account based on a column using Azure Data Factory

查看:12
本文介绍了使用Azure Data Factory基于列合并存储帐户中的两个或多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要使用ADF管道合并/合并我的Azure存储帐户中存在的两个文件。

在Azure的复制活动中有一个合并选项,但这将合并类似的文件。该文件包含用竖线分隔数据的列

我的要求是:根据特定ID将第二个文件列追加到第一个文件列

示例>>

File1
ID|Name|Age|XX|YY    
001|Abc|20|x1|y1
002|Dfg|30|x2|y2


File2
ID|AA|BB
001|a1|b1
002|a2|b2

现在,我的ADF活动的输出可以是不同的文件,也可以是文件1或文件2,格式如下

OutputFile
ID|Name|Age|XX|YY|AA|BB
001|Abc|20|x1|y1|a1|b1
002|Dfg|30|x2|y2|a2|b2

注意:以上文件是根据ID组合的。

如何使用ADF管道活动实现相同的目标?

如前所述,我尝试了合并复制活动行为。这将无法满足我的要求。

azure data factory: how to merge all files of a folder into one file

推荐答案

这听起来像是合并复制在SQL中的功能,所以它是这样做的,因为这不适合您的场景。考虑到您提到的约束,特别是缺乏数据流,您将不得不在某个地方进行一些定制编码。关于如何解决这个问题,我有两个想法。

  1. 您在评论中提到原始数据文件是使用COPY从SQL Server中提取的。这意味着(假设它们来自同一服务器)您可以通过编写一个存储过程来解决源端的问题,该存储过程a)将这两个表反透视到临时表,然后b)将结果透视到临时表。然后,该临时表将成为复制活动的源。我更喜欢这种方式,因为SQL引擎非常适合这类工作:当我正在操作的所有数据都在SQL Server中时,我会尝试将工作也放在那里。此外,在数据工厂中使用存储过程非常容易。

    1a。如果您反对临时表的概念,那么您的存储过程可以使用Polybase将结果写出到Blob存储中,在这种情况下,您的流水线中将不会有复制活动。

    /li>
  2. 如果您必须使用以前生成的文本文件,则使用自定义代码读取Blob、执行工作并输出目标Blob的Azure批处理作业可能是您的最佳替代方案。这将是我最后的选择,因为我发现Azure Batch乏味且难以使用,但有时只有自定义代码可以使用。

如果你最终做了其他事情,我非常想了解你是如何解决这个问题的。

这篇关于使用Azure Data Factory基于列合并存储帐户中的两个或多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆