Как передать счет в U-SQL Applier?

Я хочу передать подсчет данных пользовательскому приложению, но я не уверен, как его передать. Вот мой пример кода, где я вычисляю количество в @count и передаю его конструктору CsvApplier, но он не работает. Есть ли способ добиться этого в U-SQL?

Обратите внимание, что это не работает, поэтому я ищу

DECLARE @in string = "/input/abc.csv";
DECLARE @out string = "/output/xyz.csv";

@selectlog =
    EXTRACT UserId string,                
            StartTime string,
            EndTime string,            
    FROM @in
    USING Extractors.Csv(silent:true);

@count =
SELECT COUNT( * ) AS count
FROM @selectlog;

@log =
    SELECT t.UserId,
           t.StartTime,
           t.EndTime,
    FROM @selectlog
         CROSS APPLY new DemoJobs.CsvApplier(@count) AS t(UserId string, StartTime string, EndTime string);


OUTPUT @log
TO @out
USING Outputters.Csv(quoting : false);

1 ответ

Решение

Обратите внимание, что @count имеет тип TABLE(count long?) и U-SQL не дает вам скалярного присваивания переменной или передачи таблицы функции C#, поскольку для этого потребуется ввести точку синхронизации в граф выполнения.

Чтобы получить то, что вы хотите, вы можете сделать CROSS JOIN между @selectlog а также @count добавить счетчик к каждой строке, а затем применить Applier. Или вы можете сделать пользовательский РЕДУКТОР.

Другие вопросы по тегам