hive 处理json数据总体来说有两个方向的路走

1、将json以字符串的方式整个入Hive表,然后通过使用UDF函数解析已经导入到hive中的数据,比如使用LATERAL VIEW json_tuple的方法,获取所需要的列名。

2、在导入之前将json拆成各个字段,导入Hive表的数据是已经解析过得。这将需要使用第三方的SerDe。

测试数据为新浪微博测试公开数据

该数据采用json格式存储,
id代表当前用户微博的id,
ids代表当前微博用户关注其他微博用户的id列表,
total_number是关注微博用户的总量。

{"id": 1701439105,"ids": [2154137571,3889177061,1496915057,……,1663973284],"total_number": 493}

第一种:

导入数据

CREATE TABLE IF NOT EXISTS tmp_json_test (
json string
)
STORED AS textfile ; load data local inpath '/opt/datas/weibotest.json' overwrite into table tmp_json_test;

解析数据:

select get_json_object(t.json,'$.id'), get_json_object(t.json,'$.total_number') from tmp_json_test t ; 

select t2.* from tmp_json_test t1 lateral view json_tuple(t1.json, 'id', 'total_number') t2 as c1, c2;

 方法一使用函数get_json_object  , 方法二使用函数 json_tuple

第二种:

第二种方式相比第一种更灵活,更通用。重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行。

1. 下载Jar
使用之前先下载jar:

http://www.congiu.net/hive-json-serde/
如果要想在Hive中使用JsonSerde,需要把jar添加到hive类路径中:

add jar json-serde-1.3.7-jar-with-dependencies.jar;

导入数据

CREATE TABLE tmp_json_array (
id string,
ids array<string>,
`total_number` int)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE; LOAD DATA LOCAL INPATH '/opt/datas/weibotest.json' OVERWRITE INTO TABLE tmp_json_array;

倒入之后就可以随便使用了

select * from tmp_json_array where array_contains(ids,'') or array_contains(ids,'');

需要注意的是当你的数据中包含有不符合json规范的行时,运行查询会报异常

测试可以增加配置用以跳过错误数据

ALTER TABLE weibo_json SET SERDEPROPERTIES ( "ignore.malformed.json" = "true");

在运行查询不会报错,但是坏数据记录将变为NULL。

最后需要提醒的是当你的json数据中包含hive关键字时,导入的数据会有问题,此时 SerDe可以使用SerDe属性将hive列映射到名称不同的属性

如果ids是hive关键字的话,更改建表语句如下:

CREATE TABLE tmp_json_array (
id string,
ids_alias array<string>,
`total_number` int)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("mapping.ids_alias"="ids")
STORED AS TEXTFILE;

hive 存储,解析,处理json数据的更多相关文章

  1. Gson解析复杂Json数据

    背景                                                                   json是一种数据格式,便于数据传输.存储.交换. gson是 ...

  2. 解析天气预报JSON数据

    解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...

  3. mormot解析天气预报JSON数据

    mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...

  4. Unity3d-XML文件数据解析&amp;JSON数据解析

    1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...

  5. 模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

    需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三 ...

  6. 解析网络json数据,模拟美团界面显示。

    <?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...

  7. Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据

    版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...

  8. C# JToken类的使用,实现解析动态json数据、遍历、查找

    在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用. 为了解决动态解析js ...

  9. java android使用Gson解析泛型json数据

    那就直接开始吧. 在我们获取服务器返回的json数据有时候会出现这种情况,比如: {"body":{"attrName":"feed",&q ...

  10. ios -本地存储和查看json数据

    1.代码创建json文件,并保存到本地   第一步.设置json文件的保存路径 NSString *filePath = [NSHomeDirectory() stringByAppendingStr ...

随机推荐

  1. MySQL 如何使用 PV 和 PVC?- 每天5分钟玩转 Docker 容器技术(154)

    本节演示如何为 MySQL 数据库提供持久化存储,步骤为: 创建 PV 和 PVC. 部署 MySQL. 向 MySQL 添加数据. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到 ...

  2. anaconda的使用

    1. 查看已安装的库 pip list conda list 其中,pip list 只能查看库,而 conda list 则可以查看库以及库的版本 2. 安装或更新库 pip install scr ...

  3. FTP下载文件

    linux命令方式下载 step1: >>ftp ip port 根据提示输入用户名 根据提示输入用户密码 >>cd 目录(重要:一定要进入文件所在的目录) >>g ...

  4. jQuery系列 第四章 jQuery框架的选择器

    第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...

  5. oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)

    1.   简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计 ...

  6. hosts管理工具1.0发布了。。。。

    hosts管理工具1.0发布了.... 可以快速管理hosts文件了,再也不用打开系统盘,一个目录一个目录的查找了. 快速方便的修改host文件,一键保存. 可快速注释当前行,或者取消注释当前行,只需 ...

  7. servlet之隐藏域

    隐藏域的实现, 商品对象 package app02b;public class Customer {        private int id;    private String name;   ...

  8. ML笔记:Classification: Probabilistic Generative Model

    用回归来做分类: 远大于1的点对于回归来说就是个error, 为了让这些点更接近1,会得到紫色线. 可见,回归中定义模型好坏的方式不适用于分类中.---回归会惩罚那些太过正确的点 如何计算未出现在训练 ...

  9. 机器学习技法:14 Radial Basis Function Network

    Roadmap RBF Network Hypothesis RBF Network Learning k-Means Algorithm k-Means and RBF Network in Act ...

  10. [测试题]wows

    Description 山山最近在玩一款游戏叫战舰世界(steam 游戏太少了),他被大舰巨炮的魅力折服,于是山山开了一局游戏,这次发现目标是一艘战列舰新墨西哥级,舰桥很高,原本应该打在目标身后的圆形 ...