会话属性管理器¶
管理员可以添加会话属性来控制其工作负载子集的行为。这些属性是默认值,可以由用户覆盖(如果获得授权)。会话属性可用于控制资源使用情况、启用或禁用功能以及更改查询特性。会话属性管理器是可插拔的。
添加一个 etc/session-property-config.properties
文件,内容如下,以启用读取 JSON 配置文件的内置管理器
session-property-config.configuration-manager=file
session-property-manager.config-file=etc/session-property-config.json
更改 session-property-manager.config-file
的值以指向 JSON 配置文件,该文件可以是绝对路径,也可以是相对于 Presto 数据目录的路径。
此配置文件包含一个匹配规则列表,每个规则指定查询必须满足的一系列条件,以及应该默认应用的一系列会话属性。所有匹配规则都将有助于构建会话属性列表。规则按其指定顺序应用。在文件中后面指定的规则会覆盖先前遇到的属性值的规则。
匹配规则¶
user
(可选):与用户名匹配的正则表达式。source
(可选):与源字符串匹配的正则表达式。queryType
(可选):与提交的查询类型匹配的字符串DATA_DEFINITION
:更改/创建/删除架构/表/视图的元数据以及管理准备好的语句、权限、会话和事务的查询。DELETE
:DELETE
查询。DESCRIBE
:DESCRIBE
、DESCRIBE INPUT
、DESCRIBE OUTPUT
和SHOW
查询。EXPLAIN
:EXPLAIN
查询。INSERT
:INSERT
和CREATE TABLE AS
查询。SELECT
:SELECT
查询。
clientTags
(可选):标签列表。要匹配,此列表中的每个标签都必须位于与查询关联的客户端提供的标签列表中。group
(可选):与查询路由到的资源组的完全限定名称匹配的正则表达式。clientInfo
(可选):与客户端提供的客户端信息文本匹配的正则表达式overrideSessionProperties
(可选):布尔值,指示会话属性是否应该覆盖客户端指定的会话属性。请注意,一旦会话属性被任何规则覆盖,即使后面的更高优先级规则更改了该值,但没有指定覆盖,它也会保持覆盖状态。sessionProperties
:具有字符串键和值的映射。每个条目都是系统或目录属性名称及其对应的值。无论实际数据类型如何,值都必须指定为字符串。
示例¶
考虑以下一组需求
在
global
资源组下运行的所有查询都必须有 8 小时的执行时间限制。所有交互式查询都被路由到
global.interactive
组下的子组,并且有 1 小时的执行时间限制(比global
上的约束更严格)。所有 ETL 查询(标记为 ‘etl’)都被路由到
global.pipeline
组下的子组,并且必须使用某些属性来控制写入器行为。所有高内存 ETL 查询(标记为 ‘high_mem_etl’)都被路由到
global.pipeline
组下的子组,并且必须配置为启用 交换物化。
这些需求可以用以下规则来表达
[
{
"group": "global.*",
"sessionProperties": {
"query_max_execution_time": "8h",
}
},
{
"group": "global.interactive.*",
"sessionProperties": {
"query_max_execution_time": "1h"
}
},
{
"group": "global.pipeline.*",
"clientTags": ["etl"],
"sessionProperties": {
"scale_writers": "true",
"writer_min_size": "1GB"
}
},
{
"group": "global.pipeline.*",
"clientTags": ["high_mem_etl"],
"sessionProperties": {
"exchange_materialization_strategy": "ALL",
"partitioning_provider_catalog": "hive",
"hash_partition_count": 4096
}
}
]