Изменить название столбца в таблице в Clickhouse

Есть ли способ ИЗМЕНИТЬ таблицу и изменить имя столбца в Clickhouse? Я обнаружил, что можно изменить только имя таблицы, но не для отдельного столбца прямым способом.

Спасибо.


person Yind    schedule 17.11.2017    source источник


Ответы (2)


Эта функция была представлена ​​здесь в версии 20.4.

ALTER TABLE table1 RENAME COLUMN old_name TO new_name

Вы также можете переименовать несколько столбцов в:

ALTER TABLE table1 
    RENAME COLUMN old_name1 TO new_name1, 
    RENAME COLUMN old_name2 TO new_name2

Старый ответ:

ClickHouse пока не имеет этой функции.

Реализация нетривиальна, потому что ALTER, изменяющие столбцы, обрабатываются вне обычной очереди репликации, а добавление переименования без переделки ALTER приведет к возникновению состояния гонки в реплицируемых таблицах.

https://github.com/yandex/ClickHouse/issues/146#issuecomment-255631384

Как сказал @Slash, решение на данный момент - создать новую таблицу и

INSERT INTO `new_table` SELECT * FROM `old_table`

Не забывайте, что псевдонимы столбцов там работать не будут (AS).

INSERT INTO `new_table` SELECT a, b AS c, c AS b FROM `old_table`

Это все равно вставит a в первый столбец, b во второй столбец и c в третий столбец. AS здесь не действует.

person simPod    schedule 28.01.2018

Вы можете попробовать использовать CREATE TABLE new_table с другим именем поля и запустить INSERT INTO new_table SELECT old_field AS new_field FROM old_table

person Slach    schedule 18.11.2017
comment
Да, я думал об этом ... но это довольно нелегкий способ сделать это ... странно, что нет встроенного способа сделать это, поскольку имя столбца - это просто виртуальное свойство ... это должно быть довольно легко сделать способ изменить их - person Yind; 20.11.2017