如果我不知道该表包含多少个不同的键值,是否可以根据列值将一个表自动拆分为几个文件?
是否可以将键值放入文件名中?
最佳答案
这是我们的top ask(并且以前也是asked on stackoverflow :)。我们目前正在研究它,希望它能在夏天提供。
在此之前,您必须编写脚本生成器。我倾向于使用U-SQL生成脚本,但是您可以使用Powershell或T4等来完成。
这是一个例子:
假设您要为下表/行集name
中的列@x
写入文件:
name | value1 | value2
-----+--------+-------
A | 10 | 20
A | 11 | 21
B | 10 | 30
B | 100 | 200
您将编写一个脚本来生成如下所示的脚本:
@x = SELECT * FROM (VALUES( "A", 10, 20), ("A", 11, 21), ("B", 10, 30), ("B", 100, 200)) AS T(name, value1, value2);
// Generate the script to do partitioned output based on name column:
@stmts =
SELECT "OUTPUT (SELECT value1, value2 FROM @x WHERE name == \""+name+"\") TO \"/output/"+name+".csv\" USING Outputters.Csv();" AS output
FROM (SELECT DISTINCT name FROM @x) AS x;
OUTPUT @stmts TO "/output/genscript.usql"
USING Outputters.Text(delimiter:' ', quoting:false);
然后使用
genscript.usql
,在@x
之前进行计算并提交,以将数据划分为两个文件。