大数据---29. hive的常用函数(三) json解析

存储饿数据是json数据;

14.解析json数据
需求:有如下json格式的电影评分数据:

{“movie”:“1193”,“rate”:“5”,“timeStamp”:“978300760”,“uid”:“1”}
{“movie”:“661”,“rate”:“3”,“timeStamp”:“978302109”,“uid”:“1”}
{“movie”:“914”,“rate”:“3”,“timeStamp”:“978301968”,“uid”:“1”}
{“movie”:“3408”,“rate”:“4”,“timeStamp”:“978300275”,“uid”:“1”}
{“movie”:“2355”,“rate”:“5”,“timeStamp”:“978824291”,“uid”:“1”}
{“movie”:“1197”,“rate”:“3”,“timeStamp”:“978302268”,“uid”:“1”}

需要做各种统计分析。
发现,直接对json做sql查询不方便,需要将json数据解析成普通的结构化数据表。可以采用hive中内置的json_tuple()函数
实现步骤:
1、创建一个原始表用来对应原始的json数据
create table t_tmp(json string);
在这里插入图片描述

在这里插入图片描述

数据加载:
load data local inpath ‘/root/json.txt’ into table t_tmp;
在这里插入图片描述
2、利用json_tuple进行json数据解析
测试,示例:
{“movie”:“1193”,“rate”:“5”,“timeStamp”:“978300760”,“uid”:“1”}

json解析后的查询结果:
select json_tuple(json,“movie”,“rate”,“timeStamp”,“uid”)
as(movie,rate,times,uid) from t_tmp;
在这里插入图片描述

创建Json的正式表:
create table t_json as
select json_tuple(json,“movie”,“rate”,“timeStamp”,“uid”)
as(movie,rate,times,uid) from t_tmp;

在这里插入图片描述
在这里插入图片描述
hive会自动转换类型:
在这里插入图片描述
如果你要强制转换 cast进行转换;
select cast(movie as string) from t_json;

分析函数(分组求数据的函数)
类似的例子:
求出一个表中按照性别划分的最大的两个人;
1,18,a,male 5
2,19,b,male 4
5,30,e,male 2
7,32,g,male 1
9,30,j,male 3

10,46,k,female 1
3,22,c,female 4
4,16,d,female 5
6,26,f,female 3
8,36,h,female 2

使用分组函数的方式:( 但是这个方法是不可能的)
select id,age,name,sex from user group by sex order by age desc limit 2;

id age name sex row_number()over(partition by sex order by age desc)
1,18,a,male 5
2,19,b,male 4
5,30,e,male 2
7,32,g,male 1
9,30,j,male 3

10,46,k,female 1
3,22,c,female 4
4,16,d,female 5
6,26,f,female 3
8,36,h,female 2

开始创建表:
create table t_TOPN(id int,age int,name string,sex String)
row format delimited fields terminated by ‘,’;
在这里插入图片描述
在这里插入图片描述

load data local inpath ‘/root/t_TOPN’ into table t_TOPN;
在这里插入图片描述
需要查询出每种性别中年龄最大的2条数据
select * from
(select id,age,name,sex,
row_number()over(partition by sex order by age desc) flag
from t_TOPN)a
where a.flag<=2;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值