创建配置单表并加载数据引用的CSV

时间:2016-07-06 07:29:58

标签: linux hive apache-pig hiveql hadoop2

我有一个csv文件,其列可以包含','粗体样本

样本

23, “我们是”下,100

23, “你是”下,100

要求加载到配置单元表(col1 int,col2数组,col3 int);

1 个答案:

答案 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)