摘要: 貌似大部分人在遇到报错的时候,都懒得用翻译软件翻译报错信息,一般直接抛出来问,甚至连报错信息都懒得复制,直接截图出来。所以这里特地总结了一下,最近一段时间有人经常在群里问到的报错信息。 ODPS-0130252:Cartesian product is not allowed “不允许笛卡尔积”主要是为了防止用户误操作,不小心漏了关联条件,造成大量的资源的耗费。

貌似大部分人在遇到报错的时候,都懒得用翻译软件翻译报错信息,一般直接抛出来问,甚至连报错信息都懒得复制,直接截图出来。所以这里特地总结了一下,最近一段时间有人经常在群里问到的报错信息。

ODPS-0130252:Cartesian product is not allowed

“不允许笛卡尔积”
主要是为了防止用户误操作,不小心漏了关联条件,造成大量的资源的耗费。特别,如果是后付费用户,做大表的笛卡尔积会占用大量的计算资源,会影响整个资源池的其他用户的正常使用。
大部分场景下,笛卡尔积都不是用户的本意。对于真的想做笛卡尔积的用户,也有解决办法:
(1)有小表的时候,使用mapjoin
(2)没有小表的时候,左右两张都单独新增一个字段,例如 1 as join_column ,关联时候用t1.join_column = t2.join_column

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 col1,但其他表的该字段为bigint,那么需要cast(NULL AS bigint) as col1

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

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

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'。养成添加分区字段筛选条件的好习惯。

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)

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。

ODPS-0123031:ODPS partition exception - maximum 60000 partitions allowed

“单表最多6万个分区”
一个表不允许超过6万的分区,如果分区过多,就要考虑重新设计分区了。

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;

ODPS-0130161:Parse exception - invalid token ')'

“不合法字符”
这种情况一般就是HQL写错了。原因可能多种多样,一般可以肉眼检查出来。
目前dataworks已经支持了编译时错误的自动检测。

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 出来的字段、或者限制条数。

ODPS-0130071:Semantic analysis exception - only a single expression in the SELECT clause is supported with UDTF's

“select后边只能有一个单独的UDTF”
如果想把UDTF放在select后边,那么这个select里就只能有这一个UDTF,不能有其他任何字段。
如果不是只想要这一个UDTF,那就要结合着lateral view一起用了。

最后补充一句

抛出问题给别人,是想让别人帮忙解决的。我发现很多人提问,习惯把问题描述到一个“绝不可能出问题”的情景下,但是还“偏偏出问题”了。

“我XXX也检查过了,XXX也检查过了,XXX也找人看过了,也在别人电脑上试过了,XXX和官方文档上也一模一样,之前运行过都没问题的,现在出问题了,到底是怎么回事儿呢? ”

这就不是一个想解决问题的态度。有人会在去医院看病的时候,坐在医生对面说,“我什么事儿都没有,好得很”么?

阅读原文​

本文为云栖社区原创内容,未经允许不得转载。

如何理解maxcompute常见报错信息?相关推荐

  1. Kibana启动常见报错信息的解决方案

    1.server is not ready yet 部署之后启动: 报错信息 "warning","migrations","pid":61 ...

  2. 常见报错信息及解决方法

    1.空指针异常(NullPointerException) 2.低级sql错误(BadSqlGrammarException) 3.修饰方法词 4. 5.前后端都不报错,前段页面修改数据显示成功,但数 ...

  3. DELL服务器常见报错信息

    1.1.PCI Parity Ecc 2.SBE log Disabled 3.ECC uncrr 分析了一下肯能是内存有问题,于是上网收了一下,大概意思也说的才不多,于是就把主机拆了,清理了一下里面 ...

  4. 大数据常见报错信息以及解决办法

    大数据常见错误信息以及解决办法 1.zook常见错误以及解决办法 1.1zook无法正常启动 1.zook常见错误以及解决办法 1.1zook无法正常启动 1.首选编辑好的脚本放在当前用户的bin目录 ...

  5. whmcs对接cdn系统_对接whmcs常见报错信息及解决方法

    API用户名密码错误 解决办法:检查DCIM的API接口及WHMCS的服务器设置的用户名和密码是否一致. 连接端口错误 解决办法:检查SSL端口是否填写正确 DCIM无法连接 解决办法:检查WHMCS ...

  6. 有什么服务器商支持whmcs对接,使用智简魔方对接whmcs常见报错信息及解决方法...

    常见问题及解决办法列表: ■API用户名密码错误 ■连接端口错误 ■DCIM无法连接 ■自动开通失败:该分组没有空闲服务器 ■不能实现自动开通 ■无法连接服务器管理系统 ■模块命令错误,产品不一致,无 ...

  7. java常问的报错_java常见报错及解决

    Java常见报错信息: Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:E ...

  8. TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错

    TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错 1.首先到官网下载程序 很多时候我们用twincat不具备硬件条件,需要用到虚轴进行测试,但是对于初学者来说,用twi ...

  9. 关于Findbugs的一些常见报错的翻译和处理方式

    在Lab5中要求使用 CheckStyle 和 FindBugs 工具对经过人工走查的 Lab4 代码进行自动的静态代码分析.在使用FindBugs的过程中,出现了一些难以理解的报错,经查阅资料,了解 ...

最新文章

  1. aws lambda使用_使用AWS Lambda安排Slack消息
  2. python虚拟环境 windows环境搭建_windows 下搭建python虚拟环境(示例代码)
  3. 常用的SSH注解标签
  4. Python异常及处理方法总结
  5. android6.0源码分析之Zygote进程分析
  6. css——模态框【遮罩层的制作;信息层;往白色的块里添加表单】
  7. Java05-day05【方法(概述、调用过程图解)、带参方法、带返回值方法、重载、方法参数传递(基本类型、引用类型)】
  8. access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
  9. 本地如何搭建FPT服务
  10. java集合 线程安全
  11. oracle 11g压缩分区表,ORACLE 10g和11g压缩分区表操作脚本
  12. 沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
  13. android配置网络权限管理,Android 网络权限配置
  14. cad画直线长度与实际不符_cad画直线尺寸不对
  15. BJFUOJ 1429
  16. 基于GSM远程短信防盗报警系统
  17. 乞丐乞讨:天桥有一个乞丐,每天去遵义路天桥要钱,每天要到的钱都是上一天的两倍。如: 第一天要了 1 块钱 第二天要了 2 块钱 第三天要了 4 块钱 第四天要了 8 块钱 以此类推, 问: 乞丐
  18. 3D游戏编程与设计作业02
  19. 【JAVA笔记】JAVA调用同一个包里的不同类的方法:
  20. Kubernetes kubeadm部署

热门文章

  1. js中遍历数组加到新数组_js数组遍历:JavaScript如何遍历数组?
  2. 视频教程-华为HCNP网络工程师【从入门到精通】自学视频[肖哥] ¥499-华为认证
  3. CentOS安装桌面环境
  4. bert做语义相似度文章的注解
  5. Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
  6. c语言excel存储文件格式,C语言写excel文件(csv格式)
  7. android 系统相册删除照片,怎样恢复手机相册删除的照片?这几个方法你会用吗?...
  8. 【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图
  9. tomcat启动正常,浏览器访问提示连接已重置
  10. videos player.php_vue-video-player做出一个自定义播放器