我们可以将包含 Json 的列展平为 Hive table 中的值吗?

Can we flatten column which contain Json as value in Hive table?

我有一个配置单元列 'events' 和 Json values.How 我可以将这个 Json 展平以创建一个配置单元 table 并将列作为关键字段Json.Is 甚至可能吗? ex- 我需要配置单元 table 列作为事件,start_date,id,具有相应值的详细信息。

|活动 |

|[{"start_date":20201230,"id":"3245ret","details":"Imp"},{"start_date":20201228,"id": “3245rtr”,“详细信息”:“NoImp”}] |

|[{"start_date":20191230,"id":"3245ret","details":"vImp"},{"start_date":20191228,"id": "3245rwer","详细信息":"NoImp"}]|

演示:

select events, 
get_json_object(element,'$.id') as id,
get_json_object(element,'$.start_date') as start_date,
get_json_object(element,'$.details') as details
from
(
select '[{"start_date":20201230,"id":"3245ret","details":"Imp"},{"start_date":20201228,"id":"3245rtr","details":"NoImp"}]' as events
union all 
select '[{"start_date":20191230,"id":"3245ret","details":"vImp"},{"start_date":20191228,"id":"3245rwer","details":"NoImp"}]' as events
) s lateral view outer explode (split(regexp_replace(events, '\[|\]',''),'(?<=\}),(?=\{)')) e as element

初始字符串在大括号之间用逗号分隔,(),数组在横向视图中展开,JSON 个对象使用 get_json_object

解析

结果:

 events                                                                                                             id       start_date details
[{"start_date":20201230,"id":"3245ret","details":"Imp"},{"start_date":20201228,"id":"3245rtr","details":"NoImp"}]   3245ret  20201230  Imp
[{"start_date":20201230,"id":"3245ret","details":"Imp"},{"start_date":20201228,"id":"3245rtr","details":"NoImp"}]   3245rtr  20201228  NoImp
[{"start_date":20191230,"id":"3245ret","details":"vImp"},{"start_date":20191228,"id":"3245rwer","details":"NoImp"}] 3245ret  20191230  vImp
[{"start_date":20191230,"id":"3245ret","details":"vImp"},{"start_date":20191228,"id":"3245rwer","details":"NoImp"}] 3245rwer 20191228  NoImp