赞
踩
Hive内置了不少函数,使用show functions
命令可以查看当下版本支持的函数,使用describe function extended funcname
可以查看函数的使用方法。
UDF函数
upper 字符串小写转大写
lower 字符串大写转小写
length 字符串长度函数
concat,concat_ws 字符串连接
substr 字符串截取
regexp_extract 正则表达式解析
day 日期转天
weekofyear 日期转周
cast 数据类型转换
mask_hash 数据脱敏
UDAF函数
avg 计算平均数
sum 求和
count 计数
max 求最大值
min 求最小值
UDTF函数
explode 将一个数组或Map类型的列拆分成多行(一行产生多行)
lateral view 与explode函数一起使用,一行产生多行进行统计分析
transpose 多列转换为行
json_tuple 解析json格式数据
explode函数支持输入数组或字典类型的参数,将一行复杂数据拆分为多行,如果需要分割string,可以和split函数嵌套使用。
数组类型参数
select explode(array(1,2,3,4))
与split函数结合使用
select explode(split('A,B,C,D',',')) as letter
Map类型参数
select explode(map('A','1','B','2','C','3','D','4')) as (key_name,value_name)
lateral view一般与explode等UDTF函数使用,首先将UDTF函数应用到每一行上,每一行得到多行输出,这些输出组建成一张虚拟表,然后这张虚拟表会跟当前表进行join操作,join完成之后会得出一张结果虚拟表。
语法格式:
LATERAL VIEW udtf (expression) tableAlias[虚拟表别名] AS coluumAlias[产生列别名] ( ',' , columnAlias)
产生多行
select letter,tmp_id
from(
select 'A' letter,array(1,2,3) numbers
union all
select 'B' letter,array(1,2,3) numbers
)t
lateral view explode(numbers) tmp_table as tmp_id
结果如下:
分组统计
select tmp_id,count(1)
from(
select 'A' letter,array(1,2,3) numbers
union all
select 'B' letter,array(1,2,3) numbers
)t
lateral view explode(numbers) tmp_table as tmp_id
group by tmp_id
结果如下:
一行多个字段转换为多行一个字段
-- 直接展开多行
select
flow_no,
tmp_id
from(
select
flow_no,
array(<字段1>,<字段2>,<字段3>) as tmp
from
tableName
)t
lateral view explode(tmp) tmp_table as tmp_id
-- 展开多行并添加字段标记每行记录的关系或类型
select
flow_no,
tmp_id,
tmp_value
from(
select
flow_no,
map('字段1名称',<字段1>,'字段2名称',<字段2>,'字段3名称',<字段3>) as tmp
from
tableName
)t
lateral view explode(tmp) tmp_table as tmp_id,tmp_value
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。