Hive的内置函数

HIVE除了提供了类似mysql的sql的语法外,还提供了大量内置的函数,方便开发者来调用,编写功能丰富的处理程序。使用如下命令查看当前hive版本支持的所有内置函数。

show functions; 显示函数的描述信息:

DESC FUNCTION concat;显示函数的扩展描述信息:

DESC FUNCTION EXTENDED concat;下面我们对其中重要的,使用频率高的函数使用进行详细讲解。

1 字符串函数

主要针对字符串数据类型进行操作,比如下面这些:

1)字符串连接函数:concat

语法:concat(string A,stringB...)返回值:string。说明:返回输入字符串连接后的结果,支持任意个输入字符串举例:

|-------------------------------------------------------|
| hive> select concat(``'abc'``,``'def'``,``'gh'``) ; |

执行结果:abcdefgh

2)带分隔符字符串连接函数:concat_ws

语法:concat_ws(string SEP,string A,string B...);返回值:string。说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符,举例:

|--------------------------------------------------------|
| hive> select concat_ws(``','``,``'def'``,``'gh'``) ; |

执行结果:def,gh

3)小数位格式化成字符串函数:format_number

语法:format_number(number x,int d)返回值:string,说明:将数值的小数位格式化成d位,四舍五入举例:

|--------------------------------------------------|
| hive> select format_number(``5.23456``,``3``); |

执行结果:5.235

4)字符串截取函数:substr,substring

语法:substr(string A,int start,int long),substring(string A, int start),返回值:string。说明:返回字符串A从start位置到结尾的字符串举例:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| hive> select substr(``'abcde'``,``3``); 执行结果:cde hive> select substring(``'abcde'``,``3``); 执行结果:cde hive>select substr(``'abcde'``,-``1``) ;(和ORACLE相同) 执行结果:e |

5)字符串查找函数: instr

语法:instr(string str, string substr),返回值:int。说明:返回字符串substr在str中首次出现的位置举例:

|----------------------------------------------|
| hive> select instr(``'abcdf'``,``'df'``) ; |

执行结果:4

6)字串转换成map函数: str_to_map

语法:str_to_map(text[,delimiter1,delimiter2]),返回值:map<string,string>。说明:将字符串按照给定的分隔符转换成map结构举例:

|-------------------------------------------------------|
| hive> select str_to_map(``'k1:v1,k2:v2'``,``','``); |

执行结果:{"k2":"v2","k1":"v1"}

7)字符串转大写函数:upper,ucase

语法:upper(string A)、ucase(stringA),返回值:string。说明:返回字符串A的大写格式举例:

|-------------------------------------------------------------------------------------------------|
| hive> select upper(``'abSEd'``); 执行结果:ABSED hive> select ucase(``'abSEd'``); 执行结果:ABSED |

8)字符串转小写函数:lower,lcase

语法:lower(string A) lcase(string A),返回值:string。说明:返回字符串A的小写格式举例:

|---------------------------------------------------------------------------------------------------|
| hive> select lower(``'abSEd'``) ; 执行结果:absed hive> select lcase(``'abSEd'``) ; 执行结果:absed |

9)正则表达式替换函数:regexp_replace

语法:regexp_replace(string A,string B,string C),返回值:string,说明:将字符串A中的符合iava正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。举例:

|-----------------------------------------------------------------|
| hive> select regexp_replace(``'foobar'``,``'oo|ar'``,``''``); |

执行结果:fb

补充正则表达式的知识:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 例如: runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。 runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。 colou?r,可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。 更多知识学习可以参考正则表达式 -- 语法 | 菜鸟教程 |

10)正则表达式解析函数:regexp_extract

语法:regexp_extract(string subject,string pattern,int index),返回值:string,说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。其中index的取值:

0是显示与之匹配的整个字符串、1 是显示第一个括号里面的字符串、2 是显示第二个括号里面的字符串

|--------------------------------------------------------------------------|
| hive>select regexp_extract(``'foothebar'``,``'foo(.*?)(bar)'``,``1``); |

执行结果:the

11)分割字符串函数:split

语法:split(string str,stringpa t),返回值:array。说明:按照pat字符串分割str,会返回分割后的字符串数组举例:

|------------------------------------------------|
| hive> select split(``'abtcdtef'``,``'t'``) ; |

执行结果:["ab","cd","ef"]

2 日期函数

1)获取当前UNIX时间函数:unix_timestamp

语法:unix_timestamp(),返回值:bigint。说明:获得当前时区的UNIX时间戳。时间戳是指(从1970-01-0100:00:00UTC到指定时间的秒数)到当前时区的时间格式,举例:

|----------------------------------|
| hive> select unix_timestamp(); |

执行结果:1323309615

2)日期转UNIX时间函数:unix_timestamp

语法:unix_timestamp(string date),返回值:bigint。说明:转换格式为"yyyy-MM-ddHH:mm:ss"的日期到UNIX时间戳。如果转化失败,则返回null。举例:

|---------------------------------------------------------|
| hive>select unix_timestamp(``'2011、1207 13:01:03'``); |

执行结果:1323234063

3)指定格式日期转UNIX时间戳函数:unix_timestamp

语法:unix_timestamp(string date,string pattern),返回值:bigint。说明:转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回null。举例:

|--------------------------------------------------------------------------------|
| hive>select unix_timestamp(``'20111207 13:01:03'``,``'yyyyMMdd HH:mm:ss'``); |

执行结果:1323234063

4)UNIX时间戳转日期函数:from_unixtime

语法:from_unixtime(bigint unixtime[,string format]),返回值:string。说明:转化UNIX时间戳举例:

|--------------------------------------------------------------|
| hive> select from_unixtime(``1323337489``,``'yyyyMMdd'``); |

执行结果:20111208

5)日期时间转日期函数:to_date

语法:to_date(string timestamp),返回值:string。说明:返回日期时间字段中的日期部分。举例:

|----------------------------------------------------|
| hive> select to_date(``'2021-12-23 10:03:01'``); |

执行结果:2021-12-23

6)日期转年数:year

语法:year(string date),返回值:int。说明:返回日期中的年。举例:

|-----------------------------------------------------------------------------------------|
| hive> select year(``'2021-12-08 10:03:01'``); hive> select year(``'2012-12-08'``) ; |

执行结果:2021

执行结果:2012

7)日期转月函数:month

语法:month(string date),返回值:int。说明:返回日期中的月份。举例:

|-------------------------------------------------------------------------------------------|
| hive> select month(``'2011-12-08 10:03:01'``); hive> select month(``'2011-08-08'``) ; |

执行结果:12

执行结果:8

8)日期转天函数:day

语法:day(string date),返回值:int。说明:返回日期中的天。举例:

|-----------------------------------------------|
| hive>select day(``'2021-12-08 10:03:01'``); |

执行结果:8

9)日期转小时函数:hour

语法:hour(string date),返回值:int。说明:返回日期中的小时。举例:

|-------------------------------------------------|
| hive> select hour(``'2021-12-08 10:03:01'``); |

执行结果:10

10)日期转分钟函数:minute

语法:minute(string date),返回值:int,说明:返回日期中的分钟。举例:

|---------------------------------------------------|
| hive> select minute(``'2021-12-08 10:03:01'``); |

执行结果:3

11)日期转秒函数:second

语法:second (string date),返回值:int。说明:返回日期中的秒。举例:

|---------------------------------------------------|
| hive> select second(``'2021-12-08 10:03:01'``); |

执行结果:1

12)日期转周函数:weekofyear

语法:weekofyear(string date),返回值:int。说明:返回日期在当前的周数。举例:

|-------------------------------------------------------|
| hive> select weekofyear(``'2021-12-08 10:03:01'``); |

执行结果:49

13)日期比较数:datediff

语法:datediff(string enddate,string startdate),返回值:int。说明:返回结束日期减去开始日期的天数。举例:

|-------------------------------------------------------------|
| hive> select datediff(``'2021-12-08'``,``'2021-12-01'``); |

执行结果:7

14)日期增加函数date_add

语法:date_add(string startdate,int days),返回值:string。说明:返回开始日期startdate增加days天后的日期。举例:

|---------------------------------------------------|
| hive> select date_add(``'2021-12-08'``,``10``); |

执行结果:2021-12-18

15)日期减少函数:date_sub

语法:date_sub(string startdate,int days),返回值:string。说明:返回开始日期startdate减少days天后的日期。举例:

|---------------------------------------------------|
| hive> select date_sub(``'2021-12-08'``,``10``); |

执行结果:2012-11-28

16) 当前时间日期函数:current_date

语法: current_date(),返回值: date。说明: 返回当前时间日期

|------------------------------|
| hive> select current_date; |

2022-01-06

17) 当前时间日期函数:current_timestamp

语法: current_timestamp(),返回值: timestamp。说明: 返回当前时间戳

|-------------------------------------|
| hive> select current_timestamp(); |

2022-01-06 22:52:11.309

18)月份增加函数:add_months

语法: add_months(string start_date, int num_months) ,返回值: string。说明: 返回当前时间下再增加num_months个月的日期

|-------------------------------------------------------------|
| hive> select add_months('``1996``-``10``-``21``',``10``); |

1997-08-21

19)最后一天的日期函数:last_day

语法: last_day(string date) ,返回值: string。说明: 返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)

|------------------------------------------|
| hive> select last_day(current_date()); |

2024-07-31

3条件函数

1) lf函数:if

语法:if(boolean testCondition,T valueTrue,T valueFalseOrNull),返回值:T。说明:当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull举例:

|----------------------------------------------------------------------------------------------------------|
| hive> select ``if``(``1``=``2``,``100``,``200``) ; hive> select ``if``(``1``=``1``,``100``,``200``); |

执行结果:200

执行结果:100

2)非空查找函数:COALESCE

语法:COALESCE(T v1,T v2,...),返回值:T。说明:返回参数中的第一个非空值:如果所有值都为NULL,那么返回NULL举例:

|-----------------------------------------------------|
| hive> select COALESCE(``null``,``'100'``,``50``); |

执行结果:100

3)条件判断函数:CASE

语法:CASE a WHEN b THEN c [WHEN d THEN e]*[ELSE f] END,返回值:T。说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f举例:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| hive> Select ``case 100 when ``50 then ``'tom' when ``100 then ``'mary' else 'tim' end; hive> Select ``case 200 when ``50 then ``'tom' when ``100 then ``'mary' else 'tim' end; |

执行结果:mary

执行结果:tim

4数学函数

1)取整函数:round

语法:round(double a),返回值:BIGINT。说明:返回double类型的整数值部分(遵循四舍五入)举例:

|---------------------------------------------------------------------|
| hive> select round(``3.1415926``); hive> select round(``3.5``); |

执行结果:3

执行结果:4

2)指定精度取整函数:round

语法:round(double a,int d),返回值:DOUBLE。说明:返回指定精度d的double类型举例:

|--------------------------------------------|
| hive> select round(``3.1415926``,``4``); |

执行结果:3.1416

3)绝对值数:abs

语法:abs(double a) abs(int a),返回值:double int。说明:返回数值a的绝对值举例:

|----------------------------------------------------------------------------------------|
| hive> select abs(-``3.9``); 执行结果:``3.9 hive> select abs(``11.9``); 执行结果:``11.9 |

4)positive函数:positive

语法:positive(int a),positive(double a),返回值:int double。说明:返回a,举例:

|--------------------------------------------------------------------|
| hive> select positive(-``10``); hive> select positive(``12``); |

执行结果:-10

执行结果:12

5)negative函数:negative

语法:negative(int a),negative(double a),返回值:int double。说明:返回-a,举例:

|------------------------------------------------------------------|
| hive> select negative(-``5``); hive> select negative(``8``); |

执行结果:5

执行结果:-8

5集合函数

1)map类型大小:size

语法:size(Map<K.V>),返回值:int。说明:返回map类型的size举例:

|----------------------------------------------------------------|
| hive> select size(map(``'k1'``,``'v1'``,``'k2'``,``'v2'``)); |

执行结果:2

2)array类型大小:size

语法:size(Array<T>),返回值:int。说明:返回array类型的size举例:

|------------------------------------------------------------|
| hive> select size(array(``1``,``2``,``3``,``4``,``5``)); |

执行结果:5

3) 判断数组否包含元素:array_contains

语法:array_contains(Array<T>,value),返回值: boolean。说明:返回Array<T>中是否包含元素value举例:

|---------------------------------------------------|
| hive> select array_contains(array(1,2,3,4,5),3); |

执行结果:``true

4) 获取map中所有value集合

语法:map_values(Map<K,V>),返回值:array<V>。说明:返回Map<K,V>中所有value的集合举例:

|---------------------------------------------------------------------|
| hive>select map_values(map(``'k1'``,``'v1'``,``'k2'``,``'v2'``)); |

执行结果:["v2","v1"]

相关推荐
小技工丨2 小时前
Hive-08之数据仓库之建模、分析
数据仓库·hive·hadoop
爱编程的王小美2 小时前
Hive基础
数据仓库·hive·hadoop
Arbori_262152 小时前
hive 面试题
大数据·数据仓库·hive·hadoop
爱搞技术的猫猫4 小时前
微店商品详情API接口实战指南:从零实现商品数据自动化获取
大数据·linux·运维·数据库·自动化
sunxunyong5 小时前
.hive-staging_hive临时文件处理
数据仓库·hive·hadoop
南宫文凯5 小时前
Storm实时流式计算系统(全解)——上
大数据·storm
Python数据分析与机器学习5 小时前
《基于Django和ElasticSearch的学术论文搜索推荐系统的设计与实现》开题报告
大数据·开发语言·python·elasticsearch·搜索引擎·django·课程设计
StarRocks_labs6 小时前
小红书湖仓架构的跃迁之路
大数据·架构·spark·湖仓一体·lakehouse
青春不流名6 小时前
部署Flink1.20.1
大数据
乙真仙人7 小时前
构建高效大数据监督的三要素
大数据