我在hive中有orc表我想从这个表中删除列
ALTER TABLE table_name drop col_name;
但我得到以下例外
执行配置单元查询时出错:OK FAILED:ParseException行1:35不匹配输入'user_id1'期望删除分区语句中'丢弃'附近的PARTITION
任何人都可以帮助我或提供任何想法吗?请注意,我是using hive 0.14
您不能使用命令直接从表中删除列 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);
实现最终目标的另一种“哑巴”方法是创建一个不需要表的新表。使用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;
如果所讨论的表不是太大,则应该可以正常工作。