使用Azure Data Factory基于列合并存储帐户中的两个或多个文件 [英] Merging two or more files from a storage account based on a column using 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中的功能,所以它是这样做的,因为这不适合您的场景。考虑到您提到的约束,特别是缺乏数据流,您将不得不在某个地方进行一些定制编码。关于如何解决这个问题,我有两个想法。
您在评论中提到原始数据文件是使用COPY从SQL Server中提取的。这意味着(假设它们来自同一服务器)您可以通过编写一个存储过程来解决源端的问题,该存储过程a)将这两个表反透视到临时表,然后b)将结果透视到临时表。然后,该临时表将成为复制活动的源。我更喜欢这种方式,因为SQL引擎非常适合这类工作:当我正在操作的所有数据都在SQL Server中时,我会尝试将工作也放在那里。此外,在数据工厂中使用存储过程非常容易。
1a。如果您反对临时表的概念,那么您的存储过程可以使用Polybase将结果写出到Blob存储中,在这种情况下,您的流水线中将不会有复制活动。
/li>如果您必须使用以前生成的文本文件,则使用自定义代码读取Blob、执行工作并输出目标Blob的Azure批处理作业可能是您的最佳替代方案。这将是我最后的选择,因为我发现Azure Batch乏味且难以使用,但有时只有自定义代码可以使用。
如果你最终做了其他事情,我非常想了解你是如何解决这个问题的。
这篇关于使用Azure Data Factory基于列合并存储帐户中的两个或多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!