MaxCompute - ODPS重装上阵 第一弹 - 善用MaxCompute编译器的错误和警告

MaxCompute (ODPS) ( 注1 )是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 ODPS2.0除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力。

基于ODPS2.0新一代的SQL引擎,MaxCompute显著提升了SQL语言编译过程的易用性与语言的表达能力。
我们在此推出MaxCompute(ODPS2.0)重装上阵系列文章

第一弹 - 善用MaxCompute编译器的错误和警告
第二弹 - 新的基本数据类型与内建函数
第三弹 - 复杂类型
第四弹 - CTE,VALUES,SEMIJOIN

这次首先向您介绍在易用性方面的改进。

  • 场景1
    作为ODPS的开发者,提交了一段SQL脚本,里面两句SQL,等了半天排上队,结果发现第一句里面有个函数的参数类型错误,白等了。。。;修改脚本后再次提交,排队,第一条语句用了两个小时跑完了,然后报告第二个语句漏了半边括号。。。
  • 场景2
    我的上游数据有个表create table my_upperstream(..., id string) partitioned by (...), 我的项目每天有一个任务要和my_uppertstream在id上join,... join my_upperstream u on id = u.id,过去没有问题,最近总是发现有些数据莫名其妙的丢失,经过几天痛苦的debug,终于发现是因为我的id是bigint,在和u.id比较的时候,都竟然转成了double,因为浮点误差导致某些列join不上( 注2 );
    怒气冲冲在ODPS用户群中中质问,竟然告诉我这个是by design! 。。。

MaxCompute编译器基于ODPS2.0全新自主研发的SQL引擎,尤其配合使用MaxCompute Studio,提供了丰富的错误提示与警告的功能。可完全避免以上问题。

编译器的易用性改进

为了充分发挥MaxCompute编译器的易用性改进,最好配合MaxCompute Studio (D2平台对ODPS2.0的错误与警告的支持正在积极开发中,预计今年9月份上线,敬请期待!)。首先,请安装MaxCompute Studio,导入测试MaxCompute项目,创建工程,建立一个新的MaxCompute脚本文件, 如下

可以看到

  1. 第一个insert语句中wm_concat函数使用有错误
  2. 第二个insert有一个错误和一个警告,错误是列名写错了
  3. 警告则是上面场景二种提到的,ODPS中当比较bigint与double的时候,会隐含的都转为double, 因为从string到double是有可能在运行时导致错误的转换,所以MaxCompute编译器会在此警告要您确定这个是不是您希望的行为
  4. 鼠标停止在错误或者警告( 注3 )上,会直接提示具体错误或者警告信息。

如果我不修改错误,直接提交,会被MaxCompute Studio挡住,如下图

按照提示修改错误和警告,如下图,

再次提交,可以顺利的运行,再也不用担心因为语法错误白等了!

事实上,使用MaxCompute Studio可以把所有警告都设定为错误,如下图

这样就可以保证不会不小心漏掉任何有可能的错误!

MaxCompute团队建议您在提交任何脚本之前,都使用MaxCompute Studio对脚本进行静态编译检查,并强烈推荐将警告设定为错误,在提交前修改所有的警告,这样可以花很少的时间避免大量花费大量计算与人力资源的错误。

除了可以帮助您节省时间外,也可以节省MaxCompute服务器端资源,目前每天MaxCompute SQL服务器花大笔计算资源在编译那些有错误的SQL,连累没有错误的也要跟着排队。

另外您知道吗?提交有错误的脚本会导致扣您的计算健康分,导致以后提交任务的优先级被下调!某些警告报告的问题也会导致扣除健康分,使用MaxCompute Compiler和Studio,可以帮助您避免此类扣分,避免被降级!

警告中很多情况是不安全的隐式类型转换,如果确实是想要的转换,可以用cast (xxx as )的方式消除警告,如果觉得这么写麻烦,MaxCompute 编译器还提供一种简洁的方式(xxx),如上面修改过的脚本所示。具体该用哪种完全取决于您的偏好。MaxCompute还有一系列的SQL语言方面的改进,此系列会向您逐一介绍。

小节

基于ODPS2.0 SQL引擎的MaxCompute新编译器配合MaxCompute Studio,通过完整准确地报告错误于警告,可以显著提高用户的生产力。不过提升生产力不能只靠准确的错误和警告,丰富强大的SQL语言表达能力一样重要,从下一篇开始,我们向您介绍MaxCompute在SQL语言上的各项改进!

标注

  • 注1 MaxCompute就是ODPS,是ODPS在阿里云上的品牌,本系列文章中,MaxCompute与ODPS可以通用。
  • 注2 为什么int = string的时候要转double呢?因为这个是Hive的行为,MaxCompute(原ODPS) 在当初第一版的时候,为了替换当时广泛使用的Hive脚本,不得不兼容。现在有了警告,只要大家按照建议的方式使用MaxCompute,在需要的时候修改提示的问题,就不会再掉进这个坑里了!
  • 注3 对于警告的标注,我的设定是黄色波浪线,可以通过IntelliJ的Settings来修改,如下
时间: 2024-08-03 16:37:13

MaxCompute - ODPS重装上阵 第一弹 - 善用MaxCompute编译器的错误和警告的相关文章

MaxCompute - ODPS重装上阵 第二弹 - 新的基本数据类型与内建函数

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力. MaxCompute基于ODPS2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力.我们在此推出MaxCompute(ODPS2.0)重装上阵系列文章 第一弹 - 善用MaxCompute编译器的错误和警

MaxCompute - ODPS重装上阵 第三弹 - 复杂类型

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力. MaxCompute基于ODPS2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力.我们在此推出MaxCompute(ODPS2.0)重装上阵系列文章 第一弹 - 善用MaxCompute编译器的错误和警

MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力. MaxCompute基于ODPS2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力.我们在此推出MaxCompute(ODPS2.0)重装上阵系列文章 第一弹 - 善用MaxCompute编译器的错误和警

【MySQL基础】MySQL安装第一弹-MySQL5.7安装

MySQL安装第一弹-MySQL5.7安装 一.操作系统选择 Centos/RHEL/ORACLE LIUNX 5.X/6.X/7.X x86_64 发行版 如果是其他操作系统 则参考官方文档 https://www.mysql.com/support/supportedplatforms/database.html MySQL支持的平台 二.操作系统参数调整 2.1 selinux设置 [root@localhost ~]# cat /etc/selinux/config SELINUX=di

#大促第一弹#篇一:好价即正义!阿里云双十一大促主会场全攻略

2016阿里云双十一"生生态狂欢节"已经于10月24日正式开启,从已开放的活动页面来看,活动分为两个阶段: 10月24日-11月10的预热阶段和11月11日00:00:00之后的云服务抢购阶段.而活动一共有8大会场:包括主会场(云产品).安全(云盾)分会场.大数据分会场.云市场分会场.域名与网站分会场.解决方案分会场.国际分会场,以及特设的无线专场. 在双十一这个一年唯一一次的大幅度降价促销日,怎样才能花最少的钱配置最特惠的云服务?在异彩纷呈的活动会场中,怎样掌控各个促销时段选购惊爆价

中国游戏质量调查——画面篇第一弹:魔兽世界

第一弹:不解释你懂的--魔兽世界 今天是2010年6月29日,星期二.截至昨日18点30分,中国游戏质量调查5天内总计有2335人次参与调查,19264人次浏览.其中参与画面调查的有584人次,入选画面调查游戏128款.而魔兽世界就是被玩家说道的最多的游戏之一. 游戏画面,就如人的衣冠相貌,给人以第一印象.在中国网游市场上:韩国泡菜型网游很多,很Q很萌很雷人:中国风武侠.仙侠各种侠紧紧跟上:西方魔幻.奇幻.科幻自然也不甘人后:2D.2.5D.2.8D.3D.4D.5D各种画面宣传噱头不是一般的多

备份Win7系统系统时弹出服务无法启动错误0x80070422怎么办

  为了让电脑更加安全,及时的对系统文件和重要文件进行备份就显得很有必要了,而在win7系统中就有自带备份功能,可以帮助我们轻松备份,可是有用户发现要对win7系统进行备份的时候就弹出服务无法启动的错误窗口,并提示错误代码0x80070422,关于这个问题下面小编就为大家整理一下具体的解决步骤如下. 原因分析:备份时出现服务没有启动的故障,一般是由于备份服务没有启动导致(过度优化会禁用该服务); 解决方法: 1.在win7系统下按WIN+R打开运行框,输入services.msc 回车; 2.在

c语言-编译器无错误,无警告。但程序不显示结果

问题描述 编译器无错误,无警告.但程序不显示结果 //此函数将计算一个数的就对值 #include float absoluteValue (float x) { if ( x < 0 ) x = -x; return x; } //此函数计算一个数的绝对值 float squreRoot (float x) { const float epsilon = 0.00001; float guess =1.0; while ( absoluteValue (guess * guess - x) >

PgSQL · 最佳实践 · 从 MaxCompute (ODPS) 迁移数据到 HybridDB

title: PgSQL · 最佳实践 · 从 ODPS 迁移数据到 HybridDB author: 曾文旌(义从) 背景 最近,不少用户在尝试使用 HybridDB 的过程中,询问我们如何把之前在 ODPS 中的数据迁移到 HybridDB.今天就跟大家介绍一种效率较高的方法. 一:原理 ODPS 和 HybridDB 都是多数据节点组合成的集群架构,这样的架构如果要做到效率较高的数据吞吐,需要驱动数据节点主动推送数据.幸运的是 ODPS 和 HybridDB 都支持用该方式向 OSS 读写