使用MaxCompute编译器检查脚本

更新时间:
复制为 MD 格式

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
  • 告警说明

    STRINGDOUBLE的隐式转换,有可能造成数据丢失,需要使用CAST函数处理。数据转换详情请参见数据类型转换

    说明
    • 在运行脚本之前建议修改所有的告警,避免浪费时间和资源。

    • 提交有错误的脚本会扣您的计算健康分,会导致以后提交任务的优先级下调,未来没有修改的告警也会被纳入到健康分体系。所以,充分利用MaxCompute编译器的错误和告警提示,可以避免降低优先级。