Cria um novo banco de dados.
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [SETTINGS ...] [COMMENT 'Comment']Cláusulas
IF NOT EXISTS
Se o banco de dados db_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 dados db_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.
Sintaxe
CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment'Exemplo
CREATE DATABASE db_comment ENGINE = Memory COMMENT 'The temporary database';
SELECT name, comment FROM system.databases WHERE name = 'db_comment';┌─name───────┬─comment────────────────┐
│ db_comment │ The temporary database │
└────────────┴────────────────────────┘CONFIGURAÇÕES
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.
CREATE DATABASE db_name ENGINE = Atomic SETTINGS lazy_load_tables = 1;Aplica-se a motores de banco de dados que armazenam metadados de tabelas em disco (por exemplo, Atomic, Ordinary). Views, visões materializadas, dicionários 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.
Interação com operações DDL:
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.
Limitações:
- 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).
Valor padrão: 0 (desabilitado).