Hive连接查询返回内连接上的笛卡尔积

时间:2014-05-28 19:16:38

标签: join hadoop hive cartesian-product bucket-sort

我在使用Hive创建的两个表上进行内连接。一个是一张大桌子" trades_bucket "另一个是一张小桌子" counterparty_bucket "。它们的创建如下: -

DROP TABLE IF EXISTS trades_bucket;
CREATE EXTERNAL TABLE trades_bucket(
parentId STRING,
BookId STRING) CLUSTERED BY(parentId) SORTED BY(parentId) INTO 32 BUCKETS;

DROP TABLE IF EXISTS counterparty_bucket;
CREATE EXTERNAL TABLE counterparty_bucket(
Version STRING,AccountId STRING,childId STRING) 
CLUSTERED BY(childId ) SORTED BY(childId) INTO 32 BUCKETS;

表之间的连接

SELECT /*+ MAPJOIN(counterparty_bucket) */ BookId , t.counterpartysdsid, c.sds  
FROM counterparty_bucket c join trades_bucket t 
on c.childId = t.parentId
where c.childId ='10001684'

问题是连接是从两个表中生成笛卡尔积。我的意思是,如果大表的 100行且小表的 4行对于给定的ID,我希望联接返回 100行 ,但我回来了 400行。任何人都有线索或见过类似情况的人?

0 个答案:

没有答案