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

hnbian hnbian 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
目前我一只的自定义的分隔符种类
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>>表数据的分隔符又怎么去定义呢?希望能给一点提示谢谢各位。
...全文
评论 1
收藏 已收藏
分享
返回顶部
hnbian
Hadoop生态社区 20,842 成员 4,695 内容