在做數據測試時,會遇到數據庫表里字段類型為json 的情況,而我們可能只關注該字段中的各別內容的信息,如下
content {"測試內容1":14,"測試內容2":1,"測試內容3":2}
比如我們只需要
測試內容2、測試內容3 對應的 value 值。
方式一:get_json_object()
select get_json_object(content,'$.測試內容2') as Testcontent from testTableName; -- 執行結果為 1
select get_json_object(content,'$.測試內容2') as Testcontent2, get_json_object(content,'$.測試內容3') as Testcontent3 from testTableName; -- 執行結果為 1、2
get_json_object函數第一個參數填寫json對象變量,第二個參數使用$表示json變量標識,然后用 . 或 [] 讀取對象或數組;
方式二:json_tuple()
當使用json_tuple對象時,可以顯著提高效率,一次獲取多個對象並且可以被組合使用,寫法如下:
其中,需要使用lateral view 視圖方法來寫,不需要加$標示符讀取對象
select a.timestamp, b.* from log a lateral view json_tuple(a.appevent, 'eventid', 'eventname') b as f1, f2; -- 其中 b.* 代表的就是 f1,f2,也就是 appevent.eventid 、appevent.eventname
get_json_object與json_tuple在解析埋點數據時會經常用到,而且比較有效且很簡單