Hvie函数详解-常见函数使用和自定义函数
函数
常用系统内置的函数
nvl (空字段赋值)
有时候我们查到的一些值是NULL
, 但是有时候NULL不能准确的表达含义和参与运算(NULL与任何值运算都为NULL), 比如说工资的奖金
这时我们可以使用nvl()
函数, 在查询时将NULL值转换为一个默认值
nvl(<可能为空的字段>, <自定义默认值>);
举例 查询员工的工资和奖金, 如果为NULL, 则显示0
select 工资, nvl(奖金, 0)
from 员工表;
这时, 如果某个人的奖金为NULL, 就会显示为0而不是NULL
case when (判断)
有点类似于MySQL中的if()
函数
case <字段名> when <如果等于这个值> then <显示的值> else <如果不等于显示的值> end
举例 在员工表中, 统计每个部门男女各有多少人
select
部门名称,
sum(case 性别 when '男' then 1 else 0 end) 男,
sum(case 性别 when '女' then 1 else 0 end) 女
from 员工表
group by 部门名称;
说明
这里巧妙的运用了
case when
, 用男性举例, 如果是男性, 就显示1, 然后再把1 作为sun()
的参数, 就实现了累加的效果
collect_set (行转为集合)
它的主要作用是将某字段的值进行去重汇总,产生一个array类型字段, 一般用于分组的时候
collect(<字段名>)
注意
函数只接受基本数据类型, 不接受集合类型
举例 加入一张表里有学生姓名(string)
和班级(string)
这两个字段, 要求查询每个班级的名称和这个班里的所有同学的姓名
select 班级, collect_set(学生姓名姓名) as 姓名
from 学生表
group by 班级;
结果举例, 结果会是以下形式:
班级 | 姓名 |
---|---|
1 | [“小明”,“小刚”] |
2 | [“红红”, “莉莉”, “冬梅”] |
explode (集合转为行)
与上面相反, Hive还可以将一个集合类型拆分成多行
explode()