1. 程式人生 > >HIVE中get_json_object與json_tuple使用處理json格式資料

HIVE中get_json_object與json_tuple使用處理json格式資料

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"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 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()等函式使用