Lakehouse参数控制
Lakehouse支持通过参数来控制包括数据对象以及当前连接会话的使用行为。本文将详细介绍如何通过修改Workspace、Schema和Table的属性来添加或修改参数,以及如何在JDBC客户端会话中设置会话参数。
数据对象参数
SET PROPERTIES
命令用途
SET PROPERTIES
命令用于为数据对象设置属性。您可以添加新属性或更新现有属性的值,从而调整对象的行为和性能特征。
语法格式
参数说明
参数 | 说明 |
---|---|
schema_name | 可选参数,指定表所在的模式。若省略,系统使用当前会话的默认模式 |
table_name | 要设置属性的表名 |
schema_name | 要设置属性的模式名 |
workspace_name | 要设置属性的工作空间名 |
property_key | 属性键名,需用单引号括起 |
property_value | 属性值,需用单引号括起 |
使用示例
表支持的参数
以下表格列出了系统属性及其描述和取值范围:
参数名称 | 描述 | 取值范围 |
---|---|---|
data_lifecycle | 数据生命周期 | 大于0的正整数值,取值为-1代表未开启生命周期 |
data_retention_days | 设置Time Travel保留期限,Time Travel保留期限决定了您可以访问多久以前的数据,包括使用UNDROP、TABLE STREAM、RESTORE访问历史数据和恢复历史数据 | 您可以为每个表设置不同的数据保留周期,以满足不同的业务需求。num的设置范围为0-90,Lakehoue将单独对Time Travel收取存储费用 |
cz.storage.write.max.string.bytes | STRING 类型用于存储长度大于或等于 0 的字符序列,最大可支持 16MB 的文本数据。在批量或实时导入数据时,系统会对字段长度进行校验。若导入数据超出 16MB,可通过修改表属性调整字符串长度限制,例如将 STRING 长度设置为 32MB:ALTER TABLE table_name SET PROPERTIES("cz.storage.write.max.string.bytes"="33554432"); | 大于0的整数 |
cz.storage.write.max.binary.bytes | binray 类型用于存储长度最大可支持 16MB 的数据。在批量或实时导入数据时,系统会对字段长度进行校验。若导入数据超出 16MB,可通过修改表属性调整binary长度限制,例如将 binray 长度设置为 32MB:ALTER TABLE table_name SET PROPERTIES("cz.storage.write.max.binray.bytes"="33554432"); | 大于0的整数 |
cz.storage.write.max.json.bytes | json 类型用于存储长度大于或等于 0 的字符序列,最大可支持 16MB 的文本数据。在批量或实时导入数据时,系统会对字段长度进行校验。若导入数据超出 16MB,可通过修改表属性调整json字符串长度限制,例如将 json 长度设置为 32MB:ALTER TABLE table_name SET PROPERTIES("cz.storage.write.max.json.bytes"="33554432"); | 大于0的整数 |
UNSET PROPERTIES
命令用途
UNSET PROPERTIES
命令用于移除数据对象上已设置的属性。它让您能够清除不再需要的自定义属性,恢复对象到系统默认配置状态。
语法格式
参数说明
参数 | 说明 |
---|---|
schema_name | 可选参数,指定表所在的模式。若省略,系统使用当前会话的默认模式 |
table_name | 要移除属性的表名 |
schema_name | 要移除属性的模式名 |
workspace_name | 要移除属性的工作空间名 |
property_key | 要移除的属性键名 |
使用示例
SHOW PROPERTIES
命令用途
SHOW PROPERTIES
命令用于查看数据对象当前设置的所有属性。它帮助您了解对象的配置状态,便于属性管理和问题排查。
语法格式
参数说明
参数 | 说明 |
---|---|
schema_name | 可选参数,指定表所在的模式。若省略,系统使用当前会话的默认模式 |
table_name | 要查看属性的表名 |
schema_name | 要查看属性的模式名 |
workspace_name | 要查看属性的工作空间名 |
使用示例
输出说明
SHOW PROPERTIES
命令的输出结果是一个包含键值对的列表,如下所示:
支持的对象类型
当前,Clickzetta Lakehouse 支持为以下三种主要对象类型管理属性:
- Workspace 属性:作用于整个工作空间,影响其中的所有模式和表。通常包括资源限制、安全设置等全局配置。
- Schema 属性:作用于特定模式,影响该模式下的所有表。常用于设置模式级别的默认行为。
- Table 属性:作用于特定表,仅影响该表的行为和性能特性。这是最细粒度的属性设置。
执行行为说明
使用属性管理命令时,应注意以下行为特性:
- 静默处理:如果尝试移除不存在的属性,命令会静默成功,不会抛出错误。
- 批量操作:可在一个命令中设置或移除多个属性,提高操作效率。
- 权限要求:需要对应对象的
ALTER
权限才能修改其属性。 - Workspace 属性生效时间:Workspace 级别的属性修改通常在约 1 分钟后生效。
应用场景
环境迁移与配置管理
在开发、测试和生产环境之间迁移数据应用时,属性管理非常重要。
清理过时配置
属性变更验证
执行属性变更后,可通过以下方式验证操作是否成功:
会话参数
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时是否开启Materialized View查询改写功能 |
cz.sql.string.literal.escape.mode | backslash | quote:引号,backslash:反斜线,quote_backslash:同时支持引号和反斜线 | 字符串转译字符。默认时使用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可执行的语法。需要注意的是并非支持了全部的语法,只是部分语法可以转化 |
会话参数使用方法
- 在Lakehouse Studio编辑器中,您需要选中要执行的查询并执行它们。例如,要设置
query_tag
参数并执行一个简单的查询,请参考以下步骤: 执行以下命令设置query_tag
参数:
- 如果在客户端或者jdbc运行会话参数,则会在整个会话期间生效
上面的query_tag任然会生效
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中设置query_tag。例如:
- 在jdbc url中添加query_tag,这样提交的每条SQL都会带上query_tag用来标示来源,可以在页面中进行过滤
- python代码中设置query_tag
在studio的作业历史中过滤,当前只支持精确匹配
借助query_tag参数,您可以对作业进行分类和检索。在Lakehouse 的information_schema查询过滤作业:
在show jobs中可以过滤:
desc jobs中也可以展示设置的query tag
cz.sql.double.quoted.identifiers
- 在 SQL 的 ANSI/ISO 标准中,双引号中的标识符(分隔标识符)允许用户可以写特殊字符或者关键字。lakehouse也可以兼容此行为。
- 开启后双引号为分隔符标示符,set cz.sql.double.quoted.identifiers=true当前只支持会话级别开启。需要特别注意的是如果开启双引号为分隔符标示符后,lakehouse将不再把双引号括起来的数据认为是一个字符串类型
cz.sql.cast.mode
- 开启cast strict模式后显示转化无法转化的类型会报错,可以使用try_cast函数
- 隐式转化行为无法转化的会报错,案例:比如
select case when true then 'lakehouse' else nvl(null,-99) end;
此案例中我们想返回lakehouse字符串。但是由于SQL写的不规范,nvl中是一个int类型,then中是一个string类型。按照类型优先级转化规则推测会认为整体应该返回一个int类型。上面是一个true会直接进入到true的输出中,由于lakehouse
是一个字符串转化成int,系统默认行为会直接走try_cast,lakehouse转化成int时则会变成null,会导致一些结果超出预期。如果严格模式,系统则不会自动走try_cast会将异常抛出,告知用户这个SQL不是规范行为,如果确认逻辑正确,在开启ansi模式下添加try_cast函数
schedule_job_queue_priority
作业优先级 用户提交的SQL作业会附带一个优先级设置,该设置决定了作业在队列中的执行顺序。系统会根据这些设置来确定哪些作业应该优先执行,并优先将它们下发到虚拟集群(VCLUSTER)进行处理。对于GP和AP类型的VCLUSTER,优先级设置决定了哪个作业首先被下发到VCLUSTER。在计算集群中有大量作业排队等待处理时,设置作业优先级尤为有效。
作业优先级划分
- 定义:作业优先级是一个数值,用于标识作业的执行顺序。
- 对应数字:数值范围从0到9,数值越大,表示优先级越高。
作业优先级设置
- SQL支持:用户可以在当前临时会话中修改作业的优先级,以便在提交作业时指定优先级。
- 设置语法:使用以下命令来设置作业优先级:
- 其中,{优先级数值}是一个介于0到9之间的整数。 案例
以下是针对您提到的几个参数的案例:
cz.sql.string.literal.escape.mode
参数说明:此参数用于控制字符串字面量的转义字符。默认使用反斜线(\
)作为转义字符。
案例:
-
默认模式(backslash):
-
引号模式(quote):
案例 1:在字符串中包含单引号
这个查询将返回字符串
It's a beautiful day
。注意,这里使用了两个单引号''
来表示一个单独的单引号。案例 2:字符串常量的自动拼接
案例 3:无效的字符串拼接
-
同时支持引号和反斜线模式(quote_backslash):
在这个例子中,既可以使用反斜线转义特殊字符,也可以使用双引号来包含引号。
cz.sql.arithmetic.mode
参数说明:此参数控制算数运算出错时是否抛出异常。默认为 tolerant
,即不抛出异常。
案例:
-
tolerant模式(默认):
在这个例子中,除0返回一个
NULL
或者一个溢出的值,而不是抛出异常。 -
strict模式:
在这个例子中,将会抛出一个异常,因为
strict
模式下不允许算数运算除0。
cz.sql.timezone
参数说明:此参数用于设置SQL会话的时区。
案例:
-
设置时区为UTC+08:
-
在这个例子中,
NOW()
函数将返回当前的日期和时间,根据Asia/Shanghai
时区(UTC+08)进行调整。 -
设置时区为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.compatible.target 引擎兼容模式,以设置兼容 MySQL 或 PostgreSQL 的原始语义。