json导入Hive,并整理成大宽表

2024-05-15 01:58

本文主要是介绍json导入Hive,并整理成大宽表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1 创建表
    • 2 导入Hive
    • 3 json_tuple查询数据
    • 4 整理成大宽表

首先我们有如下图的json数据,我们需要把这份数据先导入到Hive,然后在整理成结构化的数据,这样我们就可以根据需求查询对应的数据了
在这里插入图片描述

1 创建表

首先先要创建一个表

create table rating(json string);

2 导入Hive

然后把数据导入到hive中

load data local inpath '/home/hadoopadmin/rating.json' into table rating;

查看数据,已经导入到hive中
在这里插入图片描述

3 json_tuple查询数据

但是上面的数据格式不是我们想要的,我们想要的数据格式为下面这种结构:

movieratetimeuserid
119359783007601

hive中有个json_tuple函数,官方语法:

json_tuple(string jsonStr,string k1,...,string kn)
#jsonStr:一个json字符串
#k1...kn:json字符串中的key

我们举个例子:

select json_tuple(
'{"movie":"1193","rate":"5","time":"978300760","userid":"1"}',
'movie','rate','time','userid');
OK
#结果
c0      c1      c2      c3
1193    5       978300760       1

上面结果中别名我们需要改下

select json_tuple(
'{"movie":"1193","rate":"5","time":"978300760","userid":"1"}',
'movie','rate','time','userid') as (movie, rate, time, user_id);
OK
#结果
movie   rate    time    user_id
1193    5       978300760       1

那么下面,我们只要把上面的json字符串改成表的字段json,然后从rating表中查询即可

select 
json_tuple(json,'movie','rate','time','userid') as (movie, rate, time, user_id) 
from rating limit 10 ;

如下图,我们通过json_tuple函数,把json数据结构,改成了结构化数据格式
在这里插入图片描述

4 整理成大宽表

上面的数据正常不会满足我们的需求,假如我们需要查询某个时间的信息,还需要其他的一些信心,例如下面这个格式,也就是常说的大宽表:

movieratetimeuseridyearmonthdayhourminutets
1193597830076012011116122001-01-01 06:12:40

目前我们有的参数是一个字符串的time,我们先要把time字符串转换成整数,然后再把整数转换成时间格式,这两个转换用到下面两个函数:
函数官网:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

#把表达式转成想要的类型
cast(expr as <type>)
#把bigint的时间类型,转成想要的格式
from_unixtime(bigint unixtime[, string format])

针对上面2个函数,我们举个例子:

select cast('978300760' as bigint);

在这里插入图片描述

select from_unixtime(cast('978300760' as bigint));

在这里插入图片描述
后面我们只需要,把第三步的查询结果作为自查询,然后用上面2个函数去解析time字段就ok了

select movie,rate,time,user_id,
from_unixtime(cast(time as bigint)) as ts
from
(
select 
json_tuple(json,'movie','rate','time','userid') as (movie, rate, time, user_id) 
from rating  
) t
limit 10;

在这里插入图片描述
再通过下面这些函数,获取ts对应的年、月、日、时、分,就完成了大宽表
在这里插入图片描述

select movie,rate,time,user_id,
from_unixtime(cast(time as bigint)) as ts,
year(from_unixtime(cast(time as bigint))) as year,
month(from_unixtime(cast(time as bigint))) as month,
day(from_unixtime(cast(time as bigint))) as day,
hour(from_unixtime(cast(time as bigint))) as hour,
minute(from_unixtime(cast(time as bigint))) as minute
from
(
select 
json_tuple(json,'movie','rate','time','userid') as (movie, rate, time, user_id) 
from rating  
) t
limit 10;

如下图,查询出我们想要的大宽表了
在这里插入图片描述
但是只是查询出来还不行,我们不能每次要查一个需求的时候,我就用一下上面那么一大坨sql,我们可以把查询出来的大宽表再生成一张表,然后针对这个表做一些业务的处理:

create table rating_width
as
select movie,rate,time,user_id,
from_unixtime(cast(time as bigint)) as ts,
year(from_unixtime(cast(time as bigint))) as year,
month(from_unixtime(cast(time as bigint))) as month,
day(from_unixtime(cast(time as bigint))) as day,
hour(from_unixtime(cast(time as bigint))) as hour,
minute(from_unixtime(cast(time as bigint))) as minute
from
(
select 
json_tuple(json,'movie','rate','time','userid') as (movie, rate, time, user_id) 
from rating  
) t;

生成大宽表之后,我们查询看一下:

select * from rating_width limit 10;

如下图,已经生成我们需要的大宽表了
在这里插入图片描述

这篇关于json导入Hive,并整理成大宽表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990485

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转