Join 配置单元联接查询在内部联接上返回笛卡尔积

Join 配置单元联接查询在内部联接上返回笛卡尔积,join,hadoop,hive,cartesian-product,bucket-sort,Join,Hadoop,Hive,Cartesian Product,Bucket Sort,我在使用配置单元创建的两个表上进行内部联接。一个是大表“交易桶””另一个是小表“交易对手桶””。它们的创建如下所示:- 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 cou

我在使用配置单元创建的两个表上进行内部联接。一个是大表“交易桶””另一个是小表“交易对手桶””。它们的创建如下所示:-

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'

问题是联接正在从两个表中生成笛卡尔积。我的意思是,对于给定id,如果大表有100行,小表有4行,我希望联接返回100行,但我返回的是400行。有人有线索或目睹过类似情况吗?

您的语法正确吗?你不应该用
MAPJOIN(c)
而不是
MAPJOIN(对方)
?@SantiagoCepas,不管你使用的是别名还是确切的表名,它都会起作用,即使我删除了整个MAPJOIN提示,连接总是以笛卡尔积结束。但是,根据你代码中的表定义,确切的表名是
对手方_bucket
不是
对手方
你说得对@SantiagoCepas。它的打字错误。我纠正了它。