# SET STATEMENT ## Syntax ```sql SetStatement ::= 'SET' variableName '=' value variableName ::= | sessionVariableName sessionVariableName ::= '@@'Identifier | '@@session.'Identifier ``` **Description** `SET` 语句用于在 OpenMLDB 上设置系统变量。目前OpenMLDB的系统变量仅支持会话系统变量。对会话变量的修改,只会影响到当前的会话(也就是当前的数据库连接)。 - 会话系统变量一般以`@session前缀,形如`SET @@session.execute_mode = "offline"。`注意⚠️:会话系统变量也可以选择直接以`@@`为前缀,即`SET @@execute_mode = "offline"`和前面的配置语句是等价的。变量名是大小写不敏感的。 - OpenMLDB的SET语句只能用于设置/修改已存在(内置的)的系统变量。 ## 目前支持的系统变量 ### SESSION 系统变量 | SESSION系统变量 | 变量描述 | 变量值 | 默认值 | | -------------------------------------- | ------------------------------------------------------------ | --------------------- | --------- | | @@session.execute_mode|@@execute_mode | OpenMDLB在当前会话下的执行模式。目前支持"offline"和"online"两种模式。
在离线执行模式下,只会导入/插入以及查询离线数据。
在在线执行模式下,只会导入/插入以及查询在线数据。 | "offline" \| "online" | "offline" | | @@session.enable_trace|@@enable_trace | 控制台的错误信息trace开关。
当开关打开时(`SET @@enable_trace = "true"`),SQL语句有语法错误或者在计划生成过程发生错误时,会打印错误信息栈。
当开关关闭时(`SET @@enable_trace = "false"`),SQL语句有语法错误或者在计划生成过程发生错误时,仅打印基本错误信息。 | "true" \| "false" | "false" | | @@session.sync_job|@@sync_job | ...开关。
当开关打开时(`SET @@sync_job = "true"`),离线的命令将变为同步,等待执行的最终结果。
当开关关闭时(`SET @@sync_job = "false"`),离线的命令即时返回,需要通过`SHOW JOB`查看命令执行情况。 | "true" \| "false" | "false" | | @@session.sync_timeout|@@sync_timeout | ...
离线命令同步开启的情况下,可配置同步命令的等待时间。超时将立即返回,超时返回后仍可通过`SHOW JOB`查看命令执行情况。 | Int | "20000" | ## Example ### 设置和显示系统变量 ```sql > SHOW VARIABLES; --------------- -------- Variable_name Value --------------- -------- enable_trace false execute_mode online --------------- -------- > SET @@session.execute_mode = "offline"; > SHOW VARIABLES; --------------- -------- Variable_name Value --------------- -------- enable_trace false execute_mode offline --------------- -------- > SET @@session.enable_trace = "true"; > SHOW VARIABLES; --------------- -------- Variable_name Value --------------- -------- enable_trace true execute_mode offline --------------- -------- ``` ### 配置enable_trace - 创建一个数据库`db1`,并建立表t1 ```sql CREATE DATABASE db1; -- SUCCEED: Create database successfully USE db1; -- SUCCEED: Database changed CREATE TABLE t1 (col0 STRING, col1 int, std_time TIMESTAMP, INDEX(KEY=col1, TS=std_time, TTL_TYPE=absolute, TTL=30d)); --SUCCEED: Create successfully ``` - 关闭enable_trace时,执行错误的SQL: ```sql > set @@enable_trace = "false"; > select sum(col1) over w1 from t1 window w1 as (partition by col1 order by col0 rows_range between 10d preceding and current row); -- ERROR: Invalid Order column type : kVarchar ``` - 打开enable_trace时,执行错误的SQL: ```sql > set @@enable_trace = "true"; > select sum(col1) over w1 from t1 window w1 as (partition by col1 order by col0 rows_range between 10d preceding and current row); -- ERROR: Invalid Order column type : kVarchar (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/sql_compiler.cc:263) (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/sql_compiler.cc:166) (Caused by) Fail to generate physical plan batch mode (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/transform.cc:1672) (Caused by) Fail to transform query statement (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/transform.cc:103) (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/transform.cc:1249) (At /Users/chenjing/work/chenjing/OpenMLDB/hybridse/src/vm/transform.cc:1997) ``` ### 配置离线命令同步执行 - 设置离线命令同步执行: ```sql > SET @@sync_job = "true"; ``` - 设置同步命令的等待时间(单位为毫秒): ```sql > SET @@job_timeout = "600000"; ``` ## 相关SQL语句 [SHOW VARIABLES](../ddl/SHOW_VARIABLES_STATEMENT.md)