# CREATE
创建一个新的实体,可以是以下种类之一:
# 创建数据库
创建一个新的数据库。
CREATE DATABASE [IF NOT EXISTS] db_name ON CLUSTER '{cluster}'
这将创建一个指定名称为 db_name
的新数据库。可选的 IF NOT EXISTS
子句只有在数据库不存在时才会创建数据库。
# 创建表
创建一个新的表。这个查询可以根据使用情况有不同的语法形式。
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr1] [compression_codec] [TTL expr1],
name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr2] [compression_codec] [TTL expr2],
...
) ENGINE = engine
在 db 数据库或当前数据库(如果未设置 db)中创建一个名为 table_name
的表,结构由括号中指定的列描述和引擎 engine 定义。表的结构是列描述、二级索引和约束的列表。如果引擎支持主键,它将作为表引擎的参数指定。
列描述在最简单的情况下是 name type。例如:RegionID UInt32。
如果需要,可以指定主键,使用一个或多个键表达式(见下文)。
# 主键
在创建表时可以定义主键。主键可以通过两种方式指定:
在列列表中
CREATE TABLE db.table_name ( name1 type1, name2 type2, ..., PRIMARY KEY(expr1[, expr2,...]) ) ENGINE = engine;
在列列表之外
CREATE TABLE db.table_name ( name1 type1, name2 type2, ... ) ENGINE = engine PRIMARY KEY(expr1[, expr2,...]);
# 引擎
用于高负载任务的最通用和功能丰富的表引擎。这些引擎的共同特点是快速插入数据并进行后台数据处理。MergeTree 系列引擎支持数据复制(使用 Replicated* 版本的引擎)、分区、二级数据跳过索引以及其他其他引擎不支持的功能。
CREATE TABLE [db.]table_name
(
id UInt32,
name String
)
ENGINE = MergeTree
引擎系列包括:
- MergeTree
- ReplacingMergeTree
- SummingMergeTree
- AggregatingMergeTree
- CollapsingMergeTree
- VersionedCollapsingMergeTree
- GraphiteMergeTree
# 创建用户
创建用户账户。
CREATE USER [IF NOT EXISTS | OR REPLACE] name1 ON CLUSTER '{cluster}'
[NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name'}]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[IN access_storage_type]
[DEFAULT ROLE role [,...]]
[DEFAULT DATABASE database | NONE]
[GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]
# 身份验证
有多种用户身份验证方式:
IDENTIFIED WITH no_password
IDENTIFIED WITH plaintext_password BY 'qwerty'
IDENTIFIED WITH sha256_password BY 'qwerty'
orIDENTIFIED BY 'password'
IDENTIFIED WITH sha256_hash BY 'hash'
orIDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'
IDENTIFIED WITH double_sha1_password BY 'qwerty'
IDENTIFIED WITH double_sha1_hash BY 'hash'
IDENTIFIED WITH bcrypt_password BY 'qwerty'
IDENTIFIED WITH bcrypt_hash BY 'hash'
IDENTIFIED WITH ldap SERVER 'server_name'
IDENTIFIED WITH kerberos
orIDENTIFIED WITH kerberos REALM 'realm'
IDENTIFIED WITH ssl_certificate CN 'mysite.com:user'
IDENTIFIED BY 'qwerty'
# 用户主机
用户主机是可以与 ClickHouse 服务器建立连接的主机。主机可以在查询的 HOST
部分以以下方式指定:
HOST IP 'ip_address_or_subnetwork'
— 用户只能从指定的 IP 地址或子网连接到 ClickHouse 服务器。例如:HOST IP '192.168.0.0/16'
,HOST IP '2001:DB8::/32'
。在生产环境中,只指定HOST IP
元素(IP 地址及其掩码),因为使用host
和host_regexp
可能会导致额外的延迟。HOST ANY
— 用户可以从任何位置连接。这是默认选项。HOST LOCAL
— 用户只能本地连接。HOST NAME 'fqdn'
— 用户主机可以指定为 FQDN。例如:HOST NAME 'mysite.com'
。HOST REGEXP 'regexp'
— 在指定用户主机时可以使用 pcre 正则表达式。例如:HOST REGEXP '.*\.mysite\.com'
。HOST LIKE 'template'
— 允许使用LIKE
运算符过滤用户主机。例如:HOST LIKE '%'
等同于HOST ANY
,HOST LIKE '%.mysite.com'
过滤 mysite.com 域中的所有主机。
另一种指定主机的方式是在用户名后使用 @
语法。例如:
CREATE USER mira@'127.0.0.1'
— 等同于HOST IP
语法。CREATE USER mira@'localhost'
— 等同于HOST LOCAL
语法。CREATE USER mira@'192.168.%.%'
— 等同于HOST LIKE
语法。
# GRANTEES 子句
指定允许从此用户获得权限的用户或角色,前提是该用户还具有通过 GRANT OPTION
授予的所有所需访问权限。GRANTEES
子句的选项:
user
— 指定此用户可以授予权限的用户。role
— 指定此用户可以授予权限的角色。ANY
— 此用户可以授予权限给任何人。这是默认设置。NONE
— 此用户不能授予权限给任何人。
可以使用 EXCEPT
表达式排除任何用户或角色。例如,CREATE USER user1 GRANTEES ANY EXCEPT user2
。这意味着如果 user1
具有通过 GRANT OPTION
授予的某些权限,它将能够将这些权限授予除 user2
之外的任何人。
# 创建角色
创建新角色。角色是一组权限 (opens new window)。被分配角色的用户获得该角色的所有权限。
CREATE ROLE [IF NOT EXISTS | OR REPLACE] name1 ON CLUSTER '{cluster}'
[IN access_storage_type]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [CONST|READONLY|WRITABLE|CHANGEABLE_IN_READONLY] | PROFILE 'profile_name'] [,...]
# 管理角色
一个用户可以被分配多个角色。用户可以通过 SET ROLE
语句以任意组合应用其分配的角色。最终的权限范围是所有应用角色的权限的组合。如果用户直接被授予了权限,这些权限也与角色授予的权限合并。
用户可以有默认角色,这些角色在用户登录时应用。要设置默认角色,请使用 SET DEFAULT ROLE
语句或 ALTER USER
语句。
要撤销角色,请使用 REVOKE
(opens new window) 语句。
要删除角色,请使用 DROP ROLE
语句。被删除的角色将自动从所有分配给它的用户和角色中撤销。