2013-08-21 67 views
0

我有两个Hive表,我试图加入他们两个。表格不是由任何字段聚集或分区的。尽管这些表包含公用密钥字段的记录,但连接查询始终返回0个记录。所有的数据类型都是'字符串'数据类型。Hive加入返回零记录

连接查询简单,看起来像下面

select count(*) cnt 
from 
fsr.xref_1 A join 
fsr.ipfile_1 B 
on 
(
    A.co_no = B.co_no 
) 
; 

任何想法可能是什么回事?我在这两个表中只有一条记录(相同的值)。

下面是

CREATE TABLE xref_1 
(
co_no string 
) 
clustered by (co_no) sorted by (co_no asc) into 10 buckets 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE; 

CREATE TABLE ipfile_1 
(
co_no string 
) 
clustered by (co_no) sorted by (co_no asc) into 10 buckets 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE; 
+0

这应该工作,你可以给一个更完整的例子使用表定义和真实数据? – jkovacs

回答

0

嗨您正在使用启动模式加入我的表定义。请使用您的查询是这样的:

SELET COUNT(*) cnt FROM A a JOIN B b ON (a.key1 = b.key1); 

如果仍然有问题,那么使用MAPJOIN

set hive.auto.convert.join=true; 
select count(*) from A join B on (key1 = key2) 

请参阅Link更多细节。

+0

哇!使用mapjoin的set选项做了诀窍。我不完全明白如何使用Mapjoin优化帮助产生正确的结果。任何线索? –

+0

这对我来说也有点棘手。请参阅上面的链接和** https://cwiki.apache.org/confluence/display/Hive/MapJoinOptimization**和** https://cwiki.apache.org/Hive/languagemanual-joins.html#LanguageManualJoins-MapJoinRestrictions **以获得更多解释。 –