简单说明下,最近工作中需要把json字符串解析,并把json中数组拆成多行。最开始做这个工作的同事使用自定义udtf函数解析、拆分多行,我接手过来没有继续使用这种方式,使用hive自带函数get_json_object和json_tuple可以完成解析工作,第二步将解析后的json数组使用lateral view explode实现拆分多行。
1、首先将需要的json数组通过get_json_object(json_str,'key1.key2...')获取我们想要数据和格式,以下为关键代码
-- 使用到四个反斜杠转意是我的代码是通过shell提交的,在测试发现使用两个反斜杠或者不用反斜杠时,regexp_replace会抛出异常,在map阶段就失败,在hue中执行也要使用两个反斜杠(四个也可以)。
regexp_replace(
regexp_extract(
get_json_object(info,'$.data.base_info.employees') -- 获取data数组,格式[{json},{json}]
,'^\\\\[(.+)\\\\]$'
,1
) -- 删除字符串前后的[],格式{json},{json}
,'\\\\}\\\\,\\\\{'
, '\\\\}\\\\|\\\\|\\\\{'
) as employees -- 将josn字符串中的分隔符代换成||,格式{json}||{json}
2、使用explode函数和分割符将字符串拆分成多行json
3、最后使用get_json_object(json,‘$.key’)获取需要的数据