gpt4 book ai didi

hive - Parquet Hive 表中的架构演变

转载 作者:行者123 更新时间:2023-12-03 14:57:28 27 4
gpt4 key购买 nike

我在基于 Parquet 的 Hive 表(Hive 版本 0.10)中有很多数据。我必须向表中添加一些新列。我希望新列有数据前进。如果已加载数据的值为 NULL,那对我来说没问题。

如果我添加新列而不更新旧的 Parquet 文件,则会出现错误,并且在添加 时看起来很奇怪。字符串 仅列。

Error getting row data with exception java.lang.UnsupportedOperationException: Cannot inspect java.util.ArrayList



你能告诉我如何在不影响表中现有数据的情况下向 Parquet Hive 添加新字段吗?

我使用 Hive 0.10 版。

谢谢。

最佳答案

1)
从 0.13 版开始的 Hive 内置了 Parquet 架构演变。

https://issues.apache.org/jira/browse/HIVE-6456

https://github.com/Parquet/parquet-mr/pull/297

附:请注意,对模式演变的开箱即用支持可能会对性能产生影响。例如,Spark 有一个旋钮可以打开和关闭 Parquet 模式演变。在最近的 Spark 版本之一之后,由于性能下降(尤其是当有很多 Parquet 文件时),它现在默认关闭。不确定 Hive 0.13+ 是否也有这样的设置。

2)
还想建议尝试在 Hive 中在此类 Parquet 表上创建 View ,您希望经常更改架构,并在任何地方使用 View ,而不是直接使用表。

例如,如果您有两个表 - A 和 B 具有兼容的架构,但表 B 还有两列,您可以通过以下方式解决此问题

CREATE VIEW view_1 AS
SELECT col1,col2,col3,null as col4,null as col5 FROM tableA
UNION ALL
SELECT col1,col2,col3,col4,col5 FROM tableB
;

因此,您实际上不必像@miljanm 建议的那样重新创建任何表,您只需重新创建 View 即可。它将有助于提高项目的敏捷性。

关于hive - Parquet Hive 表中的架构演变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com