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

Создание таблиц в 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.