hive 函数总结--更新中

row_number() over、nvl、from_unixtime、datediff、union、parse_url、parse_url_tuple、locate、split、substr、instr、concat、regexp_extract 

row_number() over

分组统计排序

语法:ROW_NUMBER() OVER(PARTITION BY COLUMNORDER BY COLUMN)

row_number() OVER (PARTITION BY COL1 ORDERBY COL2)表示根据COL1分组,在分组内部根据COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(该编号在组内是连续并且唯一的)。

分组统计排序

ROW_NUMBER() OVER (PARTITION BY video_type_name ORDER BY count(course_name) DESC) AS rnk  sqlserver:rank() over()函数 - 正则吃饺子 - 博客园

select count(course_name) total,video_type_name,course_name,

ROW_NUMBER() OVER (PARTITION BY video_type_name ORDER BY count(course_name) DESC) AS rnk

from video_see_records

group by video_type_name,course_name

nvl

空值转换函数,必须是null,''不行

NVL(expr1, expr2): 
1、空值转换函数; 
2、类似于mysql-nullif(expr1, expr2),sqlserver-ifnull(expr1, expr2)。

备注: 
1、如果expr1为NULL,返回值为 expr2,否则返回expr1。 
2、适用于数字型、字符型和日期型,但是 expr1和expr2的数据类型必须为同类型。

from_unixtime

把时间戳格式的时间,转化为年月日时分秒格式的时间

from_unixtime的参数要求为整数,且单位为秒。

如果从业务系统拿到的时间戳格式的时间单位为毫秒,则需要先将它转化为秒,方法如下

from_unixtime( int (timestamp_in_millisecond / 1000))

datediff

两个时间参数的日期之差

parse_url

 函数parse_url,解析URL字符串

parse_url(url, partToExtract[, key]) - extracts a part from a URL  
解析URL字符串,partToExtract的选项包含[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]。  
  
举例:  
* parse_url('http://facebook.com/path/p1.php?query=1', 'HOST')返回'facebook.com'   
* parse_url('http://facebook.com/path/p1.php?query=1', 'PATH')返回'/path/p1.php'   
* parse_url('http://facebook.com/path/p1.php?query=1', 'QUERY')返回'query=1',  
可以指定key来返回特定参数,例如  
* parse_url('http://facebook.com/path/p1.php?query=1', 'QUERY','query')返回'1',  
  
* parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'REF')返回'Ref'   
* parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'PROTOCOL')返回'http'  
 注意:HOST\PATH需要大写

parse_url_tuple

类似parse_url(),但它可以同时提取多个部分并返回

返回值: string
    说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
  举例:

hive> select parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) from dual;

facebook.com

hive> select parse_url_tuple(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1’, ‘QUERY:k1’, ‘QUERY:k2’);

v1 v2

locate

非全量匹配

locate(string substr, string str[, int pos]) 

 join模糊匹配 
left join , right join , full join

hive> select * from a left join b on 1=1 where locate(a.col,b.col)>0

hive> select * from a   right join b on 1=1 where locate(a.col,b.col)>0

hive> select * from a full join b  where locate(a.col,b.col)>0

除了将locate()直接写在where条件里,也可以使用row_number()来搭配使用。

select col from(

select if(locate(a.col, b.col)>0, b.col, a.col) as col,

row_number() over(partition by a.col order by locate(a.col, b.col) desc) as rn

from a left join b on 1=1 ) as a where rn=1

split

 分割字符串函数

语法:  split(string str, string pat)
返回值:  array  
说明: 按照pat字符串分割str,会返回分割后的字符串数组  
举例:  
hive> select split(‘abtcdtef’,'t’) from dual;  
["ab","cd","ef"]  

特殊字符
如正则表达式中的特殊符号作为分隔符时,需做转义 (前缀加上\)

如果是在shell中运行,hive脚本执行,特别注意\\要写\\\\,则(前缀加上\\)

注:有些特殊字符转义只需\,而有些需\\,eg.?。可能在语句翻译过程中经历经历几次转义。

substr

字符串截取,下标

第一种用法:

substr(string A,int start)和 substring(string A,int start),用法一样

功效:返回字符串A从下标start位置到结尾的字符串

第二种用法:

substr(string A,int start,int len)和 substring(string A,int start,int len),用法一样

功效:返回字符串A从下标start位置开始,长度为len的字符串

注意:substr下标start记做0或1都是从第一个开始,记做2是从第二个开始

instr

模糊匹配

instr(sourceStr,destStr,start,appearPosition) 
instr(’源字符串’ , ‘目标字符串’ ,’开始位置’,’第几次出现’)
1.destString 是匹配标准,sourceString 是被筛选的源数据集
2.start 代表查找的开始位置,这个参数可选的,默认为1;--从1开始计数
3.appearPosition代表想从源字符中查找出第几次出现的destStr,这个参数也是可选的, 默认为1
4.如果start的值为负数,则代表从右往左进行查找,但是位置数据 start 仍然从左向右计算。
5.返回值为:查找到的字符串的位置。如果没有查找到,返回0。

最简单例子:
在abcd中查找a的位置,从第一个字母开始查,查找第一次出现时的位置
select instr(‘abcd’,’a’,1,1) from dual; —1
select instr(‘abcd’,’c’,1,1) from dual; —3
select instr(‘abcd’,’e’,1,1) from dual; —0

应用于模糊查询:instr(字段名/列名, ‘查找字段’)
select count(k.terminal) from cr_t_etl09 k  where k.partition='2020-12-01' and instr(k.prevurl,'https://baidu.com')=1;
等同于
select count(k.terminal) from cr_t_etl09 k  where k.partition='2020-12-01' and like 'https://baidu.com%' ;

应用于判断包含关系:
select ccn,mas_loc from mas_loc where instr(‘FH,FHH,FHM’,ccn)>0;
等同于
select ccn,mas_loc from mas_loc where ccn in (‘FH’,’FHH’,’FHM’);

trim

trim,只能将标准的英文空格删掉

concat

用于将多个字符串连接成一个字符串

select concat(cookie,'-',rnk,'.0-',url)url_c from dwd_visit

 

regexp_extract 

正则表达式,匹配截取

regexp_extract(string subject, string pattern, int index)

返回使用模式提取的字符串。例如,regexp_extract('foothebar','foo(。*?)(bar)',2)返回'bar'。请注意,使用预定义的字符类时必须格外小心:使用'\ s'作为第二个参数将与字母s匹配;'\\ s'是匹配空格等所必需的。'index'参数是Java regex Matcher group()方法的索引。

hive官网函数地址

LanguageManual UDF - Apache Hive - Apache Software Foundation
网速灾备。。hive官网函数-中文说明文档_hello_java_lcl的博客-CSDN博客_hive 函数文档
为方便看懂转换了中文

union

去重

一、关系运算: 4 1. 等值比较: = 4 2. 不等值比较: 4 3. 小于比较: < 4 4. 小于等于比较: 5 6. 大于等于比较: >= 5 7. 空值判断: IS NULL 5 8. 非空判断: IS NOT NULL 6 9. LIKE比较: LIKE 6 10. JAVA的LIKE操作: RLIKE 6 11. REGEXP操作: REGEXP 7 二、数学运算: 7 1. 加法操作: + 7 2. 减法操作: - 7 3. 乘法操作: * 8 4. 除法操作: / 8 5. 取余操作: % 8 6. 位与操作: & 9 7. 位或操作: | 9 8. 位异或操作: ^ 9 9.位取反操作: ~ 10 三、逻辑运算: 10 1. 逻辑与操作: AND 10 2. 逻辑或操作: OR 10 3. 逻辑非操作: NOT 10 四、数值计算 11 1. 取整函数: round 11 2. 指定精度取整函数: round 11 3. 向下取整函数: floor 11 4. 向上取整函数: ceil 12 5. 向上取整函数: ceiling 12 6. 取随机数函数: rand 12 7. 自然指数函数: exp 13 8. 以10为底对数函数: log10 13 9. 以2为底对数函数: log2 13 10. 对数函数: log 13 11. 幂运算函数: pow 14 12. 幂运算函数: power 14 13. 开平方函数: sqrt 14 14. 二进制函数: bin 14 15. 十六进制函数: hex 15 16. 反转十六进制函数: unhex 15 17. 进制转换函数: conv 15 18. 绝对值函数: abs 16 19. 正取余函数: pmod 16 20. 正弦函数: sin 16 21. 反正弦函数: asin 16 22. 余弦函数: cos 17 23. 反余弦函数: acos 17 24. positive函数: positive 17 25. negative函数: negative 17 五、日期函数 18 1. UNIX时间戳转日期函数: from_unixtime 18 2. 获取当前UNIX时间戳函数: unix_timestamp 18 3. 日期转UNIX时间戳函数: unix_timestamp 18 4. 指定格式日期转UNIX时间戳函数: unix_timestamp 18 5. 日期时间转日期函数: to_date 19 6. 日期转年函数: year 19 7. 日期转月函数: month 19 8. 日期转天函数: day 19 9. 日期转小时函数: hour 20 10. 日期转分钟函数: minute 20 11. 日期转秒函数: second 20 12. 日期转周函数: weekofyear 20 13. 日期比较函数: datediff 21 14. 日期增加函数: date_add 21 15. 日期减少函数: date_sub 21 六、条件函数 21 1. If函数: if 21 2. 非空查找函数: COALESCE 22 3. 条件判断函数:CASE 22 4. 条件判断函数:CASE 22 七、字符串函数 23 1. 字符串长度函数:length 23 2. 字符串反转函数:reverse 23 3. 字符串连接函数:concat 23 4. 带分隔符字符串连接函数:concat_ws 23 5. 字符串截取函数:substr,substring 24 6. 字符串截取函数:substr,substring 24 7. 字符串转大写函数:upper,ucase 24 8. 字符串转小写函数lower,lcase 25 9. 去空格函数:trim 25 10. 左边去空格函数:ltrim 25 11. 右边去空格函数:rtrim 25 12. 正则表达式替换函数:regexp_replace 26 13. 正则表达式解析函数:regexp_extract 26 14. URL解析函数:parse_url 26 15. json解析函数:get_json_object 27 16. 空格字符串函数:space 27 17. 重复字符串函数:repeat 27 18. 首字符ascii函数:ascii 28 19. 左补足函数:lpad 28 20. 右补足函数:rpad 28 21. 分割字符串函数: split 28 22. 集合查找函数: find_in_set 29 八、集合统计函数 29 1. 个数统计函数: count 29 2. 总和统计函数: sum 29 3. 平均值统计函数: avg 30 4. 最小值统计函数: min 30 5. 最大值统计函数: max 30 6. 非空集合总体变量函数: var_pop 30 7. 非空集合样本变量函数: var_samp 31 8. 总体标准偏离函数: stddev_pop 31 9. 样本标准偏离函数: stddev_samp 31 10.位数函数: percentile 31 11. 位数函数: percentile 31 12. 近似位数函数: percentile_approx 32 13. 近似位数函数: percentile_approx 32 14. 直方图: histogram_numeric 32 九、复合类型构建操作 32 1. Map类型构建: map 32 2. Struct类型构建: struct 33 3. array类型构建: array 33 十、复杂类型访问操作 33 1. array类型访问: A[n] 33 2. map类型访问: M[key] 34 3. struct类型访问: S.x 34 十一、复杂类型长度统计函数 34 1. Map类型长度函数: size(Map) 34 2. array类型长度函数: size(Array) 34 3. 类型转换函数 35
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值