文档

ODPS-0130252

更新时间:

错误码:ODPS-0130252: Cartesian product is not allowed

错误1: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:

1)当其中join的一张表是小表时,可以设置odps.sql.allow.cartesian值为true或者补充join的关联条件来解决。

2)当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;