代码之家  ›  专栏  ›  技术社区  ›  Andrei

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

  •  0
  • Andrei  · 技术社区  · 7 年前

    DECLARE @input_file string = @"\data\{*}\{*}\{*}.avro";
    
    @filenames = SELECT filename
    FROM @input_file;
    
    @filtered = SELECT filename FROM @filenames WHERE {condition}
    

    如果有可能的话。。。

    1 回复  |  直到 7 年前
        1
  •  1
  •   mabasile_MSFT    7 年前

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

    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子句不匹配的文件,从而节省了一些时间。(另外,虚拟列名中的下划线不是必需的,但它是一种有用的方法,可以记住哪些列来自文件,哪些列来自路径)。希望对你有帮助!