Hive 拼花蜂窝表中的模式演化

Hive 拼花蜂窝表中的模式演化,hive,parquet,Hive,Parquet,我在基于拼花地板的蜂巢表(蜂巢版本0.10)中有很多数据。我必须向表中添加一些新列。我希望新的列具有向前的数据。如果已经加载的数据的值为NULL,我可以这样做 如果我添加新的列而不更新旧的拼花地板文件,它会给出一个错误,并且看起来很奇怪,因为我只添加String列 获取行数据时出错,异常为java.lang.UnsupportedOperationException:无法检查java.util.ArrayList 您能告诉我如何在不影响表中已有数据的情况下向拼花单元添加新字段吗 我使用Hive版

我在基于拼花地板的蜂巢表(蜂巢版本0.10)中有很多数据。我必须向表中添加一些新列。我希望新的列具有向前的数据。如果已经加载的数据的值为NULL,我可以这样做

如果我添加新的列而不更新旧的拼花地板文件,它会给出一个错误,并且看起来很奇怪,因为我只添加String

获取行数据时出错,异常为java.lang.UnsupportedOperationException:无法检查java.util.ArrayList

您能告诉我如何在不影响表中已有数据的情况下向拼花单元添加新字段吗

我使用Hive版本0.10


谢谢。

创建一个包含两个新列的新表。通过发布以下命令插入数据:

insert into new_table select old_table.col1, old_table.col2,...,null,null from old_table;
最后两个空值用于两个新列。就这样

如果列太多,编写程序读取旧文件并写入新文件可能会更容易

据我所知,Hive0.10不支持拼花地板中的模式演变。Hive 0.13有它,所以您可以尝试升级Hive。

1) 从版本0.13开始的配置单元内置了拼花图案Evolution

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

(二) 我还想建议您尝试在这种拼花地板表上的配置单元中创建视图,您希望经常更改模式,并在任何地方使用视图,但不要直接使用表

例如,如果您有两个具有兼容模式的表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建议的那样重新创建任何表,您只需重新创建视图即可。这将有助于提高项目的灵活性