Перейти к основному содержимому
Перейти к основному содержимому

Создание таблиц в ClickHouse

Как и в большинстве баз данных, ClickHouse логически группирует таблицы в базы данных. Используйте команду CREATE DATABASE, чтобы создать новую базу данных в ClickHouse:

CREATE DATABASE IF NOT EXISTS helloworld

Аналогично, используйте CREATE TABLE, чтобы определить новую таблицу. Если вы не укажете имя базы данных, таблица будет находиться в базе данных default.

Следующая таблица с именем my_first_table создаётся в базе данных helloworld:

CREATE TABLE helloworld.my_first_table
(
    user_id UInt32,
    message String,
    timestamp DateTime,
    metric Float32
)
ENGINE = MergeTree()
PRIMARY KEY (user_id, timestamp)

В приведённом выше примере my_first_table — это таблица MergeTree с четырьмя колонками:

  • user_id: 32-битное целое число без знака
  • message: тип данных String, который заменяет такие типы, как VARCHAR, BLOB, CLOB и другие из других систем баз данных
  • timestamp: значение типа DateTime, которое представляет мгновение времени
  • metric: 32-битное вещественное число
примечание

Движок таблицы определяет:

  • Как и где хранятся данные
  • Какие запросы поддерживаются
  • Будут ли данные реплицироваться

Существует множество движков на выбор, но для простой таблицы на однопользовательском сервере ClickHouse MergeTree будет вашим вероятным выбором.

Краткое введение в первичные ключи

Прежде чем двигаться дальше, важно понять, как работают первичные ключи в ClickHouse (реализация первичных ключей может показаться неожиданной!):

  • первичные ключи в ClickHouse не уникальны для каждой строки в таблице

Первичный ключ таблицы ClickHouse определяет, как данные сортируются при записи на диск. Каждые 8,192 строки или 10 МБ данных (называемых гранулярностью индекса) создают запись в файле индекса первичного ключа. Эта концепция гранулярности создаёт разреженный индекс, который легко помещается в память, а гранулы представляют собой полосу наименьшего объёма данных колонки, которые обрабатываются во время запросов SELECT.

Первичный ключ можно определить с помощью параметра PRIMARY KEY. Если вы определяете таблицу без указания PRIMARY KEY, то ключ становится кортежем, указанным в предложении ORDER BY. Если вы указываете как PRIMARY KEY, так и ORDER BY, первичный ключ должен быть префиксом порядка сортировки.

Первичный ключ также является ключом сортировки, который представляет собой кортеж из (user_id, timestamp). Таким образом, данные, хранящиеся в каждом файле колонки, будут отсортированы по user_id, затем по timestamp.

подсказка

Для получения дополнительных сведений ознакомьтесь с модулем обучения моделированию данных в ClickHouse Academy.