如何在U-SQL连接中使用OR逻辑运算符?

时间:2018-01-03 11:40:49

标签: azure azure-sql-database azure-data-lake

AND ((Glt.LineNumber == Pct.LineNumber) OR (Glt_1.LineNumber == Pct.UniqueKey_Num));

我希望在U-SQL中实现上述条件,但Azure不支持它。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

U-SQL支持OR SQL语法(参见下面的简单示例)。你有特别的错误吗?

简单的重复:

@inputA = 
    SELECT *
    FROM (
        VALUES
            ( (int)1 ), 
            ( (int)2 ),
            ( (int)3 )
     ) AS x ( LineNumber );


@inputB = 
    SELECT *
    FROM (
        VALUES
            ( (int)3, (int)3 ), 
            ( (int)4, (int)4 ),
            ( (int)5, (int)5 )
     ) AS x ( LineNumber, UniqueKey_Num );



@output =
    SELECT Glt. *
    FROM @inputA AS Glt
         INNER JOIN
             @inputA AS Glt_1
         ON Glt.LineNumber == Glt_1.LineNumber
         INNER JOIN
             @inputB AS Pct
         ON Glt.LineNumber == UniqueKey_Num
    WHERE 1 == 1
      AND ((Glt.LineNumber == Pct.LineNumber) OR (Glt_1.LineNumber == Pct.UniqueKey_Num));


OUTPUT @output TO "/output/output.csv"
USING Outputters.Csv();

答案 1 :(得分:0)

我认为问题是关于在连接条件中使用OR。这不受支持(仅支持连词)。与任何不受支持的表达式一样,您可以将其转换为CROSS JOIN并将其移动到WHERE子句中,或将条件的一部分保留在受支持的JOIN的ON子句中。

在这种情况下,您还可以使用第二个连接条件执行一个连接条件和union(all)。根据连接条件的选择性和统计数据,索引等的可用性,这可能比单个CROSS JOIN更快。