我能做到
ALTER TABLE table_name ADD COLUMNS (user_id BIGINT)
将新列添加到我的非分区列的末尾和分区列之前。
有没有办法在我的非分区列中的任何位置添加新列? 例如,我想把这个新列user_id作为我表的第一列
答案 0 :(得分:12)
是的,可以更改列的位置,但只有在使用 CHANGE COLUMN
将其添加到表格中之后在您的情况下,首先使用以下命令将列user_id添加到表中:
ALTER TABLE table_name ADD COLUMNS (user_id BIGINT);
现在将user_id列作为表格中的第一列,使用更改列并使用 FIRST 子句:
ALTER TABLE table_name CHANGE COLUMN user_id user_id BIGINT first;
这会将user_id列移动到第一个位置。
同样,如果要在任何其他列之后移动指定列,则可以使用之后而不是第一。比如说,我想在user_id列之后移动dob列。然后我的命令是:
ALTER TABLE table_name CHANGE COLUMN dob dob date AFTER user_id;
请注意,此命令仅更改元数据。如果要移动列,则数据必须已与新架构匹配,或者您必须通过其他方式更改它以匹配。
答案 1 :(得分:2)
啊,这里解释为什么你列出了两次user_id(它不是一个类型):
// Next change column a1's name to a2, its data type to string, and put it after column b.
ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
// The new table's structure is: b int, a2 string, c int.
答案 2 :(得分:-3)
不,这是不可能的。
一种解决方案是使用" CREATE TABLE AS SELECT"创建新表。接近并放弃旧的。