我在使用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行。任何人都有线索或见过类似情况的人?