2017-02-10 62 views
1

我有一個json列day_data它有json格式的數據。如何使用Hive實現預期的輸出?配置單元中的嵌套json

輸入:

{"_id":"1","name":"abc","attribs":[{"minutes":0,"name":"sedentary"},{"minutes":0,"name":"lightly"},{"minutes":0,"name":"fairly"},{"minutes":28,"name":"very"}],"validated":true}

輸出: id name attrib_minutes attrib_name validated 1 abc 0 sedentary true 1 abc 0 lightly true 1 abc 0 fairly true 1 abc 28 very true

我能夠提取的ID,名稱和驗證領域使用get_json_object命令, select get_json_object(day_data,'$._id') as id, get_json_object(day_data,'$.name') as name, get_json_object(day_data,'$.validated') as validated from temp_table;

我如何提取嵌套json屬性(attrib_minutes和attrib_name)?

回答

1
select j.id 
     ,j.name 
     ,get_json_object (day_data,concat('$.attribs[',e.i,'].minutes')) as attrib_minutes 
     ,get_json_object (day_data,concat('$.attribs[',e.i,'].name'))  as attrib_name 
     ,j.validated 

from     temp_table t 
     lateral view json_tuple (day_data,'_id','name','validated') j as id,name,validated 
     lateral view posexplode (split(get_json_object (day_data,'$.attribs[*].name'),'","')) e as i,x 
; 

j.id j.name attrib_minutes attrib_name j.validated 
1 abc 0 sedentary true 
1 abc 0 lightly true 
1 abc 0 fairly true 
1 abc 28 very true