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

问题描述 投票:2回答:2
AND ((Glt.LineNumber == Pct.LineNumber) OR (Glt_1.LineNumber == Pct.UniqueKey_Num));

我想在U-SQL中实现上述条件,但Azure不支持它。我怎样才能做到这一点?

azure azure-sql-database azure-data-lake
2个回答
0
投票

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

简单的repro:

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.