想象一下这个文件路径:
我可以从" filename.csv"中提取数据吗?和" filename2.csv"没有明确写出他们的路径?
我想做类似的事情:
@var = EXTRACT column FROM "/root/{*}.csv" USING Extractors.Csv(skipFirstNRows:1);
有可能吗?
答案 0 :(得分:1)
不幸的是,此功能(Kleene- *类似递归文件夹导航)尚未在文件集中提供,但在我们的长期路线图中。请在http://aka.ms/adlfeedback提交/上传此功能。
目前的解决方法是为您希望遇到的每个级别设置一步外卡EXTRACT
,然后将它们全部联合起来。如,
@d1 = EXTRACT ... FROM "/fixpath/{*}" USING ... ;
@d2 = EXTRACT ... FROM "/fixpath/{*}/{*}" USING ...;
@d3 = EXTRACT ... FROM "/fixpath/{*}/{*}/{*}" USING ...;
....
@data =
SELECT * FROM @d1 UNION ALL SELECT * FROM @d2 UNION ALL SELECT * FROM @d3 UNION ALL ...;
答案 1 :(得分:0)
是的,你可以!格式化几乎就是您的想法。它是通过U-SQL中的文件集完成的,它们允许您搜索文件夹的整个目录,并从路径中提取信息。您可以在文件夹路径中的任何位置定义所选的通配符,然后将该字符另存为提取语句中的虚拟列。
DECLARE @file_set_path string = "/Samples/Data/AmbulanceData/vehicle{vid}_{date:MM}{date:dd}{date:yyyy}.csv";
@data =
EXTRACT vehicle_id int,
entry_id long,
event_date DateTime,
latitude float,
longitude float,
speed int,
direction string,
trip_id int?,
vid int, // virtual file set column
date DateTime // virtual file set column
FROM @file_set_path
USING Extractors.Csv();
注意路径{vid}中的常规通配符字符,以及它如何在提取语句中保存为具有相同名称的新列(您可以使用它来过滤查询)。日期虚拟列是文件集的一项特殊功能,允许您自动将文件集中的日期捆绑到单个DateTime对象中。
文件集也可以在目录路径中以相同的方式工作 - 您可以将一组子文件夹除以日期和版本,并使用" / Samples / {date:yyyy} / {date:MM} / {date: DD} / {式} / RCV_ {VID}的.csv"并按上述相同方式存储虚拟列。
如果您还有其他问题,请与我们联系!