我有一个HIVE表,在日期字段上进行分区,每天都会加载。我们收到了在末尾添加新列的请求,并将数据加载到同一个HIVE表中。是否有更好的方法来处理此列更改请求以保留现有数据。
我是否需要删除现有表中的数据并使用新列重新创建表并加载数据。
答案 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';