# CREATE
クエリを作成して、次のいずれかの種類の新しいエンティティを作成します:
# CREATE DATABASE
新しいデータベースを作成します。
CREATE DATABASE [IF NOT EXISTS] db_name ON CLUSTER '{cluster}'
これにより、指定した名前の db_name
の新しいデータベースが作成されます。オプションの IF NOT EXISTS
句は、データベースが既に存在しない場合にのみデータベースを作成します。
# CREATE TABLE
新しいテーブルを作成します。このクエリは、使用例に応じてさまざまな構文形式を持つことができます。
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 データベースまたは現在のデータベースに、角かっこで囲まれた構造とエンジンエンジンで指定された table_name
のテーブルを作成します。テーブルの構造は、列の説明、セカンダリインデックス、制約のリストです。エンジンがプライマリキーをサポートしている場合、テーブルエンジンのパラメータとして示されます。
列の説明は、最も単純な場合には名前のタイプです。例:RegionID UInt32。
必要に応じて、プライマリキーを指定することもできます。キー式が1つ以上指定される場合があります(以下を参照)。
# プライマリキー
テーブルを作成する際にプライマリキーを定義することができます。プライマリキーは2つの方法で指定できます:
列リスト内
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
ステートメントを使用します。削除されたロールは、割り当てられていたすべてのユーザーとロールから自動的に取り消されます。