hive一些函数总结

函数分类
内置函数:简单函数(map),聚合函数(reduce),集合函数(map),特殊函数
正则表达式
自定义函数:UDF(map),UDAF(reduce)

1.显示当前会话有多少函数可用
show functions
2.显示函数的描述信息
desc function concat
3.显示函数的扩展描述信息
desc function extended concat;

简单函数
函数的计算粒度-单条记录
关系运算
数学运算
逻辑运算
数值计算
类型转换
日期函数
条件函数
字符串函数
统计函数

聚合函数
函数处理的数据粒度-多条记录
sum()-求和
count()-求数据量
avg()-求平均数
distinct-求不同值数
min-求最小值
max-求最大值

集合函数
复合类型构建
复杂类型访问
复杂类型长度

窗口函数
应用场景
用于分区排序
动态Group by
Top N
累计计算
层次查询
Windowing functions
lead
lag
FIRST_VALUE
LAST_VLAUE

and or 优先级:and 优先级高于or
select id,money from winfunc
where (id =‘1001‘ or id =‘1002‘)
and money =‘100‘

类型转换

cast(money as int)

if(boolean,v1,v2)
select if(2>1,"trueValue","falseValue") from dual;

case when condition then int when then int else int end

返回类型必须一样
select case when id=‘1001‘ then ‘V1‘ when id=‘1002‘ then ‘V2‘
else ‘V3‘ end from tableName;

取json属性值
get_json_object()

select get_json_object(‘{"name":"jack","age":"20"}‘,‘$.name‘)
from tableName ;

select parse_url(‘http://baidu.com/path1/p.php?k1=v1&k2=v2#Ref1‘,‘HOST‘)
from tableName;//baidu.com

concat() 字符串拼接
select concat(type,‘123‘) from tableName;

caoncat_ws() 带分隔符的字符串连接
caoncat_ws(‘‘,array<string>)
select caoncat_ws(‘-‘,type,‘123‘) from tableName;

select caoncat_ws(‘-‘,split(type,‘‘)) from tableName;

collect_set() 把一列收集起来,去重,返回数组

select collect_set(id) from tableName;

collect_list() 把一列收集起来,不去重,返回数组

select collect_list(id) from tableName;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
窗口函数
取每个员工第一个最大money的值
first_value(money) over (partition by id order by money desc
rows between 1 preceding and 1 following )

1 preceding
当前行
1 following

第三列的值三行中取最小值
1001 100.0 100.0
1001 150.0 100.0
1001 150.0 150.0
1001 200.0 150.0

当前行指定向后范围的数据
lead(money,2) over (order by money)
1001 100.0 150.0
1001 150.0 200.0
1001 150.0 NULL
1001 200.0 NULL
当前行指定向前范围的数据
lag(money,2) over (order by money)
1001 100.0 NULL
1001 150.0 NULL
1001 150.0 100.0
1001 200.0 150.0

排序,相当于行号,相同记录一样,否则为自己当前记录行号
rank() Over(partition by id order by money )
select id,money,rank() over(partition by id order by money ) from winfulc;
1001 100.0 1
1001 150.0 2
1001 150.0 2
1001 200.0 4

dense_rank() 行号在你前面最大行号加1
1001 100.0 1
1001 150.0 2
1001 150.0 2
1001 200.0 3

查看当前值在里面的比例
cume_dist() over (partition by id order by money)
((相同值最大行号)/(行号(第几行)))*每个值的个数
1001 100.0 0.25 (4/1)*1
1001 150.0 0.75 (4/3)*2
1001 150.0 0.75 (4/3)*2
1001 200.0 1.0 (4/4)*1

percent_rank() over (partition by id order by money)
((相同值最小行号-1)/(行数-1))
1001 100.0 0.0
1001 150.0 0.3333
1001 150.0 0.3333
1001 200.0 1.0

把所有的数据分两份
ntitle(2) over (partition by id order by money desc nulls last) 分片

select id,money,ntile(2) over (order by money desc) from winfunc;

混合函数
java_method
reflect
hash

开平方
select java_method("java.lang.Math","sqrt",cast(id as double))
from winfunc;

udft 一行分成多行

select id,adid from winfunc
lateral view explode (split(type,‘B‘)) tt
as adid

时间: 2024-10-12 17:28:19

hive一些函数总结的相关文章

Hive自定义函数的学习笔记(1)

前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到, 因此hive提供了自定义函数的接口, 方便用户扩展. 自己好像很久没接触hadoop了, 也很久没博客了, 今天趁这个短期的项目, 对hive中涉及的自定义函数做个笔记. 准备: 编写hive自定义函数前, 需要了解下当前线上hive的版本. hive --vesion 比如作者使用到的hive

Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)

上篇: Hadoop3集群搭建之--虚拟机安装 Hadoop3集群搭建之--安装hadoop,配置环境 Hadoop3集群搭建之--配置ntp服务 Hadoop3集群搭建之--hive安装 Hadoop3集群搭建之--hbase安装及简单操作 Hadoop3集群搭建之--hive添加自定义函数UDF Hadoop3集群搭建之--hive添加自定义函数UDTF 上篇中,udtf函数,只有为一行输入,一行输出.udtf是可以一行输入,多行输出的. 简述下需求: 输入开始时间,结束时间,返回每个小时的

hive自定义函数(UDF)

首先什么是UDF,UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就可以方便地插入用户写的处理代码并在查询中使用它们,相当于在HQL(Hive SQL)中自定义一些函数,首先UDF必须用java语言编写,Hive本身就是用java写的. 编写UDF需要下面两个步骤: 1.继承org.apache.hadoop.hive.ql.UDF 2.实现evaluate函数,这

hive自定义函数UDF UDTF UDAF

Hive 自定义函数 UDF UDTF UDAF 1.UDF:用户定义(普通)函数,只对单行数值产生作用: UDF只能实现一进一出的操作. 定义udf 计算两个数最小值 public class Min extends UDF { public Double evaluate(Double a, Double b) { if (a == null) a = 0.0; if (b == null) b = 0.0; if (a >= b) { return b; } else { return a

[Hive]Hive自定义函数UDF

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数 用户自定义函数(user defined function),针对单条记录. 编写一个UDF,需要继承UDF类,并实现evaluate()函数.在查询执行过程中,查询中对应的每个应用到这个函数的地方都会对这个类进行实例化.对于每行输入都会调用到evaluate()函数.而evaluate()函数处理的值会返回给Hive.同时用户是可以重载evaluate方法的.Hive会像Java的方法重载一样,自动选择匹配的

Hive自定义函数(UDF、UDAF)

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. UDF 用户自定义函数(user defined function)–针对单条记录. 创建函数流程 1.自定义一个Java类 2.继承UDF类 3.重写evaluate方法 4.打成jar包 6.在hive执行add jar方法 7.在hive执行创建模板函数 8.hql中使用 Demo01: 自定义一个Java类 package UDFDemo; import org.apache.hadoop.hive.

Hive自定义函数UDAF开发

Hive支持自定义函数,UDAF是接受多行,输出一行. 通常是group by时用到这种函数. 其实最好的学习资料就是官方自带的examples了. 我这里用的是0.10版本hive,所以对于的examples在 https://github.com/apache/hive/tree/branch-0.10/contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example 我这里的功能需求是: actionCount(act_code,ac

Hive 自定义函数 UDF UDAF UDTF

UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ public class Min extends UDF { public Double evaluate(Double a, Double b) { if (a == null) a = 0.0; if (b == null) b = 0.0; if (a >= b) { return b; } el

Hive自定义函数UDF和UDTF

UDF(user defined functions) 用于处理单行数据,并生成单个数据行. PS: l 一个普通UDF必须继承自"org.apache.hadoop.hive.ql.exec.UDF".l 一个普通UDF必须至少实现一个evaluate()方法,evaluate函数支持重载. 主要步骤如下: 步骤1 把以上程序打包成AddDoublesUDF.jar,并上传到HDFS指定目录下(如" /user/hive_examples_jars/" )且创建函

hive字符串函数

1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') from lxw_dual; 7 2. 字符串反转函数:reverse 语法: reverse(string A) 返回值: string 说明:返回字符串A的反转结果 举例: hive> select reverse(abcedfg') from lxw_dual; gfdecba 3. 字符串连接函数