当前位置: 首页 > 知识库问答 >
问题:

如何从存储为parquet的Hive中的分区表中删除字段?

杜骏祥
2023-03-14

我正在寻找一种方法来修改配置单元中的拼花数据表,以删除一些字段。该表是受管理的,但这并不重要,因为我可以将其转换为外部
问题是我不能使用命令<code>ALTER TABLE…用分区拼花表替换列。

它适用于文本文件格式(分区或非分区),仅适用于非分区拼花桌子。

我尝试替换列,但结果如下:

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分区
-[可选]转换回托管表。

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

这两个选项都会影响我的进程,因为我将丢失表的统计信息。这张表被黑斑羚的微策略消耗了,我需要整理统计数据
此外,第二种解决方案对于非常大的数据表是不好的。

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

共有1个答案

鲁鹏
2023-03-14

您可以使用第一种方法,然后运行

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

以计算表的所有统计信息。

 类似资料: