HIVE 高效的字符串解析函数

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

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

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

你可能感兴趣的:(技术,数据库)