AND ((Glt.LineNumber == Pct.LineNumber) OR (Glt_1.LineNumber == Pct.UniqueKey_Num));
我希望在U-SQL中实现上述条件,但Azure不支持它。我怎么能这样做?
答案 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更快。