本章节为您介绍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;