用户行为的数据每天都是上亿的,那么如何高效将行为数据一个个解析出一目了然的字段呢?
在小白最初工作时,用的就是最基础的get_json_object函数,没话说,真的好用,也好学习,将string类型中的数据一个对应一个的解析出来。
话不多说,来个案例:
{"otherlistcount":"0|0|0|0","regiontype":"5","regionid":"0"}将这个字符串里的三个字段解析出来
select
get_json_object(exdata,'$.otherlistcount') otherlistcount
,get_json_object(exdata,'$.regiontype') regiontype
,get_json_object(exdata,'$.regionid') regionid
from table
where d='2019-05-19'
and exdata = '{"otherlistcount":"0|0|0|0","regiontype":"5","regionid":"0"}'
结果为:
otherlistcount | regiontype | regionid |
---|---|---|
0|0|0|0 | 5 | 0 |
这种解析方式简单明了,但有一个问题就是,数据量很大时,有点耗时,后来在优化代码时,突然发现了一个函数lateral view json_tuple会更加高效,上面的例子,用这个函数解析,结果是一样的,但是速度会更快,小白的理解是,一次读取这个字段,将里面符合的字段全部拿出来,而上面是一次一次的从同一个字段中匹配需要的字段进行读取,所以,速度会比这个慢。
select
otherlistcount,
regiontype,
regionid
from table
lateral view json_tuple(exdata,'otherlistcount','regiontype','regionid') a
as otherlistcount,
regiontype,
regionid
where d='2019-05-19'
and exdata = '{"otherlistcount":"0|0|0|0","regiontype":"5","regionid":"0"}'
解析的方法还有很多,小白这次就主要写这两个,以后会不定期更新~