0

我浏览了一些无法进行转换的文章,但是我遇到了一个问题,即在行集中获取值并且需要在标量表达式中使用。

ColumnA 是一个字符串值,ColumnB 是一个 Int..

@RequiredData = SELECT [ColumnA] from @Input ORDER BY [ColumnB] ASC
      FETCH 1 ROWS;

IF((@RequiredData == "Something")) THEN
//DO SOMETHING 
END;

这在 ADLA 中失败,出现问题行集变量 @RequiredData 不是标量变量。

4

1 回答 1

2

U-SQL 是一种声明性语言,控制流有限。您可以将您的逻辑转换为基于集合的,这将起作用,例如

@someOtherData = 
    SELECT * FROM 
        ( VALUES
        (1),(2),(3),(4),(5),(6),(7),(8),(9)
        ) AS x(y);


@Input = 
    SELECT * FROM 
        ( VALUES
        ("Something",  1),
        ("Nothing",   2)
        ) AS x(ColumnA, ColumnB);


@RequiredData = SELECT [ColumnA] FROM @Input ORDER BY [ColumnB] ASC
      FETCH 1 ROWS;


// IF((@RequiredData == "Something")) THEN
@output =
    SELECT d.*
    FROM @someOtherData AS d
         CROSS JOIN
             @RequiredData AS rd
    WHERE rd.ColumnA == "Something";


OUTPUT @output
TO "/output/output.txt"
USING Outputters.Tsv();

如果值不是“Something”,这将输出一个空文件。

于 2018-04-20T11:52:11.053 回答