【问题标题】:Azure Data Factory split file by file sizeAzure 数据工厂按文件大小拆分文件
【发布时间】:2020-10-16 04:26:37
【问题描述】:

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

my_file_1ofN.csv

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

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

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

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

【问题讨论】:

    标签: azure azure-data-factory-2 azure-data-factory-pipeline


    【解决方案1】:

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

    正在筹备中

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

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

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

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

    在数据流中

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

    来源

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

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

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

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

    结果

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

    【讨论】:

    • 做了类似的方法。我将表导出到csv 文件,然后在管道中使用get_metadata 活动来获取文件的大小,以根据请求定义的所需大小来定义分区数。这是一个接近的替代方案,但是当表格太大并且这是不必要的额外步骤时会出现问题。感谢您的宝贵时间!
    猜你喜欢
    • 2020-12-04
    • 2021-01-16
    • 2020-07-29
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多