相关文章推荐
刚毅的啤酒  ·  vue ...·  3 月前    · 
憨厚的水煮鱼  ·  matlab EraseMode ...·  1 年前    · 

本章节为您介绍MaxCompute SQL提供的IF语句。

MaxCompute SQL支持IF-ELSE分支语句。您可以通过IF-ELSE语句,实现脚本的条件执行。其中,条件可以为普通变量,也可以是结果为1行1列的子查询(Scalar SubQuery)。

IF语句,可以让程序根据条件,自动选择执行逻辑。MaxCompute的IF语法有如下几种。
IF (condition) BEGIN
  statement 1
  statement 2
IF (condition) BEGIN
  statements
END ELSE IF (condition2) BEGIN
  statements
END ELSE BEGIN
  statements
END
说明 BEGIN和END内部只有1条语句,则可以省略(类似于Java中的’{ }’)。
IF语句中的Condition可以有2种:分别是BOOLEAN表达式和类型为BOOLEAN的Scalar subquery。
  • BOOLEAN的表达式:这种类型的IF-ELSE可以在编译阶段决定执行哪个分支,示例如下。
    @date := '20190101';
    @row TABLE(id STRING); --声明变量row,其类型为TABLE,Schema为STRING。
    IF ( cast(@date as bigint) % 2 == 0 ) BEGIN
    @row := SELECT id from src1;
    END ELSE BEGIN
    @row := SELECT id from src2;
    INSERT OVERWRITE TABLE dest SELECT * FROM @row;
  • 类型为BOOLEAN的Scalar subquery:这种类型的IF-ELSE在编译阶段无法决定执行哪个分支,在运行时才能决定。因此,需要提交多个作业,示例如下。
    @i bigint;
    @t table(id bigint, value bigint);
    IF ((SELECT count(*) FROM src WHERE a = '5') > 1)  BEGIN
    @i := 1;
    @t := select @i, @i*2;
    END ELSE
    BEGIN
    @i := 2;
    @t := select @i, @i*2;
    select id, value from @t;