# 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'
oderIDENTIFIED BY 'password'
IDENTIFIED WITH sha256_hash BY 'hash'
oderIDENTIFIED 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
oderIDENTIFIED 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 nurHOST IP
-Elemente (IP-Adressen und ihre Masken) an, da die Verwendung vonhost
undhost_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 BeispielHOST NAME 'mysite.com'
.HOST REGEXP 'regexp'
- Sie können pcre-Regularausdrücke verwenden, um Benutzerhosts anzugeben. Zum BeispielHOST REGEXP '.*\.mysite\.com'
.HOST LIKE 'template'
- Ermöglicht die Verwendung desLIKE
-Operators, um die Benutzerhosts zu filtern. Zum Beispiel entsprichtHOST 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 SyntaxHOST IP
.CREATE USER mira@'localhost'
- Entspricht der SyntaxHOST LOCAL
.CREATE USER mira@'192.168.%.%'
- Entspricht der SyntaxHOST 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.