有奖:语音产品征文挑战赛等你来> HOT
WeData 的开发和编排空间支持 SQL 标签语句功能,用户可以在 SQL 中使用 if-else、for 循环等逻辑判断,从而用更简单的代码实现更加复杂的业务逻辑。

脚本开头特殊标识

--SQL/VMSCRIPT
#set( $cnt = 10 )
select $cnt;

赋值语句和操作符

--SQL/VMSCRIPT
#set( $cnt = 10 )
#set( $cnt = $cnt + 1 )
select $cnt;

操作符

操作符
运算符
示例
Object Equivalence
==
#if( $foo == $bar )
Not Equals
!=
#if( $foo != $bar )
Less Than or Equal To
<=
#if( $foo <= 42 )
Less Than
<
#if( $foo < 42 )
Greater Than or Equal To
>=
#if( $foo >= 42 )
Greater Than
>
#if( $foo > 42 )
Equals String
==
#if( $foo == "bar" )
Equals Number
==
#if( $foo == 42 )
Boolean NOT
!
#if( !$foo )

for-each 语句

整数形式

--SQL/VMSCRIPT
#set( $cnt = 10 )
#set( $cnt = $cnt + 1 )
#foreach($i in $_range.of(1, $cnt, 1))
select $cnt,$i;
#end

列表模式

--SQL/VMSCRIPT
#foreach($table in ["test_user_info_table", "test_issue_info_table"])
select '$table' table_name, count(1) cnt from $table where substring(create_time, 1, 7) = '2022-11'
#if($foreach.last != true)
union all
#end
#end

条件判断语句

使用赋值变量

--SQL/VMSCRIPT
--此语句会执行age>2的分支
#set( $flag_1 = 0 )
#set( $flag_2 = 0 )
select * from default.demo_hive
where
#if($flag_1 == 1)
id = 1;
#elseif( $flag_2 == 1)
id = 2;
#else
id >2;
#end
使用系统参数,系统参数必须使用 ${variable_name} 格式。
这里变量 flag_1和 flag_2 在工作流任务调度中都设置为了0。
--SQL/VMSCRIPT
--此语句会执行age>2的分支
select * from default.demo_hive
where
#if(${flag_1} == 1)
age = 1;
#elseif(${flag_2} == 1)
age = 2;
#else
age >2;
#end
使用系统变量+时间变量,其中 dt、dt_pre_7d、dt_pre_1d 为创建的时间参数变量。
--SQL/VMSCRIPT
--此语句会执行else的分支
select * from default.user_info
where
#if(${is_reload} == "1")
create_time <= ${dt};
#elseif(${is_deltareload} == "1")
create_time between ${dt_pre_7d} and ${dt};
#else
create_time between ${dt_pre_1d} and ${dt};
#end

使用范围说明

可以在 WeData 的开发空间和编排空间中使用 SQL 标签。

条件判断语句

实现使用了 velocity,相关的文档可参考 Apache Velocity Engine VTL Reference
注意:
SQL 标签语句对于新购买的调度资源组该功能会自动生效。对于老的调度资源组需要产研团队进行协助重启升级。建议购买新的调度资源组,然后绑定项目。