AND ((Glt.LineNumber == Pct.LineNumber) OR (Glt_1.LineNumber == Pct.UniqueKey_Num));
我想在U-SQL中实现上述条件,但Azure不支持它。我怎样才能做到这一点?
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();
我认为问题是关于在连接条件中使用OR。这不受支持(仅支持连词)。与任何不受支持的表达式一样,您可以将其转换为CROSS JOIN并将其移动到WHERE子句中,或者将条件的一部分保留在受支持的JOIN的ON子句中。
在这种情况下,您还可以执行一个连接条件,并使用第二个连接条件连接(全部)它。根据连接条件的选择性和统计数据,索引等的可用性,这可能比单个CROSS JOIN更快。