如何从存储为实木复合地板的Hive分区表中删除字段?

时间:2019-06-13 11:26:56

标签: hadoop hive parquet impala

我正在寻找一种方法来修改 HIVE 中的镶木地板数据表,以删除一些字段。该表是托管表,但没关系,因为我可以将其转换为外部表。
问题是我无法对分区实木复合地板表使用命令ALTER TABLE ... REPLACE COLUMN

它适用于文本文件格式(已分区或未分区),并且仅适用于未分区的实木复合地板。

我尝试替换列,但这是结果:

hive> ALTER TABLE db_test.mytable REPLACE COLUMNS(name String);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
Replacing columns cannot drop columns for table db_test.mytable. 
SerDe may be incompatible

我已经考虑过一些解决方案,但是都不适合我的情况:

第一
-[可选]在外部转换表。
-删除表格。
-用我想要的字段重新创建表。
-MSCK REPAIR TABLE以添加HDFS分区。
-[可选]转换回托管表。

第二
-使用我选择的字段创建临时表作为对原始表的选择。
-删除原始表。
-将临时表重命名为原始名称。

这两个选项都会影响我的过程,因为我会丢失表的统计信息。该表已被Impala的MicroStrategy占用,我需要保留统计信息。
另外,第二种解决方案对非常大的数据表不利。

有什么建议吗?
预先感谢。

1 个答案:

答案 0 :(得分:0)

您可以先使用方法,然后运行

hive> anayze table <db_name>.<table_name> compute statistics;

计算表的所有statistics