Hive常用的几种函数

张开发
2026/4/14 1:19:13 15 分钟阅读

分享文章

Hive常用的几种函数
一、Hive 基础函数基础函数是 Hive 自带的、无需额外开发的通用函数覆盖日常数据处理 80% 的场景也是学习高级函数的前提。1. 如何查看 Hive 自带函数Hive 内置了几百个函数不用死记硬背学会查询命令随时查看sql-- 1. 查看所有内置函数 show functions; -- 2. 查看某个函数的详细用法最常用 desc function extended 函数名; -- 示例查看 substr 字符串函数用法 desc function extended substr;执行后会显示函数功能、语法、参数说明新手必备技能。2. 日期函数大数据高频使用日志、订单、用户行为数据都离不开日期处理这是最常用的 8 个函数表格函数功能实战示例current_date()获取当前日期2025-12-20current_timestamp()获取当前时间戳2025-12-20 15:30:20date_format(date, fmt)日期格式化date_format(2025-12-20,yyyy-MM)→2025-12date_add(date, n)日期加 n 天date_add(2025-12-20,3)→2025-12-23date_sub(date, n)日期减 n 天date_sub(2025-12-20,3)→2025-12-17datediff(end, start)计算日期差天datediff(2025-12-20,2025-12-01)→19year(date)提取年份year(2025-12-20)→2025month(date)提取月份month(2025-12-20)→12实战案例查询 7 天前的所有订单数据sqlselect order_id, user_id, create_time from order_info where create_time date_sub(current_date(), 7);3. 字符串函数数据清洗必备数据清洗 90% 场景都在用字符串函数核心函数汇总表格函数功能示例length(str)字符串长度length(hive)→4substr(str, start, len)截取字符串substr(hivesql,1,4)→hiveupper(str)转大写upper(hive)→HIVElower(str)转小写lower(HIVE)→hivetrim(str)去除首尾空格trim( hive )→hiveconcat(a,b,c)字符串拼接concat(a,b,c)→abcconcat_ws(sep, arr)分隔符拼接concat_ws(-,2025,12,20)→2025-12-20split(str, sep)字符串分割split(a,b,c,,)→[a,b,c]实战案例清洗用户姓名去除空格并转大写sqlselect user_id, upper(trim(user_name)) as user_name from user_info;4. 类型转换函数不同数据源字段类型不一致必须用转换函数统一格式sql-- 1. 强制类型转换最常用 cast(字段 as 类型) -- 示例字符串转数字 select cast(100 as int) as num; -- 示例数字转字符串 select cast(100 as string) as str; -- 2. 字符串转日期 select to_date(2025-12-20 15:30:20) as date;⚠️ 注意转换失败会返回NULL使用时尽量保证数据规范。5. 数学函数处理数值、统计计算必备sql-- 取绝对值 abs(-10) → 10 -- 四舍五入 round(3.1415,2) → 3.14 -- 向上取整 ceil(3.14) → 4 -- 向下取整 floor(3.99) → 3 -- 求最大值/最小值 max(score), min(score)6. Hive 其他常用函数补充几个工作中高频使用的基础函数nvl(字段, 默认值)字段为NULL时替换为默认值sql-- 用户年龄为空时赋值为 0 select nvl(age, 0) as age from user_info;coalesce(a,b,c...)返回第一个非 NULL 值if(条件, 真, 假)条件判断sqlselect if(score60,及格,不及格) as result from student;case when多条件判断复杂逻辑必备二、Hive 高级函数核心重点基础函数解决通用问题高级函数解决复杂业务场景也是大数据面试、工作的核心考点。1. 窗口函数 OVER重点中的重点窗口函数是 Hive 最核心的高级函数作用分组内排序、切片、统计不合并数据行。核心语法sql函数() OVER ( PARTITION BY 分组字段 ORDER BY 排序字段 [DISTINCT / DISTRIBUTE BY / SORT BY / WINDOW子句] )关键子句详解PARTITION BY分组类似GROUP BY但不合并行ORDER BY组内排序DISTRIBUTE BY按字段分发数据到不同 Reducer优化用SORT BY局部排序配合DISTRIBUTE BY使用WINDOW子句定义窗口范围如从第一行到当前行2. 序列函数专门处理行偏移、数据分桶、首尾取值用户行为、时间序列分析神器。1NTILE数据均匀分桶将分组内数据分成 N 份返回行所在的桶号。场景用户消费分层、成绩分层sql-- 按消费金额将用户分成 5 层1 是最高消费 select user_id, pay_amount, ntile(5) over(order by pay_amount desc) as user_level from user_pay;2LAG LEAD行偏移函数LAG(字段, n)取上 n 行的数据LEAD(字段, n)取下 n 行的数据场景计算用户相邻两次登录间隔sqlselect user_id, login_time, -- 取上一次登录时间 lag(login_time,1) over(partition by user_id order by login_time) as last_login, -- 计算两次登录间隔小时 unix_timestamp(login_time) - unix_timestamp(lag(login_time,1) over(partition by user_id order by login_time)) / 3600 as hour_diff from user_login;3FIRST_VALUE LAST_VALUE取分组首尾值FIRST_VALUE(字段)分组内第一行数据LAST_VALUE(字段)分组内最后一行数据场景查询每个用户最早 / 最晚登录时间sqlselect user_id, login_time, first_value(login_time) over(partition by user_id order by login_time) as first_login, last_value(login_time) over(partition by user_id order by login_time) as last_login from user_login;3. 排名函数大名鼎鼎面试必考三大排名函数专门解决分组 TopN问题区别是面试必问题表格函数特点示例分数相同row_number()连续不重复排名1、2、3、4rank()跳跃排名相同名次跳过1、1、3、4dense_rank()连续排名相同名次不跳过1、1、2、3实战案例每个班级成绩 Top3sqlselect * from ( select class_id, student_name, score, -- 组内排名 row_number() over(partition by class_id order by score desc) as rn from student_score ) t where t.rn 3;4. 自定义函数 UDF重要当内置函数无法满足业务需求时我们可以自己写 Java/Python 函数注册到 Hive 使用。1案例 1字符串首字母大写需求将hive sql转为Hive Sql编写 Java 代码核心逻辑打包成 jar 上传到 Hive注册函数sql-- 注册自定义函数 create temporary function first_upper as com.hive.udf.FirstUpperUDF; -- 使用 select first_upper(hive sql) as result; -- 输出Hive Sql2案例 2根据出生日期计算年龄需求输入2000-01-01输出年龄sql-- 注册年龄计算函数 create temporary function calc_age as com.hive.udf.CalcAgeUDF; -- 使用 select birthday, calc_age(birthday) as age from user_info;自定义函数是大数据开发进阶必备技能能解决所有个性化数据处理需求。三、总结这篇文章把 Hive 函数分成基础 高级两大模块全覆盖工作常用场景基础函数日期、字符串、类型转换、数学函数搞定日常数据清洗高级函数窗口函数是核心序列函数做序列分析排名函数解决 TopNUDF 自定义个性化逻辑

更多文章