首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parquet蜂巢表中的模式演化

问Parquet蜂巢表中的模式演化
EN

Stack Overflow用户
提问于 2015-01-09 20:31:26
回答 2查看 6.2K关注 0票数 5

我在一个基于Parquet的Hive表中有很多数据(Hive version 0.10)。我必须在表中添加几个新列。我希望新的列有数据向前推进。对于已经加载的数据,如果该值为NULL,这对我来说是可以的。

如果我添加新列而不更新旧的Parquet文件,就会产生一个错误,而且它看起来很奇怪,因为我只添加了字符串列。

错误获取带异常java.lang.UnsupportedOperationException的行数据:无法检查java.util.ArrayList

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

我使用的是Hive版本0.10。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-04-25 00:10:00

( 1)从0.13版本开始的蜂巢中内置了拼花模式调用。

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

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

ps。请注意,对模式演化的开箱即用的支持可能会影响性能。例如,星火有一个旋钮来打开和关闭拼花模式的演变。在最近的一次星火发布之后,由于性能受到影响,它现在默认关闭了(当有大量的拼花文件时)。不确定Hive 0.13+是否也有这样的设置。

2)还想建议尝试在Hive中创建视图,在这些表之上,您可以期望经常更改模式,并在任何地方都使用视图,而不是直接使用表。

例如,如果您有两个具有兼容模式的表A和B,但表B又有两个列,则可以通过

代码语言:javascript
复制
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所建议的那样重新创建任何表,只需重新创建视图即可。它将有助于提高项目的灵活性。

票数 4
EN

Stack Overflow用户

发布于 2015-01-21 10:38:14

使用两个新列创建一个新表。通过发出以下命令插入数据:

代码语言:javascript
复制
insert into new_table select old_table.col1, old_table.col2,...,null,null from old_table;

最后两个空列用于这两个新列。就这样。

如果列太多,则编写一个读取旧文件和写入新文件的程序可能更容易。

据我所知,Hive 0.10不支持在拼花中进行模式进化。蜂窝0.13确实有,所以你可以尝试升级蜂箱。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27868745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档