我正在寻找一种方法来修改 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占用,我需要保留统计信息。
另外,第二种解决方案对非常大的数据表不利。
有什么建议吗?
预先感谢。
答案 0 :(得分:0)