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

摘要:
“Total_number”:导入数据CREATETABLEIFNOTEXISTStmp_json_test(jsonsring)STOREDAS文本文件;方法1使用函数get_json_Object,

 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规范的行时,运行查询会报异常

 hive 存储,解析,处理json数据第1张

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

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数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcovAndroid Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于stm32 HardFault_Handler 异常的处理 死机

在系统开发的时候,出现了HardFault_Handler硬件异常,也就是死机,尤其是对于调用了os的一系统,程序量大,检测堆栈溢出,以及数组溢出等,找了半天发现什么都没有的情况下,估计想死的心都有了。如果有些程序开始的时候一切没有问题,但是运行几个小时候,会发现死机了,搞个几天下来估计蛋都碎了一地吧。。。一般来说运行操作系统  是以下几个问题 1.开始的...

tcpip详解笔记(15) TCP协议连接过程

TCP是一个面向连接的协议,在发送数据之前,双方必须通过三次握手协议建立连接,而在终止连接的时候执行4次握手协议。 连接建立和终止 先看一下telnet连接服务器80端口的抓包:   上图由wireshark抓取,并显示了TCP状态图(注意:由于网络阻塞,发生了丢包现象,4是对2的重发,而5是对4的响应(同3相同))。 根据上图可以看到建立一个TCP连接的...

Vue vue-resource 请求数据

<template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> 首页组件 <button @click="getData()">请求数据</button> <hr&g...

MySQL常用操作笔记[转]

一、用户创建、权限、删除1、连接MySql操作连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车)终端输入mysql -h 127.0.0.1 -u root -p 然后输入密码。就可以连接到本地的MySql数据库了。 2、 创建用户:命令: CREATE USER 'us...

Robot Framework操作

Robot Framework 介绍 RobotFramework是一款基于python的开源自动化测试框架,遵守Apache License 2.0协议,在此协议下所有人都可以免费开发和使用。因为Robot Framework 是灵活和可扩展的,所以它很合适用于测试具有多种接口的复杂软件:用户接口,命令行,web service,编程接口等。RF提供很多...

SPI通信协议(非原创,转载他人,用于学习)

SPI通信协议:1、SPI主从模式;2、数据信号的相位与极性;3、数据帧的格式。 一、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的串行通信总线。 二、SPI优点支持全双工通信通信简单数据传输速率块 三、缺点没有指定的...