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"]

相关推荐
拓端研究室23 分钟前
专题:2025机器人产业深度洞察报告|附136份报告PDF与数据下载
大数据·人工智能·物联网
阿里云大数据AI技术2 小时前
NL2SQL 再创佳绩!阿里云论文中选 SIGMOD 2025
大数据·人工智能·云计算
庄小焱3 小时前
【离线数仓项目】——电商域ADS层开发实战
大数据
庄小焱3 小时前
【离线数仓项目】——离线大数据系统设计
大数据
吃手机用谁付的款5 小时前
基于hadoop的竞赛网站日志数据分析与可视化(下)
大数据·hadoop·python·信息可视化·数据分析
线条15 小时前
Spark 单机模式安装与测试全攻略
大数据·分布式·spark
老周聊架构5 小时前
大数据领域开山鼻祖组件Hadoop核心架构设计
大数据
TDengine (老段)11 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Deng94520131412 小时前
基于大数据的电力系统故障诊断技术研究
大数据·matplotlib·深度特征提取·随机森林分类算法·标签编码
小菜鸡062615 小时前
FlinkSQL通解
大数据·flink