前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hive 中 统计某字段json数组中每个value出现的次数

hive 中 统计某字段json数组中每个value出现的次数

作者头像
Meet相识
发布2018-09-12 16:49:14
10.6K1
发布2018-09-12 16:49:14
举报
文章被收录于专栏:技术专栏

有这样一个json串

代码语言:javascript
复制
{"viewdata":[{"city_id":"59","position_id":0,"qd_title":"网红打卡地","list_id":35},{"city_id":"59","position_id":1,"qd_title":"看青山游绿水","list_id":37}]}

需要将json数组里的qd_title都提取出来转换成hive中的array数组。下面介绍两种方法

法一get_json_object+正则

1.首先可以使用get_json_object函数,提取出数组,但是这个返回的是一个字符串

代码语言:javascript
复制
select get_json_object('{"viewdata":[{"city_id":"39","position_id":0,"qd_title":"网红打卡地","list_id":135},
{"city_id":"39","position_id":1,"qd_title":"看青山游绿水","list_id":327}]}',
'$.viewdata[*].qd_title')

-- 返回,注意这不是一个array数组,只是一个字符串
["网红打卡地","看青山游绿水"]

2.将字符串中的[ ] "都去掉,形成一个,分割的字符串

代码语言:javascript
复制
regexp_replace('${刚刚得到的字符串}','(\\[|\\]|")','')

3.使用字符串分割函数split

代码语言:javascript
复制
select 
split(
   regexp_replace(
      get_json_object('{"viewdata":[{"city_id":"39","position_id":0,"qd_title":"网红打      卡地","list_id":135},
      {"city_id":"39","position_id":1,"qd_title":"看青山游绿水","list_id":327}]}',
      '$.viewdata[*].qd_title'),
   '(\\[|\\]|")',''),
",")

4.整体使用LATERAL VIEW 打平数组进行统计

代码语言:javascript
复制
SELECT qdtitle,COUNT(DISTINCT uuid) uv
  FROM ba_travel.bas_log_sdk_mt_mv a LATERAL VIEW explode(split(regexp_replace(get_json_object(a.event_attribute['custom'],'$.viewdata[*].qd_title'),'(\\[|\\]|")',''),",")) b AS qdtitle
 GROUP BY qdtitle

法二 正则匹配

1.观察json数组中每一个元素都是由{}保卫,由,分割,所以可以使用``},```对字符串进行拆分

代码语言:javascript
复制
-- event_attribute['custom'] 对应的就是上面的json字符串
split(event_attribute['custom'],'"}')

2.对分割出来的每一个元素进行正则匹配,提取出qd_title对应的value

代码语言:javascript
复制
-- qd_titles 为上面分割出数组的一个元素
regexp_extract(qd_titles,'qd_title...([^"]+)',1)

3.整体使用later view 将数组打平

代码语言:javascript
复制
SELECT regexp_extract(qd_titles,'qd_title...([^"]+)',1) title,
       COUNT(DISTINCT uuid) uv
  FROM ba_travel.bas_log_sdk_mt_mv a LATERAL VIEW  explode(split(event_attribute['custom'],'"}')) b as qd_titles 
 GROUP BY regexp_extract(qd_titles,'qd_title...([^"]+)',1)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 法一get_json_object+正则
  • 法二 正则匹配
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档