大数据Hive JSON数据处理

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
简介: 大数据Hive JSON数据处理
+关注继续查看

1 应用场景

JSON数据格式是数据存储及数据处理中最常见的结构化数据格式之一,很多场景下公司都会将数据以JSON格式存储在HDFS中,当构建数据仓库时,需要对JSON格式的数据进行处理和分析,那么就需要在Hive中对JSON格式的数据进行解析读取。

例如,当前我们JSON格式的数据如下:

c35708bbe735465eaa466d8bd4d88987.png

每条数据都以JSON形式存在,每条数据中都包含4个字段,分别为设备名称【device】、设备类型【deviceType】、信号强度【signal】和信号发送时间【time】,现在我们需要将这四个字段解析出来,在Hive表中以每一列的形式存储,最终得到以下Hive表:image

2 处理方式

Hive中为了实现JSON格式的数据解析,提供了两种解析JSON数据的方式,在实际工作场景下,可以根据不同数据,不同的需求来选择合适的方式对JSON格式数据进行处理。


➢ 方式一:使用JSON函数进行处理

Hive中提供了两个专门用于解析JSON字符串的函数:get_json_object、json_tuple,这两个函数都可以实现将JSON数据中的每个字段独立解析出来,构建成表。


➢ 方式二:使用Hive内置的JSON Serde加载数据

Hive中除了提供JSON的解析函数以外,还提供了一种专门用于加载JSON文件的Serde来实现对JSON文件中数据的解析,在创建表时指定Serde,加载文件到表中,会自动解析为对应的表格式。


3 JSON函数:get_json_object

3.1 功能

用于解析JSON字符串,可以从JSON字符串中返回指定的某个对象列的值


3.2 语法

➢ 语法

get_json_object(json_txt, path) - Extract a json object from path

➢ 参数

➢ 第一个参数:指定要解析的JSON字符串

➢ 第二个参数:指定要返回的字段,通过$.columnName的方式来指定path

➢ 特点:每次只能返回JSON对象中一列的值


3.3 使用

➢ 创建表

--切换数据库
use db_function;

--创建表
create table tb_json_test1 (
  json string
);

➢ 加载数据

–加载数据

load data local inpath ‘/export/data/device.json’ into table tb_json_test1;

➢ 查询数据

select * from tb_json_test1;

image

➢ 获取设备名称字段

select
       json,
       get_json_object(json,"$.device") as device
from tb_json_test1;

image

➢ 获取设备名称及信号强度字段

select
       --获取设备名称
       get_json_object(json,"$.device") as device,
       --获取设备信号强度
       get_json_object(json,"$.signal") as signal
from tb_json_test1;

image

➢ 实现需求

select
       --获取设备名称
       get_json_object(json,"$.device") as device,
       --获取设备类型
         get_json_object(json,"$.deviceType") as deviceType,
       --获取设备信号强度
       get_json_object(json,"$.signal") as signal,
       --获取时间
       get_json_object(json,"$.time") as stime
from tb_json_test1;

image

4 JSON函数:json_tuple

4.1 功能

用于实现JSON字符串的解析,可以通过指定多个参数来解析JSON返回多列的值

4.2 语法

➢ 语法

json_tuple(jsonStr, p1, p2, ..., pn) 
like get_json_object, but it takes multiple names and return a tuple

➢ 参数

➢ 第一个参数:指定要解析的JSON字符串

➢ 第二个参数:指定要返回的第1个字段

➢……

➢ 第N+1个参数:指定要返回的第N个字段

➢ 特点

➢ 功能类似于get_json_object,但是可以调用一次返回多列的值。属于UDTF类型函数

➢ 返回的每一列都是字符串类型

➢ 一般搭配lateral view使用

4.3 使用

➢ 获取设备名称及信号强度字段

select
       --返回设备名称及信号强度
       json_tuple(json,"device","signal") as (device,signal)
from tb_json_test1;

image

➢ 实现需求,单独使用

select

–解析所有字段

json_tuple(json,“device”,“deviceType”,“signal”,“time”) as (device,deviceType,signal,stime)

from tb_json_test1;

image

➢ 实现需求,搭配侧视图

select

json,device,deviceType,signal,stime

from tb_json_test1

lateral view json_tuple(json,“device”,“deviceType”,“signal”,“time”) b

as device,deviceType,signal,stime;

5 JSONSerde

5.1 功能

上述解析JSON的过程中是将数据作为一个JSON字符串加载到表中,再通过JSON解析函数对JSON字符串进行解析,灵活性比较高,但是对于如果整个文件就是一个JSON文件,在使用起来就相对比较麻烦。Hive中为了简化对于JSON文件的处理,内置了一种专门用于解析JSON文件的Serde解析器,在创建表时,只要指定使用JSONSerde解析表的文件,就会自动将JSON文件中的每一列进行解析。

5.2 使用

➢ 创建表

--切换数据库
use db_function;

--创建表
create table tb_json_test2 (
   device string,
   deviceType string,
   signal double,
   `time` string
 )
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;

➢ 加载数据

load data local inpath ‘/export/data/device.json’ into table tb_json_test2;

➢ 查询数据

select * from tb_json_test2;

image

6 总结

不论是Hive中的JSON函数还是自带的JSONSerde,都可以实现对于JSON数据的解析,工作中一般根据数据格式以及对应的需求来实现解析。如果数据中每一行只有个别字段是JSON格式字符串,就可以使用JSON函数来实现处理,但是如果数据加载的文件整体就是JSON文件,每一行数据就是一个JSON数据,那么建议直接使用JSONSerde来实现处理最为方便。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
11天前
|
JSON 前端开发 数据处理
Echarts请求不同格式的json数据处理
Echarts请求不同格式的json数据处理
10 0
|
29天前
|
存储 JSON JavaScript
常用的"小脚本"-json数据处理
常用的"小脚本"-json数据处理
26 0
|
2月前
|
JSON Go 数据处理
JSON数据处理:匿名结构体助你起飞
JSON数据处理:匿名结构体助你起飞
19 0
|
2月前
|
SQL 存储 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
38 0
|
2月前
|
SQL 分布式计算 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
31 0
|
2月前
|
SQL Java 大数据
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
38 1
|
2月前
|
SQL 资源调度 大数据
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?
|
2月前
|
SQL Java 大数据
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制 2
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制
|
2月前
|
SQL 前端开发 Java
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制 1
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制
|
2月前
|
SQL 分布式计算 资源调度
大数据问题排查系列-大数据集群开启 kerberos 认证后 HIVE 作业执行失败
大数据问题排查系列-大数据集群开启 kerberos 认证后 HIVE 作业执行失败
推荐文章
更多