2017-02-10 6 views
1

json形式のデータを持つjson列day_dataがあります。 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}

出力:私はget_json_objectコマンドを使用して、ID、名前および検証フィールドを抽出することができる午前 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

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 
関連する問題