【问题标题】:how to write usql query to output to multiple files如何编写usql查询以输出到多个文件
【发布时间】:2017-06-07 11:12:11
【问题描述】:

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

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

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

【问题讨论】:

  • 不能编写运行其他U-SQL的U-SQL,即不支持动态U-SQL。你要做的是 1)打开生成的脚本并自己运行它或 2)通过数据工厂运行它 3)通过 Powershell 等运行它

标签: azure-data-lake data-partitioning


【解决方案1】:

如果事先知道组的数量,您可以编写一个存储在procedure 的 USQL,它将作为参数 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)来拆分文件。

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多