我有一个csv文件,其列可以包含','粗体样本
样本
23, “我们是”下,100
23, “你是”下,100
要求加载到配置单元表(col1 int,col2数组,col3 int);
答案 0 :(得分:0)
如果您的Hive版本为0.14及更高版本,则可以使用CSV Serde(https://cwiki.apache.org/confluence/display/Hive/CSV+Serde)。这个SerDe的DEFAULT_QUOTE_CHARACTER是"
如果您有以前的Hive版本,请尝试手动添加此serde https://github.com/ogrodnek/csv-serde
事情是Serde将您的数组视为字符串。这不是一个很大的问题,您可以在执行select时将列转换为数组,也可以为其创建其他视图。
示例:
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)