根据我两周的 Azure 经验。我想根据大小分割文件。例如,有一个包含 200k 行的表,我想设置一个参数来将该表拆分为多个文件,每个文件的限制为 100Mb(如果有意义的话)。它将返回 N
个文件,具体取决于表大小。像这样:
my_file_1ofN.csv
我正在浏览文档、博客和视频,并且可以使用个人帐户中的 python 脚本使用 Azure Functions、Azure Batch 和 Databricks 进行一些 POC。问题是公司不允许我使用任何这些方法。
因此,我使用分区数分割文件,但这些文件的大小不同,具体取决于表和分区。
有办法实现这一点吗?我现在正在管道中尝试 lookups
和 foreach
事件,但结果不佳。
欢迎任何想法或线索。谢谢!!
最佳答案
我无法通过大小计算出这一点,但如果您可以获得总行数,则可以使用 DataFlow 根据行数输出粗略的近似值。
正在开发中:
在此示例中,我从 Azure Synapse SQL 池中读取数据,因此我运行查找来根据每个分区 8,000,000 行来计算“分区”数量:
然后我将结果捕获为变量:
接下来,将变量传递给数据流:
注意:@int 转换是因为 DataFlow 支持 int 但管道不支持,因此在管道中数据存储在字符串变量中。
在数据流中:
为“partitionCount”创建一个int参数,该参数是从管道传入的:
来源:
在“优化”选项卡中,您可以控制读取时数据源的分区方式。为此,切换到“设置分区”并根据partitionCount变量选择循环:
这将根据参数将传入数据拆分为 X 个存储桶。
水槽:
在“设置”选项卡下,尝试使用“文件名选项”设置来控制输出名称。选项有点有限,因此您可能很难获得您想要的东西:
由于您已经对数据进行了分区,因此只需使用默认的源优化设置:
结果:
这将生成 X 个具有编号命名方案和一致文件大小的文件:
关于Azure 数据工厂按文件大小拆分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62944366/