资讯动态

Hive中的会应用到的函数

发布时间:2026/9/26 10:15:59 来源:尧图企业网站定制
一、Hive 的基础函数Hive 的基础函数是日常数据处理的基石掌握这些函数能满足绝大多数基础数据清洗、转换、计算需求下面按类别逐一拆解。1、如何查看自带的函数在 Hive 中我们可以通过命令快速查看所有内置函数以及函数的具体用法查看所有内置函数sqlSHOW FUNCTIONS;执行后会列出 Hive 支持的全部函数方便快速检索。模糊搜索指定函数比如想找所有和日期相关的函数可以用通配符*sqlSHOW FUNCTIONS LIKE *date*;查看函数的详细用法用DESCRIBE FUNCTION命令比如查看substr函数的用法sqlDESCRIBE FUNCTION substr; -- 查看更详细的用法说明 DESCRIBE FUNCTION EXTENDED substr;2、日期函数日期函数是 Hive 中最常用的函数之一用于处理时间格式、时间计算、时间格式转换等场景核心常用函数如下表格函数名作用示例current_date()获取当前日期SELECT current_date();→2026-04-10current_timestamp()获取当前时间戳SELECT current_timestamp();→2026-04-10 15:30:00.123date_format(date, fmt)日期格式化SELECT date_format(2026-04-10, yyyy年MM月dd日);→2026年04月10日datediff(end_date, start_date)计算两个日期的天数差SELECT datediff(2026-04-10, 2026-04-01);→9date_add(date, days)日期加天数SELECT date_add(2026-04-10, 7);→2026-04-17date_sub(date, days)日期减天数SELECT date_sub(2026-04-10, 7);→2026-04-03year(date)/month(date)/day(date)提取年 / 月 / 日SELECT year(2026-04-10);→2026hour(time)/minute(time)/second(time)提取时 / 分 / 秒SELECT hour(2026-04-10 15:30:00);→15unix_timestamp([date, fmt])日期转时间戳SELECT unix_timestamp(2026-04-10, yyyy-MM-dd);→1775865600from_unixtime(timestamp, fmt)时间戳转日期SELECT from_unixtime(1775865600, yyyy-MM-dd);→2026-04-103、字符串函数字符串函数用于处理文本数据比如字符串截取、拼接、替换、大小写转换等是数据清洗的核心工具表格函数名作用示例concat(str1, str2, ...)字符串拼接SELECT concat(hello, , world);→hello worldconcat_ws(sep, str1, str2, ...)按指定分隔符拼接SELECT concat_ws(-, 2026, 04, 10);→2026-04-10substr(str, pos, len)/substring(str, pos, len)字符串截取pos 从 1 开始SELECT substr(abcdef, 2, 3);→bcdlength(str)计算字符串长度SELECT length(hello);→5upper(str)/lower(str)转大写 / 转小写SELECT upper(hello);→HELLOtrim(str)/ltrim(str)/rtrim(str)去除首尾 / 左 / 右空格SELECT trim( hello );→helloreplace(str, old, new)字符串替换SELECT replace(abc123, 123, def);→abcdefsplit(str, sep)按分隔符分割字符串为数组SELECT split(a,b,c, ,);→[a,b,c]instr(str, substr)查找子串首次出现的位置从 1 开始SELECT instr(abcdef, cd);→34、类型转换函数类型转换函数用于处理不同数据类型之间的转换避免数据类型不匹配导致的报错表格函数名作用示例cast(expr AS type)通用类型转换SELECT cast(123 AS INT);→123SELECT cast(123 AS STRING);→123binary(expr)转换为二进制类型SELECT binary(hello);to_date(expr)转换为日期类型SELECT to_date(2026-04-10 15:30:00);→2026-04-10string(expr)转换为字符串cast 的简化SELECT string(12345);→12345注意cast转换失败时会返回NULL不会报错使用时需要注意数据合法性。5、数学函数数学函数用于数值计算比如取整、四舍五入、绝对值、幂运算等表格函数名作用示例round(num, [decimals])四舍五入SELECT round(3.1415, 2);→3.14floor(num)向下取整SELECT floor(3.9);→3ceil(num)/ceiling(num)向上取整SELECT ceil(3.1);→4abs(num)绝对值SELECT abs(-10);→10pow(num1, num2)/power(num1, num2)幂运算SELECT pow(2, 3);→8sqrt(num)平方根SELECT sqrt(16);→4mod(num1, num2)取模求余数SELECT mod(10, 3);→1rand([seed])生成 0-1 的随机数SELECT rand();→0.123456greatest(num1, num2, ...)/least(num1, num2, ...)取最大值 / 最小值SELECT greatest(1, 5, 3);→56、Hive 的其他函数除了上述分类Hive 还有很多实用的通用函数这里列举高频常用的条件判断函数if(condition, true_val, false_val)三元判断满足条件返回 true_val否则返回 false_valsqlSELECT if(score 60, 及格, 不及格) FROM student;case when ... then ... else ... end多条件分支判断sqlSELECT case when score 90 then 优秀 when score 60 then 及格 else 不及格 end FROM student;coalesce(expr1, expr2, ...)返回第一个非 NULL 的值常用于空值填充sqlSELECT coalesce(phone, 无联系方式) FROM user;nvl(expr1, expr2)如果 expr1 为 NULL返回 expr2否则返回 expr1coalesce 的简化版聚合函数count(*)/count(col)统计行数 / 非空行数sum(col)/avg(col)/max(col)/min(col)求和 / 平均值 / 最大值 / 最小值collect_list(col)/collect_set(col)将列聚合为数组list 保留重复set 去重数组 / Map 函数size(arr/map)计算数组 / Map 的元素个数get_json_object(json_str, path)解析 JSON 字符串提取指定路径的值sqlSELECT get_json_object({name:张三,age:20}, $.name); → 张三二、Hive 的高级函数高级函数是 Hive 处理复杂业务场景的核心尤其是窗口函数是面试、数据分析的重中之重。1、窗口函数 Over重点中的重点窗口函数Window Function可以在不聚合数据的前提下对数据进行分组内的排序、排名、累计计算等操作解决了普通聚合函数只能返回聚合结果、无法保留明细数据的问题。窗口函数的核心语法sql函数() OVER ( [PARTITION BY 分组字段] [ORDER BY 排序字段] [窗口子句 WINDOW] )1distribute by 子句distribute by的作用是按照指定字段对数据进行分区分组和GROUP BY类似但distribute by不会对数据进行聚合只是将相同字段值的数据分发到同一个 Reducer 中为后续的窗口计算、排序做准备。注意distribute by必须写在sort by之前通常和sort by配合使用实现分组内排序。示例按部门分区后续在部门内排序sqlSELECT id, name, dept, salary, row_number() OVER (DISTRIBUTE BY dept ORDER BY salary DESC) AS rn FROM employee;2sort by 子句sort by的作用是在每个 Reducer 内部对数据进行排序和全局排序ORDER BY不同ORDER BY全局排序所有数据进入一个 Reducer数据量大时性能差SORT BY仅在每个 Reducer 内排序最终结果是局部有序性能高distribute by sort by实现分组内的局部排序是窗口函数中PARTITION BY ORDER BY的底层实现逻辑示例按部门分区部门内按薪资降序排序sqlSELECT * FROM employee DISTRIBUTE BY dept SORT BY salary DESC;3window 子句窗口子句用于更精细地控制窗口的范围默认情况下窗口范围由PARTITION BY和ORDER BY决定不写ORDER BY窗口范围是整个分区所有行写ORDER BY窗口范围是从分区第一行到当前行累计窗口窗口子句的语法sqlROWS BETWEEN 起始行 AND 结束行常用的窗口范围表格窗口范围含义ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW从分区第一行到当前行默认累计窗口ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING从当前行到分区最后一行ROWS BETWEEN N PRECEDING AND N FOLLOWING当前行前后 N 行滑动窗口ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING整个分区全局窗口示例计算每个员工的部门累计薪资从部门第一行到当前行sqlSELECT id, name, dept, salary, SUM(salary) OVER ( PARTITION BY dept ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS sum_salary FROM employee;补充窗口函数中常用的排名函数row_number()连续排名相同值也会生成不同序号1,2,3,4rank()跳跃排名相同值序号相同后续序号跳跃1,2,2,4dense_rank()密集排名相同值序号相同后续序号连续1,2,2,32、序列函数序列函数是窗口函数的延伸用于处理数据的序列、偏移、首尾值提取等场景是时序数据、用户行为分析的核心工具。1NTILE 函数NTILE(n)函数的作用是将分区内的数据平均分成 n 个桶并返回每个行所属的桶号从 1 开始常用于数据分桶、抽样、分层分析。注意如果数据无法平均分配前面的桶会多分配 1 行。示例将员工按薪资降序分成 3 个等级高、中、低sqlSELECT id, name, salary, NTILE(3) OVER (ORDER BY salary DESC) AS level FROM employee;执行后薪资最高的 1/3 员工 level1中间 1/3 level2最低 1/3 level3。2LAG 和 LEAD 函数LAG和LEAD是偏移函数用于获取当前行往前 / 往后 N 行的数据无需自关联就能实现行与行之间的对比常用于用户行为分析、环比计算等场景。语法sqlLAG(col, n, default_val) OVER (PARTITION BY 分组 ORDER BY 排序) LEAD(col, n, default_val) OVER (PARTITION BY 分组 ORDER BY 排序)LAG往前取 n 行没有则返回 default_valLEAD往后取 n 行没有则返回 default_valn偏移行数默认 1default_val偏移后无数据时的默认值默认 NULL示例计算用户每次登录时间和上一次登录时间的间隔sqlSELECT user_id, login_time, LAG(login_time, 1, 首次登录) OVER (PARTITION BY user_id ORDER BY login_time) AS last_login_time, datediff(login_time, LAG(login_time, 1)) AS diff_days FROM user_login;3FIRST_VALUE 和 LAST_VALUE 函数FIRST_VALUE和LAST_VALUE用于提取窗口内的第一个值和最后一个值常用于获取分组内的极值、首尾数据等场景。语法sqlFIRST_VALUE(col) OVER (PARTITION BY 分组 ORDER BY 排序 窗口子句) LAST_VALUE(col) OVER (PARTITION BY 分组 ORDER BY 排序 窗口子句)注意LAST_VALUE的默认窗口是从分区第一行到当前行如果要获取整个分区的最后一个值必须手动指定窗口子句ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING否则只会返回当前行的值。示例获取每个部门薪资最高和最低的员工薪资sqlSELECT id, name, dept, salary, -- 部门薪资最高第一个值按薪资降序排序 FIRST_VALUE(salary) OVER (PARTITION BY dept ORDER BY salary DESC) AS max_salary, -- 部门薪资最低最后一个值指定全局窗口 LAST_VALUE(salary) OVER ( PARTITION BY dept ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS min_salary FROM employee;三、总结Hive 函数是大数据开发的核心工具基础函数满足日常数据处理高级窗口函数则是解决复杂业务、提升分析效率的关键基础函数重点掌握日期、字符串、类型转换、条件判断是数据清洗的基础窗口函数重点掌握OVER子句的PARTITION BY、ORDER BY、窗口子句以及排名、偏移、序列函数是面试和数据分析的高频考点实战建议多结合业务场景练习比如用户行为分析、报表统计、数据分层才能真正吃透这些函数的用法

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑