一、脚本开头特殊标识
–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 ) |
四、整数形式
–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_info where #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 标签。
八、模板语言
实现使用了 velocity,相关的文档可参见 Apache Velocity Engine VTL Reference。
注意:SQL 标签语句对于新购买的调度资源组该功能会自动生效。对于老的调度资源组需要产研团队进行协助重启升级。建议购买新的调度资源组,然后绑定项目。