在hive中,有没有办法指定在哪些列之间添加新列?

时间:2015-12-08 22:51:25

标签: hadoop hive hdfs

我能做到

ALTER TABLE table_name ADD COLUMNS (user_id BIGINT)

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

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

3 个答案:

答案 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"创建新表。接近并放弃旧的。