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

Управление таблицами

В Managed ClickHouse управлять таблицами можно с помощью SQL-запросов. С полным списком SQL-операторов ClickHouse вы можете ознакомиться в официальной документации ClickHouse.

Запросите список таблиц из системной таблицы system.tables, которая содержит метаданные обо всех таблицах. Для этого используйте оператор SELECT и виртуальный движок clusterAllReplicas, который выполняет запрос к указанной таблице на всех узлах всех шардов заданного кластера.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Выполните запрос:

    sql
    SELECT name AS таблица
    FROM system.tables
    WHERE database = '<имя базы данных>'
    ORDER BY таблица;

В результате будет выведен список таблиц, которые содержатся в указанной базе данных.

Получить информацию о конкретной таблице

Заголовок раздела «Получить информацию о конкретной таблице»

Запросите данные о таблице из системной таблицы system.tables по ее имени. Для этого используйте оператор SELECT.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SELECT name AS таблица
    FROM system.tables
    WHERE database = '<имя базы данных>'
    ORDER BY таблица;
  4. Выполните запрос:

    sql
    SELECT *
    FROM system.tables
    WHERE database = '<имя базы данных>'
    AND name = '<имя таблицы>';

В результате будут выведены метаданные и технические параметры таблицы.

Для создания таблицы используйте оператор CREATE.

Для создания таблицы необходимо указать движок таблиц. В зависимости от движка передаваемые в запросе параметры меняются.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Выполните запрос:

    sql
    CREATE TABLE [IF NOT EXISTS] <имя базы данных>.<имя таблицы>
    (
    <имя столбца 1> <тип столбца 1> [COMMENT '<комментарий>'],
    <имя столбца 2> <тип столбца 2>,
    ...
    )
    ENGINE = <движок>
    ORDER BY <столбец сортировки>
    [COMMENT '<комментарий к таблице>']
    [SETTINGS storage_policy = 'default']; -- если используется гибридное хранилище

    Условия в запросе:

    • IF NOT EXISTS — предотвращает ошибку, если таблица с таким именем уже существует.
    • ENGINE — задает тип движка.
    • ORDER BY — определяет столбец сортировки. Обязателен для движков семейства MergeTree.
    • COMMENT — комментарий.

    Пример запроса:

    sql
    CREATE TABLE IF NOT EXISTS my_database.my_table
    (
    id UInt64 COMMENT 'Уникальный идентификатор',
    name String,
    created_at DateTime
    )
    ENGINE = MergeTree
    ORDER BY id
    COMMENT 'Таблица событий пользователей'
    SETTINGS storage_policy = 'default';

В ClickHouse доступны другие способы создания таблиц. Вы можете ознакомиться с ними в официальной документации ClickHouse.

Для просмотра используйте оператор DESCRIBE.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    DESCRIBE TABLE <имя базы данных>.<имя таблицы>;

В результате будет выведен список столбцов таблицы с их типами.

Для просмотра используйте оператор SELECT.

Запросите данные о столбцах из системной таблицы system.columns по именам базы данных и таблицы.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    SELECT name, type, default_expression
    FROM system.columns
    WHERE database = '<имя базы данных>' AND table = '<имя таблицы>';

В результате будет выведена подробная информация о столбцах таблицы: имя, тип и значение по умолчанию.

Для просмотра используйте оператор SELECT.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Узнайте структуру таблицы:

    sql
    DESCRIBE TABLE <имя базы данных>.<имя таблицы>;
  5. Выполните запрос:

    sql
    SELECT <столбец 1>, <столбец 2>, ... FROM <имя базы данных>.<имя таблицы> LIMIT <число строк>;

    Здесь условие LIMIT возвращает не более заданного количества найденных записей из таблицы.

    Если нужно вывести данные из всех столбцов, используйте в запросе символ * вместо перечисления их имен.

    Пример запроса:

    sql
    SELECT id, name, created_at FROM my_database.my_table LIMIT 7;

Для операции просмотра используйте оператор SHOW.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    SHOW CREATE TABLE <имя базы данных>.<имя таблицы>;

В результате будет выведен полный SQL-запрос, которым была создана таблица.

Операция изменяет политику хранения существующей таблицы на default для использования гибридного хранилища. Чтобы изменить политику, используйте оператор ALTER TABLE … MODIFY SETTING.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MODIFY SETTING storage_policy = 'default';

    В запросе:

    • MODIFY SETTING изменяет настройки таблицы.
    • storage_policy = 'default' устанавливает политику хранения для гибридного хранилища.

В результате политика будет изменена для новых вставок.

Чтобы изменить правило автоматического переноса данных по времени, используйте оператор ALTER TABLE … MODIFY TTL. Новое правило будет применяться к существующим и новым частям данных.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MODIFY TTL <выражение_времени> TO VOLUME 'cold';

    Пример запроса:

    sql
    ALTER TABLE school.events
    MODIFY TTL event_time + INTERVAL 90 DAY TO VOLUME 'cold';

    В запросе и примере:

    • MODIFY TTL — изменяет настройки TTL.
    • event_time + INTERVAL 90 DAY — условие времени, через которое данные станут холодными.
    • TO VOLUME 'cold' — указывает, что данные должны быть перемещены в том cold.

Чтобы удалить правило TTL, используйте оператор ALTER TABLE … REMOVE TTL. Части, уже перемещенные в холодное хранилище, не вернутся обратно автоматически. Их можно будет переместить только вручную.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы> REMOVE TTL;

По умолчанию TTL обрабатывается в фоновом режиме. Чтобы запустить немедленную обработку TTL для всех существующих данных, используйте оператор ALTER TABLE ... MATERIALIZE TTL.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы> MATERIALIZE TTL;

Разовые команды MOVE PARTITION и MOVE PART позволяют переместить партицию или отдельную часть между томами hot и cold. Они не создают автоматического правила для будущих данных.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос.

    Чтобы переместить партицию из горячего в холодное хранилище:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MOVE PARTITION <партиция> TO VOLUME 'cold';

    Чтобы переместить партицию из холодного в горячее хранилище:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MOVE PARTITION <партиция> TO VOLUME 'hot';

    Чтобы переместить конкретную часть из горячего в холодное хранилище:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MOVE PART '<имя_части>' TO VOLUME 'cold';

    Чтобы переместить конкретную часть из холодного в горячее хранилище:

    sql
    ALTER TABLE <имя базы данных>.<имя таблицы>
    MOVE PART '<имя_части>' TO VOLUME 'hot';

В результате указанная партиция или часть будет немедленно перемещена в целевой том.

Чтобы убедиться, что данные распределены между горячим и холодным хранилищем, используйте системные таблицы system.tables, system.parts, system.disks и system.storage_policies.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос.

    Чтобы посмотреть политику хранения таблицы:

    sql
    SELECT database, table, storage_policy
    FROM system.tables
    WHERE database = '<имя базы данных>' AND table = '<имя таблицы>';

    Чтобы посмотреть, на каких дисках лежат части:

    sql
    SELECT partition, name, disk_name, formatReadableSize(bytes_on_disk) AS size
    FROM system.parts
    WHERE database = '<имя базы данных>' AND table = '<имя таблицы>' AND active
    ORDER BY partition, name;

    Чтобы получить все доступные диски и их типы:

    sql
    SELECT name, type, path, formatReadableSize(free_space) AS free_space
    FROM system.disks;

    Чтобы получить информацию о политиках хранения:

    sql
    SELECT policy_name, volume_name, disks, move_factor
    FROM system.storage_policies;

Для удаления таблицы используйте оператор DROP.

  • В standalone-кластере
  • В multi-node-кластере
  1. Подключитесь к кластеру.

  2. Узнайте имя базы данных:

    sql
    SELECT name AS база_данных
    FROM system.databases;
  3. Узнайте имя таблицы:

    sql
    SHOW TABLES FROM <имя базы данных>;
  4. Выполните запрос:

    sql
    DROP TABLE [IF EXISTS] <имя базы данных>.<имя таблицы>;

    В запросе условие IF EXISTS предотвращает ошибку, если таблица с таким именем не существует в указанной базе данных.

    В результате таблица удалится вместе со всеми данными.