本文为您介绍错误码ODPS-0130252:Cartesian product is not allowed的报错场景,并提供对应的解决方案。
错误:cartesian product is not allowed without mapjoin
错误信息示例
ODPS-0130252:[m,n] Cartesian product is not allowed - cartesian product is not allowed without mapjoin
问题描述
两个表进行JOIN的时候,如果没有指定JOIN的条件,则会退化为两个表之间进行笛卡尔积计算。在odps.sql.allow.cartesian
取值为false的时候,会报上述错误。
解决方案
建议的方案是修改Query:
当其中JOIN的一张表是小表时,可以设置o
dps.sql.allow.cartesian
值为true或者补充JOIN的关联条件来解决。当JOIN的表都是大表时,不推荐
odps.sql.allow.cartesian
设置为true,会发生数据膨胀。建议补充JOIN的关联条件来解决。
Query示例
--错误,当前的设置是不允许笛卡尔积
odps> SET odps.sql.allow.cartesian=false;
odps> SELECT t1. *
FROM src t1
JOIN src t2;
FAILED: ODPS-0130252:[3,1] Cartesian product is not allowed - cartesian product is not allowed without mapjoin
--正确,补充join条件,这里join条件是两个表的字段相等
odps> SELECT t1. *
FROM src t1
JOIN src t2
ON t1.key = t2.key;
--正确,补充join条件,由于join条件不是字段取值相等,因此需要指定mapjoin hint
odps> SELECT /*+mapjoin(t1) * / t1.*
FROM src t1
JOIN src t2
ON t1.key > t2.key;
文档内容是否对您有帮助?