2015-01-09 65 views
4

我在基於實木複合地板的Hive表(蜂巢版本0.10)中有很多數據。我必須在表格中添加一些新的列。我希望新的列有前進的數據。如果已經加載的數據的值爲NULL,那對我來說很好。在實木複合地板蜂房表中的圖式演變

如果我添加新列而不更新舊Parquet文件,它會給出一個錯誤,它看起來很奇怪,因爲我只添加字符串列。與例外java.lang.UnsupportedOperationException

錯誤獲取行數據:不能檢查的java.util.ArrayList

能否請你告訴我如何將新的字段添加到木地板蜂房而不影響表中已有的數據?

我使用Hive版本0.10。

謝謝。

回答

2

用兩個新列創建一個新表。通過發佈插入數據:

insert into new_table select old_table.col1, old_table.col2,...,null,null from old_table; 

最後兩個空值用於兩列新列。而已。

如果列數太多,可能會更容易編寫讀取舊文件並寫入新文件的程序。據我所知,Hive 0.10並不支持在實木複合地板中進行模式演變。 Hive 0.13確實有它,所以你可以嘗試升級配置單元。

1

1) 蜂巢開始與0.13版本有內置的鑲木架構evoultion。

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

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

PS。請注意,模式演變的即時支持可能會對性能造成影響。例如,Spark有一個旋鈕來打開和關閉拼花圖式的演變。在最近的Spark發佈之後,由於性能受到影響(特別是當有很多parquet文件時),它現在默認關閉。不確定Hive 0.13+是否也有這樣的設置。

2) 此外,還希望建議嘗試在Hive上創建視圖,在此類地板表的頂部,您期望經常進行模式更改,並且在任何地方使用視圖,但無法直接使用表。

例如,如果你有兩個表 - 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這樣的表建議,您可以重新創建視圖。這將有助於您項目的敏捷性。

相關問題