HIVE中get_json_object与json_tuple使用

来源:互联网 发布:qq自动聊天软件 编辑:程序博客网 时间:2024/05/06 22:58

hive中提供了两种针对json数据格式解析的函数,即get_json_object(…)与json_tuple(…),理论不多说,直接上效果示意图:

假设存在如下json数据对象,若使用hive环境可这么设置:

set hivevar:msg={"message":"2015/12/08 09:14:4", "client": "10.108.24.253", "server": "passport.suning.com", "request": "POST /ids/needVerifyCode HTTP/1.1","server": "passport.sing.co","version":"1","timestamp":"2015-12-08T01:14:43.273Z","type":"B2C","center":"JSZC","system":"WAF","clientip":"192.168.61.4","host":"wafprdweb03","path":"/usr/local/logs/waf.error.log","redis":"192.168.24.46"}
  • get_json_object函数

当使用get_json_object函数时,则可以这么用:

select get_json_object(‘${hivevar:msg}’,’$.server’) from test;

返回:

passport.sing.com

其中,get_json_object函数第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;

  • json_tuple函数
    当使用json_tuple对象时,可以显著提高效率,一次获取多个对象并且可以被组合使用,写法如下:

select a.* from test lateral view json_tuple(‘${hivevar:msg}’,’server’,’host’) a as f1,f2;

返回:

passport.sing.com wafprdweb03

其中,需要使用lateral view 视图方法来写,不需要加$标示符读取对象,获取的f1,f2对象可用于array()或map()等函数使用

  • 另附:parse_url函数使用案例

parse_url(‘http://facebook.com/path/p1.php?query=1‘, ‘HOST’)返回’facebook.com’ ,
parse_url(‘http://facebook.com/path/p1.php?query=1‘, ‘PATH’)返回’/path/p1.php’ ,
parse_url(‘http://facebook.com/path/p1.php?query=1‘, ‘QUERY’)返回’query=1’,
或,可以指定key来返回特定参数,key的格式是QUERY:,
例如:QUERY:k1
parse_url(‘http://facebook.com/path/p1.php?query=1#Ref‘, ‘REF’)返回’Ref’
parse_url(‘http://facebook.com/path/p1.php?query=1#Ref‘, ‘PROTOCOL’)返回’http’

1 0
原创粉丝点击