我正在尝试在U-SQL中生成一个动态的FROM子句,这样我们就可以根据之前的查询结果从不同的文件中提取数据。大概是这样的:
@filesToExtract = SELECT whatevergeneratesthepaths from @foo; <-- this query generates a rowset with all the file we want to extract like: [/path/file1.csv, /path/file2.csv]
SELECT * FROM @filesToExtract; <-- here we want to extract the data from file1 and file2恐怕目前还不支持这种动态查询,但有人能帮我指出实现这一点的方法吗?似乎唯一可行的方法是生成另一个U-SQL脚本,然后执行它。
提前谢谢。
发布于 2017-08-19 02:16:46
您的问题并不完全清楚您是希望动态检索文件名并将其传递给EXTRACT语句,还是希望将表/行集的名称传递给SELECT的from子句。或者两者都有。
通常,您不能从U-SQL表达式动态生成源名称。你可能想在这里为动态或静态可参数化源的http://aka.ms/adlfeedback提交一个特性请求。
话虽如此,根据您的确切需求,可能有一些方法可以在没有您描述的变通方法的情况下实现您的目标。
例如,您可以将代码编写为参数化的表值函数,然后使用不同的脚本传递不同的行集,或者,如果您可以静态地决定选择哪个行集,则可以使用if语句。
下面是一个伪代码示例:
DECLARE EXTERNAL @someconditionparameter Boolean = true;
IF (@someconditionparameter) THEN
@data = EXTRACT a int, b string FROM @fileset1 USING Extractors.Csv();
ELSE
@data = EXTRACT a int, b string FROM @file2 USING ...;
END;
@results = MyTableValuedFunction (@data);
...如果您的文件采用不同的模式,您可以在TVF中使用灵活的列集(当前在预览中,请参阅发行说明)来处理行集模式的可变性。
https://stackoverflow.com/questions/45754420
复制相似问题