MaxCompute编译器基于MaxCompute 2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力。本文将为您介绍如何利用MaxCompute编译器的报错和告警进行排障。
背景信息
-
为了充分展示MaxCompute编译器的易用性,推荐您使用MaxCompute Studio。如何安装请参见安装 MaxCompute Studio。
-
建议您在提交任何脚本之前,使用MaxCompute编译器对脚本进行静态编译检查。推荐您在MaxCompute SQL配置选项选中Enable syntax coloring,启动语法高亮功能。如何配置请参见MaxCompute SQL配置选项。
报错示例
-
编译器显示
鼠标悬停至如下方代码所示的红色报错标记处,编译器显示expect 1 columns, actually have 2。
create table if not exists src(k bigint COMMENT '', V String COMMENT ''); insert overwrite table src select a, wm_concat(',', a) from values(1,'a'),(1,'b'),(2,'x'),(2) t (a, b) group by a; -- 错误提示: expect 1 columns, actually have 2 -
运行结果
1> 2021-10-14 11:33:37 Status: FAILED 1> ODPS-0130071:[3,36] Semantic analysis exception - expect 1 columns, actually have 2 -
报错说明
由于src表定义参数为两列,而利用insert语句插入数据时,values中有一组数据缺少一列参数,故编译器报错。
告警示例
-
编译器显示
鼠标悬停如下所示告警标记处,编译器显示implicit conversion from STRING to DOUBLE, potential data loss, use CAST function to suppress。
create table if not exists dest(k bigint COMMENT '', V String COMMENT ''); create table if not exists upper_stream(id String COMMENT '', Value String COMMENT '') partitioned by (dt String); insert overwrite table dest select k, value from src join upper_stream u on u.id = k; -- 编译器告警:implicit conversion from STRING to DOUBLE, potential data loss, use CAST function to suppress -
告警说明
从STRING到DOUBLE的隐式转换,有可能造成数据丢失,需要使用CAST函数处理。数据转换详情请参见数据类型转换。
说明-
在运行脚本之前建议修改所有的告警,避免浪费时间和资源。
-
提交有错误的脚本会扣您的计算健康分,会导致以后提交任务的优先级下调,未来没有修改的告警也会被纳入到健康分体系。所以,充分利用MaxCompute编译器的错误和告警提示,可以避免降低优先级。
-
该文章对您有帮助吗?