Как передать счет в 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. Или вы можете сделать пользовательский РЕДУКТОР.