两种方式

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

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

测试数据

测试数据为新浪微博的评论数据,格式如下:

{"appCode": "weibo","dataType": "comment","pageToken": null,"data": [{"rating": null,"commenterId": "2235850235","tags": null,"commenterScreenName": "-快乐的猪头-","publishDateStr": "2017-05-22T02:27:52","publishDate": 1495420072,"likeCount": null,"commentCount": null,"source": "iPhone 6","url": null,"referId": "4110146290137390","content": "盲道上都是共享单车了,管一管吧","imageUrls": null,"id": "4110152040668671"},{"rating": null,"commenterId": "1457994444","tags": null,"commenterScreenName": "彳拓","publishDateStr": "2017-05-22T02:06:26","publishDate": 1495418786,"likeCount": null,"commentCount": null,"source": "iPhone 6 Plus","url": null,"referId": "4110146290137390","content": "如何界定那车是残疾人的?","imageUrls": null,"id": "4110146646971555"}]
}

该数据采用json格式存储。

第一种:

导入数据

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′),getjsonobject(t.json,′.id'), get_json_object(t.json,'.id′),getj​sono​bject(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不能跨越多行。

下载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 if not exists temp_db.test_json_weibo(
appCode string
,dateType string
,pageToken string
,data string
) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("ignore.malformed.json"="true"
)
STORED AS TEXTFILE;

load data local inpath ‘/home/hadoop/test_json_weibo.txt’ into table temp_db.test_json_weibo;

查数据

select * from temp_db.test_json_weibo limit 1;


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

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,
total_number int)
ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’
WITH SERDEPROPERTIES (“mapping.ids_alias”=“ids”)
STORED AS TEXTFILE;

Hive 处理 json 数据相关推荐

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

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

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

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

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

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

  4. Hive导入json文件

    现有一json文件,需要导入hive,如何操作? 比如json内容如下 {"uid":"1","uname":"gaoyuanyu ...

  5. 使用Spark SQL读取Hive上的数据

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

  6. 大数据笔记30—Hadoop基础篇13(Hive优化及数据倾斜)

    Hive优化及数据倾斜 知识点01:回顾 知识点02:目标 知识点03:Hive函数:多行转多列 知识点04:Hive函数:多行转单列 知识点05:Hive函数:多列转多行 知识点06:Hive函数: ...

  7. hive解析json

    -- json数据 {"OTHER_INFO":{"MOBILE_ADDR":"四川省内江市潘咱陛路1233号闷羞小区19单元484室",& ...

  8. 学会Hive解析Json数组

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

  9. hive之Json解析(普通Json和Json数组)

    一.数据准备 现准备原始json数据(test.json)如下: {"movie":"1193","rate":"5", ...

最新文章

  1. java 1e6,java-GeoPoint getLatitudeE6()返回-80000000,但getLong...
  2. pyqt与mysql例子_PyQt 连接MySql数据库,C++代码转Python3代码
  3. Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found
  4. 物联网通信技术 机械工业 课后习题总结
  5. SpaceCube v3.0下一代高性能处理器平台架构
  6. 程序员理想中的工作环境是什么样的?
  7. 用photoshop做电影胶片效果
  8. 单元格内容分列多行_excel拆分单元格内容 excel单元格拆分多行
  9. gem devise配置
  10. 网络爬虫-神器fiddler抓取app数据
  11. (亲测很实用)地理位置批量转经纬度,基于百度地图api
  12. python调用有道翻译_python 简单的调用有道翻译
  13. MP4文件批量转码成MP3
  14. 陌陌 ZAO 脸,一念成魔一念成佛
  15. 更改cognos upfront 的外观
  16. 【Please, upgrade your dependencies to the actual version of cor问题】
  17. OpenStack 运维 - 部署Nova组件 [T版]
  18. 小米10至尊纪念版配置参数
  19. 关于WIN10 VS2015下调试DirectX11 DEMO错误的解决方案
  20. 硅谷 AI 之王 Sam Altman : 如何通过创业取得成功 | How to Succeed with a Startup

热门文章

  1. 前端集成weex,你需要学习的objective-c基础
  2. Java CAS 和ABA问题
  3. android 4.0下访问主进程访问网络和开启另外另外的线程
  4. SQL Server 备份与恢复之八:还原数据库
  5. ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen'
  6. GIPS语音编解码器家族
  7. 参加 CSDN 2009 英雄大会有感(二)
  8. CSS性能优化:可以试一试内联CSS?
  9. Oracle/Mysql查看锁表与解锁表
  10. Primefaces Spring和Hibernate集成示例教程