在Apache Hive中加载更改列

时间:2014-08-06 18:25:57

标签: hive

我有一个HIVE表,在日期字段上进行分区,每天都会加载。我们收到了在末尾添加新列的请求,并将数据加载到同一个HIVE表中。是否有更好的方法来处理此列更改请求以保留现有数据。

我是否需要删除现有表中的数据并使用新列重新创建表并加载数据。

1 个答案:

答案 0 :(得分:0)

您以哪种格式保存数据? 如果您使用的是avro-format,只需在.avsc-filed中添加新字段并设置默认值:

{
 "name": "yourData",
 "type": ["string", "null"],
 "default": "null"

}

如果将数据存储为csv,那么它似乎有点复杂。 使用alter table更改表格并不适用于我的情况(我不知道为什么)。 所以我删除了表,用新列重新创建了它并添加了分区并且它可以工作。 确保您的表格是外部表格,然后您就不必删除数据。

例如:

Old Data:
889,5CE1,2016-07-25

New Data:
900,5DCBA,2016-07-25,2012-03-22,152047

配置单元:

create table somData (
anid int
,astring String
,extractDate date
)
PARTITIONED BY(cusPart STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TextFile location "/your/location";

你要做的事情:

ALTER TABLE somData  SET TBLPROPERTIES('EXTERNAL'='TRUE');

drop table somData;

create table somData (
anid int
,astring String
,extractDate date
,anotherDate date
,someInt int
)
PARTITIONED BY(cusPart STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TextFile location "/your/location";

ALTER TABLE someData ADD IF NOT EXISTS PARTITION (cusPart='foo') LOCATION '/your/paritioned/data';