当前位置: 首页 > article >正文

Hive详细讲解-各类函数速通

文章目录

    • 1.查看系统中内置函数
    • 2.查看某个函数细节
    • 3.单行函数
      • 3.1算数函数
      • 3.2数值函数
      • 3.3字符串函数
      • 3.4regexp_replace正则替换
      • 3.5regexp正则匹配
      • 3.6repeat
      • 3.7split切割函数
      • 3.8nvl函数
      • 3.9concat拼接函数
      • 3.10解析json字符串 get_json_object
    • 4.日期函数
      • 4.1时间戳函数
      • 4.2将时间戳转化为日期
      • 4.3获取当前日期
      • 4.3日期运算
    • 5.流程控制函数
      • 5.1case when()
      • 5.2 if写法
    • 6.集合函数
      • 6.1见名知意array_contains()
      • 6.2 map函数
      • 6.3结构体
    • 7.高级聚合函数
    • 8.炸裂函数(hive独有)-UDTF函数
      • 1. **最外层查询**
      • 2. **子查询 `t2`**
    • 9.窗口函数
    • 9.窗口函数常用补充

1.查看系统中内置函数

show functions

在这里插入图片描述

在这里插入图片描述

2.查看某个函数细节

在这里插入图片描述

在这里插入图片描述

  • 可以看到hive中源码的全类名

今天将老师讲的东西总结;总结完成后删除此条信息

3.单行函数

在这里插入图片描述

3.1算数函数

在这里插入图片描述

运算符较为简单,但是请注意取反操作是~

老师说法:&与运算会先将数字转化为2进制然后进行运算

在这里插入图片描述

3.2数值函数

  • round四舍五入
  • ceil上取整
  • floor下取整

在这里插入图片描述

  • 可以设置返回小数个数

在这里插入图片描述

3.3字符串函数

  • substring

在这里插入图片描述

三个参数,第三个可选

和之前的limit两个数量的参数一样

第二个参数表示从哪里开始截取

第三个参数表示截取几个!

特别注意,索引从1开始

和python一样支持负数,例如substring(‘abc’,-1)

在这里插入图片描述

  • replace替换函数

在这里插入图片描述

此处的替换,还是全局替换而非局部替换。

3.4regexp_replace正则替换

在这里插入图片描述

正则表达式描述示例匹配结果
.匹配除换行符外的任意字符a.bacb, a1b
\d匹配一个数字(0-9\d\d12, 34
\D匹配非数字字符\Da, -
\w匹配字母、数字、下划线\w+abc123, _x_
\W匹配非字母、数字、下划线\W!, @
\s匹配空白字符(空格、制表符等)\s+空格、制表符等
\S匹配非空白字符\S+abc, 123
^匹配行的开头^abcabc123
$匹配行的结尾123$abc123
*匹配前一个字符 0 次或多次a*``, a, aaa
+匹配前一个字符 1 次或多次a+a, aaa
?匹配前一个字符 0 次或 1 次a?``, a
{n}匹配前一个字符恰好 n 次a{3}aaa
{n,}匹配前一个字符至少 n 次a{2,}aa, aaa
{n,m}匹配前一个字符至少 n 次,至多 m 次a{2,4}aa, aaa
[abc]匹配括号内任意一个字符[abc]a, b, c
[^abc]匹配不在括号内的任意字符[^abc]d, 1, !

特别注意:

[^abc]

+

\S

\s

.

\D

  • 正则表达式的使用,请你注意转义

在这里插入图片描述

3.5regexp正则匹配

在这里插入图片描述

3.6repeat

在这里插入图片描述

3.7split切割函数

  • split切割第二个参数出来的是一个正则表达式
  • 切割出来是一个array
  • 切割出来索引从0开始

在这里插入图片描述

3.8nvl函数

  • 传入两个参数
  • 判断第一个参数是否为空,若不空返回第一个参数值,为空返回出第二个参数。

3.9concat拼接函数

在这里插入图片描述

  • 注意点concat可以将传入的任意str拼接

在这里插入图片描述

3.10解析json字符串 get_json_object

  • 返回值string

  • json文件表示一个对象会以{ 开头

  • json表示一个数组会以[开头

在这里插入图片描述

4.日期函数

日期:年月日

时间:时分秒

4.1时间戳函数

  • unix_timestamp:返回当前或指定时间的时间戳

  • 时间戳指的是1970年到当前的秒数

  • 当前时刻时间戳全世界同一时刻相同

  • 10位时间戳表示秒,13位表示毫秒

在这里插入图片描述

  • 可以指定时间时间戳

在这里插入图片描述

此处的时间格式和Java相同

4.2将时间戳转化为日期

  • from_unixtime()

在这里插入图片描述

  • 两个参数,第二个参数可选,可以转指定格式

4.3获取当前日期

在这里插入图片描述

在这里插入图片描述

4.3日期运算

  • 过于繁琐,直接列到下面,用的时候直接拿来用即可

  • 唯一有用的也就data_format

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.流程控制函数

5.1case when()

感觉有点像linux shell

在这里插入图片描述

  • 可以简化写法

在这里插入图片描述

5.2 if写法

在这里插入图片描述

6.集合函数

  • 集合函数就是处理复杂数据类型

6.1见名知意array_contains()

和Java一样都是contains,然后返回true还是false。

在这里插入图片描述

在这里插入图片描述

  • 此外常见size()

6.2 map函数

在这里插入图片描述

和Java一样,但是返回的是数组类型。

6.3结构体

在这里插入图片描述

7.高级聚合函数

  • collect_list()返回一个数组

在这里插入图片描述

  • collect_set()返回一个数组

8.炸裂函数(hive独有)-UDTF函数

  • explode(map|array)

array: 一个数组,每个元素将被展开为一行。

map: 一个映射类型(key-value对),会将每个key-value对展开为一行,分别返回keyvalue

  • DUTF指标函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

posexplode()返回函数值以及字典索引

使用EXPLODE时必须搭配LATERAL VIEW来展开数据。

NULL值处理: 如果arraymapNULLEXPLODE将返回0行。

多次使用: 如果有多个嵌套的arraymap,可以使用多次LATERAL VIEW进行展开。

在这里插入图片描述

  • 通常情况下lateral view和udtf函数配合使用。

在这里插入图片描述

  • 基本语法

在这里插入图片描述

hobby显然原始表字段没有,因此需要lateral view结合爆裂函数进行操作;

  • tmp表示UDTF炸出来的表的名字 tmp表的别名必须存在
  • hobby表示tmp每一个字段的别名;

这段 Hive SQL 语句可以分解为几个步骤来理解。以下是详细的拆解和解释:

1. 最外层查询

sql复制代码select
 cate,
 count(*)
from
(
 -- 内层子查询
)t2
group by cate;

功能

  • 统计每个 cate(分类)的数量(count(*))。
  • 数据来源是子查询 t2,按 cate 分组(group by cate)。

2. 子查询 t2

sql复制代码select
    movie,
    cate
from
(
    -- 更内层子查询
)t1 lateral view explode(cates) tmp as cate

功能

  • t1 中提取每个电影(movie)及其单个分类(cate)。
  • lateral view explode(cates):将数组 cates 展开为多行,每行包含一个分类(cate)。
insert overwrite table movie_info
values ("《疑犯追踪》", "悬疑,动作,科幻,剧情"),
       ("《Lie to me》", "悬疑,警匪,动作,心理,剧情"),
       ("《战狼2》", "战争,动作,灾难");

-- lateral view explode(category) tmp as cate

select
    cate,
    count(*)
from
(
    select
        movie,
        cate
    from
    (
        select
            movie,
            split(category,',') cates
        from movie_info
    )t1 lateral view explode(cates) tmp as cate
)t2
group by cate;

9.窗口函数

  • 窗口,函数(直接拿聚合函数来用即可)
  • 窗口定义计算范围,函数定义计算逻辑

在这里插入图片描述

绝大多数聚合函数都可以配合窗口函数直接使用

在这里插入图片描述

在这里插入图片描述

基于值的order by表示你基于哪个字段来进行窗口范围划分

  • 窗口函数示例

在这里插入图片描述

  • sum() over() tablename
  • 支持内部排序,order by order_data
  • rows between a and b
  • unbounded preceding表示第一行
  • current row 表示当前行
  • 整体来看也就是排序后的表 amount按照第一行加到当前行返回结果;

在这里插入图片描述

  • 基于值的窗口划分
  • order by指定比较字段为order_data
  • 接着按照order_data按照 -无穷(unbounded preceding)到当前值(current row)来进行比较
  • 窗口函数分区

定义分区字段,然后窗口函数作用到每一个分区上

在这里插入图片描述

在这里插入图片描述

相较于传统的窗口函数,多了个partition by

此外其他一样。

我的理解:

必要字段:聚合函数() over(order by rows|range between * and *) column_name;

其他若分区,写partition by即可

在这里插入图片描述

9.窗口函数常用补充

  • 跨行取值函数

  • lead取下一行、lag取上一行

在这里插入图片描述

拿到每一个订单间隔多少日期,上一个日期,下一个日期的下单时间

  • first_value,last_value获取第一行和最后一行某一个字段值

但是hive提供额外参数,是否跳过空值

在这里插入图片描述

  • rank,dense_rank,row_number排名函数

  • 使用该类函数,你仅需要考虑partition by 和order by即可,不需要考虑窗口范围

在这里插入图片描述


http://www.kler.cn/a/522750.html

相关文章:

  • Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin
  • 54.数字翻译成字符串的可能性|Marscode AI刷题
  • 从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift
  • 思维练习题
  • 【MQ】如何保证消息队列的高可用?
  • SpringBoot-Vue整合百度地图
  • GO 库与框架篇
  • Vue 3 30天精进之旅:Day 06 - 表单输入绑定
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》027-组件的高级配置和嵌套
  • Java数据库操作指南:快速上手JDBC【学术会议-2025年数字化教育与信息技术(DEIT 2025】
  • 如何利用AI工具来进行数据分析
  • 落地 轮廓匹配
  • 数据结构课程设计(三)构建决策树
  • 当当网近30日热销图书的数据采集与可视化分析(scrapy+openpyxl+matplotlib)
  • unity商店中的A* Pathfinding Project插件,判断两个点之间能否正常导航通行?
  • Airflow:精通Airflow任务依赖
  • 如何解决小尺寸图像分割中的样本不均衡问题
  • 指针的介绍2前
  • 【JavaEE进阶】应用分层
  • 使用Ollama 在Ubuntu运行deepseek大模型:以DeepSeek-coder为例
  • 包管理工具随记
  • 构建1688自动代采系统:PHP开发实战指南
  • 深度学习|表示学习|卷积神经网络|输出维度公式如何理解?|16
  • 宝塔中运行java项目 报权限不足
  • 14-6-2C++STL的list
  • mysql统计每个表行数、大小以及数据库总行数、大小