2

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

my_file_1ofN.csv

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

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

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

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

4

1 回答 1

1

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

在管道中

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在数据流中

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

在此处输入图像描述

来源

在“优化”选项卡中,您可以控制读取时数据源的分区方式。为此,切换到“Set Partitioning”并根据 partitionCount 变量选择 Round Robin:

在此处输入图像描述

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

水槽

在“设置”选项卡下,尝试使用“文件名选项”设置来控制输出名称。选项有点有限,所以你可能很难得到你想要的东西:

在此处输入图像描述

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

在此处输入图像描述

结果

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

在此处输入图像描述

于 2020-07-17T14:02:59.433 回答