如何仅使用 U-SQL 和文件中的某些字段将大文件划分为 files/directories?

How do I partition a large file into files/directories using only U-SQL and certain fields in the file?

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

我的问题是:当我们收到一个文件时,它包含多个商店的数据。我想使用 "virtual column" 功能将此文件分隔到相应的目录结构中。该结构是“/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 并过滤整个数据集,但这似乎非常低效。

提前感谢 reading/responding!

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

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

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

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

然后通过使用脚本或使用我们的 SDK 编写的工具,下载先前的输出文件,然后以编程方式创建第二个 U-SQL 脚本,该脚本对每对 CustomerNumber 和店铺编号