2017-07-22 81 views
0

我的连接正在产生我不明白的结果。加入的值不匹配?

如果它很重要或相关,我在Impala中使用Parquet Tables。

我在做什么是:

create table test1(foo string, bar int) stored as parquet; 
create table test2(foo string, bar int) stored as parquet; 
insert into test1 values ("something1",1); 
insert into test2 values ("something2",2); 

检查,以确保工作的:

select * from test1; 

给我的输出:

+----------------------+ 
| foo  | bar | 
+----------------------+ 
| something1 | 1  | 
+----------------------+ 
1 rows 

而且

select * from test2; 

给我的输出:

+----------------------+ 
| foo  | bar | 
+----------------------+ 
| something2 | 2  | 
+----------------------+ 
1 rows 

一切似乎罚款为止。但现在,当我尝试加入这两个表与

select * from test1 left outer join test2 using (foo); 

我得到:

+---------------------------------------------+ 
| foo  | bar | foo  | bar | 
+---------------------------------------------+ 
| something1 | 1  | something2 | 2  | 
+---------------------------------------------+ 
1 rows 

这是意想不到的。我期望输出是东西1,1,null,null。不应该只在test1.foo = test2.foo时才会发生连接?

我也尝试过在test1.foo = test2.foo和内部连接上使用语法连接,并看到相同的结果。

有人可以向我解释这里发生了什么事吗?我重读了文档,我不明白为什么会发生这种情况。

+0

您正在做一个左外连接,您想要一个内连接吗?您也正在使用不匹配的列...因此,使用外连接时的结果集 – Charleh

+0

我想要执行左外连接。这是一个我正在观察的更大型数据集的简化版本。试图用两个表格中最简单和最小的数据集来复制问题,每个表格有1行。 如上所述,如果我使用内部连接,输出是相同的 – tehc0w

+0

我认为你已经过度简化了这个问题。如上所述,这是可笑的行为,并且会指示数据库中的错误。 –

回答

0

更新:这似乎是一个工程的bug。感谢您的帮助和反馈,所有

0

试试这个

select * from test1 left outer join test2 on test1.foo=test2.foo 
+0

正如我在倒数第二段中提到的那样,我用相同的输出尝试了这一点。我认为它可能忽略了使用vs的用例。 – tehc0w

+0

这很奇怪,但尝试升级版本的Impala或使用不同的版本 –