查询级别会话设置
概述
有多种方式可以在运行语句时指定特定的设置。 设置是分层配置的,每一后续层都会覆盖该设置在前一层中的值。
优先级顺序
定义设置时的优先级顺序为:
-
直接将设置应用于某个用户,或在某个设置配置文件中为用户应用设置
- 使用 SQL(推荐)
- 将一个或多个 XML 或 YAML 文件添加到
/etc/clickhouse-server/users.d目录
-
会话级设置
- 从 ClickHouse Cloud SQL 控制台或
clickhouse client的交互模式发送SET setting=value。类似地,也可以在 HTTP 协议中使用 ClickHouse 会话。 为此,需要指定session_idHTTP 参数。
- 从 ClickHouse Cloud SQL 控制台或
-
查询级设置
- 在非交互模式启动
clickhouse client时,通过启动参数--setting=value设置。 - 使用 HTTP API 时,以 CGI 参数形式传递(
URL?setting_1=value&setting_2=value...)。 - 在 SELECT 查询的 SETTINGS 子句中定义设置。该设置值仅应用于该次查询,在查询执行完成后将被重置为默认值或先前的值。
- 在非交互模式启动
将设置恢复为默认值
如果您修改了某个设置并希望将其恢复为默认值,请将该值设为 DEFAULT。语法如下:
例如,async_insert 的默认值为 0。假设你将该参数的值修改为 1:
响应如下:
以下命令将其值重置为 0:
此设置现已恢复为默认值:
自定义设置
除了常见的settings之外,用户还可以定义自定义设置。 自定义设置允许您传递会话特定参数,并可在查询、策略或函数中引用这些参数。这在您需要执行以下操作时非常有用:
- 根据用户身份或所属组织筛选数据
- 根据上下文应用不同的业务逻辑
- 在同一会话的多次查询之间保留有状态信息
自定义设置名称必须以某个前缀开头,而此前缀必须来自您定义的预定义前缀列表。
前缀列表可通过 custom_settings_prefixes 服务器 settings 指定,并在服务器配置文件中定义。
在下面的示例中,SQL_ 被选为自定义前缀:
注意
在 ClickHouse Cloud 中,无法指定自定义前缀。
所有自定义用户设置都以 SQL_ 为前缀。
要定义自定义设置,请使用 SET 命令:
要获取自定义设置的当前值,请使用 getSetting() function:
示例
这些示例都将 async_insert 设置为 1,并展示如何在正在运行的系统中查看这些设置。
使用 SQL 将设置直接应用到用户
以下示例创建用户 ingester,并为其设置 async_insert = 1:
检查设置配置文件和分配
使用 SQL 创建设置配置文件并分配给用户
以下语句会创建名为 log_ingest 的设置配置文件,并设置 async_inset = 1:
这将创建用户 ingester,并为其分配设置配置文件 log_ingest: