ApsaraDB for ClickHouse admite cuatro formas de crear una tabla: a partir de un esquema explícito, copiando el esquema de una tabla existente, replicando la estructura del conjunto de resultados de una consulta SELECT y como una tabla distribuida que abarca varias tablas locales.
Crear una tabla local
Una tabla local almacena datos en los nodos donde se crea. Utilice ON CLUSTER default para replicar la definición de la tabla en todos los nodos del clúster.
Sintaxis
CREATE TABLE [IF NOT EXISTS] [db.]local_table_name ON CLUSTER cluster
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = engine_name()
[PARTITION BY expr]
ORDER BY expr
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...];
Parámetros
|
Parámetro |
Descripción |
||
|
|
Nombre de la base de datos. El valor predeterminado es la base de datos actual. |
||
|
|
Nombre de la tabla local. |
||
|
|
Crea la tabla en cada nodo. Valor fijo: |
||
|
|
Nombres de las columnas. |
||
|
|
Tipos de datos de las columnas. Para consultar los tipos compatibles, consulte Data types. |
||
|
|
Motor de la tabla. Consulte Table engines para ver los motores compatibles. |
||
|
|
Clave de ordenamiento. Obligatorio. Acepta una tupla de columnas o cualquier expresión. |
||
|
|
MATERIALIZED |
ALIAS expr]` |
Tipo de expresión predeterminada para una columna: |
|
|
Granularidad del índice. |
||
|
|
Clave de partición. Por lo general, es un campo de fecha o una expresión de fecha. También acepta otros campos o expresiones. |
||
|
|
Clave principal. De forma predeterminada, tiene el mismo valor que la clave de ordenamiento. En la mayoría de los casos, omita esta cláusula. |
||
|
|
Expresión de muestreo. Si se especifica, inclúyala en la clave principal. |
||
|
|
Configuraciones adicionales que afectan el rendimiento. Consulte Elementos de configuración SETTINGS. |
ORDER BY,GRANULARITY,PARTITION BY,PRIMARY KEY,SAMPLE BYySETTINGSsolo son compatibles con los motores de tabla de la familia MergeTree. Consulte CREATE TABLE .
Configuración de ReplicatedMergeTree
Al utilizar un motor ReplicatedMergeTree, las dos formas siguientes son equivalentes:
ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')— la forma completa; no modifique la plantilla de ruta.ReplicatedMergeTree()— forma abreviada que se expande automáticamente a la forma completa.
En los clústeres de Double-replica Edition, todas las tablas deben usar motores de tabla Replicated de la familia MergeTree. Los motores no replicados (Non-Replicated) no replican datos entre réplicas, lo cual puede provocar inconsistencia en los datos.
Ejemplo
CREATE TABLE local_table ON CLUSTER default
(
Year UInt16,
Quarter UInt8,
Month UInt8,
DayofMonth UInt8,
DayOfWeek UInt8,
FlightDate Date,
FlightNum String,
Div5WheelsOff String,
Div5TailNum String
)ENGINE = MergeTree()
PARTITION BY toYYYYMM(FlightDate)
PRIMARY KEY (intHash32(FlightDate))
ORDER BY (intHash32(FlightDate),FlightNum)
SAMPLE BY intHash32(FlightDate)
SETTINGS index_granularity= 8192;
Crear una tabla distribuida
Una tabla distribuida es una vista lógica sobre un conjunto de tablas locales. Las escrituras en una tabla distribuida se enrutan automáticamente a las tablas locales subyacentes según la clave de fragmentación. Las consultas agregan los resultados de todas las tablas locales antes de devolverlos.
Solo ApsaraDB for ClickHouse Community-Compatible Edition admite tablas distribuidas mediante el motor Distributed . En Enterprise Edition, varios nodos actúan como réplicas en lugar de fragmentos, por lo que no se necesitan tablas distribuidas.
Cree tablas locales en todos los nodos antes de crear una tabla distribuida.
Sintaxis
CREATE TABLE [db.]distributed_table_name ON CLUSTER default
AS db.local_table_name ENGINE = Distributed(cluster, db, local_table_name [, sharding_key])
Parámetros
|
Parámetro |
Descripción |
|
|
Nombre de la base de datos. El valor predeterminado es la base de datos actual. |
|
|
Nombre de la tabla distribuida. |
|
|
Crea la tabla en cada nodo. Valor fijo: |
|
|
Nombre de la tabla local subyacente. |
|
|
Expresión de fragmentación que determina qué fragmento recibe cada fila. Acepta una expresión como |
Ejemplo
CREATE TABLE distributed_table ON CLUSTER default
AS default.local_table
ENGINE = Distributed(default, default, local_table, rand());
Copiar un esquema de tabla
Cree una nueva tabla con las mismas definiciones de columnas y el mismo motor de tabla que una tabla existente.
Sintaxis
CREATE TABLE [IF NOT EXISTS] [db.]table_name2 ON CLUSTER cluster AS [db.]table_name1 [ENGINE = engine_name];
Parámetros
|
Parámetro |
Descripción |
|
|
Nombre de la base de datos. El valor predeterminado es la base de datos actual. |
|
|
Tabla de origen cuyo esquema se copia. |
|
|
Nueva tabla que se va a crear. |
|
|
Crea la tabla en cada nodo. Valor fijo: |
|
|
Motor de tabla para la nueva tabla. Si se omite, la nueva tabla utiliza el mismo motor que la tabla de origen. Consulte Table engines. |
Ejemplo
CREATE TABLE t2 ON CLUSTER default as default.local_table;
Crear una tabla a partir de una consulta SELECT
Cree una tabla cuyo esquema coincida con el conjunto de resultados de una instrucción SELECT y llénela con los resultados de la consulta.
Sintaxis
CREATE TABLE [IF NOT EXISTS] [db.]s_table_name ON CLUSTER cluster ENGINE = engine_name() AS SELECT ...
Parámetros
|
Parámetro |
Descripción |
|
|
Nombre de la base de datos. El valor predeterminado es la base de datos actual. |
|
|
Nombre de la tabla que se va a crear. |
|
|
Crea la tabla en cada nodo. Valor fijo: |
|
|
Motor de la tabla. Consulte Table engines. |
|
|
Consulta cuyo conjunto de resultados define el esquema y los datos iniciales. |
Ejemplo
CREATE TABLE t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;