参考资料
https://clickhouse.tech/docs/en/sql-reference/statements
版本:v20.11
目录
SYSTEM语句
RELOAD EMBEDDED DICTIONARIES
RELOAD DICTIONARIES
RELOAD DICTIONARY
DROP DNS CACHE
DROP MARK CACHE
DROP REPLICA
DROP UNCOMPRESSED CACHE
DROP COMPILED EXPRESSION CACHE
FLUSH LOGS
RELOAD CONFIG
SHUTDOWN
KILL
Managing Distributed Tables
STOP DISTRIBUTED SENDS
FLUSH DISTRIBUTED
START DISTRIBUTED SENDS
Managing MergeTree Tables
STOP MERGES
START MERGES
STOP TTL MERGES
START TTL MERGES
STOP MOVES
START MOVES
Managing ReplicatedMergeTree Tables
STOP FETCHES
START FETCHES
STOP REPLICATED SENDS
START REPLICATED SENDS
STOP REPLICATION QUEUES
START REPLICATION QUEUES
SYNC REPLICA
RESTART REPLICA
RESTART REPLICAS
GRANT语句
授予权限语法
分配角色语法
使用方法
权限
SELECT
INSERT
ALTER
CREATE
DROP
TRUNCATE
OPTIMIZE
SHOW
KILL QUERY
ACCESS MANAGEMENT
SYSTEM
INTROSPECTION
SOURCES
dictGet
ALL
NONE
ADMIN OPTION
REVOKE语句
语法
描述
部分撤销
举例
OPTIMIZE语句
SET语句
SET ROLE语句
SET DEFAULT ROLE
举例
SYSTEM语句
以下查询语句均以SYSTEM开头,格式为SYSTEM [相关语句]。
RELOAD EMBEDDED DICTIONARIES
重新加载所有内部词典(Internal dictionaries.)。
默认情况下,内部字典是禁用的。
始终返回OK, 无论内部字典更新的结果如何。
RELOAD DICTIONARIES
重新加载之前已成功加载的所有词典。
默认情况下,字典是延迟加载的(请参阅 dictionaries_lazy_load),因此,它们不是在启动时自动加载的,而是在第一次访问时通过dictGet函数或从ENGINE = Dictionary的表中使用SELECT查询时进行初始化的。
SYSTEM RELOAD DICTIONARIES查询重新加载此类字典(LOADED)。
始终返回OK。 不管字典更新的结果如何。
RELOAD DICTIONARY
完全重载字典dictionary_name,而不管字典的状态如何(LOADED / NOT_LOADED / FAILED)。
始终返回OK。 不管字典更新的结果如何。
可以通过查询system.dictionaries表来检查字典的状态。
1 | SELECT name, status FROM system.dictionaries; |
DROP DNS CACHE
重置ClickHouse的内部DNS缓存。 有时(对于旧的ClickHouse版本),在更改基础结构(更改其他ClickHouse服务器或词典使用的服务器的IP地址)时,必须使用此命令。
有关更方便的(自动)缓存管理,请参阅disable_internal_dns_cache,dns_cache_update_period参数。
DROP MARK CACHE
重置标记缓存。 用于ClickHouse的开发和性能测试。
DROP REPLICA
可以使用以下语法删除死副本:
1 2 3 4 5 6 7 8 9 10 11 12 | --删除database.table表的'replica_name'副本的元数据。 SYSTEM DROP REPLICA 'replica_name' FROM TABLE database.table; --对数据库中所有复制的表执行相同的操作。 SYSTEM DROP REPLICA 'replica_name' FROM DATABASE database; --对本地服务器上所有复制的表执行相同的操作。 SYSTEM DROP REPLICA 'replica_name'; --当删除表的所有其他副本时,可用于删除无效副本的元数据。 --它要求显式指定表路径。 它必须与创建表时传递给ReplicatedMergeTree引擎的第一个参数的路径相同。 SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/path/to/table/in/zk'; |
查询将删除ZooKeeper中的副本路径。 当副本已失效并且DROP TABLE无法将其元数据从ZooKeeper中删除时,这将非常有用,因为不再有此类表。 它只会删除不活动/过时的副本,而不能删除本地副本,请为此使用DROP TABLE。 DROP REPLICA不会删除任何表,也不会从磁盘上删除任何数据或元数据。
DROP UNCOMPRESSED CACHE
重置未压缩的数据缓存。 用于ClickHouse的开发和性能测试。
对于管理未压缩的数据高速缓存参数,请使用以下设置,服务器级别的设置uncompressed_cache_size,查询/用户/配置文件级别的设置use_uncompressed_cache
DROP COMPILED EXPRESSION CACHE
重置编译的表达式缓存。 用于ClickHouse的开发和性能测试。
当query/user/profile开启编译选项时,编译表达式缓存会被使用。
FLUSH LOGS
将日志消息的缓冲区刷新到系统表(例如system.query_log)。 允许您调试时不等待7.5秒。
即使消息队列为空,也会创建系统表。
RELOAD CONFIG
重新加载ClickHouse配置。 当配置存储在ZooKeeper中时使用。
SHUTDOWN
正常关闭clickhouse服务器。
类似于service clickhouse-server stop、kill {$pid_clickhouse-server}
KILL
中止ClickHouse进程(像是kill -9 {$ pid_clickhouse-server})
Managing Distributed Tables
ClickHouse可以管理分布式表。 当用户将数据插入这些表中时,ClickHouse首先创建应发送到集群节点的数据队列,然后异步发送。
您可以使用STOP DISTRIBUTED SENDS,FLUSH DISTRIBUTED和START DISTRIBUTED SENDS查询来管理队列处理。
您还可以使用insert_distributed_sync设置同步插入分布式数据。
STOP DISTRIBUTED SENDS
将数据插入分布式表时,禁用后台数据分发。
1 | SYSTEM STOP DISTRIBUTED SENDS [db.]<distributed_table_name> |
FLUSH DISTRIBUTED
强制ClickHouse将数据同步发送到群集节点。
如果有节点不可用,ClickHouse会引发异常并停止查询执行。
在所有节点都重新联机后,您可以重试查询直到成功。
1 | SYSTEM FLUSH DISTRIBUTED [db.]<distributed_table_name> |
START DISTRIBUTED SENDS
将数据插入分布式表中时启用后台数据分发。
1 | SYSTEM START DISTRIBUTED SENDS [db.]<distributed_table_name> |
Managing MergeTree Tables
ClickHouse可以管理MergeTree表中的后台进程。
STOP MERGES
停止MergeTree系列中表的后台合并:
1 | SYSTEM STOP MERGES [[db.]merge_tree_family_table_name] |
即使之前已停止所有MergeTree表的合并,DETACH / ATTACH TABLE查询也会启动该表的后台合并。
START MERGES
启动MergeTree系列中表的后台合并:
1 | SYSTEM START MERGES [[db.]merge_tree_family_table_name] |
STOP TTL MERGES
根据TTL表达式,停止后台删除MergeTree系列表中的旧数据:
返回OK,即使表不存在或表没有使用MergeTree引擎。
数据库不存在时返回错误。
1 | SYSTEM START TTL MERGES [[db.]merge_tree_family_table_name] |
START TTL MERGES
根据TTL表达式,开始后台删除MergeTree系列表中的旧数据:
返回OK,即使表不存在或表没有使用MergeTree引擎。
数据库不存在时返回错误。
1 | SYSTEM START TTL MERGES [[db.]merge_tree_family_table_name] |
STOP MOVES
根据带有TO VOLUME或TO DISK子句的TTL表表达式,停止后台移动MergeTree系列表中的数据:
返回OK,即使表不存在或表没有使用MergeTree引擎。
数据库不存在时返回错误。
1 | SYSTEM STOP MOVES [[db.]merge_tree_family_table_name] |
START MOVES
根据带有TO VOLUME或TO DISK子句的TTL表表达式,开启后台移动MergeTree系列表中的数据:
返回OK,即使表不存在或表没有使用MergeTree引擎。
数据库不存在时返回错误。
1 | SYSTEM STOP MOVES [[db.]merge_tree_family_table_name] |
Managing ReplicatedMergeTree Tables
ClickHouse可以管理ReplicatedMergeTree表中的与后台复制相关的进程。
STOP FETCHES
停止对已经插入表中的数据的后台提取,用于ReplicatedMergeTree家族。
返回OK,即使表和数据库都不存在。
1 | SYSTEM STOP FETCHES [[db.]replicated_merge_tree_family_table_name] |
START FETCHES
开启对已经插入表中的数据的后台提取,用于ReplicatedMergeTree家族。
返回OK,即使表和数据库都不存在。
1 | SYSTEM START FETCHES [[db.]replicated_merge_tree_family_table_name] |
STOP REPLICATED SENDS
停止后台将插入到表中的新数据发送到群集中的其他副本,用于ReplicatedMergeTree家族。
1 | SYSTEM STOP REPLICATED SENDS [[db.]replicated_merge_tree_family_table_name] |
START REPLICATED SENDS
开启后台将插入到表中的新数据发送到群集中的其他副本,用于ReplicatedMergeTree家族。
1 | SYSTEM START REPLICATED SENDS [[db.]replicated_merge_tree_family_table_name] |
STOP REPLICATION QUEUES
停止从ZooKeeper集群中获取任务列表,用于ReplicatedMergeTree家族。
可能的后台任务类型:merges, fetches, mutation,带有 ON CLUSTER 的DDL语句。
1 | SYSTEM STOP REPLICATION QUEUES [[db.]replicated_merge_tree_family_table_name] |
START REPLICATION QUEUES
开启从ZooKeeper集群中获取任务列表,用于ReplicatedMergeTree家族。
可能的后台任务类型:merges, fetches, mutation,带有 ON CLUSTER 的DDL语句。
1 | SYSTEM START REPLICATION QUEUES [[db.]replicated_merge_tree_family_table_name] |
SYNC REPLICA
等待ReplicatedMergeTree表与集群中的其他副本同步。
如果当前未对该表进行提取操作,则将一直运行到receive_timeout。
1 | SYSTEM SYNC REPLICA [db.]replicated_merge_tree_family_table_name |
RESTART REPLICA
重新初始化ReplicatedMergeTree表的Zookeeper会话状态,会将当前状态与Zookeeper比较直到true,并在需要时将任务添加到Zookeeper队列中
基于ZooKeeper日期的初始化复制队列与ATTACH TABLE语句的方式相同。短时间内该表将无法进行任何操作。
1 | SYSTEM RESTART REPLICA [db.]replicated_merge_tree_family_table_name |
RESTART REPLICAS
重新初始化所有ReplicatedMergeTree表的Zookeeper会话状态,会将当前状态与Zookeeper比较直到true,并在需要时将任务添加到Zookeeper队列中。
GRANT语句
向ClickHouse用户帐户或角色授予特权。将角色分配给用户帐户或其他角色。
要撤消特权,请使用REVOKE语句。 可以使用SHOW GRANTS语句列出授予的特权。
授予权限语法
1 | GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION] |
privilege — 权限类型role — ClickHouse 用户角色user — ClickHouse 用户账户
WITH GRANT OPTION子句向用户或角色授予执行GRANT查询的权限。 用户可以授予与他们相同或更少范围的特权。
分配角色语法
1 | GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION] |
role — ClickHouse用户角色。user — ClickHouse用户账户。
WITH ADMIN OPTION子句向用户或角色授予ADMIN OPTION特权。
使用方法
要使用GRANT,您的帐户必须具有GRANT OPTION特权。 您只能在帐户权限范围内授予权限。
1 2 | --管理员通过查询授予了john帐户特权 GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION |
这意味着john有权执行:
SELECT x,y FROM db.table .SELECT x FROM db.table .SELECT y FROM db.table .
john无法执行SELECT z FROM db.table.,SELECT * FROM db.table也不可用。在处理此查询时,ClickHouse不会返回任何数据,即使x和y也是如此。唯一的例外是如果表仅包含x和y列。在这种情况下,ClickHouse将返回所有数据。
john还具有GRANT OPTION特权,因此它可以向其他用户授予相同或较小范围的特权。
指定特权后,可以使用星号(*)代替表或数据库名称。例如,GRANT SELECT ON db.* TO john 允许join执行在db数据库全表上的SELECT查询。
另外,您可以省略数据库名称。 在这种情况下,将为当前数据库授予特权。 例如,GRANT SELECT ON * TO john授予当前数据库中所有表的SELECT特权,GRANT SELECT ON mytable TO john授予当前数据库中的mytable表的SELECT特权。
始终允许访问系统数据库(因为该数据库用于处理查询)。
您可以在一个查询中为多个帐户授予多个特权。例如,GRANT SELECT, INSERT ON *.* TO john, robin ,允许帐户john和robin对服务器上所有数据库中的所有表执行INSERT和SELECT查询。
权限
特权是执行特定类型查询的权限。
特权具有层次结构。 一组允许的查询取决于特权范围。
特权等级:
- SELECT
- INSERT
- ALTER
ALTER TABLE ALTER UPDATE ALTER DELETE ALTER COLUMN ALTER ADD COLUMN ALTER DROP COLUMN ALTER MODIFY COLUMN ALTER COMMENT COLUMN ALTER CLEAR COLUMN ALTER RENAME COLUMN
ALTER INDEX ALTER ORDER BY ALTER SAMPLE BY ALTER ADD INDEX ALTER DROP INDEX ALTER MATERIALIZE INDEX ALTER CLEAR INDEX
ALTER CONSTRAINT ALTER ADD CONSTRAINT ALTER DROP CONSTRAINT
ALTER TTL ALTER MATERIALIZE TTL ALTER SETTINGS ALTER MOVE PARTITION ALTER FETCH PARTITION ALTER FREEZE PARTITION
ALTER VIEW ALTER VIEW REFRESH ALTER VIEW MODIFY QUERY
- CREATE
CREATE DATABASE CREATE TABLE CREATE VIEW CREATE DICTIONARY CREATE TEMPORARY TABLE
- DROP
DROP DATABASE DROP TABLE DROP VIEW DROP DICTIONARY
- TRUNCATE
- OPTIMIZE
- SHOW
SHOW DATABASES SHOW TABLES SHOW COLUMNS SHOW DICTIONARIES
- KILL QUERY
- ACCESS MANAGEMENT
CREATE USER ALTER USER DROP USER CREATE ROLE ALTER ROLE DROP ROLE CREATE ROW POLICY ALTER ROW POLICY DROP ROW POLICY CREATE QUOTA ALTER QUOTA DROP QUOTA CREATE SETTINGS PROFILE ALTER SETTINGS PROFILE DROP SETTINGS PROFILE SHOW ACCESS SHOW_USERS SHOW_ROLES SHOW_ROW_POLICIES SHOW_QUOTAS SHOW_SETTINGS_PROFILES
ROLE ADMIN
- SYSTEM
SYSTEM SHUTDOWN SYSTEM DROP CACHE SYSTEM DROP DNS CACHE SYSTEM DROP MARK CACHE SYSTEM DROP UNCOMPRESSED CACHE
SYSTEM RELOAD SYSTEM RELOAD CONFIG SYSTEM RELOAD DICTIONARY SYSTEM RELOAD EMBEDDED DICTIONARIES
SYSTEM MERGES SYSTEM TTL MERGES SYSTEM FETCHES SYSTEM MOVES SYSTEM SENDS SYSTEM DISTRIBUTED SENDS SYSTEM REPLICATED SENDS
SYSTEM REPLICATION QUEUES SYSTEM SYNC REPLICA SYSTEM RESTART REPLICA SYSTEM FLUSH SYSTEM FLUSH DISTRIBUTED SYSTEM FLUSH LOGS
- INTROSPECTION
addressToLine addressToSymbol demangle
- SOURCES
FILE URL REMOTE YSQL ODBC JDBC HDFS S3
- dictGet
有关如何处理此层次结构的示例:
- ALTER特权包括所有其他ALTER *特权。
- ALTER CONSTRAINT包括ALTER ADD CONSTRAINT和ALTER DROP CONSTRAINT特权。
级别(从低到高):
COLUMN — 可以授予列,表,数据库或全局权限。TABLE — 可以授予表,数据库或全局权限。VIEW — 可以授予视图,数据库或全局权限。DICTIONARY — 可以为字典,数据库或全局授予特权。DATABASE —可以授予数据库权限或全局权限。GLOBAL —只能手语全局特权。GROUP — 分组不同级别的特权。 授予GROUP级别特权时,仅授予该组中与所使用语法相对应的特权。
允许的语法示例:
GRANT SELECT(x) ON db.table TO user GRANT SELECT ON db.* TO user
GRANT CREATE USER(x) ON db.table TO user GRANT CREATE USER ON db.* TO user
一些查询的实现需要一系列的特权。
例如,要执行RENAME查询,您需要以下特权:SELECT,CREATE TABLE,INSERT和DROP TABLE。
SELECT
允许执行SELECT查询。
特权级别:COLUMN。
授予此特权的用户可以在指定表和数据库中的指定列列表上执行SELECT查询。 如果用户包括其他列,则指定查询将不返回任何数据。
1 2 3 4 | --john无法执行SELECT z FROM db.table.,SELECT * FROM db.table也不可用。 --在处理此查询时,ClickHouse不会返回任何数据,即使x和y也是如此。 --唯一的例外是如果表仅包含x和y列。在这种情况下,ClickHouse将返回所有数据。 GRANT SELECT(x,y) ON db.table TO john |
INSERT
允许执行INSERT查询。
特权级别:COLUMN。
授予此特权的用户可以在指定表和数据库中的指定列列表上执行INSERT查询。 如果用户包括其他列,则在指定的查询中不会插入任何数据。
1 2 | --授予的特权允许john将数据插入db.table中的x与y列。 GRANT INSERT(x,y) ON db.table TO john |
ALTER
允许根据以下特权层次执行ALTER查询:
ALTER TABLE . Level:GROUP ALTER UPDATE . Level:COLUMN . Aliases:UPDATE ALTER DELETE . Level:COLUMN . Aliases:DELETE ALTER COLUMN . Level:GROUP ALTER ADD COLUMN . Level:COLUMN . Aliases:ADD COLUMN ALTER DROP COLUMN . Level:COLUMN . Aliases:DROP COLUMN ALTER MODIFY COLUMN . Level:COLUMN . Aliases:MODIFY COLUMN ALTER COMMENT COLUMN . Level:COLUMN . Aliases:COMMENT COLUMN ALTER CLEAR COLUMN . Level:COLUMN . Aliases:CLEAR COLUMN ALTER RENAME COLUMN . Level:COLUMN . Aliases:RENAME COLUMN
ALTER INDEX . Level:GROUP . Aliases:INDEX ALTER ORDER BY . Level:TABLE . Aliases:ALTER MODIFY ORDER BY ,MODIFY ORDER BY ALTER SAMPLE BY . Level:TABLE . Aliases:ALTER MODIFY SAMPLE BY ,MODIFY SAMPLE BY ALTER ADD INDEX . Level:TABLE . Aliases:ADD INDEX ALTER DROP INDEX . Level:TABLE . Aliases:DROP INDEX ALTER MATERIALIZE INDEX . Level:TABLE . Aliases:MATERIALIZE INDEX ALTER CLEAR INDEX . Level:TABLE . Aliases:CLEAR INDEX
ALTER CONSTRAINT . Level:GROUP . Aliases:CONSTRAINT ALTER ADD CONSTRAINT . Level:TABLE . Aliases:ADD CONSTRAINT ALTER DROP CONSTRAINT . Level:TABLE . Aliases:DROP CONSTRAINT
ALTER TTL . Level:TABLE . Aliases:ALTER MODIFY TTL ,MODIFY TTL ALTER MATERIALIZE TTL . Level:TABLE . Aliases:MATERIALIZE TTL ALTER SETTINGS . Level:TABLE . Aliases:ALTER SETTING ,ALTER MODIFY SETTING ,MODIFY SETTING ALTER MOVE PARTITION . Level:TABLE . Aliases:ALTER MOVE PART ,MOVE PARTITION ,MOVE PART ALTER FETCH PARTITION . Level:TABLE . Aliases:FETCH PARTITION ALTER FREEZE PARTITION . Level:TABLE . Aliases:FREEZE PARTITION
ALTER VIEW Level:GROUP ALTER VIEW REFRESH . Level:VIEW . Aliases:ALTER LIVE VIEW REFRESH ,REFRESH VIEW ALTER VIEW MODIFY QUERY . Level:VIEW . Aliases:ALTER TABLE MODIFY QUERY
有关如何处理此层次结构的示例:
- ALTER特权包括所有其他ALTER *特权。
- ALTER CONSTRAINT包括ALTER ADD CONSTRAINT和ALTER DROP CONSTRAINT特权。
注意:
- MODIFY SETTING特权允许修改表引擎设置。它不会影响设置或服务器配置参数。
- ATTACH操作需要CREATE特权。
- DETACH操作需要DROP特权。
- 要通过KILL MUTATION查询停止突变,您需要具有启动此突变的特权。 例如,如果要停止ALTER UPDATE查询,则需要ALTER UPDATE,ALTER TABLE或ALTER特权。
CREATE
允许根据以下特权层次执行CREATE和ATTACH DDL查询:
CREATE DATABASE . Level:DATABASE CREATE TABLE . Level:TABLE CREATE VIEW . Level:VIEW CREATE DICTIONARY . Level:DICTIONARY CREATE TEMPORARY TABLE . Level:GLOBAL
注意:
- 要删除创建的表,用户需要DROP。
DROP
允许根据以下特权层次执行DROP和DETACH查询:
DROP DATABASE . Level:DATABASE DROP TABLE . Level:TABLE DROP VIEW . Level:VIEW DROP DICTIONARY . Level:DICTIONARY
TRUNCATE
允许执行TRUNCATE查询。
特权级别:TABLE。
OPTIMIZE
允许执行OPTIMIZE TABLE查询。
特权级别:TABLE。
SHOW
允许根据以下特权层次结构执行SHOW,DESCRIBE,USE和EXISTS查询:
SHOW DATABASES . Level:DATABASE . Allows to executeSHOW DATABASES ,SHOW CREATE DATABASE ,USE queries.SHOW TABLES . Level:TABLE . Allows to executeSHOW TABLES ,EXISTS
,
CHECK queries.
SHOW COLUMNS . Level:COLUMN . Allows to executeSHOW CREATE TABLE ,DESCRIBE queries.SHOW DICTIONARIES . Level:DICTIONARY . Allows to executeSHOW DICTIONARIES ,SHOW CREATE DICTIONARY ,EXISTS queries.注意:
如果用户具有与指定的表,字典或数据库有关的任何其他特权,则该用户具有SHOW特权。
KILL QUERY
允许根据以下特权层次执行KILL查询:
特权级别:GLOBAL。
注意:
KILL QUERY特权允许一个用户杀死其他用户的查询。
ACCESS MANAGEMENT
允许用户执行管理用户,角色和行策略的查询。
ACCESS MANAGEMENT . Level:GROUP CREATE USER . Level:GLOBAL ALTER USER . Level:GLOBAL DROP USER . Level:GLOBAL CREATE ROLE . Level:GLOBAL ALTER ROLE . Level:GLOBAL DROP ROLE . Level:GLOBAL ROLE ADMIN . Level:GLOBAL CREATE ROW POLICY . Level:GLOBAL . Aliases:CREATE POLICY ALTER ROW POLICY . Level:GLOBAL . Aliases:ALTER POLICY DROP ROW POLICY . Level:GLOBAL . Aliases:DROP POLICY CREATE QUOTA . Level:GLOBAL ALTER QUOTA . Level:GLOBAL DROP QUOTA . Level:GLOBAL CREATE SETTINGS PROFILE . Level:GLOBAL . Aliases:CREATE PROFILE ALTER SETTINGS PROFILE . Level:GLOBAL . Aliases:ALTER PROFILE DROP SETTINGS PROFILE . Level:GLOBAL . Aliases:DROP PROFILE SHOW ACCESS . Level:GROUP SHOW_USERS . Level:GLOBAL . Aliases:SHOW CREATE USER SHOW_ROLES . Level:GLOBAL . Aliases:SHOW CREATE ROLE SHOW_ROW_POLICIES . Level:GLOBAL . Aliases:SHOW POLICIES ,SHOW CREATE ROW POLICY ,SHOW CREATE POLICY SHOW_QUOTAS . Level:GLOBAL . Aliases:SHOW CREATE QUOTA SHOW_SETTINGS_PROFILES . Level:GLOBAL . Aliases:SHOW PROFILES ,SHOW CREATE SETTINGS PROFILE ,SHOW CREATE PROFILE
ROLE ADMIN特权允许用户分配和撤消任何角色,包括未使用admin选项分配给用户的角色。 SYSTEM
允许用户根据以下特权层次执行SYSTEM查询。
SYSTEM . Level:GROUP SYSTEM SHUTDOWN . Level:GLOBAL . Aliases:SYSTEM KILL ,SHUTDOWN SYSTEM DROP CACHE . Aliases:DROP CACHE SYSTEM DROP DNS CACHE . Level:GLOBAL . Aliases:SYSTEM DROP DNS ,DROP DNS CACHE ,DROP DNS SYSTEM DROP MARK CACHE . Level:GLOBAL . Aliases:SYSTEM DROP MARK ,DROP MARK CACHE ,DROP MARKS SYSTEM DROP UNCOMPRESSED CACHE . Level:GLOBAL . Aliases:SYSTEM DROP UNCOMPRESSED ,DROP UNCOMPRESSED CACHE ,DROP UNCOMPRESSED
SYSTEM RELOAD . Level:GROUP SYSTEM RELOAD CONFIG . Level:GLOBAL . Aliases:RELOAD CONFIG SYSTEM RELOAD DICTIONARY . Level:GLOBAL . Aliases:SYSTEM RELOAD DICTIONARIES ,RELOAD DICTIONARY ,RELOAD DICTIONARIES SYSTEM RELOAD EMBEDDED DICTIONARIES . Level:GLOBAL . Aliases: RELOAD EMBEDDED DICTIONARIES
SYSTEM MERGES . Level:TABLE . Aliases:SYSTEM STOP MERGES ,SYSTEM START MERGES ,STOP MERGES ,START MERGES SYSTEM TTL MERGES . Level:TABLE . Aliases:SYSTEM STOP TTL MERGES ,SYSTEM START TTL MERGES ,STOP TTL MERGES ,START TTL MERGES SYSTEM FETCHES . Level:TABLE . Aliases:SYSTEM STOP FETCHES ,SYSTEM START FETCHES ,STOP FETCHES ,START FETCHES SYSTEM MOVES . Level:TABLE . Aliases:SYSTEM STOP MOVES ,SYSTEM START MOVES ,STOP MOVES ,START MOVES SYSTEM SENDS . Level:GROUP . Aliases:SYSTEM STOP SENDS ,SYSTEM START SENDS ,STOP SENDS ,START SENDS SYSTEM DISTRIBUTED SENDS . Level:TABLE . Aliases:SYSTEM STOP DISTRIBUTED SENDS ,SYSTEM START DISTRIBUTED SENDS ,STOP DISTRIBUTED SENDS ,START DISTRIBUTED SENDS SYSTEM REPLICATED SENDS . Level:TABLE . Aliases:SYSTEM STOP REPLICATED SENDS ,SYSTEM START REPLICATED SENDS ,STOP REPLICATED SENDS ,START REPLICATED SENDS
SYSTEM REPLICATION QUEUES . Level:TABLE . Aliases:SYSTEM STOP REPLICATION QUEUES ,SYSTEM START REPLICATION QUEUES ,STOP REPLICATION QUEUES ,START REPLICATION QUEUES SYSTEM SYNC REPLICA . Level:TABLE . Aliases:SYNC REPLICA SYSTEM RESTART REPLICA . Level:TABLE . Aliases:RESTART REPLICA SYSTEM FLUSH . Level:GROUP SYSTEM FLUSH DISTRIBUTED . Level:TABLE . Aliases:FLUSH DISTRIBUTED SYSTEM FLUSH LOGS . Level:GLOBAL . Aliases:FLUSH LOGS
SYSTEM RELOAD EMBEDDED DICTIONARIES特权由SYSTEM RELOAD DICTIONARY ON *。*特权隐式授予。 INTROSPECTION
允许使用自省功能。
INTROSPECTION . Level:GROUP . Aliases:INTROSPECTION FUNCTIONS addressToLine . Level:GLOBAL addressToSymbol . Level:GLOBAL demangle . Level:GLOBAL
SOURCES
允许使用外部数据源。 适用于表引擎和表函数。
SOURCES . Level:GROUP FILE . Level:GLOBAL URL . Level:GLOBAL REMOTE . Level:GLOBAL YSQL . Level:GLOBAL ODBC . Level:GLOBAL JDBC . Level:GLOBAL HDFS . Level:GLOBAL S3 . Level:GLOBAL
SOURCES特权允许使用所有源。 您也可以分别为每个来源授予特权。 要使用源,您需要其他特权。 举例: 要使用MySQL表引擎创建表,您需要CREATE TABLE (ON db.table_name) 和MYSQL特权。 要使用mysql表功能,您需要CREATE TEMPORARY TABLE和MYSQL特权。
dictGet
允许用户执行dictGet,dictHas,dictGetHierarchy和dictIsIn函数。
特权级别:DICTIONARY.
dictGet . Aliases:dictHas ,dictGetHierarchy ,dictIsIn
举例:
GRANT dictGet ON mydb.mydictionary TO john GRANT dictGet ON mydictionary TO john
ALL
将受监管实体的所有特权授予用户帐户或角色。
NONE
不授予任何特权。
ADMIN OPTION
ADMIN OPTION特权允许用户将其角色授予其他用户。
REVOKE语句
撤消用户或角色的特权。
语法
1
2
3
4
5--撤销用户的特权
REVOKE [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} FROM {user | CURRENT_USER} [,...] | ALL | ALL EXCEPT {user | CURRENT_USER} [,...]
--撤消用户角色
REVOKE [ON CLUSTER cluster_name] [ADMIN OPTION FOR] role [,...] FROM {user | role | CURRENT_USER} [,...] | ALL | ALL EXCEPT {user_name | role_name | CURRENT_USER} [,...]描述
要撤消某些特权,可以使用比计划撤消范围更广的特权。
例如,如果用户具有SELECT(x,y)特权,则管理员可以执行REVOKE SELECT(x,y)...或REVOKE SELECT * ...,甚至是REVOKE ALL PRIVILEGES ...查询来撤销此操作 特权。
部分撤销
您可以撤消部分特权。 例如,如果用户具有SELECT *.* 特权,则可以从中撤消从某些表或数据库读取数据的特权。
举例
1
2
3
4
5
6
7--授予john用户帐户特权,以便从所有数据库中进行选择,但accounts帐户除外:
GRANT SELECT ON *.* TO john;
REVOKE SELECT ON accounts.* FROM john;
--授予mira用户帐户特权,使其可以从accounts.staff表的所有列中进行SELECT,除了wage
GRANT SELECT ON accounts.staff TO mira;
REVOKE SELECT(wage) ON accounts.staff FROM mira;OPTIMIZE语句
1OPTIMIZE TABLE [db.]name [ON CLUSTER cluster] [PARTITION partition | PARTITION ID 'partition_id'] [FINAL] [DEDUPLICATE]该查询尝试使用MergeTree系列中的表引擎,对表的未计划合并的数据部分合并。
MaterializedView和Buffer引擎也支持OPTMIZE查询。 不支持其他表引擎。
当OPTIMIZE 用于ReplicatedMergeTree表引擎,clickhouse创建一个任务并等待在所有节点上运行(如果启用了Replication_alter_partitions_sync设置)
- 如果OPTIMIZE由于任何原因未执行合并,则不会通知客户。 要启用通知,请使用optimize_throw_if_noop设置。
- 如果指定PARTITION,则仅优化指定的分区。How to set partition expression.
- 如果指定FINAL,则即使所有数据已经在一个部分中,也会执行优化。
- 如果指定DEDUPLICATE,则将对完全相同的行进行重复数据删除(比较所有列),仅支持MergeTree引擎。
OPTIMIZE无法修复“Too many parts”错误。
SET语句
1
2SET param = value
SET profile = 'profile-name-from-the-settings-file'为当前会话的参数设置分配值。 您不能以这种方式更改服务器设置。
您还可以在单个查询中设置来自指定设置配置文件的所有值。
SET ROLE语句
为当前用户激活角色。
1SET ROLE {DEFAULT | NONE | role [,...] | ALL | ALL EXCEPT role [,...]}SET DEFAULT ROLE
为用户设置默认角色。
默认角色在用户登录时自动激活。 您只能将以前授予的角色设置为默认值。 如果未将角色授予用户,则ClickHouse会引发异常。
1SET DEFAULT ROLE {NONE | role [,...] | ALL | ALL EXCEPT role [,...]} TO {user|CURRENT_USER} [,...]举例
1
2
3
4
5
6
7
8
9
10
11--为用户设置多个默认角色:
SET DEFAULT ROLE role1, role2, ... TO user
--将所有角色默认授予给用户:
SET DEFAULT ROLE ALL TO user
--从用户清除默认角色:
SET DEFAULT ROLE NONE TO user
--将除了一些角色外的所有角色默认授予给用户:
SET DEFAULT ROLE ALL EXCEPT role1, role2 TO user