美文网首页
hive将多行查询成一个json字符串

hive将多行查询成一个json字符串

作者: LearnBigData | 来源:发表于2019-07-18 17:35 被阅读0次

今天在用hive做一个离线统计的任务,既然是统计,那就是某个ID可能在某个维度有多个值,比如某个部门男女人数分别是多少。

部门ID 性别 人数
0001 0 1200
0001 1 600
002 0 200
002 1 30

统计出来的结果可能是类似于上述的结果格式,这样业务方没有办法对数据直接使用,因为业务方需要的直接的一条数据,直接是json格式的,类似于:
0001 {"0":"1200","1":"600"}
0002 {"0":"200","1":"30"}
也就是说一个ID就是一条记录,这样就方便直接使用,那hive怎么来实现呢?

1、统计结果格式数据

show1.png

2、转换处理
1)步骤1:将值转成带“:”的

select id,concat(concat('\"',sex,'\"'),':',concat('\"',count,'\"')) kv from result_sex limit 6;
show2.png

2)步骤2:根据ID做聚合

select id,sort_array(collect_set(kv)) gg
from (select id,concat(concat('\"',sex,'\"'),':',concat('\"',count,'\"')) kv from result_sex limit 6) x group by id;
show3.png

3)步骤3:将聚合的数据转成字符串

select id,concat_ws(',',sort_array(collect_set(kv))) gg
from (select id,concat(concat('\"',sex,'\"'),':',concat('\"',count,'\"')) kv from result_sex limit 9) x group by id;
show4.png

4)步骤4:添加json的花括号

select id,concat('{',concat_ws(',',sort_array(collect_set(kv))),'}') gg
from (select id,concat(concat('\"',sex,'\"'),':',concat('\"',count,'\"')) kv from result_sex limit 9) x group by id;
show5.png

这样我们就实现了我们的需求了。。

欢迎大家留言讨论

相关文章

  • hive将多行查询成一个json字符串

    今天在用hive做一个离线统计的任务,既然是统计,那就是某个ID可能在某个维度有多个值,比如某个部门男女人数分别是...

  • json

    json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JSON ...

  • json与python

    Python 对象编码成 JSON 字符串 json.dumps 用于将 Python 对象编码成 JSON 字符...

  • python json模块

    json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JS...

  • hive调优

    hive的查询注意事项以及优化总结 . Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的Map...

  • JSON

    1.json.dumps: 功能:将Python对象编码成json字符串使用方法:json.dumps(data)...

  • SQL-错题集锦

    多行转多列-字符串拼接 -字符串拼接 set hive.exec.mode.local.auto = true; ...

  • 在JavaScript中使用Json

    将json字符串转化为json对象: 将json对象转化为字符串

  • 这些JS常用的解析函数别再傻傻分不清了

    JSON.parse()方法:将一个有效的JSON字符串解析成JS对象 JSON 通常用于与服务端交换数据。在接收...

  • 2020-04-07Json

    JSON与字符串互换 JSON.parse()将字符串转换为JSON对象JSON.stringify()将JSON...

网友评论

      本文标题:hive将多行查询成一个json字符串

      本文链接:https://www.haomeiwen.com/subject/bcxrlctx.html