如何从文件夹及其子文件夹中获取所有文件?
How to get all files from a folder and his subfolders?
想象一下这个文件路径:
- /root/subfolder/filename.csv
- /root/subfolder/subfolder2/filename2.csv
我可以从 "filename.csv" 和 "filename2.csv" 中提取数据而不显式写入它们的路径吗?
我想做类似的事情:
@var = EXTRACT column FROM "/root/{*}.csv" USING Extractors.Csv(skipFirstNRows:1);
可能吗?
是的,你可以!格式几乎与您想象的完全一样。它是通过 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 }/{type}/RCV_{vid}.csv" 并像上面一样存储虚拟列。
如果您还有其他问题,请告诉我!
不幸的是,此功能(类似于 Kleene-* 的递归文件夹导航)在文件集中尚不可用,但在我们的长期路线图中。请 file/upvote 在 http://aka.ms/adlfeedback 上使用此功能。
目前的work-around是对你预计会遇到的每一关都有一个步骤通配符EXTRACT
然后UNION ALL他们在一起。例如,
@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 ...;
想象一下这个文件路径:
- /root/subfolder/filename.csv
- /root/subfolder/subfolder2/filename2.csv
我可以从 "filename.csv" 和 "filename2.csv" 中提取数据而不显式写入它们的路径吗?
我想做类似的事情:
@var = EXTRACT column FROM "/root/{*}.csv" USING Extractors.Csv(skipFirstNRows:1);
可能吗?
是的,你可以!格式几乎与您想象的完全一样。它是通过 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 }/{type}/RCV_{vid}.csv" 并像上面一样存储虚拟列。
如果您还有其他问题,请告诉我!
不幸的是,此功能(类似于 Kleene-* 的递归文件夹导航)在文件集中尚不可用,但在我们的长期路线图中。请 file/upvote 在 http://aka.ms/adlfeedback 上使用此功能。
目前的work-around是对你预计会遇到的每一关都有一个步骤通配符EXTRACT
然后UNION ALL他们在一起。例如,
@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 ...;