MaxCompute/ODPS-0130252错误解决方案

默认情况下,MaxCompute会禁用笛卡尔积,因此当两个表进行JOIN的时候,如果没有指定JOIN的条件,则会退化为两个表之间进行笛卡尔积计算,导致出现ODPS-0130252错误。

对此,笔者总结了下述三种解决方案。

1.当其中JOIN的一张表是小表时,我们可以设置SET odps.sql.allow.cartesian = TRUE;

2.此外,我们还可以使用MAPJOIN,在MAP阶段将指定表的数据全部加载在内存中。例子如下所示:


SELECT  /*+ MAPJOIN(tmp_1) */
        a
        ,b
FROM (
        SELECT  a        
        FROM table_a
) AS tmp_1
JOIN (
        SELECT  b
        FROM table_b
) AS tmp_2
;

3.当JOIN的表都是大表时,使用上述方案会发生数据膨胀。因此,我们可以往SELECT中增加字段来解决问题。例子如下:

SELECT  a
        ,b
FROM (
        SELECT  a
                ,'1' AS tmp_field
        FROM table_a
) AS tmp_1
JOIN (
        SELECT  b
                ,'1' AS tmp_field
        FROM table_b
) AS tmp_2
ON tmp_1.tmp_field = tmp_2.tmp_field
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值