【问题标题】:How do I partition a large file into files/directories using only U-SQL and certain fields in the file?如何仅使用 U-SQL 和文件中的某些字段将大文件分区为文件/目录?
【发布时间】:2016-12-27 19:16:17
【问题描述】:

我有一个非常大的 CSV,其中每一行都包含客户和商店 ID,以及交易信息。当前的测试文件大约 40 GB(大约 2 天),因此对于选择查询的任何合理返回时间,分区是绝对必须的。

我的问题是:当我们收到一个文件时,它包含多个商店的数据。我想使用“虚拟列”功能将此文件分离到相应的目录结构中。该结构是“/Data/{CustomerId}/{StoreID}/file.csv”。

我还没有让它与 OUTPUT 语句一起使用。语句使用如下:

// Output to file
OUTPUT @dt
TO @"/Data/{CustomerNumber}/{StoreNumber}/PosData.csv"
USING Outputters.Csv();

它给出了以下错误:

Bad request. Invalid pathname. Cosmos Path: adl://<obfuscated>.azuredatalakestore.net/Data/{0}/{1}/68cde242-60e3-4034-b3a2-1e14a5f7343d

有没有人尝试过同样的事情?我试图从字段中连接输出路径,但这是不行的。我曾考虑将其作为一个函数 (UDF) 来实现,它采用两个 ID 并过滤整个数据集,但这似乎非常低效。

提前感谢您阅读/回复!

【问题讨论】:

    标签: azure-data-lake u-sql


    【解决方案1】:

    目前 U-SQL 要求必须在编译时理解脚本的所有文件输出。也就是说,无法根据输入数据创建输出文件。

    基于数据的动态输出是我们积极争取在 2017 年晚些时候发布的内容。

    与此同时,在动态输出功能可用之前,完成您想要的模式需要使用两个脚本

    第一个脚本将使用 GROUP BY 来识别 CustomerNumber 和 StoreNumber 的所有唯一组合并将其写入文件。

    然后通过使用脚本或使用我们的 SDK 编写的工具,下载之前的输出文件,然后以编程方式创建第二个 U-SQL 脚本,该脚本具有针对每对 CustomerNumber 和 StoreNumber 的显式 OUTPUT 语句

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2011-01-29
    • 2012-04-13
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多