首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改单元表添加或删除列

更改单元表添加或删除列
EN

Stack Overflow用户
提问于 2015-12-10 09:31:01
回答 8查看 121.9K关注 0票数 34

我在胞中有orc表,我想从这个表中删除列

代码语言:javascript
运行
复制
ALTER TABLE table_name drop  col_name;

但是我得到了下面的例外

执行单元查询发生错误:确定失败: ParseException行1:35不匹配的输入'user_id1‘期望在drop分区语句中接近'drop’的分区

有人能帮助我或提供任何想法来做这事吗?注意,我是using hive 0.14

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-12-10 10:00:31

不能使用命令ALTER TABLE table_name drop col_name;直接从表中删除列。

删除列的唯一方法是使用replace命令。比方说,我有一个包含id、name和dept列的表emp。我想删除表emp的id列。因此,在替换列子句中提供您希望成为表的一部分的所有列。下面的命令将从emp表中删除id列。

代码语言:javascript
运行
复制
 ALTER TABLE emp REPLACE COLUMNS( name string, dept string);
票数 44
EN

Stack Overflow用户

发布于 2018-08-23 20:47:40

还有一种实现最终目标的“愚蠢”方法,就是在不需要列的情况下创建一个新表。使用Hive的regex匹配将使这相当容易。

以下是我要做的事:

代码语言:javascript
运行
复制
-- 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;

如果讨论的问题不是太大,这应该是很好的工作。

票数 8
EN

Stack Overflow用户

发布于 2018-03-05 19:22:48

假设您有一个外部表,即。organization.employee as:(不包括TBLPROPERTIES)

代码语言:javascript
运行
复制
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的临时表副本如下:

代码语言:javascript
运行
复制
hive> create table organization.employee_temp as select * from organization.employee;

删除主表organization.employee。

代码语言:javascript
运行
复制
hive> drop table organization.employee;

从HDFS中删除底层数据(需要从胞壳中取出)

代码语言:javascript
运行
复制
[nameet@ip-80-108-1-111 myfile]$ hadoop fs -rm hdfs://getnamenode/apps/hive/warehouse/organization.db/employee/*

根据需要使用移除的列创建表:

代码语言:javascript
运行
复制
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'

将原始记录插入原始表。

代码语言:javascript
运行
复制
hive> insert into organization.employee 
select employee_id, employee_name from organization.employee_temp;

最后,删除创建的temp表。

代码语言:javascript
运行
复制
hive> drop table organization.employee_temp;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34198114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档