hive - Parquet Hive 表中的架构演变

标签 hive parquet

我在基于 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/

相关文章:

sql-server - 设置ODBC Hortonworks后在SQL中添加HIVE链接服务器

hadoop - 如何使用权限将新用户添加到Hue/Hive?

hadoop - HIVE的自定义记录分隔符

apache-spark - Spark : save ordered data to parquet

apache-spark - 如何在Spark中更有效地加载Parquet文件(pySpark v1.2.0)

hadoop - 一个基于大型事件的表或多个表? Hive 表设计注意事项

hadoop - 有什么工具可以让我从两个表中加入数据——一个在 hive 中,另一个在 cassandra 中。我也必须通过 oozie 来完成这项工作

hadoop - pig 拉丁编程

python - Pandas 将数据框写入带有附加的 Parquet 格式

hadoop - Spark Avro 到 Parquet Writer