как написать запрос usql для вывода в несколько файлов

я хочу сгруппировать набор данных на основе уникальных значений в столбце и сохранить их в несколько файлов.

Моя проблема такая же, как уже описана здесь по ссылке: U -Вывод SQL в Azure Data Lake

Поскольку я новичок в языке USQL, я не могу реализовать второй шаг из ответа. Я не могу понять, как написать запрос usql для запуска сгенерированного сценария usql из первой части ответа.


person Kapil Ghimire    schedule 07.06.2017    source источник
comment
Вы не можете написать U-SQL, который запускает другой U-SQL, т.е. динамический U-SQL не поддерживается. Что вы делаете: 1) открываете сгенерированный скрипт и запускаете его самостоятельно или 2) запускаете его через фабрику данных 3) запускаете его через Powershell и т. д.   -  person wBob    schedule 07.06.2017


Ответы (1)


Если количество групп известно заранее, вы можете написать сохраненный 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); 

В качестве альтернативы, если вы хотите проанализировать несколько файлов в автономном режиме, я бы загрузил полный файл и использовал оболочку (PowerShell или Linux Shell), чтобы разделить файл.

person Pierre Rebours    schedule 03.09.2017