应用场景:使用Hive对日志信息进行查询分解,log里面记录的是json形式的数据:

{"logid":"5d40e1af-19f7-4aad-af8f-c7247e322e5c","souc":"4","devi":"OPPO R7sm","sys":"22,5.1.1","dname":"Dalvik/2.1.0 (Linux; U;
Android 5.1.1; OPPO R7sm Build/LMY47V)","chan":"canary","vers":"638.1","mac":"dc:6d:cd:16:46:0f","imei":"869410022554506","ifa":"","city_id":"384",
"reso":"1800*1080","euid":"a341c57d6abcdd969b6dc4c7a564a15f","dpi":"3.0","host":"192.168.1.212:80","ip":"223.100.138.62","uid":"9587355",
"qtype":"view_caipu_detail","qtype_sub":"","obj":"861920","uri":"recipe/detail","qnum":"1","refer":"","lat":"39.68861","lon":"122.978162",
"srctype":"2800","agentid":"2066b417879f467164fd1fb91b9d04c0",
"ext":"{\"query\":{\"kw\":\"培根披萨\",\"src\":\"2801\",\"idx\":\"3\",\"type\":\"13\",\"id\":\"861920\"}}","page_num":"","android_id":"","pseudo_id":""}

在这部分日志里面,对于:

"ext":"{\"query\":{\"kw\":\"培根披萨\",\"src\":\"2801\",\"idx\":\"3\",\"type\":\"13\",\"id\":\"861920\"}}","

部分,是json里面又包含了2重json。

接下来,我们使用Hive来取得kw、src、idx、type等信息:

写法一:

select tmp.kw,tmp.src,tmp.idx,count(*) as num
from (select get_json_object(tt.query,'$.kw') as kw,get_json_object(tt.query,'$.src') as src,get_json_object(tt.query,'$.idx') as idx from (select get_json_object(t.ext,'$.query') as query from (select req["ext"] as extfrom dh_server_log where p_day=20170213 and req["qtype"]='view_caipu_detail' and req["ext"] <> '' ) t ) tt
) tmp group by tmp.kw,tmp.src,tmp.idx 

这种写法使用了Hive内置函数get_json_object,而且使用了多层次来分解,可以实现对json的分解。

写法二:

select json_tuple(get_json_object(req["ext"],"$.query"),"kw","id","idx","type","src")
from dh_server_log where p_day=20170213 and req["qtype"]='view_caipu_detail' and req["ext"] <> ''
limit 20

这种写法使用了json_tuple函数配合get_json_object来取得json里的数据,取得了''query'':'' ''这第二层json的数据,但是如果对于"kw","id","idx","type","src"这个几个字段只需要其中几个的话,则需要使用lateral view来处理了:

select nt.a,count(nt.a) as num from (
select req from dh_server_log where p_day=20170213 and req["qtype"]='view_caipu_detail' and req["ext"] <> '' limit 10
) dsl lateral view json_tuple(get_json_object(req["ext"],"$.query"),"kw","id","idx","type","src") nt as a,b,c,d,e 

Hive中对json处理相关推荐

  1. hive处理json数据_(转)hive中解析json数组

    hive中解析一般的json是很容易的,get_json_object就可以了. 但如果字段是json数组,比如 [{"bssid":"6C:59:40:21:05:C4 ...

  2. Hive中解析Json字段、json日志分析所用到的嵌套json解析

    首先在百度搜索,json格式解析,将这段话变个格式看起来舒服. 然后,通过通过嵌套使用json函数解决.大概就是将内层的json字段当作一个整体,然后先将这个外层作为解析.在通过子查询使用方法,在外套 ...

  3. hive中如何读取数组_hive解析json嵌套数组

    hive怎么统计json中某一项的内容 Hive提供json抽取函数get_json_object,根据json_path来获取你所抽取的项 get_json_object函数第一个参数填写json对 ...

  4. Spark SQL来读取现有Hive中的数据

    Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如Parquet.Hive.Json等). Spark SQL的其中一个分支就是Spa ...

  5. hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全

    关系运算 1.等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive>select 1 from lxw_du ...

  6. 通过Flume简单实现Kafka与Hive对接(Json格式)

    将以下存储在kafka的topic中的JSON格式字符串,对接存储到Hive的表中 {"id":1,"name":"小李"} {" ...

  7. hive中groupby优化_Hive 查询优化总结

    一.join优化 Join查找操作的基本原则:应该将条目少的表/子查询放在Join操作符的左边.原因是在Join操作的Reduce阶段,位于Join操作符左边的表的内容会被加载进内存,将条目少的表放在 ...

  8. azure机器学习_如何在Azure机器学习中使用JSON数据

    azure机器学习 Azure Machine Learning (also known as Azure ML) is cloud-based machine learning solution o ...

  9. hive中的lateral view的解析

    hive中的lateral view的解析 用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身 ...

最新文章

  1. html按钮颜色属性值,HTML button formmethod 属性 - HTML 颜色参考手册 - 自强学堂
  2. 使命召唤5该服务器没有响应,使命召唤5突然就建不了服务器了~~~求高人帮忙~~...
  3. vim尾部空格标红显示插件
  4. 点击模型:达观数据提升算法精度的利器
  5. P2304 [NOI2015] 小园丁与老司机(网络流/上下界网络流)
  6. 《七哥说道》第五章:入职惨做苦力,画饼一望无际
  7. iphoneX样式兼容
  8. 【测试】用例设计思路-输入框类型功能
  9. 1.22 OSS旧IP下线公告
  10. WebRTC架构和协议栈-zz
  11. 从蒙到入门——JavaEE完整体系架构
  12. oracle round 没有0,oracle round函数的使用方法
  13. 博途1200/1500PLC斜坡指令RAMP(带暂停功能)
  14. 全国计算机三级网络技术感悟,这几天准备计算机三级考试的感悟
  15. mysql alert on delete cascade_mysql-我的“ ON DELETE CASCADE”不起作用
  16. 关于类名前两个字大写,Spring引入不成功的问题。
  17. 电脑打开“我的电脑”、“资源管理器”很慢的解决办法。
  18. 软件工程辅助设计多周期处理器
  19. 鞋底php是什么材质,软底鞋是什么?软底鞋的鞋底是什么材质?
  20. LeetCode刷题分类

热门文章

  1. Unity2d 玩家发射子弹
  2. Luminar 2018 for Mac 1.2.0 照片编辑软件 中文破解版下载
  3. Python 反射机制之hasattr()、getattr()、setattr() 、delattr()函数
  4. vivoy9s怎么设置返回键_vivoy9s怎么设置双击亮屏 具体操作方法介绍
  5. 南阳《建筑业企业施工劳务资质备案申请表》填写说明
  6. CSDN等不及,终于开始动手自宫了
  7. 【Books系列】2022年:《慢慢变富》读书笔记
  8. Java_io体系之PipedInputStream、PipedOutputStream简介、走进源码及示例——06
  9. PHP调用mfc,MFC下调用Office打印预览
  10. python 爬取搞笑视频_爬取搞笑视频