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

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA