2016-07-06 55 views
0

我有一個CSV文件及其列可以包含蜂巢表和加載數據 '' 大膽樣品創建引用CSV

樣品

23,「我們,是」,100

23,「你是,」是「,100」

要求加載到配置單元表(col1 int,col2 array,col3 int);

回答

0

如果您的Hive版本是0.14及以上,您可以使用CSV Serde(https://cwiki.apache.org/confluence/display/Hive/CSV+Serde)。 DEFAULT_QUOTE_CHARACTER這個SERDE是「

如果你有以前的配置單元的版本,嘗試添加該SERDE手動https://github.com/ogrodnek/csv-serde

的事情是SERDE將把您的數組作爲一個字符串。這不是很大的問題,你可以轉換柱到數組做時選擇或創建爲相同的附加視圖

例:

DROP TABLE my_table; 
CREATE EXTERNAL TABLE my_table(col1 int , col2 string, col3 int) 
row format SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
stored as textfile; 

我創建的文本文件,並把它在表中的位置

文件內容:

23,"we,are",100 
23,"you,are",100 

現在,獲取數據:

hive> select col1, split(col2,",") as col2, col3 from my_table; 
OK 
23  ["we","are"] 100 
23  ["you","are"] 100 

或者,你可以創建一個視圖:

hive> create view my_table_view as select col1, split(col2,",") as col2, col3 from my_table; 
OK 
Time taken: 0.427 seconds 
hive> select * from my_table_view; 
OK 
23  ["we","are"] 100 
23  ["you","are"] 100 
Time taken: 0.369 seconds, Fetched: 2 row(s) 

- 選擇數組元素:

hive> select col1,col2[0] as col2_1, col2[1] as col2_2, col3 from my_table_view; 
OK 
23  we  are  100 
23  you  are  100 
Time taken: 0.09 seconds, Fetched: 2 row(s) 
+0

可否請您提供樣品ddl表格和加載數據... –

+0

完成。請參閱我的改進回答 – leftjoin

+0

請注意,即使您將表創建爲包含數組,但無論如何,serde會將其視爲字符串。這將工作相同:CREATE EXTERNAL TABLE my_table(col1 int,col2 array ,col3 int)... – leftjoin