从 Hive 分区外部表中删除特定列

Posted

技术标签:

【中文标题】从 Hive 分区外部表中删除特定列【英文标题】:Remove specific column from Hive Partitioned external table 【发布时间】:2018-10-31 22:37:48 【问题描述】:

我想从一个巨大的 hive 分区表中删除其中一列。想知道我该怎么做。这是我尝试过的如下。

DDL:

CREATE TABLE xyz.test_change (a int, b int, c int);

ALTER 命令:

 ALTER TABLE xyz.test_change REPLACE COLUMNS (a int, b int);

错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replacing columns cannot drop columns for table xyz.test_change. SerDe may be incompatible

org.apache.hadoop.hive.ql.metadata.HiveException: Replacing columns cannot drop columns for table xyz.test_change. SerDe may be incompatible

【问题讨论】:

你能把你正在使用的蜂巢版本、元存储也包括进来吗? 【参考方案1】:

REPLACE COLUMNS 仅支持使用原生 SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe, LazySimpleSerDe and ColumnarSerDe).

确保该表具有上面定义的本机 Serde 之一。

您可以在此处参考更多详细信息:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns

【讨论】:

以上是关于从 Hive 分区外部表中删除特定列的主要内容,如果未能解决你的问题,请参考以下文章

hive外部表分区

从 hdfs 中删除文件是不是会删除相应的 hive 外部表分区?

在 hive 的外部表中创建分区

hive中怎么删除表中的部分数据

hive中怎么删除表中的部分数据

Hive 托管与外部表的可维护性