更改 Clickhouse 表中的列名

Yin*_*ind 6 clickhouse

有什么方法可以更改表并更改 clickhouse 中的列名?我只发现更改了表名,但没有以直接的方式更改单个列。

谢谢。

sim*_*Pod 9

该功能已在此处引入 v20.4。

ALTER TABLE table1 RENAME COLUMN old_name TO new_name
Run Code Online (Sandbox Code Playgroud)

您还可以重命名多个列:

ALTER TABLE table1 
    RENAME COLUMN old_name1 TO new_name1, 
    RENAME COLUMN old_name2 TO new_name2
Run Code Online (Sandbox Code Playgroud)

旧答案:

ClickHouse 还没有这个功能。

实现并非易事,因为更改列的 ALTER 是在通常的复制队列之外处理的,并且在不重新处理 ALTER 的情况下添加重命名将在复制表中引入竞争条件。

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

正如@Slash 所说,现在的解决方案是创建新表并

INSERT INTO `new_table` SELECT * FROM `old_table`
Run Code Online (Sandbox Code Playgroud)

不要忘记列别名在那里不起作用 ( AS)。

INSERT INTO `new_table` SELECT a, b AS c, c AS b FROM `old_table`
Run Code Online (Sandbox Code Playgroud)

这仍将插入a第一列,b第二列和c第三列。AS在那里没有影响。


小智 1

您可以尝试使用 CREATE TABLE new_table 与另一个字段名称并运行 INSERT INTO new_table SELECT old_field AS new_field FROM old_table