hive 存储,解析,处理json数据

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,‘2813165271‘) or array_contains(ids,‘1419789200‘);

需要注意的是当你的数据中包含有不符合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;

原文地址:https://www.cnblogs.com/qiaoyihang/p/8729368.html

时间: 2024-11-01 01:04:08

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

Java解析(读取)Json数据

以前看过书上说,XML是web service间传输信息的标准格式吧,就看了看XML.最近在做个网站,又说是有了JSON,第一回听说就看了看,总结总结一下. 1.JSON介绍 JSON比XML简单,主要体现在传输相同信息的情况下,文件的大小不同. JSON只用于传输信息,XML还可以用于配置文件的使用. JSON中的符号主要有: " , [ {: 2.JSON中的数组和对象 2.1数组(JSONArray) 数组用一对[],表示存放的是一般的数组数据. 如:["11",&qu

Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析

今天来复习一下数据存储方面的基础知识,Unity3d中常用的数据存储方式有Unity自带的PlayerPrefs, XML文档, Json文档,还有常用的轻量级数据库SQL, 涉及的琐碎知识非常多,在这里自己归纳总结一下,方便日后温故而知新. PlayerPrefs存储数据 PlayerPrefs的存储方式非常简单,但可用性不强,一般只用于调试过程存储少量数据,很少大范围使用 适用设备:Mac OSX, Linux, Windows,Web Players 存储机制:Key-Value (类似于

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

需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三方框架  点击下载 侧滑菜单的lib  点击下载 1 package com.lixu.testjsonall; 2 3 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 4 import com.jeremyfeinstein.slid

IOS中本地存储和查看json数据

1.代码创建json文件,并保存到本地 第一步.设置json文件的保存路径 NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/myJson.json"]; NSLog(@"%@",filePath); 第二步.准备存储数据 NSMutableArray *arr = [[NSMutableArray alloc]init]; //用来盛放数据的value NSDi

用JQuery解析获取JSON数据

JSON 是一种比较方便的数据形式,下面使用$.getJSON方法,实现获得JSON数据和解析,都挺方便简单的.从http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=? 这个地址得到JSON数据 并且分析里面的结构,生成图片和相关链接等: $(function(){ var url="http://api.flickr.co

Java解析复杂JSON数据的一种方法

1.需解析JSON数据: { "code": 0, "message": "success", "sid": "[email protected]", "data": { "result": { "age": { "age_type": "0", "child": "0.1452

Android解析服务器Json数据实例

Json数据信息如下: { "movies": [ { "movie": "Avengers", "year": 2012, "rating": 7.8, "duration": "141 min", "director": "Joss Whedon", "tagline": "A new age

C#解析多层Json数据

[事件回顾] 今天在做一个小项目的时候,想获取一下位置,IP地址,然后随便在网上找了一个api调用 https://apis.map.qq.com/ws/location/v1/ip 数据如下: 如果是用Python的话,很简单,请求API->得到Json->然后print(["result"]["ip"])就可以了,C#有点麻烦,用了多个方法来解决 前提是先引入 using Newtonsoft.Json.Linq;,或者 using Newtonso

JAVA如何解析多层json数据

1. 使用标准的Json对象,如org.json.JSONObject json = new org.json.JSONObject(yourJsonString);然后通过get(keyString)逐个解析 2. 构造一个类MyObject,根据你提出的问题,其中添加 String name,List<MyObject> child, 两个属性,增加getter setter 方法,通过com.google.gson.Gson进行解析.步骤如下: String jsonStr = &quo

iOS开发过程中,遇到解析的json数据为&lt;null&gt;,进行赋值时会导致崩溃,使用AFNetworking可以这样解决。

((AFJSONResponseSerializer *)manager.responseSerializer).removesKeysWithNullValues = YES;