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

Azure Data Factory split file by file size

在我两周的 Azure 体验中。我想根据大小拆分文件。例如,有一个 table 有 200k 行我想设置一个参数将 table 拆分成多个文件,每个文件限制为 100Mb(如果这有意义的话)。它将 return N 个文件,具体取决于 table 大小。类似于:

my_file_1ofN.csv

我浏览了文档、博客和视频,可以使用我个人帐户中的 python 脚本对 Azure Functions、Azure Batch 和 Databricks 进行一些 POC。问题是公司不让我用这些方法。

所以我使用分区数拆分文件,但这些文件的大小因 table 和分区而异。

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

任何想法或线索都将受到欢迎。谢谢!!

我无法按大小算出这一点,但如果您可以获得总行数,则可以使用 DataFlow 输出基于行数的粗略近似值。

管道中:

在这个例子中,我正在从 Azure Synapse SQL 池中读取数据,所以我是 运行 一个 Lookup 以根据每个分区的 8,000,000 行计算“分区”的数量:

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

接下来,将变量传递给 DataFlow:

注意:@int 转换是因为 DataFlow 支持 int 但管道不支持,所以在管道中数据存储在字符串变量中。

在数据流中:

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

来源:

在“优化”选项卡中,您可以控制读取时如何对源数据进行分区。为此,切换到“设置分区”和 select 基于 partitionCount 变量的轮询:

这将根据参数将传入数据分成 X 个桶。

SINK:

在“设置”选项卡下,尝试使用“文件名选项”设置来控制输出名称。选项有点有限,因此您可能无法准确获得想要的内容:

由于您已经对数据进行了分区,因此只需使用默认的源优化设置即可:

结果:

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