Azure数据工厂按文件大小拆分文件

Azure数据工厂按文件大小拆分文件,azure,azure-data-factory-2,azure-data-factory-pipeline,Azure,Azure Data Factory 2,Azure Data Factory Pipeline,从我两周的Azure体验中。我想根据大小分割文件。例如,有一个表有200k行,我想设置一个参数,将该表拆分为多个文件,每个文件的限制为100Mb(如果有意义的话)。它将根据表格大小返回N文件数。比如: my\u file\u 1ofN.csv 我浏览了文档、博客和视频,可以在我的个人帐户中使用Azure函数、Azure批处理和python脚本进行POC。问题是公司不允许我使用这些方法中的任何一种 因此,我使用分区数分割文件,但这些文件的大小取决于表和分区 有没有办法做到这一点?我现在正在试验管道

从我两周的Azure体验中。我想根据大小分割文件。例如,有一个表有200k行,我想设置一个参数,将该表拆分为多个文件,每个文件的限制为100Mb(如果有意义的话)。它将根据表格大小返回
N
文件数。比如:

my\u file\u 1ofN.csv

我浏览了文档、博客和视频,可以在我的个人帐户中使用Azure函数、Azure批处理和python脚本进行POC。问题是公司不允许我使用这些方法中的任何一种

因此,我使用分区数分割文件,但这些文件的大小取决于表和分区

有没有办法做到这一点?我现在正在试验管道中的
查找
foreach
活动,但效果不佳


任何想法或线索都欢迎。谢谢

我还不能按大小来计算,但如果可以得到总行数,可以使用DataFlow根据行数输出粗略的近似值

正在进行中

在本例中,我正在从Azure Synapse SQL池中读取数据,因此我正在运行查找以根据每个分区8000000行计算“分区”的数量:

然后,我将结果捕获为一个变量:

接下来,将变量传递给数据流:

注意:@int cast是因为数据流支持int,而管道不支持int,所以在管道中数据存储在字符串变量中

数据流中的

为“partitionCount”创建一个int参数,该参数从管道传入:

来源

在“优化”选项卡中,您可以控制在读取时如何对源数据进行分区。为此,请切换到“设置分区”,并根据partitionCount变量选择Round Robin:

这将根据参数将传入数据拆分为X个存储桶

水槽

在“设置”选项卡下,尝试“文件名选项”设置以控制输出名称。选项有点有限,因此您可能很难获得您想要的:

因为您已经对数据进行了分区,所以只需使用默认的源优化设置:

结果

这将生成X个文件,这些文件具有编号命名方案和一致的文件大小:


采用了类似的方法。我将一个表导出到一个
csv
文件中,然后在管道中使用
get\u metadata
活动获取文件的大小,以根据请求定义的所需大小定义分区数。这是一个很接近的选择,但当桌子太大,这是一个不必要的额外步骤时,问题就出现了。谢谢你的时间!