如何理解maxcompute常见报错信息?
摘要: 貌似大部分人在遇到报错的时候,都懒得用翻译软件翻译报错信息,一般直接抛出来问,甚至连报错信息都懒得复制,直接截图出来。所以这里特地总结了一下,最近一段时间有人经常在群里问到的报错信息。 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常见报错信息?相关推荐
- Kibana启动常见报错信息的解决方案
1.server is not ready yet 部署之后启动: 报错信息 "warning","migrations","pid":61 ...
- 常见报错信息及解决方法
1.空指针异常(NullPointerException) 2.低级sql错误(BadSqlGrammarException) 3.修饰方法词 4. 5.前后端都不报错,前段页面修改数据显示成功,但数 ...
- DELL服务器常见报错信息
1.1.PCI Parity Ecc 2.SBE log Disabled 3.ECC uncrr 分析了一下肯能是内存有问题,于是上网收了一下,大概意思也说的才不多,于是就把主机拆了,清理了一下里面 ...
- 大数据常见报错信息以及解决办法
大数据常见错误信息以及解决办法 1.zook常见错误以及解决办法 1.1zook无法正常启动 1.zook常见错误以及解决办法 1.1zook无法正常启动 1.首选编辑好的脚本放在当前用户的bin目录 ...
- whmcs对接cdn系统_对接whmcs常见报错信息及解决方法
API用户名密码错误 解决办法:检查DCIM的API接口及WHMCS的服务器设置的用户名和密码是否一致. 连接端口错误 解决办法:检查SSL端口是否填写正确 DCIM无法连接 解决办法:检查WHMCS ...
- 有什么服务器商支持whmcs对接,使用智简魔方对接whmcs常见报错信息及解决方法...
常见问题及解决办法列表: ■API用户名密码错误 ■连接端口错误 ■DCIM无法连接 ■自动开通失败:该分组没有空闲服务器 ■不能实现自动开通 ■无法连接服务器管理系统 ■模块命令错误,产品不一致,无 ...
- java常问的报错_java常见报错及解决
Java常见报错信息: Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:E ...
- TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错
TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错 1.首先到官网下载程序 很多时候我们用twincat不具备硬件条件,需要用到虚轴进行测试,但是对于初学者来说,用twi ...
- 关于Findbugs的一些常见报错的翻译和处理方式
在Lab5中要求使用 CheckStyle 和 FindBugs 工具对经过人工走查的 Lab4 代码进行自动的静态代码分析.在使用FindBugs的过程中,出现了一些难以理解的报错,经查阅资料,了解 ...
最新文章
- aws lambda使用_使用AWS Lambda安排Slack消息
- python虚拟环境 windows环境搭建_windows 下搭建python虚拟环境(示例代码)
- 常用的SSH注解标签
- Python异常及处理方法总结
- android6.0源码分析之Zygote进程分析
- css——模态框【遮罩层的制作;信息层;往白色的块里添加表单】
- Java05-day05【方法(概述、调用过程图解)、带参方法、带返回值方法、重载、方法参数传递(基本类型、引用类型)】
- access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
- 本地如何搭建FPT服务
- java集合 线程安全
- oracle 11g压缩分区表,ORACLE 10g和11g压缩分区表操作脚本
- 沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
- android配置网络权限管理,Android 网络权限配置
- cad画直线长度与实际不符_cad画直线尺寸不对
- BJFUOJ 1429
- 基于GSM远程短信防盗报警系统
- 乞丐乞讨:天桥有一个乞丐,每天去遵义路天桥要钱,每天要到的钱都是上一天的两倍。如: 第一天要了 1 块钱 第二天要了 2 块钱 第三天要了 4 块钱 第四天要了 8 块钱 以此类推, 问: 乞丐
- 3D游戏编程与设计作业02
- 【JAVA笔记】JAVA调用同一个包里的不同类的方法:
- Kubernetes kubeadm部署
热门文章
- js中遍历数组加到新数组_js数组遍历:JavaScript如何遍历数组?
- 视频教程-华为HCNP网络工程师【从入门到精通】自学视频[肖哥] ¥499-华为认证
- CentOS安装桌面环境
- bert做语义相似度文章的注解
- Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
- c语言excel存储文件格式,C语言写excel文件(csv格式)
- android 系统相册删除照片,怎样恢复手机相册删除的照片?这几个方法你会用吗?...
- 【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图
- tomcat启动正常,浏览器访问提示连接已重置
- videos player.php_vue-video-player做出一个自定义播放器