【数据库】HIVE SQL高效的字符串解析函数(lateral view、json_tuple)

      用户行为的数据每天都是上亿的,那么如何高效将行为数据一个个解析出一目了然的字段呢?

在小白最初工作时,用的就是最基础的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"}'

结果为:

otherlistcountregiontyperegionid
0|0|0|050

      这种解析方式简单明了,但有一个问题就是,数据量很大时,有点耗时,后来在优化代码时,突然发现了一个函数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"}'

       解析的方法还有很多,小白这次就主要写这两个,以后会不定期更新~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值