我正在寻找一种方法来修改配置单元中的Parquet数据表,以删除一些字段。表是托管的,但这并不重要,因为我可以将它转换为外部的。
问题是我不能使用这个命令 ALTER TABLE ... REPLACE COLUMN
用Parquet地板隔开的table。
它适用于文本文件格式(分区或不分区),仅适用于非分区Parquet表。
我试图替换列,但结果是:
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修复表添加hdfs分区。
-[可选]转换回托管表。
第二
-用我选择的字段创建临时表作为原始表的选择。
-删除原始表。
-将临时表重命名为原始名称。
这两个选项都会影响我的进程,因为我将丢失表的统计信息。这张表被 Impala 的微观策略所消耗,我需要保存统计数据。
另外,第二种解决方案对于非常大的数据表是不好的。
有什么建议吗?
提前谢谢。
1条答案
按热度按时间2wnc66cl1#
您可以使用第一个方法,然后运行
计算表中的所有统计信息。