U-Sql 不允许非等值连接

U-Sql not allowing non-equijoins

我偶然发现了一些关于 U-SQL 的问题,这对我来说是一个我还没有找到解决方法的问题。

似乎 U-SQL 在连接中除了 == 之外不支持其他任何东西,所以你不能在连接本身中放置 > 或 <。

下面我在oracle中做的用例:

create table trf.test_1(
number_col int
);


insert into trf.test_1 VALUES (10);
insert into trf.test_1 VALUES (20);
insert into trf.test_1 VALUES (30);
insert into trf.test_1 VALUES (60);

drop table trf.test_2;
create table trf.test_2(
number_col int
);


insert into trf.test_2 VALUES (20);
insert into trf.test_2 VALUES (30);


SELECT t1.number_col, t2.number_col

FROM trf.test_1 t1
LEFT JOIN trf.test_2 t2 ON t1.number_col < t2.number_col
;

我得到以下信息:

在 u-sql 中没有 < join 的情况下我如何做到这一点?

我尝试了交叉连接,但是如果你在 where 子句中包含 < 它只会变成一个内部,你不会得到带有空值的行。

任何想法表示赞赏。

@t1 = 
     SELECT * FROM 
     ( VALUES
     (10),
     (20),
     (30),
     (60)
     ) AS T(num_col);

@t2 = 
 SELECT * FROM 
     ( VALUES
     (20),
     (30)
     ) AS T(num_col);

@result =
    SELECT t1.num_col, t2.num_col AS num_col_2
    FROM @t1 AS t1
     CROSS JOIN @t2 AS t2
  WHERE t1.num_col < t2.num_col;

 @result2 = 
 SELECT t1.num_col, t2.num_col AS num_col_2
 FROM @t1 AS t1
  LEFT JOIN @result AS t2 ON t1.num_col == t2.num_col;

 OUTPUT @result2
 TO "/Output/ReferenceGuide/Joins/exampleA.csv"
 USING Outputters.Csv();

编辑 - 我将 @t1 数据集的左连接添加回 @result 集,这似乎有效,但如果有更好的解决方案,我会很感兴趣。似乎有点变通。

这是一个已知功能,在文章“U-SQL SELECT Selecting from joins”中进行了广泛讨论。

该文章的一些引述:

Join Comparisons

U-SQL, like most scaled out Big Data Query languages that support joins, restricts the join comparison to equality comparisons between columns in the rowsets to be joined...

...

If one has a non-equality comparison or a more complex expression (such as a method invocation) in the comparison, one can move the comparison to the SELECT’s WHERE clause. Or the more complex expression can be placed in an earlier SELECT statement’s column and then that alias can be referred to in the join comparison.

基本上它们在像 ADLA 这样的分布式平台上的扩展性不是特别好。