# 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' or IDENTIFIED BY 'password'

  • IDENTIFIED WITH sha256_hash BY 'hash' or IDENTIFIED 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 or IDENTIFIED 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アドレスとそのマスク)のみを指定してください。hosthost_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 です。これは、user1GRANT 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 ステートメントを使用します。削除されたロールは、割り当てられていたすべてのユーザーとロールから自動的に取り消されます。

# 関連コンテンツ

  • ベクトルに関連する CREATE ステートメントについては、ベクトル検索 を参照してください。

  • MyScale RBAC(ロールベースのアクセス制御)機能を利用することで、複数のユーザー間でのデータ共有を効果的に管理することができます。ユーザーやロールの作成に関連するより高度な使用法については、アクセス制御 を参照してください。

Last Updated: Sat Apr 13 2024 10:45:55 GMT+0000