Hive数据仓库Hive在简书

Hive解析json数组

2019-11-28  本文已影响0人  风筝flying

在使用Hive搭建数据仓库,处理数据时,同传统数仓的结构化数据不同,我们经常会遇到一些非结构化的数据,json格式的字符串就是常见的一种类型。
对于简单的json字符串,Hive提供了get_json_object函数用来提取字符串中的相应信息,但如果遇到如下样式的json字符串数组

[{"disttype":"直线","placeid":'abcdef',"place":"距景点A直线xxx米 · xx山风景区外","motivateinfo":"","labels":"游玩|休闲|"},
{"disttype":"直线","placeid":'hijklmn',"place":"距景点A直线xxy米 · xx山风景区外","motivateinfo":"","labels":"低价|亲子|"}]

此时就需要explode函数来处理这种情况;
下面先上代码,然后再分步讲解:

select m.d,j.info,get_json_object(j.info,'$.placeid') hotelid,
       get_json_object(j.info,'$.labels') tag
  from (select d,split(regexp_replace(regexp_extract(
                                              '[{"disttype":"直线","placeid":'abcdef',"place":"距景点A直线xxx米 · xx山风景区外","motivateinfo":"","labels":"游玩|休闲|"},
{"disttype":"直线","placeid":'hijklmn',"place":"距景点A直线xxy米 · xx山风景区外","motivateinfo":"","labels":"低价|亲子|"}]',
                             '\\}\\,\\{','\\}\\|\\|\\{'),
                    '\\|\\|') info_array
          from table) m  
 lateral view explode(info_array) j as info;

说明:

上一篇下一篇

猜你喜欢

热点阅读