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

标签 azure azure-data-factory

根据我两周的 Azure 经验。我想根据大小分割文件。例如,有一个包含 200k 行的表,我想设置一个参数来将该表拆分为多个文件,每个文件的限制为 100Mb(如果有意义的话)。它将返回 N 个文件,具体取决于表大小。像这样:

my_file_1ofN.csv

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

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

有办法实现这一点吗?我现在正在管道中尝试 lookupsforeach 事件,但结果不佳。

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

最佳答案

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

正在开发中:

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

enter image description here

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

enter image description here

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

enter image description here

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

在数据流中:

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

enter image description here

来源:

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

enter image description here

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

水槽:

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

enter image description here

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

enter image description here

结果:

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

enter image description here

关于Azure 数据工厂按文件大小拆分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62944366/

相关文章:

Azure DevOps CI 构建器拉取访问被拒绝,存储库不存在或可能需要 'docker login'

azure - 我可以停止 AKS 群集并启动吗?

azure - 通过 Graph 使用 immutableID 创建 Azure 用户

python - 如何将文件从本地文件服务器 (SFTP) 直接移至 Snowflake?

Azure 数据工厂 - 适用于 Linux 盒的集成运行时

azure - 自托管集成运行时是否有轮询间隔设置?

c# - 即使管理员已同意,也会触发 ADAL 用户同意

azure - 自动重试 CosmosDb 输出绑定(bind)

azure - 数据流中的动态文件路径

json - 如何在Azure数据工厂复制事件中设置Content-Type?