Hive的窗口函数与行列转换函数及JSON解析函数

这篇具有很好参考价值的文章主要介绍了Hive的窗口函数与行列转换函数及JSON解析函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 系统内置函数

查看系统内置函数:show functions ;
显示内置函数的用法: desc function lag; – lag为函数名
显示详细的内置函数用法: desc function extended lag;

1.1 行转列

行转列是指多行数据转换为一个列的字段。

Hive行转列用到的函数
concat(str1,str2,...) 字段或字符串拼接
concat_ws('分割符',str1,str2,...) 将字段或字符串按分割符号拼接
collect_set(column1), 收集某个字段的值,进行去重汇总,产生Array类型,即将某列数据转换成数组

行转列函数的应用:将星座和血型相同的人归类到一起
原数据
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据
脚本

with t1 as (
select name, concat(constellation,',', blood_type) as cb
            from constellation
)
select cb,concat_ws(',',collect_set(name)) as names  from t1
group by cb;

行转列后的结果
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据

1.2 列转行

explode(col):将hive一列中复杂的array或者map结构拆分成多行。
explode(ARRAY) 数组的每个元素生成一行
explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列
脚本

select explode(names) name from constellation_01;

列转行后执行结果
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据
lateral view 和 split, explode等UDTF一起使用。explode能够将一列数据拆分成多行,形成一张临时表,与原表进行聚合

select cb,name 
from constellation_01 
lateral view explode(names) constellation_01_temp as name;

1.3 窗口函数

不仅展示窗口计算的字段,也展示原字段
源数据

jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

执行脚本

create table business(
name string, 
orderdate string,
cost int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

load data local inpath "/opt/module/datas/business.txt" into table business;

执行结果Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据

1.3.1 聚合开窗函数

窗口函数和聚合函数的结合使用
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据
执行脚本

select name,orderdate,cost,
       count(*)  over(partition by month(orderdate)),-- 顾客信息及每月总购买人数
       sum(cost) over(partition by month(orderdate)), -- 顾客信息及每月总购买金额
       sum(cost) over(partition by month(orderdate) order by orderdate rows between unbounded preceding and current row), -- 起点到当前行的累加金额
       sum(cost) over(partition by month(orderdate) order by orderdate rows between 1 preceding and current row), --  前一行 和 当前行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between  current row and 1 following), -- 当前行 和 后一行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between  1 preceding and 1 following), -- 前一行 到 后一行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between current row and unbounded following) -- 当前行到后面所有行
from business

计算结果
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据

1.3.2 排序开窗函数

ROW_NUMBER() 从1开始,按照顺序,生成分组内记录的序列
RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位
DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
执行脚本

select name,orderdate,cost,
       row_number() over (partition by month(orderdate) order by cost desc), -- 按花费金额由多到少排序,依次编号
       rank()  over (partition by month(orderdate) order by cost desc), -- 按花费金额由多到少排序,相等的排名会留下空位
       dense_rank() over (partition by month(orderdate) order by cost desc) -- 按花费金额由多到少排序,相等的排名不会留下空位
from business;

计算结果
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据

1.3.3 lag和lead函数

LAG(col,n): 往前第n行第col列的数据
LEAD(col,n):往后第n行第col列的数据
执行脚本

select name,orderdate,cost,
       lag(orderdate,1) over(partition by month(orderdate) order by orderdate), -- 上一次购买日期(往前第n行数据)
       lead(orderdate,1)over(partition by month(orderdate) order by orderdate) -- 下一次购买日期(往后第n行数据)
from business;

计算结果

Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据

1.4 JSON解析函数

hive中内置的json_tuple()函数,可以将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"}

执行脚本

create table t_json(json string);
load data local inpath "/export/data/datawarehouse/movie.txt" overwrite into table t_json;

create table  movie_rate 
as
select json_tuple(json,'movie','rate','timeStamp','uid') as (movie,rate,ts,uid) from t_json;

执行结果
Hive的窗口函数与行列转换函数及JSON解析函数,数据计算与分析组件,hive,大数据文章来源地址https://www.toymoban.com/news/detail-662953.html

到了这里,关于Hive的窗口函数与行列转换函数及JSON解析函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive和Impala的行列转换

    explode+lateral group by+collect_list 一、列转行 (对某列拆分,形成新列) 使用函数:lateral view explode(split(column, ‘,’)) num eg: 如表:t_row_to_column_tmp 数据如下,对tag列进行拆分 二、行转列 (根据主键,对某列进行合并) 使用函数:concat_ws(‘,’,collect_set(column)) 说明:collect_list 不去重,

    2024年02月12日
    浏览(35)
  • 【大数据Hive】Hive 窗口函数使用详解

    目录 一、前言 二、hive 窗口函数概述 2.1 聚合函数与窗口函数差别 2.1.1 创建一张表

    2024年02月11日
    浏览(38)
  • 【大数据之Hive】十六、Hive-HQL函数之窗口函数(开窗函数)

      先定义了窗口的大小(按行来算),然后对窗口内的行的数据进行计算,再将计算结果返回给改行。   窗口函数包括窗口和函数两部分,窗口用于定义计算范围,函数用于定义计算逻辑,窗口函数只会在原来的表上增加一列结果列,不改变原来的数据。 函数:   绝

    2024年02月11日
    浏览(39)
  • Hive的行列转换(行转多列、多列转行、行转单列、单列转行)

    在实际使用Hive的过程中,常常会涉及到行列转换,细分的话,有下面4种类型的行列转换,分别是: 行转多列 多列转行 行转单列 单列转行 下面我们通过样例介绍每种行列转换的实现方法。 样例表 班级成绩表: 姓名(name) 学科(subject) 成绩(score) 行列转换思路分析及实现 行转

    2024年02月15日
    浏览(79)
  • Hive 解析 JSON 字符串数据的实现方式

    在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path) ,该方法参数解析如下: json_txt :顾名思义,就是 JSON 字符串; path :指的是匹配 JSON 字符串的格式,通过固定的语法获取 JSON 字符串中的内容。 常用的 path 参数匹配符号有四个,分别是: $ :表示获

    2024年02月05日
    浏览(48)
  • 【大数据技术】hive 窗口函数sum range between的详细介绍

    【大数据技术】hive 窗口函数sum range between的详细介绍 数据准备 建表 插入数据 查看数据 对比两段sql的不同之处 及其运行结果 结果如下: 第一段 第二段 重点注意: 第一段和第二段sql的rows between与range between的不同 第一段与第二段sql的order by字段有不同 第二段sql最后使用了

    2024年02月13日
    浏览(34)
  • Python JSON 使用指南:解析和转换数据

    JSON 是一种用于存储和交换数据的语法。JSON 是文本,使用 JavaScript 对象表示法编写。 Python 有一个内置的 json 包,可用于处理 JSON 数据。 示例 :导入 json 模块: 如果您有一个 JSON 字符串,可以使用 json.loads() 方法来解析它。结果将是一个 Python 字典。 示例 :从 JSON 转换为

    2024年02月06日
    浏览(48)
  • Java 解析多层嵌套json数据及json字符串与对象的相互转换

    本文主要介绍java解析多层嵌套json数据以及字符串与JSON对象之间的相互转换,包括:json字符串的取值,json对象与字符串的相互转换,字符串转化为java对象,字符串转化为javaList列表等。 提示:以下是本篇文章正文内容,下面案例可供参考 数据格式:JSON实际上就是键值对(

    2024年02月04日
    浏览(61)
  • Oracle基础部分二(伪列/表、单个函数、空值处理、行列转换、分析函数、集合运算)

    rowid :rowid是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址,包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址。 除了在同一聚簇中可能不唯一外,每条记录的rowid是

    2023年04月12日
    浏览(60)
  • 【大数据Hive3.x数仓开发】窗口函数案例:连续N次登录的用户;级联累加求和;分组TopN

    对窗口函数的讲解part见:【大数据Hive3.x数仓开发】函数–窗口函数 自连接过滤实现 连续两天登陆的用户ID: 窗口函数lead()实现 功能:用于从当前数据中基于当前行的数据向后偏移取值 语法: lead(colName,N,defautValue) colName:取哪一列的值 N:向后偏移N行 defaultValue:如果取不到返回

    2023年04月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包