Cláusulas
IF NOT EXISTS
Se o banco de dadosdb_name já existir, o ClickHouse não cria um novo banco de dados e:
- Não lança uma exceção se a cláusula for especificada.
- Lança uma exceção se a cláusula não for especificada.
ON CLUSTER
O ClickHouse cria o banco de dadosdb_name em todos os servidores do cluster especificado. Veja mais detalhes no artigo sobre DDL distribuído.
ENGINE
Por padrão, o ClickHouse usa seu próprio motor de banco de dados Atomic. Também existem MySQL, PostgresSQL, MaterializedPostgreSQL, Replicated, SQLite.COMENTÁRIO
Você pode adicionar um comentário ao banco de dados ao criá-lo. Há suporte a comentários em todos os motores de banco de dados. SintaxeQuery
Response
SETTINGS
A cláusulaSETTINGS pode ser usada sem uma cláusula ENGINE; nesse caso, é utilizado o motor de banco de dados padrão
(Atomic). Ela pode conter tanto configurações do motor de banco de dados quanto configurações comuns de consulta; cada
nome é encaminhado para a categoria à qual pertence.
disk
O disco usado para armazenar os arquivos de metadados de tabela do banco de dados. Pode-se indicar um disco definido na configuração do servidor ou definir um disco inline com a funçãodisk, da mesma forma que se faz para uma tabela individual:
Atomic, Ordinary). Se não for especificado,
será usado o disco definido na configuração de servidor database_disk.disk.
lazy_load_tables
Quando ativado, as tabelas não são carregadas completamente durante a inicialização do banco de dados. Em vez disso, é criado um proxy leve para cada tabela, e o motor de tabela real é materializado no primeiro acesso. Isso reduz o tempo de inicialização e o uso de memória em bancos de dados com muitas tabelas, em que apenas um subconjunto é consultado com frequência.Atomic, Ordinary). Views, visões materializadas, dicionários, tabelas Alias, tabelas TimeSeries e tabelas baseadas em funções de tabela são sempre carregados imediatamente, independentemente dessa configuração.
Quando usar: Essa configuração é útil para bancos de dados com um grande número de tabelas (centenas ou milhares), em que apenas um subconjunto é consultado ativamente. Ela reduz o tempo de inicialização do servidor e o uso de memória ao adiar a criação de objetos do motor de tabela, a varredura de partes de dados e a inicialização de threads em segundo plano até o primeiro acesso.
Impacto em system.tables:
- Antes de uma tabela ser acessada,
system.tablesmostra seu motor comoTableProxy. Após o primeiro acesso, passa a mostrar o nome real do motor (por exemplo,MergeTree). - Colunas como
total_rowsetotal_bytesretornamNULLpara tabelas não carregadas porque o armazenamento real ainda não foi criado.
SELECT,INSERT,ALTER,DROPdisparam automaticamente o carregamento do motor de tabela real no primeiro uso.RENAME TABLEfunciona sem disparar um carregamento.- Depois que uma tabela é carregada, ela permanece carregada por toda a duração do processo do servidor.
- Ferramentas de monitoramento que dependem dos metadados de
system.tables(por exemplo,total_rows,engine) podem exibir informações incompletas para tabelas não carregadas. - A primeira consulta a uma tabela não carregada tem um custo único de carregamento (análise da instrução
CREATE TABLEarmazenada e inicialização do motor).
0 (desabilitado).