U-SQL Сравните данные набора строк в скалярном выражении

Я прочитал некоторые статьи о том, что преобразование невозможно, однако я столкнулся с проблемой, когда значение извлекается из набора строк и должно использоваться в скалярном выражении.

ColumnA — это строковое значение, а ColumnB — это Int..

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

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

Это не удается в ADLA, поскольку переменная набора строк @RequiredData не является скалярной переменной.


person Amir Parkar    schedule 20.04.2018    source источник


Ответы (1)


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();

Это выведет пустой файл, если значение не «Что-то».

person wBob    schedule 20.04.2018