U-SQL从模式获取文件路径

时间:2018-07-25 15:57:29

标签: azure azure-data-lake u-sql azure-stream-analytics

我需要获取文件列表,然后过滤此集合

DECLARE @input_file string = @"\data\{*}\{*}\{*}.avro";

@filenames = SELECT filename
FROM @input_file;

@filtered = SELECT filename FROM @filenames WHERE {condition}

如果可能的话...

1 个答案:

答案 0 :(得分:1)

方法是在文件集中定义虚拟列。然后,您可以提取和操作这些虚拟列,就像它们是从文件中提取的数据字段一样。示例:

DECLARE @input_file string = "/data/{_partition1}/{_partition2}/{filename}.avro";
@rowset = 
    EXTRACT column1     string,
            column2     int,
            columnN     string,
            _partition1 string,
            _partition2 int,
            _filename   string
     FROM @input_file
     USING <Avro extractor>

@filtered = 
    SELECT column1, column2, columnN, _partition1, _partition2, _filename
    WHERE  filename <your condition>

U-SQL甚至不会读取与WHERE子句不匹配的文件,从而为您节省了一些时间。 (此外,虚拟列名称中的下划线不是必需的,而是记住哪些列来自文件以及哪些列来自路径的有用方法)。希望这会有所帮助!