O ApsaraDB for ClickHouse oferece quatro formas de criar uma tabela: a partir de um schema explícito, copiando o schema de uma tabela existente, espelhando a estrutura do conjunto de resultados de um SELECT e como uma tabela distribuída que abrange várias tabelas locais.
Crie uma tabela local
Uma tabela local armazena dados nos nós onde é criada. Use ON CLUSTER default para replicar a definição da tabela em todos os nós do cluster.
Sintaxe
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 |
Descrição |
||
|
|
Nome do banco de dados. O padrão é o banco de dados atual. |
||
|
|
Nome da tabela local. |
||
|
|
Cria a tabela em cada nó. Valor fixo: |
||
|
|
Nomes das colunas. |
||
|
|
Tipos de dados das colunas. Para tipos compatíveis, consulte Tipos de dados. |
||
|
|
Engine da tabela. Consulte Engines de tabela para visualizar as engines compatíveis. |
||
|
|
Chave de ordenação. Obrigatório. Aceita uma tupla de colunas ou qualquer expressão. |
||
|
|
MATERIALIZED |
ALIAS expr]` |
Tipo de expressão padrão para uma coluna: |
|
|
Granularidade do índice. |
||
|
|
Chave de partição. Geralmente um campo de data ou expressão de data. Também aceita outros campos ou expressões. |
||
|
|
Chave primária. Assume o mesmo valor da chave de ordenação por padrão. Na maioria dos casos, omita esta cláusula. |
||
|
|
Expressão de amostragem. Se especificada, inclua-a na chave primária. |
||
|
|
Configurações adicionais que afetam o desempenho. Consulte Itens de configuração SETTINGS. |
ORDER BY,GRANULARITY,PARTITION BY,PRIMARY KEY,SAMPLE BYeSETTINGSsão compatíveis apenas com engines de tabela da família MergeTree. Consulte CREATE TABLE .
Configuração do ReplicatedMergeTree
Ao usar uma engine ReplicatedMergeTree, as duas formas a seguir são equivalentes:
ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')— forma completa; não modifique o modelo de caminho.ReplicatedMergeTree()— forma abreviada que se expande automaticamente para a forma completa.
Em clusters da Edição de Réplica Dupla, todas as tabelas devem usar engines de tabela Replicated da família MergeTree. Engines não replicadas (Non-Replicated) não replicam dados entre réplicas, o que pode levar à inconsistência de dados.
Exemplo
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;
Crie uma tabela distribuída
Uma tabela distribuída funciona como uma visualização lógica sobre um conjunto de tabelas locais. As gravações em uma tabela distribuída são roteadas automaticamente para as tabelas locais subjacentes com base na chave de sharding. As consultas agregam resultados de todas as tabelas locais antes de retorná-los.
Apenas o ApsaraDB for ClickHouse Community-Compatible Edition oferece suporte a tabelas distribuídas usando a engine Distributed . Na Enterprise Edition, vários nós atuam como réplicas em vez de shards, portanto, tabelas distribuídas não são necessárias.
Crie tabelas locais em todos os nós antes de criar uma tabela distribuída.
Sintaxe
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 |
Descrição |
|
|
Nome do banco de dados. O padrão é o banco de dados atual. |
|
|
Nome da tabela distribuída. |
|
|
Cria a tabela em cada nó. Valor fixo: |
|
|
Nome da tabela local subjacente. |
|
|
Expressão de sharding que determina qual shard recebe cada linha. Aceita uma expressão como |
Exemplo
CREATE TABLE distributed_table ON CLUSTER default
AS default.local_table
ENGINE = Distributed(default, default, local_table, rand());
Copie o schema de uma tabela
Crie uma nova tabela com as mesmas definições de colunas e engine de uma tabela existente.
Sintaxe
CREATE TABLE [IF NOT EXISTS] [db.]table_name2 ON CLUSTER cluster AS [db.]table_name1 [ENGINE = engine_name];
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome do banco de dados. O padrão é o banco de dados atual. |
|
|
Tabela de source cujo schema será copiado. |
|
|
Nova tabela a ser criada. |
|
|
Cria a tabela em cada nó. Valor fixo: |
|
|
Engine da nova tabela. Se omitido, a nova tabela usa a mesma engine da tabela de source. Consulte Engines de tabela. |
Exemplo
CREATE TABLE t2 ON CLUSTER default as default.local_table;
Crie uma tabela a partir de uma consulta SELECT
Crie uma tabela cujo schema corresponda ao conjunto de resultados de uma instrução SELECT e preencha-a com os resultados da consulta.
Sintaxe
CREATE TABLE [IF NOT EXISTS] [db.]s_table_name ON CLUSTER cluster ENGINE = engine_name() AS SELECT ...
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome do banco de dados. O padrão é o banco de dados atual. |
|
|
Nome da tabela a ser criada. |
|
|
Cria a tabela em cada nó. Valor fixo: |
|
|
Engine da tabela. Consulte Engines de tabela. |
|
|
Consulta cujo conjunto de resultados define o schema e os dados iniciais. |
Exemplo
CREATE TABLE t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;