前几天尝试map,struct,map的嵌套,结果失败。之后又查到union还不完善,就以为这个办不成。
今早机缘巧合,看到一篇文章
提到在嵌套多层的情况下,分隔符会随着复合类型嵌套层次的递增而发生变化,分隔符默认会以\001,\002,\003,\004…
变化。
我一看,不行那就试试喽,死马当活马医嘛,结果给“治”好了(¬_¬)。果然药不能停~~~
下面我们分阶段来搞这个嵌套实验,逐层增加难度
map和array嵌套
1 | create table testmaparray( |
数据文件
1 3 2 15 15,2,2015-09-03
load到表中后,查询出来:
1 3 2 15 [{"value":15,"staff_id":2,"logtime":"2015-09-03"}]
说明map keys那个分隔符可以分隔struct里面的各个元素
map和struct嵌套
第一次实验
1 | create table testmapstruct( |
数据文件
1 zhuzhi:xianyang,xueli:master,jiguan:shanxi swimming,running
导入,查询结果:
1 {"info":{"zhuzhi":null,"xianyang":null}} ["swimming","running"]
本来是用“:”做map里键值的分隔符,结果被解析成struct的分隔符。这里有了歧义。
所以就不能用这种分隔符了。要试试默认的分隔符。
第二次实验
1 | create table testmapstruct2( |
分析默认分隔符:
- 字段之间用\001
- struct和array里的每个元素之间用\002
- struct里面的map的每个元素之间用\003
- map的每个键值对里面的键和值之间用\004
数据文件
1^Azhuzhi^Dxianyang^Cxueli^Dmaster^Cjiguan^Dshanxi^Aswimming^Brunning
导入,查询结果:
1 {"info":{"zhuzhi":"xianyang","xueli":"master","jiguan":"shanxi"}} ["swimming","running"]