【问题标题】:How to delete fields from a partitioned table in Hive stored as parquet?如何从 Hive 中存储为镶木地板的分区表中删除字段?
【发布时间】:2019-10-27 23:36:44
【问题描述】:

我正在寻找一种方法来修改 HIVE 中的 parquet 数据表以删除一些字段。该表是托管的,但没关系,因为我可以将其转换为外部。
问题是我不能将命令 ALTER TABLE ... REPLACE COLUMNpartitioned 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 REPAIR TABLE 添加 HDFS 分区。
- [可选] 转换回托管表。

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

这两个选项都会影响我的流程,因为我会丢失表格的统计信息。此表由 Impala 与 MicroStrategy 一起使用,我需要维护统计信息。
此外,对于非常大的数据表,第二种解决方案不好。

   

有什么建议吗?
提前致谢。

【问题讨论】:

    标签: hadoop hive parquet impala


    【解决方案1】:

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

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

    计算表的所有statistics

    【讨论】:

    • 我想保留统计数据。重新计算统计信息是 CPU 密集型的,并且对于非常大的表可能需要很长时间才能完成。由于表的大小和分区的数量,这个问题影响了我。我必须逐步计算统计数据。还是谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 2021-06-13
    • 2020-12-24
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多