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

Я могу извлечь идентификатор, имя и валидацию полей с помощью 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 attributes (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 

 Смежные вопросы

  • Нет связанных вопросов^_^