1

我想将数据计数传递给自定义应用程序,但我不确定如何传递它。这是我的示例代码,我在其中计算 @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);
4

1 回答 1

1

请注意,@count 是类型TABLE(count long?),并且 U-SQL 不会为您提供标量变量赋值或将表传递给 C# 函数,因为这需要我们在执行图中引入一个同步点。

为了得到你想要的,你可以在每行之间做一个 CROSS JOIN@selectlog并将@count计数添加到每一行,然后应用 Applier。或者你可以做一个自定义的减速器。

于 2016-03-04T18:11:13.143 回答