2014-04-17 64 views
0

我在一個目錄中有三個csv文件,並且每個文件具有不同的模式。我需要創建一個可以組合來自所有三個文件的數據的hive表。是從不同模式創建單個Hive表

架構爲每個文件如下

/example/test1.csv -- C1, C2, C3, C4 
/example/test2.csv -- C1, C2, C3, C4, C5 
/example/test3.csv -- C1, C2, C6, C3, C4, C5 

在這裏,我可以創建一個蜂巢表模式C1,C2,C3,C4,C5,C6?

回答

1

我想你想要一個視圖,它是不同表格的聯合,如果我理解正確的話。 @ venBigData的解決方案並不完美,因爲它會將c6解釋爲c3。

CREATE VIEW union_view 
AS 
SELECT c1, c2, c3, c4, null as c5, null as c6 
    FROM test1 
UNION ALL 
SELECT c1, c2, c3, c4, c5 , null as c6 
    FROM test2 
UNION ALL 
SELECT c1,c2, c4 as c3, c5 as c4, c6 as c5, c3 as c6 
    FROM test3; 

東西,你是什麼意思?

1

注意:Hive是讀取模式。該表將被創建。您可以創建一個表,如

CREATE EXTERNAL TABLE tab3(
c1 int, 
c2 int, 
c3 int, 
c4 int, 
c5 int, 
c6 int) 
row format delimited 
fields terminated by ',' 
location '/example' 

此表已創建。使用test1.csv,test2.csv,test3.csv作爲其數據源。

當您嘗試查詢表時,請注意test1.csv中的c3,test2.csv中的c3和test3.csv中的c6都將與配置單元表中的相同列一致。同樣適用於C4,c4和c3等。

那是你在找什麼?對於那些沒有數據的文件,列將被填充爲null。對於test1.csv,c5將爲null,對於test2.csv,c6將爲null。