SET
SET
SET
命令用于在当前会话中设置 SQL 引擎参数。参数仅在
当前会话内生效,会话结束后自动恢复默认值。
语法
SET <parameter_name> = <value>
会话参数列表
| 参数名称 | 取值范围 | 默认值 | 描述 |
|---|
query_tag
query_tag | 字符串 | 无 | 标记查询的 SQL,可在作业历史中过滤 |
schedule_job_queue_priority
schedule_job_queue_priority | 0-9 | 0 | 作业优先级,数值越大优先级越高 |
cz.sql.group.by.having.use.alias.first
cz.sql.group.by.having.use.alias.first | true/false | false | GROUP BY / HAVING 是否优先使用列别名 |
cz.sql.double.quoted.identifiers
cz.sql.double.quoted.identifiers | true/false | false | 双引号是否作为分隔符标识符(开启后双引号不再表示字符串) |
cz.sql.cast.mode
cz.sql.cast.mode | tolerant/strict | tolerant | CAST 转换模式,strict 模式下转换失败会报错 |
cz.optimizer.enable.mv.rewrite
cz.optimizer.enable.mv.rewrite | true/false | false | 是否开启 Materialized View 查询改写 |
cz.sql.string.literal.escape.mode
cz.sql.string.literal.escape.mode | backslash/quote/quote_backslash | backslash | 字符串转义字符模式 |
cz.sql.arithmetic.mode
cz.sql.arithmetic.mode | tolerant/strict | tolerant | 算术运算出错时是否抛出异常 |
cz.sql.timezone
cz.sql.timezone | 时区名称 | 无 | 设置 SQL 会话时区,如 Asia/Shanghai
Asia/Shanghai 、UTC
UTC |
cz.sql.remote.udf.lookup.policy
cz.sql.remote.udf.lookup.policy | builtin_first/udf_first/schema_only | schema_only | UDF 与内置函数的解析优先级 |
cz.sql.type.conversion
cz.sql.type.conversion | hive | 无 | 兼容 Hive 的类型转换规则 |
cz.sql.function.from.unixtime.trim.to.second
cz.sql.function.from.unixtime.trim.to.second | false/true | false | FROM_UNIXTIME 精度截断到秒级(兼容 Hive) |
cz.sql.time.parser.strict.mode
cz.sql.time.parser.strict.mode | false/true | false | 时间解析严格模式,格式不匹配时报错而非返回 NULL |
cz.sql.cast.string.to.integer.allow.truncate
cz.sql.cast.string.to.integer.allow.truncate | false/true | false | 字符串转整数时允许截断小数位(兼容 Hive) |
cz.sql.translation.mode
cz.sql.translation.mode | postgresql/mysql/doris/hive/presto | 无 | SQL 方言自动转换模式(预览功能) |
cz.sql.compatible.target
cz.sql.compatible.target | mysql/pg | 无 | 指定函数兼容目标引擎(配合 translation.mode 使用) |
使用示例
-- 设置时区
SET cz.sql.timezone = 'Asia/Shanghai';
-- 设置查询标签
SET query_tag = 'etl_job';
-- 设置 CAST 为严格模式
SET cz.sql.cast.mode = strict;
-- 设置作业优先级
SET schedule_job_queue_priority = 5;
在 Python SDK 中设置参数
from clickzetta import connect
conn = connect(username='', password='', service='...', instance='...', workspace='...', schema='public', vcluster='default')
my_param = {'hints': {'cz.sql.timezone': 'UTC+00'}}
cursor = conn.cursor()
cursor.execute("SELECT current_timestamp();", my_param)
在 JDBC URL 中设置参数
jdbc:clickzetta://instance.region.api.clickzetta.com/workspace?schema=public&query_tag=my_app
参数详细说明
query_tag
设置后,会话中所有查询作业的历史记录都会带上该标签,可在作业历史中过滤:
SET query_tag = 'aa';
SELECT 1;
-- 在 information_schema 中过滤
SELECT * FROM information_schema.job_history WHERE query_tag = 'aa';
-- 在 SHOW JOBS 中过滤
SHOW JOBS WHERE query_tag = 'aa' LIMIT 100;
cz.sql.double.quoted.identifiers
开启后双引号作为分隔符标识符,不再表示字符串:
SET cz.sql.double.quoted.identifiers = true;
-- 此时 "column_name" 是标识符,不是字符串
cz.sql.cast.mode
-- strict 模式:转换失败报错
SET cz.sql.cast.mode = strict;
SELECT CAST('abc' AS INT); -- 报错
-- tolerant 模式(默认):转换失败返回 NULL
SET cz.sql.cast.mode = tolerant;
SELECT CAST('abc' AS INT); -- NULL
cz.sql.arithmetic.mode
-- tolerant 模式(默认):除以 0 返回 NULL
SELECT 2/0; -- NULL
-- strict 模式:除以 0 报错
SET cz.sql.arithmetic.mode = strict;
SELECT 2/0; -- 报错
cz.sql.timezone
SET cz.sql.timezone = 'Asia/Shanghai';
SELECT NOW(); -- 返回北京时间
SET cz.sql.timezone = 'UTC';
SELECT NOW(); -- 返回 UTC 时间
cz.sql.string.literal.escape.mode
-- 默认 backslash 模式
SELECT 'Hello \n World!'; -- 换行
-- quote 模式:用两个单引号表示一个单引号
SET cz.sql.string.literal.escape.mode = QUOTE;
SELECT 'It''s a beautiful day'; -- It's a beautiful day
-- quote_backslash 模式:同时支持两种转义
SET cz.sql.string.literal.escape.mode = quote_backslash;
cz.sql.translation.mode(预览功能)
将指定 SQL 方言自动转换为 Lakehouse 原生语法:
SET cz.sql.translation.mode = doris;
SELECT DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
-- 配合 compatible.target 使用
SET cz.sql.compatible.target = mysql;
SELECT DATE_FORMAT(CURRENT_DATE(), '%x-%v %a %W');
cz.sql.remote.udf.lookup.policy
-- 默认 schema_only:使用 UDF 必须带 Schema 前缀
SELECT public.my_func();
-- builtin_first:优先使用内置函数
SET cz.sql.remote.udf.lookup.policy = builtin_first;
SELECT my_func();
-- udf_first:优先使用 UDF
SET cz.sql.remote.udf.lookup.policy = udf_first;
SELECT my_func();
schedule_job_queue_priority
-- 设置高优先级(0-9,越大越高)
SET schedule_job_queue_priority = 8;
SELECT * FROM large_table;
cz.sql.time.parser.strict.mode
SET cz.sql.time.parser.strict.mode = true;
SELECT TO_TIMESTAMP('2025-08-01', 'yyyy-MM-dd HH'); -- 报错(格式不匹配)
SET cz.sql.time.parser.strict.mode = false;
SELECT TO_TIMESTAMP('2025-08-01', 'yyyy-MM-dd HH'); -- NULL
cz.sql.cast.string.to.integer.allow.truncate
SELECT CAST('11.4' AS INT); -- NULL(默认)
SET cz.sql.cast.string.to.integer.allow.truncate = true;
SELECT CAST('11.4' AS INT); -- 11(截断小数)
相关文档