当前位置:  开发笔记 > 运维 > 正文

更改蜂巢表添加或删除列

如何解决《更改蜂巢表添加或删除列》经验,为你挑选了2个好方法。

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

ALTER TABLE table_name drop  col_name;

但我得到以下例外

执行配置单元查询时出错:OK FAILED:ParseException行1:35不匹配输入'user_id1'期望删除分区语句中'丢弃'附近的PARTITION

任何人都可以帮助我或提供任何想法吗?请注意,我是using hive 0.14



1> Reena Upadhy..:

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

删除列的唯一方法是使用replace命令.可以说,我有一个带有id,name和dept列的表emp.我想删除表emp的id列.因此,在replace columns子句中提供您希望成为表的一部分的所有列.下面的命令将从emp表中删除id列.

 ALTER TABLE emp REPLACE COLUMNS( name string, dept string);


我遇到了同样的问题,尝试用上述方法替换列,但失败,失败:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。替换列不能删除表sandbox6.alc_ont_oe_order_headers_all的列。SerDe可能不兼容

2> 小智..:

实现最终目标的另一种“哑巴”方法是创建一个不需要表的新表。使用Hive的正则表达式匹配将使此操作变得很容易。

这是我会做的:

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

如果所讨论的表不是太大,则应该可以正常工作。

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有