创建配置单元表并加载数据

bbmckpt7  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(536)

我有一个csv文件,它的列可以包含','粗体的例子
样品
23,“我们是”,100
23,“你是”,100
需求是加载到配置单元表(col1 int,col2 array,col3 int);

k10s72fa

k10s72fa1#

如果您的配置单元版本为0.14或更高版本,则可以使用csv serde(https://cwiki.apache.org/confluence/display/hive/csv+serde). 此序列的默认\u引号\u字符为“
如果您有以前的配置单元版本,请尝试手动添加此serdehttps://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)

相关问题