# CREATE

Las consultas de creación crean una nueva entidad de uno de los siguientes tipos:

# CREATE DATABASE

Crea una nueva base de datos.

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

Esto creará una nueva base de datos con el nombre especificado, nombre_bd. La cláusula opcional IF NOT EXISTS solo creará la base de datos si aún no existe.

# CREATE TABLE

Crea una nueva tabla. Esta consulta puede tener varias formas de sintaxis dependiendo del caso de uso.

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

Crea una tabla llamada nombre_tabla en la base de datos bd o en la base de datos actual si no se establece bd, con la estructura especificada entre corchetes y el motor motor. La estructura de la tabla es una lista de descripciones de columnas, índices secundarios y restricciones. Si el motor admite clave primaria, se indicará como parámetro para el motor de la tabla.

Una descripción de columna es nombre tipo en el caso más simple. Ejemplo: RegionID UInt32.

Si es necesario, se puede especificar una clave primaria, con una o más expresiones clave (ver más abajo).

# Clave Primaria

Puede definir una clave primaria al crear una tabla. La clave primaria se puede especificar de dos formas:

  • Dentro de la lista de columnas

    CREATE TABLE db.table_name
    (
        name1 type1, name2 type2, ...,
        PRIMARY KEY(expr1[, expr2,...])
    ) ENGINE = engine;
    
  • Fuera de la lista de columnas

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

# MOTOR

Los motores de tabla más universales y funcionales para tareas de alta carga. La propiedad compartida por estos motores es la inserción rápida de datos con el posterior procesamiento de datos en segundo plano. Los motores de la familia MergeTree admiten replicación de datos (con versiones Replicated* de los motores), particionamiento, índices secundarios de omisión de datos y otras características que no se admiten en otros motores.

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

Motores de la familia:

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

# CREAR USUARIO

Crea cuentas de usuario.

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

# Identificación

Existen varias formas de identificación de usuario:

  • 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'

# Anfitrión de Usuario

El anfitrión de usuario es un host desde el cual se puede establecer una conexión con el servidor ClickHouse. El host se puede especificar en la sección de consulta ANFITRIÓN de las siguientes formas:

  • HOST IP 'ip_address_or_subnetwork' — El usuario puede conectarse al servidor ClickHouse solo desde la dirección IP especificada o una subred. Ejemplos: HOST IP '192.168.0.0/16', HOST IP '2001:DB8::/32'. Para su uso en producción, solo especifique elementos HOST IP (direcciones IP y sus máscaras), ya que el uso de host y host_regexp podría causar una latencia adicional.

  • HOST ANY — El usuario puede conectarse desde cualquier ubicación. Esta es la opción predeterminada.

  • HOST LOCAL — El usuario solo puede conectarse localmente.

  • HOST NAME 'fqdn' — El anfitrión del usuario se puede especificar como FQDN. Por ejemplo, HOST NAME 'mysite.com'.

  • HOST REGEXP 'regexp' — Puede utilizar expresiones regulares PCRE al especificar los anfitriones de usuario. Por ejemplo, HOST REGEXP '.*\.mysite\.com'.

  • HOST LIKE 'template' — Le permite utilizar el operador LIKE para filtrar los anfitriones de usuario. Por ejemplo, HOST LIKE '%' es equivalente a HOST ANY, HOST LIKE '%.mysite.com' filtra todos los anfitriones en el dominio mysite.com.

Otra forma de especificar el anfitrión es utilizar la sintaxis @ después del nombre de usuario. Ejemplos:

  • CREATE USER mira@'127.0.0.1' — Equivalente a la sintaxis HOST IP.

  • CREATE USER mira@'localhost' — Equivalente a la sintaxis HOST LOCAL.

  • CREATE USER mira@'192.168.%.%' — Equivalente a la sintaxis HOST LIKE.

# Cláusula CONCEDER A

Especifica los usuarios o roles a los que se les permite recibir privilegios de este usuario con la condición de que este usuario también tenga todos los accesos requeridos otorgados con la opción GRANT OPTION. Opciones de la cláusula GRANTEES:

  • user — Especifica un usuario al que este usuario puede otorgar privilegios.

  • role — Especifica un rol al que este usuario puede otorgar privilegios.

  • ANY — Este usuario puede otorgar privilegios a cualquier persona. Es la configuración predeterminada.

  • NONE — Este usuario no puede otorgar privilegios a nadie.

Puede excluir a cualquier usuario o rol utilizando la expresión EXCEPT. Por ejemplo, CREATE USER user1 GRANTEES ANY EXCEPT user2. Significa que si user1 tiene algunos privilegios otorgados con la opción GRANT OPTION, podrá otorgar esos privilegios a cualquier persona excepto user2.

# CREAR ROL

Crea nuevos roles. Un rol es un conjunto de privilegios (opens new window). Un usuario asignado a un rol obtiene todos los privilegios de ese rol.

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

# Gestión de Roles

Un usuario puede tener asignados varios roles. Los usuarios pueden aplicar sus roles asignados en combinaciones arbitrarias mediante la instrucción SET ROLE. El alcance final de los privilegios es un conjunto combinado de todos los privilegios de todos los roles aplicados. Si un usuario tiene privilegios otorgados directamente a su cuenta de usuario, también se combinan con los privilegios otorgados por los roles.

Un usuario puede tener roles predeterminados que se aplican al inicio de sesión del usuario. Para establecer roles predeterminados, use la instrucción SET DEFAULT ROLE o la instrucción ALTER USER.

Para revocar un rol, use la instrucción REVOKE (opens new window).

Para eliminar un rol, use la instrucción DROP ROLE. El rol eliminado se revoca automáticamente de todos los usuarios y roles a los que se les asignó.

# Contenido Relacionado

  • Para las declaraciones CREATE relacionadas con vectores, consulte Búsqueda de Vectores.

  • Utilizando la función MyScale RBAC (Control de Acceso Basado en Roles), puede administrar eficazmente el intercambio de datos entre varios usuarios. Para un uso más avanzado relacionado con la creación de usuarios y roles, consulte Control de Acceso.