Arrays 如何根据ApacheHive中的键从json列表中提取json对象
我需要根据id字段值从下面的json列表中提取json,并将键显示为列Arrays 如何根据ApacheHive中的键从json列表中提取json对象,arrays,json,hive,hiveql,Arrays,Json,Hive,Hiveql,我需要根据id字段值从下面的json列表中提取json,并将键显示为列 [{"id":"123","name":"ABC","age":"18","subject":"Maths","score":20}, {"id":"124","name":"ABCD","age":"20","subject":"History","score":40}, {"id":"213","name":"XYZ","age":"28","subject":"Economics","score":35}] 我希望显
[{"id":"123","name":"ABC","age":"18","subject":"Maths","score":20},
{"id":"124","name":"ABCD","age":"20","subject":"History","score":40},
{"id":"213","name":"XYZ","age":"28","subject":"Economics","score":35}]
我希望显示基于key:123的最终json,如下所示
id|name|age|subject|score
123|ABC|18|Maths|20
请建议在配置单元中实现上述内容的方法。分解数组并使用get\u json\u对象提取json元素
# Header 1 #
Writing a function to get the index of the object by mapping it with the key
#Code#
let obj = [{"id":"123","name":"ABC","age":"18","subject":"Maths","score":20},{"id":"124","name":"ABCD","age":"20","subject":"History","score":40},{"id":"213","name":"XYZ","age":"28","subject":"Economics","score":35}]
function getColoumn(_key){
for(i in obj){
if(obj[i].id ===_key){
return obj[i];
}
}
}
getColoumn("123")
例如:
with your_data as (
select stack(1, array(
'{"id":"123","name":"ABC","age":"18","subject":"Maths","score":20}',
'{"id":"124","name":"ABCD","age":"20","subject":"History","score":40}',
'{"id":"213","name":"XYZ","age":"28","subject":"Economics","score":35}')
) as json_array
)
select --t.json_array as initial_data,
--a.json,
get_json_object(a.json, '$.id') id,
get_json_object(a.json, '$.name') name,
get_json_object(a.json, '$.age') age,
get_json_object(a.json, '$.subject') subject,
get_json_object(a.json, '$.score') score
from your_data t
lateral view outer explode(json_array) a as json
where get_json_object(a.json, '$.id') = 123 ;
结果:
id name age subject score
123 ABC 18 Maths 20