Hive 在Apache配置单元中加载更改列

Hive 在Apache配置单元中加载更改列,hive,Hive,我有一个配置单元表,按日期字段分区,每天都会加载。我们收到一个请求,要求在末尾添加一个新列,并将数据加载到同一个配置单元表中。在保留现有数据时,是否有更好的方法来处理此列更改请求 是否需要删除现有表中的数据,并使用新列重新创建表并加载数据。您以何种格式保存数据? 如果您使用的是avro格式,只需在.avsc字段中添加新字段并设置默认值: { "name": "yourData", "type": ["string", "null"], "default": "null" } 如果您将数据

我有一个配置单元表,按日期字段分区,每天都会加载。我们收到一个请求,要求在末尾添加一个新列,并将数据加载到同一个配置单元表中。在保留现有数据时,是否有更好的方法来处理此列更改请求


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

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

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

如果您将数据存储为csv,那么它似乎有点复杂。 用alter table更改表格在我的情况下不起作用(我不知道为什么)。 所以我删除了这个表,用新的列重新创建了它,并添加了分区,它就工作了。 让舒尔将您的表格设置为外部表格,这样您就不必删除数据

例如:

蜂巢:

你必须做的是:

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';
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';