1、hive的内置运算符
比较运算符:
A==B
A<>B 不等于
A<B
A<=B
A>=B
A IS NULL
A IS NOT NULL
like 模糊查询
算术运算符:
A+B
A-B
A*B
A/B
A%B
逻辑运算符:
A AND B
A && B:(与A AND B一样并且的意思)
A OR B
A | B:(与A OR B一样或者的意思)
NOT A
! A (与 NOT A一样非的意思)
对复杂类型的操作:
查询数组中的数据:
select 数组字段[下标] from 表名
查询map中对应key的数据:
select map字段名[“key”] from 表名
查询struct中对应名字的值:
select 字段名.city from 表名
2、hive的内置函数包括3种:
UDF,UDAF,UDTF
UDF:一进一出
(类似于:sql里面的dataformat日期函数,针对的是每列中的每个元素进行日期的格式话,输出的是一个格式化后的数据)
UDAF:多进一出,聚集函数
(类似于:sql里面的sum,max,min,等函数,针对的是每列中所有的元素,输出的是一个元素)
UDTF:一进多出
(类似于:我数据库里面有的字段每行数据是一个数组,我要对其进行拆分等操作。)
内置函数-数学函数
round(double a) :
四舍五入
floor(double a):
向下舍入最接近的值
例如:floor(21.2) 结果:21
ceil(double a):
向上舍入最接近的值
例如:ceil(21.2) 结果:22
exp(double n):
返回e的n次方
ln(double a):
返回以e为底a的对数
log10(double a)
返回以10为底a的对数
log2(double a)
返回以2为底a的对数
log(double a,double b)
返回以a为底b的对数
pow(double a,double b)
返回a的b次幂
sqrt(double a)
返回a的平方根
abs(double a):
返回a的绝对值
pmod(int a,int b)
返回a除以b的余数的绝对值
sin(double a)
返回给定角度的正弦值
cos(double a)
返回给定角度的余弦值
ssin(double a)
返回给定角度的正弦值,的相反数,前提a[-1,1]
acos(double a)
返回给定角度的余弦值,的相反数,前提a[-1,1]
positive(int ,a)
返回a的值
例如:positive(2),返回的是2
negative(int ,a)
返回a的相反数
例如:negative(2),返回的是-2
内置函数-收集函数
size(Map<K,V>)
返回的是map类型中元素的数量
map_keys(Map<K,V>)
返回map中所有的key
map_values(Map<K,V>)
返回map中所有的value
size(Array<T>)
返回的是数组类型中元素的数量
array_contains(Array<T>,value)
返回数组中包含value的值,有的话返回为true否则为false
sort_array(Array<T>)
对数组进行排序
内置函数-类型转换函数
cast( b as <type> )
将字段b转换为某种类型,转换失败的话返回的是NULL
例如:cast(“1” as int )我将字符串1转换为int类型
内置函数-日期函数
data:1992-11-21
year(String date)
返回指定日期date中的年
month(String date)
返回指定日期date中的月
day(String date)
返回指定日期date中的天
hour(String date)
返回指定日期date中的小时
minute(String date)
返回指定日期date中的分钟
second(String date)
返回指定日期date中的秒
日期的计算:
datadiff(String enddate,String startdate)
2个日期的时间差
date_add(String startdate,int days)
对给定的日期加上days天
date_sub(String startdate,int days)
对给定的日期减去days天
内置函数-条件函数
if(a=b,T,V)
如果a=b,返回T(自定义一个值),不等于则返回V(自定义一个值)
CASE a WHEN b THEN c [WHEN d THEN e] *[ELSE f] END
给定一个a这个值
当a=b的时候返回c,当a=d的时候返回e,否则就返回f
CASE WHEN a TEHN b [WHEN c THEN d] * [ELSE e] END
当值为a的时候返回b,当值为c的时候返回d,否则返回e
内置函数-字符函数
upper (String a) ucase (String a)
将字符串大写
lower(String b) lcase (String b)
将字符串小写
length(String a)
返回a的长度
reverse(String a)
返回倒序的字符串
concat(String a,String b)
将多个字符串进行拼接
concat_ws(String “:”,String A,String B)
链接多个字符串,使用指定的分隔符:进行隔开
substr(String A,int start)
截取字符串
trim(String A)
删除字符串2端的空格,中间的空格保留
regexp_replace(String A,String B,Strng C)
字符串A中的B字符被C字符所取代
repeat(String str,int a)
输出重复了a次的字符串str
3、hive的聚合函数UDAF
count(*)
统计总行数,包括NULL的行
count(DISTINCT *)
去重,并进行统计
sum(DISTINCT col)
去重求和
avg(DISTINCT col)
去重求平均数
max(col):最大值
min(col):最小值
var_pop(col):返回指定列的方差
var_samp(col):返回指定列的样本方差
corr(col2,col3):返回2列的相关系数
3、hive的内置函数UDTF
explode(array<TYPE> a)
数组一条记录中有多个参数,将参数拆分,每个参数生成一列
explode(MAP)
将MAP进行拆分后,key是一个字段,value是一个字段
4、hive的创建自定义函数: