当前位置:   article > 正文

hive 常用内置函数 (NVL 空字段赋值 、CASE WHEN THEN ELSE END 流程控制函数、行转列、列转行、 窗口函数、Rank)_case when nvl(月初担保余额,0)<0 then 0 else nvl(月初担保余额,0

case when nvl(月初担保余额,0)<0 then 0 else nvl(月初担保余额,0) end 月初担保

前言

测试数据:
在这里插入图片描述


1. 查看系统内置函数

  查看系统自带的函数

show functions;
  • 1

  显示自带的函数的用法

desc function 函数名;
  • 1

在这里插入图片描述

  详细显示自带的函数的用法

desc function extended 函数名;
  • 1

在这里插入图片描述


2. 常用内置函数

2.1 NVL 空字段赋值

语法:

nvl(value,default_value)
  • 1

说明:

Returns default value if value is null else returns value
  • 1

如:

select emp.empno,nvl(emp.comm,0) from emp;
  • 1

在这里插入图片描述

2.2 CASE WHEN THEN ELSE END 流程控制函数

语法:

CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
  • 1

说明:

 When a = b, returns c; when a = d, return e; else return f
  • 1

如:

select emp.empno, case emp.deptno when 10 then '研发' when 20 then '销售'  when 30 then '后勤' else '秘书' end from emp;
  • 1

在这里插入图片描述

2.3 行转列

说明:

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数是剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
注意: CONCAT_WS 必须是 string 或 array<string> 类型 对于不同类型可cast( 字段名 as string )

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的所有值进行去重汇总,产生array类型字段;

COLLECT_LIST(col): 对字段所有值进行汇总,不去重

如:
表emp按照部门号分组,显示部门号以及部门的所有工作名称

select emp.deptno,collect_set(emp.job) from emp group by emp.deptno;
  • 1

在这里插入图片描述

2.4 列转行

说明:
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行;

LATERAL VIEW 侧写表 LATERAL VIEW udtf(expression) tableAlias AS columnAlias用于和split, explode等UDTF一起使用,将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

如:
在这里插入图片描述

SELECT movie,category_name 
FROM movie_info 
lateral VIEW
explode(split(category,",")) movie_info_tmp  AS category_name ;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2.5 窗口函数(开窗函数)

说明:
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的改变而变化;over(partition by 字段 order by 字段 rows between ... and ...) 会按照指定的字段进行分区,把分区字段值相同的数据划分到同一个分区,会在每个分区中按照指定的字段进行排序;分区中每条数据开启一个窗口,每条数据的窗口大小为指定的窗口大小;

between and 表示范围概念:
CURRENT ROW:当前行
n PRECEDING:往前n行数据
n FOLLOWING:往后n行数据
UNBOUNDED:起点,
	UNBOUNDED PRECEDING 表示从前面的起点, 
    UNBOUNDED FOLLOWING表示到后面的终点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如:

select name,orderdate,cost, 
sum(cost) over() as sample1,--所有行相加 
sum(cost) over(partition by name) as sample2,--按name分组,组内数据相加 
sum(cost) over(partition by name order by orderdate) as sample3,--按name分组,组内数据累加 
sum(cost) over(partition by name order by orderdate rows between UNBOUNDED PRECEDING and current row ) as sample4 ,--和sample3一样,由起点到当前行的聚合 
sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and current row) as sample5, --当前行和前面一行做聚合 
sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING AND 1 FOLLOWING ) as sample6,--当前行和前边一行及后面一行 
sum(cost) over(partition by name order by orderdate rows between current row and UNBOUNDED FOLLOWING ) as sample7 --当前行及后面所有行 
from business;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

2.6 Rank

RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
  • 1
  • 2
  • 3

如:

select * ,row_number() over() as rownum from business;
  • 1

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/731193
推荐阅读
相关标签
  

闽ICP备14008679号