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_hivewhere#if($flag_1 == 1)id = 1;#elseif( $flag_2 == 1)id = 2;#elseid >2;#end
使用系统参数,系统参数必须使用 ${variable_name} 格式。
这里变量 flag_1和 flag_2 在工作流任务调度中都设置为了0。
--SQL/VMSCRIPT--此语句会执行age>2的分支select * from default.demo_hivewhere#if(${flag_1} == 1)age = 1;#elseif(${flag_2} == 1)age = 2;#elseage >2;#end
使用系统变量+时间变量,其中 dt、dt_pre_7d、dt_pre_1d 为创建的时间参数变量。
--SQL/VMSCRIPT--此语句会执行else的分支select * from default.user_infowhere#if(${is_reload} == "1")create_time <= ${dt};#elseif(${is_deltareload} == "1")create_time between ${dt_pre_7d} and ${dt};#elsecreate_time between ${dt_pre_1d} and ${dt};#end
使用范围说明
可以在 WeData 的开发空间和编排空间中使用 SQL 标签。
条件判断语句
注意:
SQL 标签语句对于新购买的调度资源组该功能会自动生效。对于老的调度资源组需要产研团队进行协助重启升级。建议购买新的调度资源组,然后绑定项目。