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 和分区而异。
有没有办法做到这一点?我正在试验管道中的 lookups
和 foreach
活动,但效果不佳。
任何想法或线索都将受到欢迎。谢谢!!
我无法按大小算出这一点,但如果您可以获得总行数,则可以使用 DataFlow 输出基于行数的粗略近似值。
管道中:
在这个例子中,我正在从 Azure Synapse SQL 池中读取数据,所以我是 运行 一个 Lookup 以根据每个分区的 8,000,000 行计算“分区”的数量:
然后我将结果捕获为变量:
接下来,将变量传递给 DataFlow:
注意:@int 转换是因为 DataFlow 支持 int 但管道不支持,所以在管道中数据存储在字符串变量中。
在数据流中:
为从管道传入的“partitionCount”创建一个int参数:
来源:
在“优化”选项卡中,您可以控制读取时如何对源数据进行分区。为此,切换到“设置分区”和 select 基于 partitionCount 变量的轮询:
这将根据参数将传入数据分成 X 个桶。
SINK:
在“设置”选项卡下,尝试使用“文件名选项”设置来控制输出名称。选项有点有限,因此您可能无法准确获得想要的内容:
由于您已经对数据进行了分区,因此只需使用默认的源优化设置即可:
结果:
这将生成 X 个具有编号命名方案和一致文件大小的文件:
在我两周的 Azure 体验中。我想根据大小拆分文件。例如,有一个 table 有 200k 行我想设置一个参数将 table 拆分成多个文件,每个文件限制为 100Mb(如果这有意义的话)。它将 return N
个文件,具体取决于 table 大小。类似于:
my_file_1ofN.csv
我浏览了文档、博客和视频,可以使用我个人帐户中的 python 脚本对 Azure Functions、Azure Batch 和 Databricks 进行一些 POC。问题是公司不让我用这些方法。
所以我使用分区数拆分文件,但这些文件的大小因 table 和分区而异。
有没有办法做到这一点?我正在试验管道中的 lookups
和 foreach
活动,但效果不佳。
任何想法或线索都将受到欢迎。谢谢!!
我无法按大小算出这一点,但如果您可以获得总行数,则可以使用 DataFlow 输出基于行数的粗略近似值。
管道中:
在这个例子中,我正在从 Azure Synapse SQL 池中读取数据,所以我是 运行 一个 Lookup 以根据每个分区的 8,000,000 行计算“分区”的数量:
然后我将结果捕获为变量:
接下来,将变量传递给 DataFlow:
注意:@int 转换是因为 DataFlow 支持 int 但管道不支持,所以在管道中数据存储在字符串变量中。
在数据流中:
为从管道传入的“partitionCount”创建一个int参数:
来源:
在“优化”选项卡中,您可以控制读取时如何对源数据进行分区。为此,切换到“设置分区”和 select 基于 partitionCount 变量的轮询:
这将根据参数将传入数据分成 X 个桶。
SINK:
在“设置”选项卡下,尝试使用“文件名选项”设置来控制输出名称。选项有点有限,因此您可能无法准确获得想要的内容:
由于您已经对数据进行了分区,因此只需使用默认的源优化设置即可:
结果:
这将生成 X 个具有编号命名方案和一致文件大小的文件: