# CREATE

Erstellen Sie Abfragen, um eine neue Entität einer der folgenden Arten zu erstellen:

# CREATE DATABASE

Erstellt eine neue Datenbank.

CREATE DATABASE [IF NOT EXISTS] db_name ON CLUSTER '{cluster}'

Dadurch wird eine neue Datenbank mit dem angegebenen Namen db_name erstellt. Die optionale Klausel IF NOT EXISTS erstellt die Datenbank nur, wenn sie noch nicht existiert.

# CREATE TABLE

Erstellt eine neue Tabelle. Diese Abfrage kann je nach Anwendungsfall verschiedene Syntaxformen haben.

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

Erstellt eine Tabelle mit dem Namen table_name in der Datenbank db oder der aktuellen Datenbank, wenn db nicht festgelegt ist, mit der in den Klammern angegebenen Struktur und dem Engine-Engine. Die Struktur der Tabelle ist eine Liste von Spaltenbeschreibungen, sekundären Indizes und Einschränkungen. Wenn der Primärschlüssel vom Engine unterstützt wird, wird er als Parameter für den Tabellen-Engine angegeben.

Eine Spaltenbeschreibung besteht im einfachsten Fall aus dem Namen und dem Typ. Beispiel: RegionID UInt32.

Bei Bedarf kann ein Primärschlüssel angegeben werden, mit einem oder mehreren Schlüsselfeldern (siehe unten).

# Primärschlüssel

Sie können beim Erstellen einer Tabelle einen Primärschlüssel definieren. Der Primärschlüssel kann auf zwei Arten angegeben werden:

  • Innerhalb der Spaltenliste

    CREATE TABLE db.table_name
    (
        name1 type1, name2 type2, ...,
        PRIMARY KEY(expr1[, expr2,...])
    ) ENGINE = engine;
    
  • Außerhalb der Spaltenliste

    CREATE TABLE db.table_name
    (
        name1 type1, name2 type2, ...
    ) ENGINE = engine
    PRIMARY KEY(expr1[, expr2,...]);
    

# ENGINE

Die universellsten und funktionalsten Tabellen-Engines für Hochlastaufgaben. Das gemeinsame Merkmal dieser Engines ist das schnelle Einfügen von Daten mit anschließender Hintergrundverarbeitung der Daten. Die Engines der MergeTree-Familie unterstützen Datenreplikation (mit replizierten Versionen der Engines), Partitionierung, sekundäre Datenüberspringungsindizes und andere Funktionen, die von anderen Engines nicht unterstützt werden.

CREATE TABLE [db.]table_name
(
    id UInt32,
    name String
)
ENGINE = MergeTree

Engines in der Familie:

  • MergeTree
  • ReplacingMergeTree
  • SummingMergeTree
  • AggregatingMergeTree
  • CollapsingMergeTree
  • VersionedCollapsingMergeTree
  • GraphiteMergeTree

# BENUTZER ERSTELLEN

Erstellt Benutzerkonten.

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'] [,...]

# Identifikation

Es gibt mehrere Möglichkeiten der Benutzeridentifikation:

  • IDENTIFIED WITH no_password

  • IDENTIFIED WITH plaintext_password BY 'qwerty'

  • IDENTIFIED WITH sha256_password BY 'qwerty' oder IDENTIFIED BY 'password'

  • IDENTIFIED WITH sha256_hash BY 'hash' oder 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 oder IDENTIFIED WITH kerberos REALM 'realm'

  • IDENTIFIED WITH ssl_certificate CN 'mysite.com:user'

  • IDENTIFIED BY 'qwerty'

# Benutzerhost

Der Benutzerhost ist ein Host, von dem aus eine Verbindung zum ClickHouse-Server hergestellt werden kann. Der Host kann im Abschnitt HOST der Abfrage auf folgende Weise angegeben werden:

  • HOST IP 'ip_address_or_subnetwork' - Der Benutzer kann nur von der angegebenen IP-Adresse oder einem Subnetzwerk eine Verbindung zum ClickHouse-Server herstellen. Beispiele: HOST IP '192.168.0.0/16', HOST IP '2001:DB8::/32'. Geben Sie in der Produktion nur HOST IP-Elemente (IP-Adressen und ihre Masken) an, da die Verwendung von host und host_regexp zu zusätzlicher Latenz führen kann.

  • HOST ANY - Der Benutzer kann von jedem Ort aus eine Verbindung herstellen. Dies ist die Standardoption.

  • HOST LOCAL - Der Benutzer kann nur lokal eine Verbindung herstellen.

  • HOST NAME 'fqdn' - Der Benutzerhost kann als FQDN angegeben werden. Zum Beispiel HOST NAME 'mysite.com'.

  • HOST REGEXP 'regexp' - Sie können pcre-Regularausdrücke verwenden, um Benutzerhosts anzugeben. Zum Beispiel HOST REGEXP '.*\.mysite\.com'.

  • HOST LIKE 'template' - Ermöglicht die Verwendung des LIKE-Operators, um die Benutzerhosts zu filtern. Zum Beispiel entspricht HOST LIKE '%' HOST ANY, HOST LIKE '%.mysite.com' filtert alle Hosts in der Domäne mysite.com.

Eine andere Möglichkeit, den Host anzugeben, besteht darin, die Syntax @ nach dem Benutzernamen zu verwenden. Beispiele:

  • CREATE USER mira@'127.0.0.1' - Entspricht der Syntax HOST IP.

  • CREATE USER mira@'localhost' - Entspricht der Syntax HOST LOCAL.

  • CREATE USER mira@'192.168.%.%' - Entspricht der Syntax HOST LIKE.

# GRANTEES-Klausel

Gibt Benutzer oder Rollen an, die von diesem Benutzer berechtigt sind, Berechtigungen zu erhalten, unter der Bedingung, dass diesem Benutzer auch alle erforderlichen Zugriffsrechte mit GRANT OPTION gewährt wurden. Optionen der GRANTEES-Klausel:

  • user - Gibt einen Benutzer an, dem dieser Benutzer Berechtigungen gewähren kann.

  • role - Gibt eine Rolle an, der dieser Benutzer Berechtigungen gewähren kann.

  • ANY - Dieser Benutzer kann Berechtigungen an jeden vergeben. Dies ist die Standardoption.

  • NONE - Dieser Benutzer kann keine Berechtigungen vergeben.

Sie können jeden Benutzer oder jede Rolle ausschließen, indem Sie den Ausdruck EXCEPT verwenden. Zum Beispiel CREATE USER user1 GRANTEES ANY EXCEPT user2. Dies bedeutet, dass user1, wenn ihm Berechtigungen mit GRANT OPTION gewährt wurden, diese Berechtigungen an jeden außer user2 vergeben kann.

# ROLLE ERSTELLEN

Erstellt neue Rollen. Eine Rolle ist eine Sammlung von Berechtigungen (opens new window). Ein Benutzer, dem eine Rolle zugewiesen ist, erhält alle Berechtigungen dieser Rolle.

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'] [,...]

# Verwaltung von Rollen

Ein Benutzer kann mehreren Rollen zugewiesen werden. Benutzer können ihre zugewiesenen Rollen in beliebigen Kombinationen mit dem SET ROLE-Statement anwenden. Der endgültige Umfang der Berechtigungen ist eine kombinierte Menge aller Berechtigungen aller angewendeten Rollen. Wenn einem Benutzer Berechtigungen direkt für sein Benutzerkonto gewährt werden, werden sie auch mit den Berechtigungen kombiniert, die durch Rollen gewährt werden.

Ein Benutzer kann Standardrollen haben, die beim Benutzerlogin angewendet werden. Verwenden Sie das SET DEFAULT ROLE-Statement oder das ALTER USER-Statement, um Standardrollen festzulegen.

Um eine Rolle zu widerrufen, verwenden Sie das REVOKE (opens new window)-Statement.

Um eine Rolle zu löschen, verwenden Sie das DROP ROLE-Statement. Die gelöschte Rolle wird automatisch von allen Benutzern und Rollen widerrufen, denen sie zugewiesen war.

# Verwandte Inhalte

  • Für CREATE-Anweisungen im Zusammenhang mit Vektoren siehe Vector Search.

  • Mit der MyScale RBAC (Role-Based Access Control)-Funktion können Sie den Datenaustausch zwischen mehreren Benutzern effektiv verwalten. Für fortgeschrittene Anwendungen im Zusammenhang mit der Erstellung von Benutzern und Rollen siehe Zugriffskontrolle.