我需要获取文件列表,然后过滤此集合
DECLARE @input_file string = @"\data\{*}\{*}\{*}.avro";
@filenames = SELECT filename
FROM @input_file;
@filtered = SELECT filename FROM @filenames WHERE {condition}
如果可能的话...
答案 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子句不匹配的文件,从而为您节省了一些时间。 (此外,虚拟列名称中的下划线不是必需的,而是记住哪些列来自文件以及哪些列来自路径的有用方法)。希望这会有所帮助!