Lakehouse 参数控制
Lakehouse 支持通过参数控制数据对象的使用行为和当前连接会话。本文将详细介绍如何通过修改 Workspace、Schema 和 Table 的属性来添加或修改参数,以及如何在 JDBC 客户端会话中设置会话参数。
数据对象参数
Workspace 属性
要修改 Workspace 属性,请使用以下语法:
要查看 Workspace 属性,请使用以下语法:
Schema 属性
要修改 Schema 属性,请使用以下语法:
要查看 Schema 属性,请使用以下语法:
Table 属性
要修改 Table 属性,请使用以下语法:
要查看 Table 属性,请使用以下语法:
表支持的参数
下表列出了系统属性及其描述和取值范围:
| 参数名称 | 描述 | 取值范围 |
|---|---|---|
| data_lifecycle | 数据生命周期 | 大于 0 的正整数,值为 -1 表示未启用生命周期 |
| data_retention_days | 设置 Time Travel 保留期,决定您可以访问历史数据的时长,包括使用 UNDROP、TABLE STREAM 和 RESTORE 来访问和恢复历史数据 | 您可以为每张表设置不同的数据保留期以满足不同业务需求。num 的范围为 0-90,Lakehouse 将对 Time Travel 单独收取存储费用 |
| cz.storage.write.max.string.bytes | 类型用于存储长度大于等于 0 的字符序列,最多支持 16MB 的文本数据。在批量或实时导入数据时,系统将验证字段长度。如果导入的数据超过 16MB,可通过修改表属性调整字符串长度限制,例如,将 长度设置为 32MB: | 正整数 |
| cz.storage.write.max.binary.bytes | 类型用于存储最大长度为 16MB 的数据。在批量或实时导入数据时,系统将验证字段长度。如果导入的数据超过 16MB,可通过修改表属性调整 binary 长度限制,例如,将 长度设置为 32MB: | 正整数 |
| cz.storage.write.max.json.bytes | 类型用于存储长度大于等于 0 的字符序列,最多支持 16MB 的文本数据。在批量或实时导入数据时,系统将验证字段长度。如果导入的数据超过 16MB,可通过修改表属性调整 JSON 字符串长度限制,例如,将 长度设置为 32MB: | 正整数 |
会话参数
Lakehouse 支持在 JDBC 客户端会话中设置参数。以下是当前支持的参数列表:
| 参数名称 | 取值范围 | 默认值 | 描述 |
|---|---|---|---|
| query_tag | 字符串类型 | 无 | 用于标记查询的 SQL |
| schedule_job_queue_priority | 0-9 | 0 | 设置提交 SQL 时的作业优先级,范围从 0 到 9,值越大优先级越高 |
| cz.sql.group.by.having.use.alias.first | true/false | false | 指定 group by 和 having 语句是否优先使用列别名,而不是从 From 语句中查找列名。 |
| cz.sql.double.quoted.identifiers | true/false | false | 分隔符标识符 |
| cz.sql.cast.mode | tolerant/strict | tolerant | 用于类型转换的模式,默认为 tolerant |
| cz.optimizer.enable.mv.rewrite | true/false | false | 提交 SQL 时是否启用物化视图查询重写功能 |
| cz.sql.string.literal.escape.mode | backslash | quote:quote,backslash:backslash,quote_backslash:同时支持 quote 和 backslash | 字符串转义字符。默认使用反斜杠进行转义等。 |
| cz.sql.arithmetic.mode | tolerant | strict/tolerant | 控制算术错误是否抛出异常。例如,计算中的精度溢出,默认不抛出异常 |
| cz.sql.timezone | utc+08 | 可以指定时区名称,例如:America/Los_Angeles、Europe/London、UTC 或 Etc/GMT | 设置 SQL 时区 |
| cz.sql.remote.udf.lookup.policy | schema_only:强制要求 UDF 必须带 schema 前缀。 | builtin_first:优先使用内置函数;udf_first:优先使用 UDF;schema_only:默认策略,强制要求 UDF 必须带 schema 前缀。 | 动态切换 UDF 与内置函数之间的解析优先级。 |
| cz.sql.translation.mode | 不适用 | 支持 postgres、mysql、starrocks、hive、presto | Lakehouse 提供 SQL 方言兼容层,可自动将主流数据库方言转换为原生 SQL 语法。该功能基于 SQLGlot 实现。如果遇到不兼容的语法,设置此参数将自动转换语法,将对应方言的 SQL 转换为 Lakehouse 可执行的语法。注意并非所有语法都受支持,只有部分语法可以被翻译。 |
如何使用会话参数
在 JDBC 中设置参数后,这些参数将在整个当前 JDBC 连接中生效。例如,要设置
cz.sql.group.by.having.use.alias.first 参数,请使用以下命令:
在 Lakehouse Studio 编辑器中,您需要选择要执行的查询并运行它们。例如,要设置
query_tag 参数并执行一个简单查询,请按照以下步骤操作:
- 运行以下命令设置
参数:query_tag
2. 执行查询:
python sdk 设置参数 通过 JDBC 中 set 命令设置的 SQL hints 可以通过
parameters 参数传递。以下是修改时区的示例:
会话参数说明
cz.sql.group.by.having.use.alias.first
该参数指定 group by 和 having 语句是否优先使用列别名,而不是从 From 语句中查找列名。例如,考虑以下查询:
如果启用此参数,查询将按别名
c1 进行分组。否则,将报告找不到 c1 的错误。
query_tag
设置 query_tag 后,会话中的查询作业历史记录将在作业历史的 query_tag 字段中自动添加自定义标签内容。可以通过 set query_tag 命令或在 jdbc URL 中设置。例如:
- 在 JDBC URL 中添加
,使每个提交的 SQL 都携带query_tag
以标识来源,可在页面上进行过滤。query_tag - 在 python 代码中设置 query_tag
在 studio 的作业历史中,仅过滤精确匹配

借助 query_tag 参数,您可以对作业进行分类和检索。在 Lakehouse 的 information_schema 查询中过滤作业:
在 show jobs 中可以过滤:
desc jobs 也可以显示已设置的 query tag

cz.sql.double.quoted.identifiers
- 在 ANSI/ISO SQL 标准中,双引号内的标识符(分隔标识符)允许用户使用特殊字符或关键字。Singdata 也可以兼容此行为。
- 启用后,双引号充当标识符的分隔符。设置
目前仅支持会话级别启用。需要注意的是,如果将双引号启用为标识符的分隔符,Singdata 将不再把双引号内的数据视为字符串类型。cz.sql.double.quoted.identifiers=true
cz.sql.cast.mode
- 当启用 cast strict 模式时,尝试转换不兼容的类型将导致错误。您可以使用
函数。try_cast - 如果转换不可行,隐式转换行为将导致错误。示例:
在此示例中,我们希望返回字符串 'lakehouse'。然而,由于非标准的 SQL 写法,select case when true then 'lakehouse' else nvl(null,-99) end;
中包含 int 类型,而nvl
中包含字符串类型。根据类型优先级转换规则,推断整体返回类型应为 int。由于条件为 true,直接进入 true 输出。因为 'lakehouse' 是字符串被转换为 int,系统的默认行为将直接使用then
,将 'lakehouse' 转换为 int 会得到 null,导致意外结果。在 strict 模式下,系统不会自动使用try_cast
,而是抛出异常,告知用户此 SQL 不是标准行为。如果确认逻辑是正确的,在启用 ANSI 模式时添加try_cast
函数。try_cast
schedule_job_queue_priority
作业优先级 用户提交的 SQL 作业带有优先级设置,决定了作业在队列中的执行顺序。系统使用这些设置来决定哪些作业应优先执行,并优先发送到虚拟集群(VCLUSTER)进行处理。对于 GP 和 AP 类型的 VCLUSTER,优先级设置决定哪个作业先被发送到 VCLUSTER。当计算集群中有大量作业排队等待处理时,设置作业优先级特别有效。
作业优先级分类
- 定义:作业优先级是一个数值,用于指示作业的执行顺序。
- 对应数字:数值范围为 0 到 9,值越高优先级越高。
作业优先级设置
- SQL 支持:用户可以在当前临时会话中修改作业优先级,以指定提交作业时的优先级。
- 设置语法:使用以下命令设置作业优先级:
- 其中,{priority value} 为 0 到 9 之间的整数。 示例
cz.sql.string.literal.escape.mode
参数说明:该参数用于控制字符串字面量的转义字符。默认使用反斜杠(
\)作为转义字符。
示例:
-
默认模式(backslash):
-
Quote 模式(quote):
示例 1:在字符串中包含单引号
此查询将返回字符串
It's a beautiful day。注意这里使用两个单引号 '' 来表示一个单引号。
案例 2:字符串常量自动拼接
案例 3:无效的字符串拼接
- 同时支持 quote 和 backslash 模式(quote_backslash):
cz.sql.arithmetic.mode
参数说明:该参数控制算术运算发生错误时是否抛出异常。默认为
tolerant,即不抛出异常。
示例:
- tolerant 模式(默认):
在此示例中,除以 0 返回
NULL 或溢出值,而不是抛出异常。
- strict 模式:
在此示例中,将抛出异常,因为在
strict 模式下不允许算术运算除以 0。
cz.sql.timezone
参数说明:该参数用于设置 SQL 会话时区。
示例:
-
将时区设置为 UTC+08:
-
在此示例中,
函数将返回当前日期和时间,调整为NOW()
时区(UTC+08)。Asia/Shanghai -
将时区设置为 UTC:
在此示例中,
NOW() 函数将返回当前日期和时间,按 UTC 时区调整。
cz.sql.remote.udf.lookup.policy
参数说明:动态切换 UDF 与内置函数之间的解析优先级。
示例: 默认行为:使用 UDF 时必须指定 SCHEMA 前缀。
cz.sql.translation.mode
参数说明:通过设置此参数,LakeHouse 可以自动将指定 SQL 方言的语法转换为原生可执行语法,实现多方言兼容查询。该功能基于增强版 SQLGlot 实现,支持将常见数据库语法透明转换为 LakeHouse 原生语法,以降低业务迁移成本。注意并非所有语法都支持翻译,只有部分语法可以被翻译。目前支持的方言包括 PostgreSQL、MySQL、Doris、Hive 和 Presto。
示例: 设置 Doris 翻译:
DATE_FORMAT 和 AES_DECRYPT 函数需要指定 cz.sql.patible.target 引擎兼容模式,以设置与 MySQL 或 PostgreSQL 兼容的原始语义。
