2017-02-10 2 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