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

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

В 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 — гарантирует, что команда завершится только после применения изменений на всех узлах.

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