如何将计数传递给 U-SQL Applier?
How to pass count to 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);
请注意,@count 的类型为 TABLE(count long?)
,而 U-SQL 不会为您提供标量变量赋值或 table 传递给 C# 函数,因为这需要我们在执行图中引入一个同步点。
为了得到你想要的,你可以在 @selectlog
和 @count
之间做一个 CROSS JOIN 以将计数添加到每一行然后应用 Applier。或者您可以做一个自定义 REDUCER。
我想将数据计数传递给自定义应用程序,但我不确定如何传递它。这是我的示例代码,我在其中计算 @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);
请注意,@count 的类型为 TABLE(count long?)
,而 U-SQL 不会为您提供标量变量赋值或 table 传递给 C# 函数,因为这需要我们在执行图中引入一个同步点。
为了得到你想要的,你可以在 @selectlog
和 @count
之间做一个 CROSS JOIN 以将计数添加到每一行然后应用 Applier。或者您可以做一个自定义 REDUCER。