hive函数大全:11大类、109个函数(下)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: hive函数大全:11大类、109个函数

正文


五、日期函数


1. UNIX时间戳转日期函数:from_unixtime


语法: from_unixtime(bigint unixtime[, string format])

返回值: string

说明:转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式

举例:

hive> select from_unixtime(1323308943,'yyyyMMdd') fromlxw_dual;

20111208


2. 获取当前UNIX时间戳函数:unix_timestamp


语法: unix_timestamp()

返回值: bigint

说明:获得当前时区的UNIX时间戳

举例:

hive> select unix_timestamp() from lxw_dual;

1323309615


3. 日期转UNIX时间戳函数:unix_timestamp


语法: unix_timestamp(string date)

返回值: bigint

说明:转换格式为"yyyy-MM-ddHH:mm:ss"的日期到UNIX时间戳。如果转化失败,则返回0。

举例:

hive> select unix_timestamp('2011-12-07 13:01:03') from lxw_dual;

1323234063


4. 指定格式日期转UNIX时间戳函数:unix_timestamp


语法: unix_timestamp(string date, string pattern)

返回值: bigint

说明:转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。

举例:

hive> select unix_timestamp('20111207 13:01:03','yyyyMMddHH:mm:ss') from lxw_dual;

1323234063


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


语法: to_date(string timestamp)

返回值: string

说明:返回日期时间字段中的日期部分。

举例:

hive> select to_date('2011-12-08 10:03:01') from lxw_dual;

2011-12-08


6. 日期转年函数: year


语法: year(string date)

返回值: int

说明:返回日期中的年。

举例:

hive> select year('2011-12-08 10:03:01') from lxw_dual;

2011

hive> select year('2012-12-08') from lxw_dual;

2012


7. 日期转月函数: month


语法: month (string date)

返回值: int

说明:返回日期中的月份。

举例:

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

12

hive> select month('2011-08-08') from lxw_dual;

8


8. 日期转天函数: day


语法: day (string date)

返回值: int

说明:返回日期中的天。

举例:

hive> select day('2011-12-08 10:03:01') from lxw_dual;

8

hive> select day('2011-12-24') from lxw_dual;

24


9. 日期转小时函数: hour


语法: hour (string date)

返回值: int

说明:返回日期中的小时。

举例:

hive> select hour('2011-12-08 10:03:01') from lxw_dual;

10


10. 日期转分钟函数: minute


语法: minute (string date)

返回值: int

说明:返回日期中的分钟。

举例:

hive> select minute('2011-12-08 10:03:01') from lxw_dual;

3


11. 日期转秒函数: second


语法: second (string date)

返回值: int

说明:返回日期中的秒。

举例:

hive> select second('2011-12-08 10:03:01') from lxw_dual;

1


12. 日期转周函数:weekofyear


语法: weekofyear (string date)

返回值: int

说明:返回日期在当前的周数。

举例:

hive> select weekofyear('2011-12-08 10:03:01') from lxw_dual;

49


13. 日期比较函数: datediff


语法: datediff(string enddate, string startdate)

返回值: int

说明:返回结束日期减去开始日期的天数。

举例:

hive> select datediff('2012-12-08','2012-05-09') from lxw_dual;

213


14. 日期增加函数: date_add


语法: date_add(string startdate, int days)

返回值: string

说明:返回开始日期startdate增加days天后的日期。

举例:

hive> select date_add('2012-12-08',10) from lxw_dual;

2012-12-18


15. 日期减少函数: date_sub


语法: date_sub (string startdate, int days)

返回值: string

说明:返回开始日期startdate减少days天后的日期。

举例:

hive> select date_sub('2012-12-08',10) from lxw_dual;

2012-11-28


六、条件函数


1. If函数: if


语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)

返回值: T

说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull

举例:

hive> select if(1=2,100,200) from lxw_dual;

200

hive> select if(1=1,100,200) from lxw_dual;

100


2. 非空查找函数: COALESCE


语法: COALESCE(T v1, T v2,…)

返回值: T

说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL

举例:

hive> select COALESCE(null,'100','50′) from lxw_dual;

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 from lxw_dual;

mary

hive> Select case 200 when 50 then 'tom' when 100 then 'mary'else 'tim' end from lxw_dual;

tim


4. 条件判断函数:CASE


语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

返回值: T

说明:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e

举例:

hive> select case when 1=2 then 'tom' when 2=2 then 'mary' else'tim' end from lxw_dual;

mary

hive> select case when 1=1 then 'tom' when 2=2 then 'mary' else'tim' end from lxw_dual;

tom


七、字符串函数


1. 字符串长度函数:length


语法: length(string A)

返回值: int

说明:返回字符串A的长度

举例:

hive> select length('abcedfg') from lxw_dual;

7


2. 字符串反转函数:reverse


语法: reverse(string A)

返回值: string

说明:返回字符串A的反转结果

举例:

hive> select reverse(abcedfg’) from lxw_dual;

gfdecba


3. 字符串连接函数:concat


语法: concat(string A, string B…)

返回值: string

说明:返回输入字符串连接后的结果,支持任意个输入字符串

举例:

hive> select concat(‘abc’,'def’,'gh’) from lxw_dual;

abcdefgh


4. 带分隔符字符串连接函数:concat_ws


语法: concat_ws(string SEP, string A, string B…)

返回值: string

说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符

举例:

hive> select concat_ws(',','abc','def','gh') from lxw_dual;

abc,def,gh


5. 字符串截取函数:substr,substring


语法: substr(string A, int start),substring(string A, int start)

返回值: string

说明:返回字符串A从start位置到结尾的字符串

举例:

hive> select substr('abcde',3) from lxw_dual;

cde

hive> select substring('abcde',3) from lxw_dual;

cde

hive> selectsubstr('abcde',-1) from lxw_dual; (和ORACLE相同)

e


6. 字符串截取函数:substr,substring


语法: substr(string A, int start, int len),substring(string A, intstart, int len)

返回值: string

说明:返回字符串A从start位置开始,长度为len的字符串

举例:

hive> select substr('abcde',3,2) from lxw_dual;

cd

hive> select substring('abcde',3,2) from lxw_dual;

cd

hive>select substring('abcde',-2,2) from lxw_dual;

de


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


语法: upper(string A) ucase(string A)

返回值: string

说明:返回字符串A的大写格式

举例:

hive> select upper('abSEd') from lxw_dual;

hive> select ucase('abSEd') from lxw_dual;


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


语法: lower(string A) lcase(string A)

返回值: string

说明:返回字符串A的小写格式

举例:

hive> select lower('abSEd') from lxw_dual;

absed

hive> select lcase('abSEd') from lxw_dual;

absed


9. 去空格函数:trim


语法: trim(string A)

返回值: string

说明:去除字符串两边的空格

举例:

hive> select trim(' abc ') from lxw_dual;

abc


10. 左边去空格函数:ltrim


语法: ltrim(string A)

返回值: string

说明:去除字符串左边的空格

举例:

hive> select ltrim(' abc ') from lxw_dual;

abc


11. 右边去空格函数:rtrim


语法: rtrim(string A)

返回值: string

说明:去除字符串右边的空格

举例:

hive> select rtrim(' abc ') from lxw_dual;

abc


12. 正则表达式替换函数:regexp_replace


语法: regexp_replace(string A, string B, string C)

返回值: string

说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。

举例:

hive> select regexp_replace('foobar', 'oo|ar', '') from lxw_dual;

fb


13. 正则表达式解析函数:regexp_extract


语法: regexp_extract(string subject, string pattern, int index)

返回值: string

说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

举例:

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

the

hive> select regexp_extract('foothebar', 'foo(.*?)(bar)', 2) fromlxw_dual;

bar

hive> select regexp_extract('foothebar', 'foo(.*?)(bar)', 0) fromlxw_dual;

foothebar

注意,在有些情况下要使用转义字符,下面的等号要用双竖线转义,这是java正则表达式的规则。

select data_field,

regexp_extract(data_field,'.*?bgStart\\=([^&]+)',1) as aaa,

regexp_extract(data_field,'.*?contentLoaded_headStart\\=([^&]+)',1) as bbb,

regexp_extract(data_field,'.*?AppLoad2Req\\=([^&]+)',1) as ccc

from pt_nginx_loginlog_st

where pt = '2012-03-26'limit 2;


14. URL解析函数:parse_url


语法: parse_url(string urlString, string partToExtract [, stringkeyToExtract])

返回值: string

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

举例:

hive> selectparse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') fromlxw_dual;

facebook.com

hive> selectparse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY','k1') from lxw_dual;

v1


15. json解析函数:get_json_object


语法: get_json_object(string json_string, string path)

返回值: string

说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。

举例:

hive> select get_json_object('{"store":

> {"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],

> "bicycle":{"price":19.95,"color":"red"}

> },

> "email":"amy@only_for_json_udf_test.net",

> "owner":"amy"

> }

> ','$.owner') from lxw_dual;

amy


16. 空格字符串函数:space


语法: space(int n)

返回值: string

说明:返回长度为n的字符串

举例:

hive> select space(10) from lxw_dual;

hive> select length(space(10)) from lxw_dual;

10


17. 重复字符串函数:repeat


语法: repeat(string str, int n)

返回值: string

说明:返回重复n次后的str字符串

举例:

hive> select repeat('abc',5) from lxw_dual;

abcabcabcabcabc


18. 首字符ascii函数:ascii


语法: ascii(string str)

返回值: int

说明:返回字符串str第一个字符的ascii码

举例:

hive> select ascii('abcde') from lxw_dual;

97


19. 左补足函数:lpad


语法: lpad(string str, int len, string pad)

返回值: string

说明:将str进行用pad进行左补足到len位

举例:

hive> select lpad('abc',10,'td') from lxw_dual;

tdtdtdtabc

注意:与GP,ORACLE不同,pad不能默认


20. 右补足函数:rpad


语法: rpad(string str, int len, string pad)

返回值: string

说明:将str进行用pad进行右补足到len位

举例:

hive> select rpad('abc',10,'td') from lxw_dual;

abctdtdtdt


21. 分割字符串函数: split


语法: split(string str, stringpat)

返回值: array

说明:按照pat字符串分割str,会返回分割后的字符串数组

举例:

hive> select split('abtcdtef','t') from lxw_dual;

["ab","cd","ef"]


22. 集合查找函数:find_in_set


语法: find_in_set(string str, string strList)

返回值: int

说明:返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0

举例:

hive> select find_in_set('ab','ef,ab,de') from lxw_dual;

2

hive> select find_in_set('at','ef,ab,de') from lxw_dual;

0


八、集合统计函数


1. 个数统计函数: count


语法: count(*), count(expr), count(DISTINCT expr[, expr_.])

返回值: int

说明: count(*)统计检索出的行的个数,包括NULL值的行;count(expr)返回指定字段的非空值的个数;count(DISTINCTexpr[, expr_.])返回指定字段的不同的非空值的个数

举例:

hive> select count(*) from lxw_dual;

20

hive> select count(distinct t) from lxw_dual;

10


2. 总和统计函数: sum


语法: sum(col), sum(DISTINCT col)

返回值: double

说明: sum(col)统计结果集中col的相加的结果;sum(DISTINCT col)统计结果中col不同值相加的结果

举例:

hive> select sum(t) from lxw_dual;

100

hive> select sum(distinct t) from lxw_dual;

70


3. 平均值统计函数: avg


语法: avg(col), avg(DISTINCT col)

返回值: double

说明: avg(col)统计结果集中col的平均值;avg(DISTINCT col)统计结果中col不同值相加的平均值

举例:

hive> select avg(t) from lxw_dual;

50

hive> select avg (distinct t) from lxw_dual;

30


4. 最小值统计函数: min


语法: min(col)

返回值: double

说明:统计结果集中col字段的最小值

举例:

hive> select min(t) from lxw_dual;

20


5. 最大值统计函数: max


语法: maxcol)

返回值: double

说明:统计结果集中col字段的最大值

举例:

hive> select max(t) from lxw_dual;

120


6. 非空集合总体变量函数:var_pop


语法: var_pop(col)

返回值: double

说明:统计结果集中col非空集合的总体变量(忽略null)

举例:


7. 非空集合样本变量函数:var_samp


语法: var_samp (col)

返回值: double

说明:统计结果集中col非空集合的样本变量(忽略null)

举例:


8. 总体标准偏离函数:stddev_pop


语法: stddev_pop(col)

返回值: double

说明:该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同

举例:


9. 样本标准偏离函数:stddev_samp


语法: stddev_samp (col)

返回值: double

说明:该函数计算样本标准偏离

举例:


10.中位数函数:percentile


语法: percentile(BIGINT col, p)

返回值: double

说明:求准确的第pth个百分位数,p必须介于0和1之间,但是col字段目前只支持整数,不支持浮点数类型

举例:


11. 中位数函数:percentile


语法: percentile(BIGINT col, array(p1 [, p2]…))

返回值: array<double>

说明:功能和上述类似,之后后面可以输入多个百分位数,返回类型也为array<double>,其中为对应的百分位数。

举例:

select percentile(score,<0.2,0.4>) from lxw_dual;取0.2,0.4位置的数据


12. 近似中位数函数:percentile_approx


语法: percentile_approx(DOUBLE col, p [, B])

返回值: double

说明:求近似的第pth个百分位数,p必须介于0和1之间,返回类型为double,但是col字段支持浮点类型。参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数


13. 近似中位数函数:percentile_approx


语法: percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B])

返回值: array<double>

说明:功能和上述类似,之后后面可以输入多个百分位数,返回类型也为array<double>,其中为对应的百分位数。


14. 直方图:histogram_numeric


语法: histogram_numeric(col, b)

返回值: array<struct {‘x’,‘y’}>

说明:以b为基准计算col的直方图信息。

举例:

hive> select histogram_numeric(100,5) from lxw_dual;

[{"x":100.0,"y":1.0}]


九、复合类型构建操作


1. Map类型构建: map


语法: map (key1, value1, key2, value2,…)

说明:根据输入的key和value对构建map类型

举例:

hive> Create table lxw_test as select map('100','tom','200','mary')as t from lxw_dual;

hive> describe lxw_test;

t map<string,string>

hive> select t from lxw_test;

{"100":"tom","200":"mary"}


2. Struct类型构建: struct


语法: struct(val1, val2, val3,…)

说明:根据输入的参数构建结构体struct类型

举例:

hive> create table lxw_test as select struct('tom','mary','tim')as t from lxw_dual;

hive> describe lxw_test;

t struct<col1:string,col2:string,col3:string>

hive> select t from lxw_test;

{"col1":"tom","col2":"mary","col3":"tim"}


3. array类型构建: array


语法: array(val1, val2,…)

说明:根据输入的参数构建数组array类型

举例:

hive> create table lxw_test as selectarray("tom","mary","tim") as t from lxw_dual;

hive> describe lxw_test;

t array<string>

hive> select t from lxw_test;

["tom","mary","tim"]


十、复杂类型访问操作


1. array类型访问: A[n]


语法: A[n]

操作类型: A为array类型,n为int类型

说明:返回数组A中的第n个变量值。数组的起始下标为0。比如,A是个值为['foo', 'bar']的数组类型,那么A[0]将返回'foo',而A[1]将返回'bar'

举例:

hive> create table lxw_test as selectarray("tom","mary","tim") as t from lxw_dual;

hive> select t[0],t[1],t[2] from lxw_test;

tom mary tim


2. map类型访问: M[key]


语法: M[key]

操作类型: M为map类型,key为map中的key值

说明:返回map类型M中,key值为指定值的value值。比如,M是值为{'f' -> 'foo', 'b'-> 'bar', 'all' -> 'foobar'}的map类型,那么M['all']将会返回'foobar'

举例:

hive> Create table lxw_test as selectmap('100','tom','200','mary') as t from lxw_dual;

hive> select t['200'],t['100'] from lxw_test;

mary tom


3. struct类型访问: S.x


语法: S.x

操作类型: S为struct类型

说明:返回结构体S中的x字段。比如,对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段

举例:

hive> create table lxw_test as select struct('tom','mary','tim')as t from lxw_dual;

hive> describe lxw_test;

t struct<col1:string,col2:string,col3:string>

hive> select t.col1,t.col3 from lxw_test;

tom tim


十一、复杂类型长度统计函数


1. Map类型长度函数: size(Map<K.V>)


语法: size(Map<K.V>)

返回值: int

说明:返回map类型的长度

举例:

hive> select size(map('100','tom','101','mary')) from lxw_dual;

2


2. array类型长度函数: size(Array<T>)


语法: size(Array<T>)

返回值: int

说明:返回array类型的长度

举例:

hive> select size(array('100','101','102','103')) from lxw_dual;

4


3. 类型转换函数


类型转换函数: cast

语法: cast(expr as <type>)

返回值: Expected "=" to follow "type"

说明:返回array类型的长度

举例:

hive> select cast(1 as bigint) from lxw_dual;


相关文章
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
44 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
37 2
|
6月前
|
SQL HIVE
hive高频函数(一)
hive高频函数(一)
56 0
|
2月前
|
SQL JavaScript 前端开发
Hive根据用户自定义函数、reflect函数和窗口分析函数
Hive根据用户自定义函数、reflect函数和窗口分析函数
35 6
|
6月前
|
SQL XML JSON
Hive函数全解——思维导图 + 七种函数类型
Hive函数全解——思维导图 + 七种函数类型
138 2
Hive函数全解——思维导图 + 七种函数类型
|
6月前
|
SQL 分布式计算 HIVE
Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!
在Hive 3.1.2和Spark 3.0.2集群环境中,遇到`dayofweek`函数bug。当`create_date`为字符串类型时,`dayofweek`函数结果错位。修复方法是将`create_date`转换为`date`类型。在Spark SQL中,原始代码能正常运行,未出现此问题。因此建议在Hive中使用转换后的日期类型以避免错误。
77 4
|
6月前
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
451 3
|
6月前
|
SQL Java 程序员
Hive反射函数的使用-程序员是怎么学UDF函数的
Hive反射函数的使用-程序员是怎么学UDF函数的
42 0
|
6月前
|
SQL HIVE 数据格式
Hive高频函数(二)
Hive高频函数(二)
44 0
|
6月前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
下一篇
无影云桌面