Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

All quickstarts
Real-time аналитикаХранилище данныхОбсервабилитиAI/MLOSS

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

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 (их реализация может показаться неожиданной!):

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

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

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

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

Navigation