stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

Как в ClickHouse удалить или изменить PRIMARY KEY для таблиц с движком MergeTree?

Весь вопрос в заголовке. Объясню, почему и зачем это нужно.
Почему: ClickHouse не дает просто так удалить или изменить столбец, назначенный PRIMARY KEY.
Зачем: Необходимо изменить название столбца, назначенного PRIMARY KEY.
  • Вопрос задан
  • 791 просмотр
Пригласить эксперта
Ответы на вопрос 1
stanislav-belichenko
@stanislav-belichenko Автор вопроса
Backend PHP Developer
Способ именно поменять первичный ключ найден не был, однако сработал способ с созданием новой таблицы и переносом туда данных из старой. Примерный код:

---- Создаем новую таблицу с верным именем поля.
create table IF NOT EXISTS my_table_new
(
    key_field_new,
    ...
)
    engine = ReplicatedMergeTree('/clickhouse/tables/.../{shard}', '{replica}')
        ORDER BY key_field_new
        SETTINGS index_granularity = 8192;

---- Переносим данные из старой таблицы в новую.
INSERT INTO my_table_new (
    key_field_new,
    ...
)
SELECT
   key_field,
   ...
   FROM my_table;

---- Удаляем старую таблицу.
DROP TABLE my_table;

---- Переименовываем новую таблицу.
RENAME TABLE my_table_new TO my_table;


Если есть MV, их нужно удалить и создать заново, так как там тоже будет старое имя ключа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы