如何将计数传递给 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。