Создаёт новую базу данных.
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [SETTINGS ...] [COMMENT 'Comment']Секции
IF NOT EXISTS
Если база данных db_name уже существует, ClickHouse не создает новую базу данных и:
- Не генерирует исключение, если указана эта конструкция.
- Генерирует исключение, если эта конструкция не указана.
ON CLUSTER
ClickHouse создает базу данных db_name на всех серверах указанного кластера. Подробности см. в статье Distributed DDL.
ДВИЖОК
По умолчанию ClickHouse использует собственный движок базы данных Atomic. Также существуют MySQL, PostgresSQL, MaterializedPostgreSQL, Replicated, SQLite.
COMMENT
Вы можете добавить комментарий к базе данных при её создании.
Комментарии поддерживаются всеми движками баз данных.
Синтаксис
CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment'Пример
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 │
└────────────┴────────────────────────┘Настройки
lazy_load_tables
Когда этот параметр включен, таблицы не загружаются полностью при запуске базы данных. Вместо этого для каждой таблицы создается облегченный прокси, а реальный движок таблицы материализуется при первом обращении. Это сокращает время запуска и использование памяти для баз данных с большим количеством таблиц, когда активно запрашивается только часть из них.
CREATE DATABASE db_name ENGINE = Atomic SETTINGS lazy_load_tables = 1;Применяется к движкам баз данных, которые хранят метаданные таблиц на диске (например, Atomic, Ordinary). Представления, materialized view, словари и таблицы, использующие table function, всегда загружаются сразу независимо от этого параметра.
Когда использовать: Этот параметр полезен для баз данных с большим количеством таблиц (сотнями или тысячами), когда активно запрашивается только часть из них. Он уменьшает время запуска сервера и использование памяти, откладывая создание объектов движка таблицы, сканирование частей данных и инициализацию фоновых потоков до первого обращения.
Влияние на system.tables:
- Пока к таблице не обратились,
system.tablesпоказывает её движок какTableProxy. После первого обращения отображается реальное имя движка (например,MergeTree). - Столбцы вроде
total_rowsиtotal_bytesвозвращаютNULLдля незагруженных таблиц, поскольку реальное хранилище ещё не создано.
Взаимодействие с DDL-операциями:
SELECT,INSERT,ALTER,DROPпрозрачно инициируют загрузку реального движка таблицы при первом использовании.RENAME TABLEработает без инициирования загрузки.- После загрузки таблица остаётся загруженной на всё время работы серверного процесса.
Ограничения:
- Инструменты мониторинга, которые полагаются на метаданные
system.tables(например,total_rows,engine), могут показывать неполную информацию для незагруженных таблиц. - Первый запрос к незагруженной таблице приводит к разовым затратам на загрузку (разбор сохранённого оператора
CREATE TABLEи инициализацию движка).
Значение по умолчанию: 0 (отключено).