hive 嵌套复杂类型数据(map,array.struct)的时候自定义分隔符的问题

hnbian 2016-03-31 03:17:03
目前我一只的自定义的分隔符种类
MAP KEYS TERMINATED BY :key value分隔符
FIELDS TERMINATED BY:字段与字段之间的分隔符
COLLECTION ITEMS TERMINATED BY:一个字段各个item的分隔符
但是 当我嵌套复杂结构类型 的数据的时候 可能这几种自定义分隔符已经不能满足需求了
例如
create table Test2 (machine_no string,appinfo array<string>,event struct<key:string,seg:map<string,string>>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':' ;

hive> desc logTest;
OK
machine_no string
appinfo array<string>
event struct<key:string,seg:map<string,string>>
Time taken: 0.359 seconds, Fetched: 3 row(s)
导入的数据文本格式(我想到的有可能的三种数据格式,所以三条数据的类型不一样)
12345 appone1,apptwo1,appthree1 eventskeyone1,mapkey1:val1
56789 appone1,apptwo1,appthree2 eventskeyone1,mapkey1,val1:mapkey1,val1
8910JQ appone1,apptwo1,appthree3 eventskeyone1,tom1:tim1,green1:t1
查询结果

hive> select * from logTest;
OK
220123652154785412542 ["appone1","apptwo1","appthree1"] {"key":"eventskeyone1","seg":{"mapkey1":null,"val1":null}}
220123652154785412542 ["appone1","apptwo1","appthree2"] {"key":"eventskeyone1","seg":{"mapkey1":null}}
220123652154785412542 ["appone1","apptwo1","appthree3"] {"key":"eventskeyone1","seg":{"tom1":null,"tim1":null}}
我现在查询的结果map中的value 都是null
但是这种是不对的
那我应该怎么去定义上面表中的分隔符以及数据文本又是什么格式呢??
上面表中struct类型中的String 与map的key与value的分隔符需要怎么定义呢?
当多map中有多个键值对的时候又怎么分隔符呢?
ps:
另外这种array>>表数据的分隔符又怎么去定义呢?希望能给一点提示谢谢各位。
...全文
881 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
alinly 2016-04-08
  • 打赏
  • 举报
回复
FIELDS TERMINATED BY '\t' ----------> COLLECTION ITEMS TERMINATED BY ','; --- >这里是指定map,或者array,struct的分隔符.

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧