假设您有一个外部表,即。 organization.employee 为:(不包括 TBLPROPERTIES)
hive> show create table organization.employee;
OK
CREATE EXTERNAL TABLE `organization.employee`(
`employee_id` bigint,
`employee_name` string,
`updated_by` string,
`updated_date` timestamp)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://getnamenode/apps/hive/warehouse/organization.db/employee'
您想从表中删除 updated_by, updated_date 列。请按以下步骤操作:
创建一个 organization.employee 的临时表副本:
hive> create table organization.employee_temp as select * from organization.employee;
删除主表 organization.employee。
hive> drop table organization.employee;
从 HDFS 中移除底层数据(需要从 hive shell 中出来)
[nameet@ip-80-108-1-111 myfile]$ hadoop fs -rm hdfs://getnamenode/apps/hive/warehouse/organization.db/employee/*
根据需要创建删除列的表:
hive> CREATE EXTERNAL TABLE `organization.employee`(
`employee_id` bigint,
`employee_name` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://getnamenode/apps/hive/warehouse/organization.db/employee'
将原始记录插入到原始表中。
hive> insert into organization.employee
select employee_id, employee_name from organization.employee_temp;
最终删除创建的临时表
hive> drop table organization.employee_temp;