如何从文件夹及其子文件夹中获取所有文件?

时间:2018-03-15 11:50:22

标签: u-sql

想象一下这个文件路径:

  1. /root/subfolder/filename.csv
  2. /root/subfolder/subfolder2/filename2.csv
  3. 我可以从" filename.csv"中提取数据吗?和" filename2.csv"没有明确写出他们的路径?

    我想做类似的事情:

    @var = EXTRACT column FROM "/root/{*}.csv" USING Extractors.Csv(skipFirstNRows:1);
    

    有可能吗?

2 个答案:

答案 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"并按上述相同方式存储虚拟列。

如果您还有其他问题,请与我们联系!