hive之函数

第一节:内置函数

一、显示内置函数列表

show functions;

默认271个

二、查看函数的基本使用

desc function funname;

desc function max;

三、查看函数的详细使用教程

desc function extended funname;

desc function extended max;

四、函数分类

1、UDF

USER DEFINE FUNCTION 用户定义函数,进一路出一路

2、UDAF

USER DEFINE aggregate FUNCTION  用户定义聚合函数,进多路出一路

3、UDTF

USER DEFINE table FUNCTION  用户定义表函数,进一路出多路

explode 炸裂

第二节:常用函数之数值

一、ceil

向上取整

ceil(x)  大于等于参数的第一个整数

二、floor

向下取整

floor(x)  小于等于参数的第一个整数

三、round

round(x[, d]) 参数1 需要四舍五入的数 参数2:小数位数

select round(3.556789);

select round(3.556789,2);

四、rand

求随机数  0-1

rand([seed])  参数:随机数种子,种子一样的,随机数固定的。

一般使用无参的select rand();

第二节:常用函数之字符串

一、简介

hive中的字符串,下标1开始的,字符串从右向左标记-1开始的。

二、split

split(str, regex)  参数1 字符串 参数2 切分的分隔符

select split("a,b,c,d",","); 返回值 数组类型

三、instr

instr(str, substr) 参数1:原始字符串,参数2:需要查找的子字符串

返回子字符串在原始字符串中第一次出现的位置,不存在 0

select instr("hello word","wo");

select instr("hello word","ww");

四、大小写

ucase  大写

lcase  小写

upper  大写

lower  小写

ucase(str)

五、字符串切分

substr

substring

substr(str, pos[, len])  参数1 字符串 参数2 位置 参数3 截取长度

六、去空格

trim(str)  去前后空格

ltrim(str)   去前空格

rtrim(str)   去后空格

七、拼接

concat(str1, str2, ... strN)  将参数拼接为一个字符串

concat_ws(分隔符,str1,str2....)  按照一定的分隔符,拼接字符串的

八、字符串长度

length 返回字符串长度

第三节:常用函数之日期

一、获取当前系统时间戳

current_timestamp()

select current_timestamp();  日期 时间

current_date

select current_date();  获取当前系统的日期的

二、时间戳->日期

from_unixtime

from_unixtime(unix_time, format)  参数1 时间戳 参数2 日期格式

select from_unixtime(1558281600,"yyyy-MM-dd hh:mm:ss");

时间戳转成日期,其中时间戳必须是整形。

三、日期->时间戳

unix_timestamp(date[, pattern])  参数1 日志 参数2 参数1的表达式

select unix_timestamp("2019-5-20 17:27:56","yyyy-MM-dd hh:mm:ss");

四、时间提取

year 年

month 月

day

hour

minute

second

select year("2019-3-4");

五、其他

to_date:返回日期

date_add:当前日期加几天

date_sub:当前日期  减几天

day:当前日期的号

month:当前日期是几月份

year:当前日期是哪一年

2018-6-30

weekofyear:给定的日期的周数

第四节:常用函数之类型转换

cast(原始数据 as 需要转换的类型)

cast(age as bigint)

第五节:常用函数之条件判断

一、if

if(判断,返回值1,返回值2);

类似java中的三元运算符

二、nvl

nvl(需要判断的字段,参数1为null的返回值);

用于处理null值

三、coalesce

coalesce;

返回第一个不为null的值

第六节:常用函数之炸裂函数

一、简介

explode:炸裂函数,将数组或map集合进行炸裂。

数组或map集合中的每一个元素为一行[1,2,3,4]{a:1,b:2}

对于数组每个元素只有一个,炸裂的结果只有一列,对于map每个元素有k-v 炸裂出来的结果2列。

二、单独使用

作为查询的参数

第七节:常用函数之窗口函数

一、概念

hive中提供的,运用一定的语法,可以按照我们的用户需求,将表中的数据分成多个独立的部分,每一个部分都是单独执行的,每一个部分数据称为一个窗口,每一个窗口内部的逻辑只执行当前窗口的数据,不会垮窗口执行数据。

开窗函数一般和其他的功能性函数一起使用,在都出开窗的那一字段。

在over子句中可以只给排序,默认只有一个窗口。

二、over子句

1、简介

over子句用于指定开窗的,每一个“窗口”依据。一般情况下,指定的每一个窗口按照某一个字段相同的数据放在每一个窗口中。

over(指定开窗依据的字段 指定每一个窗口内的排序规则)

2、开窗依据

必须要指定的。

一旦指定开窗依据的字段,就会将相同的字段值,放在一个窗口中。

语法:

distribute by 字段名

partition by 字段名

3、排序规则

可以指定,也可以不指定。

语法:

sort by --- distribute by

order by --- partition by

4、总结

over(partition by ...order by ..)

over(distribute by ....sort by )

over子句(开窗)不能单独使用,需要配合一些功能性的函数一起使用。

三、配合聚合函数

1、简介

max(字段) | sum(字段) + over子句,根据over子句指定的开窗规则,进行求每一个窗口内部的最大值 | 总和。

一般用于利润累计,目前最大值等

四、分组求topN

1、简介

rank|dense_rank 添加排名的,每个开窗内部,添加排名的

row_number添加行号的,1开始的

原文地址:https://www.cnblogs.com/zhangxiaofan/p/11037417.html

时间: 2024-10-11 04:28:03

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. 字符串连接函数