2016-07-06 51 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