我想根据列中的唯一值对数据集进行分组,并将它们保存到多个文件中。
我的问题与链接中已经描述过的问题相同: U-SQL Output in Azure Data Lake
由于我是USQL语言的新手,我无法实现答案的第二步。我无法弄清楚如何编写usql查询来从答案的第一部分运行生成的usql脚本
答案 0 :(得分:1)
如果预先知道组的数量,您可以编写一个USQL存储procedure,它将作为参数1)组的值2)文件的名称。
在下面的伪代码中,最终文件的名称由组的基础值驱动。要拆分的数据来自USQL表(在伪代码中称为)。
DROP PROCEDURE IF EXISTS splitByGroups;
CREATE PROCEDURE splitByGroups(@groupValue string, @file_name_prefix string = "extract")
AS
BEGIN
DECLARE @OUTPUT string = "/output/" + file_name_prefix + "_"+ @groupValue + ".csv";
OUTPUT (
SELECT *
FROM <MyTable>
WHERE <MyGroup> == @groupValue
)
TO @OUTPUT
USING Outputters.Csv(outputHeader : true);
END;
然后,您可以像拥有组一样多次执行存储过程:
splitByGroups("group1", DEFAULT);
splitByGroups("group1", DEFAULT);
或者,如果您希望脱机分析多个文件,我会下载完整文件并使用shell(PowerShell或Linux Shell)来拆分文件。