SET STATEMENT#

Syntax#

SetStatement ::=
    'SET' variableName '=' value

variableName ::=
		|	sessionVariableName
	
sessionVariableName ::= '@@'Identifier | '@@session.'Identifier | '@@global.'Identifier

或者用下面的方式

'SET' [ GLOBAL | SESSION ] <variableName> '=' <value>

Description

SET 语句用于在 OpenMLDB 上设置系统变量。目前OpenMLDB的系统变量包括会话系统变量和全局系统变量。对会话变量的修改,只会影响到当前的会话(也就是当前的数据库连接)。对全局变量的修改会对所有会话生效。

  • 会话系统变量一般以@session前缀,如SET @@session.execute_mode = “offline”。注意⚠️:会话系统变量也可以选择直接以@@为前缀,即SET @@execute_mode = “offline”`和前面的配置语句是等价的。变量名是大小写不敏感的。

  • 全局系统变量以@global为前缀,如SET @@global.enable_trace = true;

  • 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#

设置和显示会话系统变量#

> SHOW VARIABLES;
 --------------- ---------
  Variable_name   Value
 --------------- ---------
  enable_trace    false
  execute_mode    offline
  job_timeout     20000
  sync_job        false
 --------------- ---------

4 rows in set
> SET @@session.execute_mode = "online";
> SHOW VARIABLES;
 --------------- ---------
  Variable_name   Value
 --------------- ---------
  enable_trace    false
  execute_mode    online
  job_timeout     20000
  sync_job        false
 --------------- ---------

4 rows in set
> SET @@session.enable_trace = "true";
> SHOW VARIABLES;
  --------------- ---------
  Variable_name   Value
 --------------- ---------
  enable_trace    true
  execute_mode    online
  job_timeout     20000
  sync_job        false
 --------------- ---------

4 rows in set

设置和显示全局系统变量#

> SHOW GLOBAL VARIABLES;
 --------------- ----------------
  Variable_name   Variable_value
 --------------- ----------------
  enable_trace    false
  sync_job        false
  job_timeout     20000
  execute_mode    offline
 --------------- ----------------

4 rows in set
> SET @@global.enable_trace = "true";
> SHOW GLOBAL VARIABLES;
 --------------- ----------------
  Variable_name   Variable_value
 --------------- ----------------
  enable_trace    true
  sync_job        false
  job_timeout     20000
  execute_mode    offline
 --------------- ----------------

4 rows in set

配置enable_trace#

  • 创建一个数据库db1,并建立表t1

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:

> 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:

> 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)

配置离线命令同步执行#

  • 设置离线命令同步执行:

> SET @@sync_job = "true";
  • 设置同步命令的等待时间(单位为毫秒):

> SET @@job_timeout = "600000";

相关SQL语句#

SHOW VARIABLES