我在胞中有orc表,我想从这个表中删除列
ALTER TABLE table_name drop col_name;但是我得到了下面的例外
执行单元查询发生错误:确定失败: ParseException行1:35不匹配的输入'user_id1‘期望在drop分区语句中接近'drop’的分区
有人能帮助我或提供任何想法来做这事吗?注意,我是using hive 0.14
发布于 2015-12-10 10:00:31
不能使用命令ALTER TABLE table_name drop col_name;直接从表中删除列。
删除列的唯一方法是使用replace命令。比方说,我有一个包含id、name和dept列的表emp。我想删除表emp的id列。因此,在替换列子句中提供您希望成为表的一部分的所有列。下面的命令将从emp表中删除id列。
ALTER TABLE emp REPLACE COLUMNS( name string, dept string);发布于 2018-08-23 20:47:40
还有一种实现最终目标的“愚蠢”方法,就是在不需要列的情况下创建一个新表。使用Hive的regex匹配将使这相当容易。
以下是我要做的事:
-- make a copy of the old table
ALTER TABLE table RENAME TO table_to_dump;
-- make the new table without the columns to be deleted
CREATE TABLE table AS
SELECT `(col_to_remove_1|col_to_remove_2)?+.+`
FROM table_to_dump;
-- dump the table
DROP TABLE table_to_dump;如果讨论的问题不是太大,这应该是很好的工作。
发布于 2018-03-05 19:22:48
假设您有一个外部表,即。organization.employee as:(不包括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中删除底层数据(需要从胞壳中取出)
[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;最后,删除创建的temp表。
hive> drop table organization.employee_temp;https://stackoverflow.com/questions/34198114
复制相似问题