hive中的函数

以下是 Hive 中老师较少讲解但实用、适合课堂分享的函数清单(按场景分类,附作用、语法、例子及课堂话术),覆盖文本、日期、聚合、JSON 等高频场景:

一、文本处理类

1. parse_url(URL 解析函数)
  • 作用:一键拆解 URL 的协议、域名、参数等,替代复杂字符串截取

  • 语法parse_url(url_str, part[, key])

    • part可选:PROTOCOL(协议)、HOST(域名)、PATH(路径)、QUERY(参数)
  • 例子

    sql

    复制代码
    -- 提取URL中的搜索关键词"大数据"
    select parse_url('https://www.baidu.com/s?wd=大数据', 'QUERY', 'wd');
  • "分析用户访问日志时,用 substr/split 解析 URL 要写好几行,这个函数是 Hive 的'URL 拆解工具',1 行就能抠出需要的信息,效率超高。"

2. regexp_extract(正则提取函数)
  • 作用:按正则规则从字符串中提取指定内容,解决非结构化文本解析

  • 语法regexp_extract(str, regex_pattern, group_index)

  • 例子

    sql

    复制代码
    -- 从手机号"13812345678"中提取后4位
    select regexp_extract('13812345678', '138\\d{4}(\\d{4})', 1);
  • "处理日志、手机号这类非结构化文本时,正则比手动截字符串更精准,这个函数是 Hive 的'正则提取神器'。"

3. initcap(首字母大写函数)
  • 作用:将字符串每个单词的首字母转为大写(其余小写)

  • 语法initcap(str)

  • 例子

    sql

    复制代码
    select initcap('hello big data'); -- 结果:Hello Big Data
  • "做报表时要规范文本格式,这个函数能一键把英文短语转成'首字母大写'的格式,不用手动拼接字符串。"

二、JSON / 复杂类型类

4. get_json_object(JSON 精准取值函数)
  • 作用:从 JSON 字符串中提取指定层级的字段,无需依赖 JsonSerDe

  • 语法get_json_object(json_str, '$.key层级')

  • 例子

    sql

    复制代码
    -- 从JSON中提取"info"下的"age"字段
    select get_json_object('{"name":"小明","info":{"age":18}}', '$.info.age');
  • "临时分析 JSON 数据时,不用建表指定 SerDe,这个函数能直接'抠'出需要的字段,灵活又高效。"

5. map_keys/map_values(Map 键 / 值提取函数)
  • 作用:从 Map 类型中提取所有键或值,转为数组

  • 语法map_keys(map_col) / map_values(map_col)

  • 例子

    sql

    复制代码
    -- 提取Map的所有键
    select map_keys(map('name','小明','age','18')); -- 结果:["name","age"]
  • "处理 Map 类型数据时,这个函数能快速把键或值转成数组,方便后续统计(比如统计有多少个不同的键)。"

三、日期 / 时间类

6. date_format(日期格式化万能函数)
  • 作用 :自定义日期格式,替代from_unixtime的固定格式

  • 语法date_format(date_str, '格式模板')

  • 例子

    sql

    复制代码
    -- 把时间戳转成"2025-12-08 10:30"格式
    select date_format(from_unixtime(1733649000), 'yyyy-MM-dd HH:mm');
  • "之前学的from_unixtime格式固定,这个函数能自定义日期显示方式,做报表时想怎么格式化就怎么来。"

7. datediff/months_between(日期差函数)
  • 作用:计算两个日期的 "天数差" 或 "月份差"

  • 语法datediff(end_date, start_date) / months_between(end_date, start_date)

  • 例子

    sql

    复制代码
    -- 计算两个日期相差的天数
    select datediff('2025-12-08', '2025-12-01'); -- 结果:7
  • "统计用户'注册后多久下单'这类场景,用这个函数能直接算出天数差,不用手动算日期。"

四、聚合 / 条件类

8. nvl2(增强版空值替换函数)
  • 作用 :根据字段是否为空,返回不同结果(比nvl更灵活)

  • 语法nvl2(col, 非空返回值, 空返回值)

  • 例子

    sql

    复制代码
    -- 有分数显示"及格/不及格",无分数显示"缺考"
    select nvl2(score, if(score>=60,'及格','不及格'), '缺考') from student;
  • "nvl只能替换空值,这个函数能同时处理'空'和'非空'两种情况,一次判断搞定两类逻辑。"

9. collect_set/collect_list(聚合为数组函数)
  • 作用 :将分组后的某列聚合为数组(collect_set去重,collect_list保留重复)

  • 语法collect_set(col) / collect_list(col)

  • 例子

    sql

    复制代码
    -- 按班级聚合,收集每个班级的学生姓名
    select class, collect_list(name) from student group by class;
  • "统计每个班级的学生名单时,这个函数能把姓名'打包'成数组,不用一行一行看数据。"

五、数学计算类

10. percentile(分位数计算函数)
  • 作用:计算数值列的分位数(比如中位数、四分位数)

  • 语法percentile(col, 分位值)

  • 例子

    sql

    复制代码
    -- 计算学生分数的中位数
    select percentile(score, 0.5) from student;
  • "统计数据分布时,中位数比平均数更能反映'中间水平',这个函数能直接算出分位数,不用手动排序。"

十一、 regexp_extract(正则提取函数)
  • 作用:按正则表达式从字符串中提取内容,解决复杂文本解析

  • 语法regexp_extract(str, regex, group)

  • 例子

    sql

    复制代码
    -- 从手机号"13812345678"中提取后4位
    select regexp_extract('13812345678', '138(\\d{4})(\\d{4})', 2);
  • "处理非结构化文本(比如日志、手机号)时,正则提取比手动截字符串更精准,这个函数是 Hive 的'正则神器'。"

相关推荐
qq_124987075337 分钟前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
十月南城3 小时前
Hive与离线数仓方法论——分层建模、分区与桶的取舍与查询代价
数据仓库·hive·hadoop
鹏说大数据5 小时前
Spark 和 Hive 的关系与区别
大数据·hive·spark
B站计算机毕业设计超人5 小时前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人5 小时前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
AI架构师小马5 小时前
Hive调优手册:从入门到精通的完整指南
数据仓库·hive·hadoop·ai
数据架构师的AI之路5 小时前
深入了解大数据领域Hive的HQL语言特性
大数据·hive·hadoop·ai
Gain_chance6 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
十月南城8 小时前
Hadoop基础认知——HDFS、YARN、MapReduce在现代体系中的位置与价值
hadoop·hdfs·mapreduce