在配置单元中,有没有办法指定添加新列的列之间?

Pop*_*orn 5 hadoop hive hdfs

我可以

ALTER TABLE table_name ADD COLUMNS (user_id BIGINT)

将新列添加到我的非分区列的末尾和分区列之前.

有没有办法在我的非分区列中的任何位置添加新列?例如,我想把这个新列user_id作为我表的第一列

Ree*_*yay 14

是的,可以更改列的位置,但只有在使用CHANGE COLUMN在表中添加后才能更改列的位置

在您的情况下,首先使用以下命令将列user_id添加到表中:

ALTER TABLE table_name ADD COLUMNS (user_id BIGINT);
Run Code Online (Sandbox Code Playgroud)

现在将user_id列作为表中的第一列,使用带有FIRST子句的change列:

 ALTER TABLE table_name CHANGE COLUMN user_id user_id BIGINT first;
Run Code Online (Sandbox Code Playgroud)

这会将user_id列移动到第一个位置.

同样,如果要在任何其他列之后移动指定的列,则可以使用After而不是first.比如说,我想在user_id列之后移动dob列.然后我的命令是:

ALTER TABLE table_name CHANGE COLUMN dob dob date AFTER user_id;
Run Code Online (Sandbox Code Playgroud)

请注意,此命令仅更改元数据.如果要移动列,则数据必须已与新架构匹配,或者必须通过其他方式更改它以匹配.

  • 此解决方案仅移动列名称。有什么办法可以将数据一起移动吗? (2认同)

Dur*_*aju -3

不,这是不可能的。

一种解决方案是使用“CREATE TABLE AS SELECT”方法创建新表并删除旧表。