我有一个非常大的 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 并过滤整个数据集,但这似乎效率非常低。
预先感谢您的阅读/回复!
目前,U-SQL 要求必须在编译时理解脚本的所有文件输出。换句话说,无法根据输入数据创建输出文件。
我们正在积极努力,争取在 2017 年晚些时候发布基于数据的动态输出。
同时,在动态输出功能可用之前,完成您想要的模式需要使用两个脚本
第一个脚本将使用 GROUP BY 来识别 CustomerNumber 和 StoreNumber 的所有唯一组合并将其写入文件。
然后,通过使用脚本或使用我们的 SDK 编写的工具,下载之前的输出文件,然后以编程方式创建第二个 U-SQL 脚本,该脚本为每对 CustomerNumber 和 StoreNumber 提供显式 OUTPUT 语句
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)