BTEQ工具命令
DWS提供了一系列gsql元命令,可以等价替换常用的BTEQ工具命令。常用BTEQ命令的转换行为如下:
.QUIT | .EXIT | .RETURN
元命令\q [value]支持退出gsql程序,且可以通过value值指定退出码。.QUIT、.EXIT、.RETURN命令均可以通过\q等价转换。
|
输入 |
输出 |
|---|---|
|
.QUIT 0 |
\q 0 |
|
.EXIT |
\q |
|
.RETURN |
\q |
.LABEL 和 .GOTO
Teradata命令.LABEL用于创建标签,通常与.GOTO配对使用。.GOTO会跳过所有中间的BTEQ命令和SQL语句,指导到达指定标签位置,执行相应的恢复处理。
gsql元命令\goto LABEL ... \label LABEL可以等价实现无条件跳转。
|
输入 |
输出 |
|---|---|
.IF CHECK_PK='' THEN .GOTO NOCHECK
${CHECK_PK};
.LABEL NOCHECK
.QUIT 0 |
\if ${CHECK_PK} == ''
\goto NOCHECK
\endif
${CHECK_PK}
\label NOCHECK
\q 0 |
.RUN FILE
执行指定文件的SQL请求,可等价转换成gsql元命令\i。
|
输入 |
输出 |
|---|---|
.RUN FILE=sampfile |
\i 'sampfile' |
.EXPORT FILE
将SQL语句执行结果导出到指定文件,可等价转换成gsql元命令\o。
|
输入 |
输出 |
|---|---|
.EXPORT REPORT FILE=resultfile |
\o 'resultfile' |
..SET ..END
设置变量记录指定值,可以是单行命令,也可以是以..END结束的多行命令,通过SELECT查询指定变量名或\set命令转换。
|
输入 |
输出 |
|---|---|
.SET SEPARATOR ' | ' |
\set SEPARATOR '|' |
..SET NAME 'Jack' ..END |
SELECT 'Jack' AS "NAME"; |
.IF
.IF是重要的流程控制命令之一,用于有条件地执行输入脚本的部分内容。可以是单分支命令,与THEN子句配对使用;也可以是多分支命令,多分支IF结构允许嵌套多层,但每层必须以IF命令开始,以ENDIF命令结束。
gsql提供流控元命令\if ... \else ... \endif可以等价转换此BTEQ命令。
|
输入 |
输出 |
|---|---|
.IF ERRORCODE <> 0 THEN .QUIT 12; |
\if ${ERROR} != 'false'
\q 12
\endif |
..FOR
循环控制命令中,在满足循环条件时,可以不断执行循环体的脚本,直到.QUIT退出循环。DWS提供\for ... \loop ... \exit-for ... \end-for结构命令实现循环逻辑。
|
输入 |
输出 |
|---|---|
..IF ACTIVITYCOUNT > 0 THEN
..FOR
SEL SqlStr AS V_SqlStr
FROM ${ ETL_DATA}.TB_DWDATA_UPDATE
WHERE JobName = '${JOB_NAME}'
AND TXDATE = ${ TX_DATE} - 19000000
ORDER BY ExcuteSeq ASC;
..DO
${V_SqlStr}
.IF ERRORCODE<>0 THEN .QUIT 12
..END-FOR
..END-IF |
\if ${ERROR} != 'false'
\q 12
\endif
\if ${ACTIVITYCOUNT} != 0
\for
SELECT
SqlStr AS V_SqlStr
FROM
${ETL_DATA}.TB_DWDATA_UPDATE
WHERE
JobName = '${JOB_NAME}'
AND TXDATE = to_date( ${TX_DATE} ,'yyyymmdd' )
ORDER BY
ExcuteSeq ASC
\loop
${V_SqlStr} ;
\if ${ERROR} != 'false'
\q 12
\endif
\end-for
\endif |