您现在的位置是:网站首页>技术文章>大数据个人网站

阿里云Maxcompute常见报错信息解读

Petrichor2019-10-16 11:51大数据614人已围观

简介个人网站,用来做什么?我刚开始就把它当做一个我吐槽心情的地方,也就相当于一个网络记事本,也会放上一些照片。后来也用来记录自己所学习的知识。

1. ODPS-0130252:Cartesian product is not allowed

 “不允许笛卡尔积”

 主要是为了防止用户误操作,不小心漏了关联条件,造成大量的资源的耗费。特别,如果是后付费用户,做大表的笛卡尔积会占用大量的计算资源,会影响整个资源池的其他用户的正常使用。

 大部分场景下,笛卡尔积都不是用户的本意。对于真的想做笛卡尔积的用户,也有解决办法:

(1)有小表的时候,使用mapjoin;

(2)没有小表的时候,左右两张都单独新增一个字段,例如 1 as join_column ,关联时候用t1.join_column = t2.join_column;

2. ODPS-0130241:Illegal union operation - type mismatch for column 12 of UNION, left is BIGINT while right is STRING

 “union左右两边字段类型不一致”

 union左右两边的字段个数、字段名、字段类型需要完全一致。特别注意有种情况union中的某个表的某个字段值为显示的NULL,比如NULL as coll,但其他表的该字段为bigint,那么需要cast(NULL AS bigint) as col1

3. ODPS-0130111:Subquery partition pruning exception - records returned from subquery exceeded limit of 1000

 “子查询结果数大于1000行”

 这是maxcompute的限制。子查询一般是习惯于使用传统数据库的开发,经常用的查询方式。而实际上,无论是MYSQL还是maxcompute,都不建议使用子查询。在maxcompute中一般会用多表关联来解决问题

4. ODPS-0130071:Semantic analysis exception - physical plan generation failed: java.lang.RuntimeException: Table(xxxx) is full scan with all partitions, please specify partition predicates

 “分区表不允许全表扫描,必须指定分区值”

 这条限制主要用来防止用户误操作,造成大量的金钱和时间上的浪费。很可能用户的本意只是随便挑两条数据看看,却习惯性的随手写了一个select * from table1;其实无论是mysql还是maxcompute,都不建议写select * 扫描全表

 对于随便挑两条数据看看的需求,推荐使用read关键字,read table1 partition (pt = xxx) 10;即在表table1的pt=xxx分区中随便挑10条数据出来看看。read关键字不会讲任务转化成MR任务,可以直接返回。而如果真的需要扫描全表,则可以添加分区字段的范围查询,例如pt >= '2000' and pt <= '2099'。养成添加分区字段筛选条件的好习惯。

5. ODPS-0123111:Format string does not match datetime string

 “字符串格式不符合datetime类型”

 maxcompute中的datetime类型其实很好理解,和yyyy-MM-dd HH:mm:ss格式的字符串几乎是完全等价的。比如unix_timestamp('2018-01-01 00:00:00')就是正常结果,如果写成unix_timestamp('2018-01-01')结果就是NULL

6. ODPS-0420061: Invalid parameter in HTTP request - Fetched data is larger than the rendering limitation. Please try to reduce your limit size or column number

● “获取数据量过大”

 一般这种情况比较容易发生在“大宽表”的情况下,也可能是某个字符串类型的字段值过长。解决办法就是指定select 出来的字段、或者限制条数

7. ODPS-0130071:Semantic analysis exception - Top level UNION is not supported

 “不允许最外层使用union”

 外边再套一层select就行了。select * from (select a from table1 union all select a from table2) t

8. ODPS-0130071:[1,10] Semantic analysis exception - encounter runtime exception while evaluating function /, detailed message: DIVIDE func result NaN, two params are 0.000000 and 0.000000

● “除数为0”

● 这个错误信息虽然写的比较绕弯,但是还是可以理解的。所有涉及到除法的地方,都必须增加分母不为0的判断,if(bb IS NOT NULL AND bb <> 0, aa / bb ,NULL)

 

本文将持续更新。。。

很赞哦!(9)

下一篇:ODPS SQL(DDL 操作)

文章评论