查询级别设置
有多种方法可以设置 ClickHouse 查询级别设置。设置分层配置,每个后续层都会重新定义先前的值。
定义设置的优先级顺序是
-
直接应用于用户或在设置配置文件中应用设置
- SQL(推荐)
- 将一个或多个 XML 或 YAML 文件添加到
/etc/clickhouse-server/users.d
-
会话设置
- 从 ClickHouse Cloud SQL 控制台或交互模式下的
clickhouse client
发送SET setting=value
。 同样,您可以在 HTTP 协议中使用 ClickHouse 会话。 为此,您需要指定session_id
HTTP 参数。
- 从 ClickHouse Cloud SQL 控制台或交互模式下的
-
查询设置
- 在非交互模式下启动
clickhouse client
时,设置启动参数--setting=value
。 - 当使用 HTTP API 时,传递 CGI 参数 (
URL?setting_1=value&setting_2=value...
)。 - 在 SELECT 查询的 SETTINGS 子句中定义设置。 设置值仅应用于该查询,并在查询执行后重置为默认值或先前值。
- 在非交互模式下启动
示例
这些示例都将 async_insert
设置的值设置为 1
,并展示了如何在运行的系统中检查设置。
使用 SQL 直接将设置应用于用户
这将创建用户 ingester
,并将设置 async_inset = 1
CREATE USER ingester
IDENTIFIED WITH sha256_hash BY '7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3'
# highlight-next-line
SETTINGS async_insert = 1
检查设置配置文件和分配
SHOW ACCESS
┌─ACCESS─────────────────────────────────────────────────────────────────────────────┐
│ ... │
│ CREATE USER ingester IDENTIFIED WITH sha256_password SETTINGS async_insert = true │
│ ... │
└────────────────────────────────────────────────────────────────────────────────────┘
使用 SQL 创建设置配置文件并分配给用户
这将创建配置文件 log_ingest
,并将设置 async_inset = 1
CREATE
SETTINGS PROFILE log_ingest SETTINGS async_insert = 1
这将创建用户 ingester
,并将用户分配给设置配置文件 log_ingest
CREATE USER ingester
IDENTIFIED WITH sha256_hash BY '7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3'
# highlight-next-line
SETTINGS PROFILE log_ingest
使用 XML 创建设置配置文件和用户
<clickhouse>
<profiles>
<log_ingest>
<async_insert>1</async_insert>
</log_ingest>
</profiles>
<users>
<ingester>
<password_sha256_hex>7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3</password_sha256_hex>
<profile>log_ingest</profile>
</ingester>
<default replace="true">
<password_sha256_hex>7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3</password_sha256_hex>
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
</default>
</users>
</clickhouse>
检查设置配置文件和分配
SHOW ACCESS
┌─ACCESS─────────────────────────────────────────────────────────────────────────────┐
│ CREATE USER default IDENTIFIED WITH sha256_password │
│ CREATE USER ingester IDENTIFIED WITH sha256_password SETTINGS PROFILE log_ingest │
│ CREATE SETTINGS PROFILE default │
│ CREATE SETTINGS PROFILE log_ingest SETTINGS async_insert = true │
│ CREATE SETTINGS PROFILE readonly SETTINGS readonly = 1 │
│ ... │
└────────────────────────────────────────────────────────────────────────────────────┘
为会话分配设置
SET async_insert =1;
SELECT value FROM system.settings where name='async_insert';
┌─value──┐
│ 1 │
└────────┘
在查询期间分配设置
INSERT INTO YourTable
# highlight-next-line
SETTINGS async_insert=1
VALUES (...)
将设置转换为其默认值
如果您更改了设置并希望将其恢复为默认值,请将值设置为 DEFAULT
。 语法如下所示
SET setting_name = DEFAULT
例如,async_insert
的默认值为 0
。 假设您将其值更改为 1
SET async_insert = 1;
SELECT value FROM system.settings where name='async_insert';
响应是
┌─value──┐
│ 1 │
└────────┘
以下命令将其值设置回 0
SET async_insert = DEFAULT;
SELECT value FROM system.settings where name='async_insert';
该设置现在恢复为其默认值
┌─value───┐
│ 0 │
└─────────┘
自定义设置
除了常见的设置之外,用户还可以定义自定义设置。
自定义设置名称必须以预定义的前缀之一开头。 这些前缀的列表必须在服务器配置文件中的 custom_settings_prefixes 参数中声明。
<custom_settings_prefixes>custom_</custom_settings_prefixes>
要定义自定义设置,请使用 SET
命令
SET custom_a = 123;
要获取自定义设置的当前值,请使用 getSetting()
函数
SELECT getSetting('custom_a');
参见