如何编写usql查询以输出到多个文件

时间:2017-06-07 11:12:11

标签: azure-data-lake data-partitioning

我想根据列中的唯一值对数据集进行分组,并将它们保存到多个文件中。

我的问题与链接中已经描述过的问题相同: U-SQL Output in Azure Data Lake

由于我是USQL语言的新手,我无法实现答案的第二步。我无法弄清楚如何编写usql查询来从答案的第一部分运行生成的usql脚本

1 个答案:

答案 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)来拆分文件。