hive函数有关总结

1.函数分类标准

原生分类标准:  内置函数 和 用户定义函数(UDF,UDAF,UDTF)

分类标准扩大化:  本来,UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的; 但是,现在可以将这个分类标准扩大到hive中所有的函数,包括内置函数和自定义函数;

目前hive三大标准
UDF:(User-Defined-Function)普通函数:  特点是一进一出(输入一行数据输出一行数据)        举例: split
UDAF:(User-Defined Aggregation Function)聚合函数: 特点是多进一出(输入多行输出一行)   举例: count sum max  min  avg
UDTF:(User-Defined Table-Generating Functions)表生成函数:  特点是一进多出(输入一行输出多行)   举例: explode

查询所有hive函数名称:  show functions;
查看某函数使用帮助文档: desc function [extended] 函数名;         注意: 加上extended关键字能查看详细信息示例

2.复杂类型函数

hive复杂类型:   array  struct  map

array类型: 又叫数组类型,存储同类型的单数据的集合
     取值: 字段名[索引]   注意: 索引从0开始
     获取长度的函数: size(字段名)       常用
     判断是否包含某个数据的函数: array_contains(字段名,某数据)   常用
     对数组进行排序的函数: sort_array(数组)

struct类型: 又叫结构类型,可以存储不同类型单数据的集合
     取值: 字段名.子字段名n
    
map类型: 又叫映射类型,存储键值对数据的映射(根据key找value)
    取值: 字段名[key]
    获取长度的函数: size(字段名)        常用       
    获取所有key的函数: map_keys()            常用 
    获取所有value的函数: map_values()        常用 

3.字符串函数

字符串常见的函数:
concat: 字符串紧凑拼接到一起生成新字符串
concat_ws: 字符串用指定分隔符拼接到一起生成新字符串        常用 
length: 获取字符串长度             常用 
lower: 把字符串中的字母全部变成小写
upper: 把字符串中的字母全部变成大写
trim: 把字符串两端的空白去除         常用 

拓展字符串函数
substr: 截取字符串         常用 
replace: 替换字符串        常用 
regexp_replace: 正则替换字符串
parse_url: 解析url(统一资源定位符)  组成: 协议/主机地址:端口号/资源路径?查询参数
get_json_object: 获取json对象解析对应数据

4.日期时间函数

current_timestamp: 获取时间原点到现在的秒/毫秒,底层自动转换方便查看的日期格式        常用 
to_date: 字符串格式时间戳转日期(年月日)
current_date: 获取当前日期(年月日)        常用

year: 获取指定日期时间中的年        常用 
month:获取指定日期时间中的月        常用 
day:获取指定日期时间中的日          常用 
hour:获取指定日期时间中的时
minute:获取指定日期时间中的分
second:获取指定日期时间中的秒

dayofmonth: 获取指定日期时间中的月中第几天
dayofweek:获取指定日期时间中的周中第几天
quarter:获取指定日期时间中的所属季度
weekofyear:获取指定日期时间中的年中第几周

datediff: 获取两个指定时间的差值        常用 
date_add: 在指定日期时间上加几天        常用 
date_sub: 在指定日期时间上减几天

unix_timestamp: 获取unix时间戳(时间原点到现在的秒/毫秒)    注意: 可以使用yyyyMMdd HH:mm:ss进行格式化转换
from_unixtime:  把unix时间戳转换为日期格式的时间          注意: 如果传入的参数是0,获取的是时间原点1970-01-01 00:00:00

5.数学函数

round: 指定小数保留位数    常用
rand: 生成0-1的随机数
pi: 生成π结果
ceil: 向上取整
floor: 向下取整

6.条件函数

if(参数1,参数2,参数3): 如果参数1结果为true,就执行参数2内容,否则执行参数3的内容
case...when.then...end: 条件判断类似于编程语言中的if..else if ...else...     常用


isnull(数据) : 为空null: true 不为空:false

isnotnull(数据): 不为空: true 为空null:false

nvl(数据,参数2): 如果数据不为空打印数据,为空null打印第二个参数        常用 

coalesce(参数1,参数2...): 从左到右依次查找,返回第一个不是null的值,如果找到最后都是null,就返回null    常用

7.类型转换函数

类型转换: cast(数据 as 要转换的类型)        常用 

8.数据脱敏函数

-- mask_hash:  返回指定字符串的hash编码

9.其他函数

--取哈希值函数:hash

--MD5加密: md5(string/binary)

10.列转行和行转列

collect_set(字段名): 把多个数据收集到一起,默认去重
collect_list(字段名): 把多个数据收集到一起,默认不去重
把多个子串用指定分隔符拼接成一个大字符串: concat_ws(分隔符,多个数据...)      注意: 如果拼接数据不是字符串可以使用cast转换

11.JSON文件处理

get_json_object: 获取json对象解析对应数据  一次只能提取一个字段

json_tuple: 直接获取json对应数据  这是一个UDTF函数 可以一次解析提取多个字段

注意: 因为json_tuple是UDTF函数,所以也可以配合侧视图使用

12.开窗函数

开窗函数格式:  select ... 开窗函数 over(partition by 分组字段名 order by 排序字段名 asc|desc) ... from 表名;

聚合开窗函数: 原来学的聚合函数(max,min,sum,count,avg)配合over()使用的时候,这些聚合函数也可以叫开窗函数

排序开窗函数: row_number  dense_rank  rank
            row_number: 巧记: 1234   特点: 唯一且连续
            dense_rank: 巧记: 1223   特点: 并列且连续
               rank   : 巧记: 1224   特点: 并列不连续

13.其他开窗函数

其他开窗函数: ntile   lag和lead   first_value和last_value

ntile(x)功能: 将分组排序之后的数据分成指定的x个部分(x个桶)   
        注意ntile规则:尽量平均分配 ,优先满足最小(编号1)的桶,彼此最多不相差1个。

lag: 用于统计窗口内往上第n行值
lead:用于统计窗口内往下第n行值

first_value: 取分组内排序后,截止到当前行,第一个值
last_value : 取分组内排序后,截止到当前行,最后一个值

注意: 窗口函数结果都是单独生成一列存储对应数据

猜你喜欢

转载自blog.csdn.net/MSJ3917/article/details/134427964