设为首页 收藏本站
查看: 1410|回复: 0

[经验分享] MaxCompute SQL与标准SQL的主要区别及解决方法

[复制链接]

尚未签到

发表于 2018-10-20 12:23:20 | 显示全部楼层 |阅读模式
  原文链接:http://click.aliyun.com/m/13940/
  这里会列举一个写惯了关系型数据库里的SQL的用户,在使用MaxCompute SQL比较容易遇见的问题。但是具体的语法建议还是参考对应的文档 。希望这篇帖子配合文档,能帮助大家少踩坑,快速上手MaxCompute SQL。
概要
场景

  •   不支持事物(没有commit和rollback,建议代码具有等幂性支持重跑,不推荐使用Insert Into,推荐Insert Overwrite写入数据)。
  •   不支持索引和主外键约束。
  •   不支持自增字段和默认值。如果有默认值,请在数据写入时自行赋值。
分区

  •   单表支持6万个分区。
  •   一次查询输入的分区数不能大于1万 。另外如果是2级分区且查询时只根据2级分区进行过滤,总的分区数大于1万也可能导致这个问题。
  •   一次查询输出的分区数不能大于2048 。
精度

  •   Double类型因为存在精度问题,不建议在关联时候进行直接等号关联两个Double字段。一个比较推荐的做法是把两个数做下减法,如果差距小于一个预设的值就认为是相同,比如abs(a1- a2) < 0.000000001。
  •   目前产品上已经支持高精度的类型Decimal。但如果有更高精度要求的,可以先把数据存成String类型,然后使用UDF来实现对应的计算。
数据类型转换

  •   为了防止出现各种预期外的错误,建议如果有2个不同的字段类型需要做Join,还是自己先把类型转好了后再Join,同时还能让代码更容易维护。
  •   关于日期型和字符串的隐式转换。在需要传入日期型的函数里如果传入一个字符串,字符串和日期类型的转换根据yyyy-mm-dd hh:mi:ss格式进行转换。如果是其他格式请参考内建函数TO_DATE部分。
DDL
表结构

  •   不能修改分区列列名,只能修改分区列对应的值。具体分区列和分区的区别可以参考这里
  •   支持增加列,但是不支持删除列以及修改列的数据类型,参考这里 。如果有需要一定要操作,最安全的方法参考这里 。
DML
INSERT

  •   最直观的区别就是Insert into/overwrite后面有个关键字Table。
  •   目前只支持Insert Into/Overwrite Table TabeName Select的语法批量插入数据,目前还不支持Insert Into/Overwrite Table TableName Values(xxx)的语法。但是如果确实有需要,可以参考这里。
  •   数据插入表的字段映射不是根据Select的别名做的,而是根据Select的字段的顺序和表里的字段的顺序。
UPDATE/DELETE

  •   目前不支持Update/Delete语句,如果有需要可以参考这里。另外对于删除,还可以参考这里。
SELECT

  •   输入表的数量不能超过16张。
  •   Group by查询里的Select字段,要么是Group By的分组字段,要么需要使用聚合函数。这里可以从逻辑角度理解,假如发现一个非分组列同一个Group By Key里的数据有多条,那么不使用聚合函数的话就没办法展示了。
子查询

  •   子查询必须要有别名。查询带个别名是个好习惯。
IN/NOT IN

  •   关于In/Not In,Exist/Not Exist,后面跟的子查询数据量不能超过1000条,解决办法参考这里。如果业务上已经保证了子查询返回结果的唯一性,可以考虑去掉Distinct增加查询性能。
SQL返回10000条

  •   MaxCompute限制了SQL语句返回的数据条数,用户可以参考这里配置。不过可以看到,目前最高可以设置到1万。如果需要查询的结果数据条数很多,可以参考这里配和Tunnel获取全部数据。
MAPJOIN

  •   Join不支持笛卡尔积,也就是Join必须要用On设置关联条件。如果有一些小表需要做广播表,需要用Mapjoin Hint。具体可以参考这里。
ORDER BY

  •   Order By 后面需要配合Limit n使用。如果希望做很大的数据量的排序,甚至需要做全表排序,可以把这个N设置的很大。但是谨慎使用,因为无法使用到分布式系统的优势,可能会有性能问题。可以参考这里。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624060-1-1.html 上篇帖子: MaxCompute SQL 2.0全新的计算引擎 下篇帖子: 导出SQL运行结果的方法总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表