Skip to content

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

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

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

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Выполните запрос:

    sql
    SELECT hostName() AS узел, name AS таблица
    FROM clusterAllReplicas('{cluster}', system.tables)
    WHERE database = '<имя базы данных>'
    ORDER BY узел, таблица;

    Здесь функция hostName() возвращает имена узлов. Имена узлов и таблиц будут записаны в столбцы с псевдонимами узел и таблица.

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

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

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

  1. Подключитесь к кластеру.

  2. Узнайте имя таблицы::

    sql
    SELECT hostName() AS узел, name AS таблица
    FROM clusterAllReplicas('{cluster}', system.tables)
    WHERE database = '<имя базы данных>'
    ORDER BY узел, таблица;

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Узнайте имя базы данных:

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    Здесь функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.

  4. Выполните запрос:

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

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

Создать таблицу

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

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Выполните запрос:

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

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

    • IF NOT EXISTS — предотвращает ошибку, если таблица с таким именем уже существует.
    • ON CLUSTER — создает таблицы на всех узлах заданного кластера.
    • 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 'Таблица событий пользователей'
    ON CLUSTER 'my_cluster';

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

Посмотреть структуру таблицы

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Узнайте имя таблицы:

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

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

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

Посмотреть все столбцы таблицы

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

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Узнайте имя таблицы:

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

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

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

Посмотреть первые строки таблицы

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  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.

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Узнайте имя таблицы:

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

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

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

Удалить таблицу

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

  1. Подключитесь к кластеру.

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

    sql
    SELECT hostName() AS узел, name AS база_данных
    FROM clusterAllReplicas('{cluster}', system.databases);

    В запросе:

    • Функция hostName() возвращает имена узлов. Имена узлов и баз данных будут записаны в столбцы с псевдонимами узел и база_данных.
    • Имя кластера автоматически определяется макросом {cluster}, заданным в конфигурации.
  3. Узнайте имя таблицы:

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

    sql
    DROP TABLE [IF EXISTS] <имя базы данных>.<имя таблицы> ON CLUSTER '<имя кластера>' SYNC;

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

    • IF EXISTS — предотвращает ошибку, если таблица с таким именем не существует в указанной базе данных.
    • ON CLUSTER — удаляет таблицу на всех узлах заданного кластера.
    • SYNC — гарантирует, что команда завершится только после применения изменений на всех узлах.

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