可以通过以下命令查看hive中函数信息:

--显示所有的可用函数,包括运算符、内置函数、自定义函数
show functions;--显示指定函数的描述信息,只显示描述信息value的值
desc function trim;
--显示指定函数的详细信息
desc function extended trim;

1、运算符

  • 1.1 关系运算符
  • 1.2 算数运算符
  • 1.3 逻辑运算符
  • 1.4 字符运算符
  • 1.5 复合运算符

2、 内置函数

  • 2.1 数学函数
  • 2.2 集合函数
  • 2.3 类型转换函数
  • 2.4 时间函数
  • 2.5 条件函数
  • 2.6 字符串函数
  • 2.7 数据屏蔽函数
  • 2.8 聚合函数
  • 2.9 表格生成函数
  • 2.10 其他函数

1.1 关系运算符


通过比较两个值,得到一个布尔类型的结果。

1、A = B

如果表达式A等于表达式B,则返回True,否则返回False

2、A == B

同A=B

3、A <=> B

如果AB都不为Null,那么判断逻辑和A=B一致;

如果AB都为Null,那么结果为True;

如果AB任一为Null,那么结果为False;

这个表达式是0.9.0版本新增加的特性。

4、A <> B

如果AB任一为Null,那么结果为Null;

如果A不等于B,那么结果为True,其他情况为False;

5、A != B

同A<>B

6、A < B

如果AB任一为Null,结果为Null;

如果A小于B,结果为True,其他情况为False;

7、A <= B

如果AB任一为Null,结果为Null;

如果A小于等于B,结果为True,其他情况为False

8、A > B

如果AB任一为Null,结果为Null;

如果A大于B,结果为True,其他情况为False;

9、A >= B

如果AB任一为Null,结果为Null;

如果A大于等于B,结果为True,其他情况为False;

10、A BETWEEN B AND C

如果ABC任一为Null,结果为Null;

如果A大于等于B,并且A小于等于C,结果为True,其他情况为False;

这个表达式是0.9.0版本新增加的特性。

11、A NOT BETWEEN B AND C

如果ABC任一为Null,结果为Null;

如果A不大于等于B,并且A不小于等于C,结果为True,其他情况为False;

这个表达式是0.9.0版本新增加的特性。

12、A IS NULL

如果A为Null,结果为True,其他情况为False

13、A IS NOT NULL

如果A为Null,结果为False,其他情况为True

14、A IS [NOT] (TRUE|FALSE)

判断A是否是True,或者A是否是False;

因为Null是未知的意思,所以Null is True和Null is False的结果都是False。

这个是3.0.0版本才有的。

15、A [NOT] LIKE B

如果AB任一个是Null,结果为Null;

如果A简单SQL正则匹配B,结果为True,否则为False;

这个比较是根据一个字符一个字符地匹配的,可以使用通配符_标识一个字符,%标识0或多个字符。

例如:

select ‘foobar’ like ‘foo___’; 结果为true;

select ‘foobar’ like ‘foo%’; 结果为true;

select ‘foobar’ like ‘foobar%’; 结果为true;

16、A RLIKE B

如果AB任一个是Null,结果为Null;

如果A按照Java正则匹配B,那么结果为True;否则为False;

例如:

select ‘foobar’ Rlike ‘foo’; 结果为True;

select ‘foobar’ Rlike ‘^foo.*$’; 结果为True;

17、A REGEXP B

同A RLike B

1.2 算数运算符


参与算数运算的值必须是数字类型的,返回值也是数字类型的,如果参与运算的是Null,那么结果也是Null。

A + B

返回A和B的算数和。返回值的类型取决于A、B的类型。比如:int类型的值和float类型的值相加,那么返回值是float类型的。

1、A - B

返回A减去B的算数差值。返回类型规则同A+B。

2、A * B

返回A和B相乘的积。注意的是:如果相乘导致类型最大值溢出,需要将AB中其中一个值先转换为更高类型。比如:如果两个int类型的值相乘有可能超出int最大值,那么就将A或者B先转换为bigint再相乘。

3、A / B

返回A除以B的的商。返回值大部分情况下是double类型的。如果AB都是int类型,当配置项hive.compat值为0.12或者latest时,结果类型为decimal 类型,也就是说0.12版本之前两个int相除结果是double类型,0.13版本之后是decimal类型。

4、A DIV B

A模除B,取整数部分。

5、A % B

A模除B,取余数部分

6、A & B

A和B按位进行与操作

7、A | B

A和B按位进行或操作

8、A ^ B

A和B按位进行与或操作

9、~A

对A进行非操作

1.3 逻辑运算符


逻辑运算得到的结果都是布尔类型的。因为Null意思是未知,所以Null参与任何逻辑运算的结果都是Null。

1、A AND B

A和B都为True,结果才为True,否则是False。如果AB任一个为Null,那么结果为Null。

2、A OR B

如果A和B任一个为True,结果就为True,否则是False。如果AB任一个为Null,那么结果为Null。

3、NOT A

如果A为True,则结果为False。

如果A为False,则结果为True。

如果A为Null,则结果为Null。

4、! A

同NOT A

5、A IN (val1, val2, …)

如果A等于列表中的任一一个,那么结果为True。

6、A NOT IN (val1, val2, …)

如果A不等于列表中的任一一个,那么结果为True。

7、[NOT] EXISTS (subquery)

如果子查询至少返回一行记录,那么结果为True。这个是0.13中支持的。

1.4 字符运算符


A || B

连接字符串A和B,这个运算符是Hive 2.2.0中新增加的。

1.5 复合运算符


符合运算符用于创建一个复杂类型的实例

1、map

根据key/value对列表创建一个map类型的数据,列表形式为:(key1, value1, key2, value2, …)

例如:select map(0,‘其它’,1,‘微型车’,2,‘小型车’)

2、struct

(val1, val2, val3, …)

根据值列表创建一个struct类型的数据,列表形式为:(val1, val2, val3, …),创建的struct的字段名称为col1、col2.。。

例如:select struct(1,‘微型车’);

得到数据:{“col1”:1,“col2”:“微型车”}

3、named_struct

根据字段名/字段值列表创建一个struct类型的数据,列表形式为:(name1, val1, name2, val2, …)

例如:select named_struct(‘id’,1,‘name’,‘微型车’)

结果为:{“id”:1,“name”:“微型车”}

4、array

根据列表创建一个array类型的值。

例如:select array(1,2,4); 结果为[1,2,4]。

注意:如果是select array(1,2,‘4’); 结果为:[“1”,“2”,“4”]

5、create_union

(tag, val1, val2, …)

Creates a union type with the value that is being pointed to by the tag parameter.

2.1 数学函数


##### 1、round(DOUBLE a)

返回a的四舍五入值,这里使用的是HALF_UP(最常用的四舍五入)舍入模式计算。
舍入模式详情可以参考:java的四舍五入

2、round(DOUBLE a, INT d)

返回保留d位小数的四舍五入值。

3、bround(DOUBLE a)

使用HALF_EVEN(银行家舍入法)模式进行四舍五入。

舍入模式详情可以参考:java的四舍五入

举例:bround(2.5) = 2, bround(3.5) = 4.
4、bround(DOUBLE a, INT d)

使用HALF_EVEN(银行家舍入法)模式进行四舍五入,保留指定位数的小数部分。

举例:bround(8.25, 1) = 8.2, bround(8.35, 1) = 8.4.
5、floor(DOUBLE a)

向下取整

6、ceil(DOUBLE a), ceiling(DOUBLE a)

向上取整

7、rand(), rand(INT seed)

返回一个从0到1的随机数,随机分布是均匀的。如果指定了随机种子,那么能确保每次生成的随机数是确定的。

随机数的产生原理和随机种子的作用可以参考:随机数和随机种子

8、exp(DOUBLE a), exp(DECIMAL a)

返回自然数e的a次方。在Hive0.13.0版本中添加了对Decimal类型参数a的支持

9、ln(DOUBLE a), ln(DECIMAL a)

返回a的自然对数,在Hive0.13.0版本中添加了对Decimal类型参数a的支持

10、log10(DOUBLE a), log10(DECIMAL a)

返回以10为底,a的对数,,在Hive0.13.0版本中添加了对Decimal类型参数a的支持

11、log2(DOUBLE a), log2(DECIMAL a)

返回以2为底,a的对数,,在Hive0.13.0版本中添加了对Decimal类型参数a的支持

12、log(DOUBLE base, DOUBLE a) 、log(DECIMAL base, DECIMAL a)

返回以base值为底,a的对数,,在Hive0.13.0版本中添加了对Decimal类型参数的支持

13、pow(DOUBLE a, DOUBLE p), power(DOUBLE a, DOUBLE p)

返回a的p次方。

14、sqrt(DOUBLE a), sqrt(DECIMAL a)

返回a的算数平方根,在Hive0.13.0版本中添加了对Decimal类型参数的支持

15、bin(BIGINT a)

返回a的二进制形式。

16、hex(BIGINT a) 、hex(STRING a) 、hex(BINARY a)

如果a是int、二进制、十六进制形式,那么返回一个十六进制形式数字,以字符串方式显示;如果a是个String类型的,那么将把每个字符先转换为十六进制,然后以字符串形式返回。

例如:select hex(13); 返回:D

select hex(“13”);返回:3133,因为1的Ascii码对应的十六进制为31,3对应的为33。

17、unhex(STRING a)

和hex相反

18、conv(BIGINT num, INT from_base, INT to_base) 、 conv(STRING num, INT from_base, INT to_base)

将给定的num,从from_baes转换为to_baes。

举例:select conv(13,10,16); 返回D,就是将数字13从10进制转换为16进制。
19、abs(DOUBLE a)

返回a的绝对值

20、pmod(INT a, INT b)、pmod(DOUBLE a, DOUBLE b)

正取余函数。

举例:select pmod(11,5);结果为1select pmod(-11,5);结果为4
21、sin(DOUBLE a), sin(DECIMAL a)

正弦函数,sin(a)的值。在Hive0.13.0版本中添加了对Decimal类型参数的支持

22、asin(DOUBLE a), asin(DECIMAL a)

反正弦函数asin,如果-1<=a<=1,就返回a的反正弦函数值,否则就返回Null。在Hive0.13.0版本中添加了对Decimal类型参数的支持。

23、cos(DOUBLE a), cos(DECIMAL a)

余弦函数cos,在Hive0.13.0版本中添加了对Decimal类型参数的支持

24、acos(DOUBLE a), acos(DECIMAL a)

反余弦函数acos,如果-1<=a<=1,就返回a的反余弦函数值,否则就返回Null。在Hive0.13.0版本中添加了对Decimal类型参数的支持。

25、tan(DOUBLE a), tan(DECIMAL a)

正切函数tan,在Hive0.13.0版本中添加了对Decimal类型参数的支持

26、atan(DOUBLE a), atan(DECIMAL a)

Returns the arctangent of a. Decimal version added in Hive 0.13.0.

反正切函数atan,在Hive0.13.0版本中添加了对Decimal类型参数的支持

27、degrees(DOUBLE a), degrees(DECIMAL a)

从弧度转换为度

28、radians(DOUBLE a), radians(DOUBLE a)

从度转换为弧度

29、positive(INT a), positive(DOUBLE a)

返回a本身。

30、negative(INT a), negative(DOUBLE a)

返回-a。

31、sign(DOUBLE a), sign(DECIMAL a)

返回正负号。1.0或者-1.0

举例:select sign(1); 返回1.0select sign(-2.444);返回-1.0
32、e()

返回自然数e的值。

举例:
select e(); 返回:2.718281828459045
33、pi()

返回圆周率pi的值。

举例:select pi(); 返回:3.141592653589793
34、factorial(INT a)

Returns the factorial of a (as of Hive 1.2.0). Valid a is [0…20].

返回a的阶乘值,值只能是0到20的整数。

举例:select factorial(20);返回:2432902008176640000select factorial(21); 返回:NULL
35、cbrt(DOUBLE a)

返回a的立方根

36、shiftleft(TINYINT|SMALLINT|INT a, INT b)、shiftleft(BIGINT a, INT b)

a值向左位移b位。

举例:select shiftleft(3,1); 返回6。3的二进制是11,向左位移1位是110,110就是6。
37、shiftright(TINYINT|SMALLINT|INT a, INT b)、shiftright(BIGINT a, INT b)

a值向右位移b位;

举例:select shiftright(7,1); 结果为3;7的二进制是111,右移1位是11,结果为3。
38、shiftrightunsigned(TINYINT|SMALLINT|INT a, INT b)、shiftrightunsigned(BIGINT a, INT b)

无符号右移位。

39、greatest(T v1, T v2, …)

返回列表中最大值,同>比较运算符。在严格模式下,如果其中一个为Null,那么结果为Null。

举例:select greatest(1,2,3); 返回3。
40、least(T v1, T v2, …)

返回列表中最小值,同<比较运算符。在严格模式下,如果其中一个为Null,那么结果为Null。

41、width_bucket(NUMERIC expr, NUMERIC min_value, NUMERIC max_value, INT num_buckets)

返回指定的值expr在哪个桶里,min_value是桶的最小值,max_value是分桶的最大值,num_buckets是分几个桶,会在min_value和max_value之间平均分桶。

如果expr值小于min_value,那么expr就被分在桶1,如果expr大于max_values,那么就被分在桶num_buckets+1。

这个函数是Hive 3.0新增加的。

2.2 集合函数


集合函数是对集合类型数据进行操作。

size(Map<K.V>)

返回map类值内元素的个数。

例如:select size(map(1,'name1',2,'name2')); 返回:2
size(Array)

返回数组类型数据内元素的个数。

例如:select size(array(1,'name1',2,'name2')); 返回:4
map_keys(Map<K.V>)

返回map数据内的所有key值,以无序队列形式返回。

例如:select map_keys(map(1,'name1',2,'name2')); 返回:[1,2]
map_values(Map<K.V>)

返回map数据内的所有value的值,以无序队列形式返回。

例如:select map_values(map(1,'name1',2,'name2')); 返回:["name1","name2"]
array_contains(Array, value)

判断array数组里是否有指定的值。

例如:select array_contains(array(1,'name1',2,'name2'),'1'); 返回:true

这里要注意,array创建的时候,数字1会自动转换为字符串,所以在查找的时候,要查找字符串1而不是数字1。

sort_array(Array)

对array内元素进行升序排序。

例如:select sort_array(array(1,'name1',2,'name2')); 返回:["1","2","name1","name2"]

2.3 类型转换函数


binary(string|binary)

转换为二进制

cast(expr as )

转换expr为指定类型。如果转换不成功,将返回一个Null。

例如:select cast('1' as int); 返回:int类型的1。

select cast(‘a’ as int); 返回:Null

2.4 时间函数


from_unixtime(bigint unixtime[, string format])

将unix时间戳以转换为当前时区下的时间,返回的格式为"1970-01-01 00:00:00"

例如:select from_unixtime(1); 返回 1970-01-01 08:00:01
unix_timestamp()

获取当前时间的unix时间戳(以秒为单位)。这个函数有些潜在的问题,所以从Hive 2.0开始就已经将它设置为deprecated,建议使用CURRENT_TIMESTAMP 这个常量来获取当前时间。

unix_timestamp(string date)

将字符串格式的时间数据转换为unix时间戳(秒),默认使用本地时区,如果转换失败,将返回0

举例:elect unix_timestamp('2018-06-06 09:09:09'); 返回:1528247349
unix_timestamp(string date, string pattern)

根据指定的格式将时间字符串转换为unix时间戳,如果转换失败就返回0。

举例:select unix_timestamp('2018-06-06 09:09:09','yyyy-MM-dd HH:mm:ss'); 返回:1528247349

select unix_timestamp(‘2018-06-06 09:09:09’,‘yyyy-MM-dd’); 返回:1528214400

to_date(string timestamp)

在Hive 2.0之前的时候,to_date()返回给定的时间是属于那一天的,比如:to_date(“1970-01-01 00:00:00”) = “1970-01-01”,因为那个时候还没有Date类型,所以返回值是一个字符串。自从Hive2.0开始,会返回一个Data类型的数据

year(string date)

返回时间的年份部分。

例如:select year('2018-06-08'); 返回:2018
quarter(date/timestamp/string)

返回指定日期属于哪一个季度,返回1、2、3、4。

举例: quarter('2015-04-08') = 2.
month(string date)

返回指定日期属于哪一个月

举例:month("1970-11-01") = 11
day(string date) dayofmonth(date)

返回指定日期的天部分。

举例:day("1970-11-01 00:00:00") = 1, day("1970-11-01") = 1.
hour(string date)

返回指定日期的小时部分。

minute(string date)

返回指定日期的分钟部分。

second(string date)

Returns the second of the timestamp.

返回指定日期的秒部分。

weekofyear(string date)

返回指定日期是一年的第几个星期。

extract(field FROM source)

从源检索字段,如天数或小时(在Hive2.2.0)。源必须是一个日期、时间戳、间隔或可以转换为日期或时间戳的字符串。支持的字段包括:day, dayofweek, hour, minute, month, quarter, second, week and year

举例:1. select extract(month from "2016-10-20") results in 10.
2.  select extract(hour from "2016-10-20 05:06:07") results in 5.
3.  select extract(dayofweek from "2016-10-20 05:06:07") results in 5.
4.  select extract(month from interval '1-3' year to month) results in 3.
5.  select extract(minute from interval '3 12:20:30' day to second) results in 20.
datediff(string enddate, string startdate)

返回两天之间差多少天。

举例: datediff('2009-03-01', '2009-02-27') = 2.
date_add(date/timestamp/string startdate, tinyint/smallint/int days)

为指定日期添加一天。date_add(‘2008-12-31’, 1) = ‘2009-01-01’.

Hive2.0之前返回一个字符串,之后返回一个Data对象

date_sub(date/timestamp/string startdate, tinyint/smallint/int days)

为指定日期减一天。 date_sub(‘2008-12-31’, 1) = ‘2008-12-30’

Hive2.0之前返回一个字符串,之后返回一个Data对象

from_utc_timestamp({any primitive type}*, string timezone)

从标准时间转换为指定时区的时间。输入参数应该是原始类型,比如:timestamp/date, tinyint/smallint/int/bigint, float/double and decimal。
如果值是带小数的,那么单位就是秒,如果值是个int类型的,那么单位就是毫秒。

举例:1. from_utc_timestamp(2592000.0,'PST') 单位是秒
2. from_utc_timestamp(2592000000,'PST') 单位是毫秒
3. from_utc_timestamp(timestamp '1970-01-30 16:00:00','PST')
4. 以上三个返回值是一样的,都是1970-01-30 08:00:00
to_utc_timestamp({any primitive type} ts, string timezone)

将某个时区的时间,转换为标准时间。

举例:
1. to_utc_timestamp(2592000.0,'PST')
2. to_utc_timestamp(2592000000,'PST')
3. to_utc_timestamp(timestamp '1970-01-30 16:00:00','PST')
4. 以上都返回:1970-01-31 00:00:00
current_date

返回当前时间日期

current_timestamp

返回当前时间戳

add_months(string start_date, int num_months)

返回当前时间下再增加num_months个月的日期,start_date应该是一个字符串、日期、或者时间戳。

如果start_date是这个月的的最后一天,那么添加上num_months后,也是目标月的最后一天。

如果目标月的天数比start_date中天数部分值小,那么结果也是目标月的最后一天。

举例:
1. add_months('2018-03-10',1)=2018-04-10 正常的
2. add_months('2018-04-30',1)=2018-05-31 30号是4月最后一天,添加一个月,结果也是5月也是最后一天
3. add_months('2018-03-31',1)=2018-04-30 3月有31号,4月没有31号,那么添加一个月后,结果是4月最后一天
last_day(string date)

返回指定日期所在月的最后一天。

next_day(string start_date, string day_of_week)

返回下一个星期几。

day_of_week应该是星期一到星期日英文的全写、两位缩写或者三位缩写。比如:Mo, tue, FRIDAY

举例:select next_day('2018-06-08','Mo'); 返回:2018-06-11,返回下一个星期一。select next_day('2018-06-08','FRIDAY'); 返回:2018-06-15
trunc(string date, string format)

按照指定格式,获取日期,也就是第一天。格式可以为MONTH/MON/MM, YEAR/YYYY/YY。

举例:1. trunc('2015-03-17', 'MM')
2. trunc('2015-03-17', 'MON')
3. trunc('2015-03-17', 'MONTH')
结果为: 2015-03-01.1. trunc('2015-03-17', 'YEAR')
2. trunc('2015-03-17', 'YY')
3. trunc('2015-03-17', 'YYYY')
结果为:2015-01-01
months_between(date1, date2)

返回两个日期之间有多少个月,结果可能为小数。

如果data1晚于data2,那么结果为正数,如果data1早于data2,那么结果为负数。

如果data1和data2天数相同,或者都是各自月的最后一天,那么结果是整数。否则就是小数。算小数时是根据每个月31天来算的。

举例:
1. months_between('2018-06-11','2018-05-11') 返回:1.0
2. months_between('2018-06-11','2018-05-01') 返回:1.32258065
3. months_between('2018-01-11','2018-05-01') 返回:-3.67741935
4. months_between('2018-06-30','2018-05-31') 返回:1.0
5. months_between(date('2018-06-29'),date('2018-05-29')) 返回1.0
date_format(date/timestamp/string ts, string fmt)

对时间根据指定格式进行格式化,可用格式可以参考java时间格式化

举例:date_format('2018-06-1','yyyy-MM-dd')=2018-06-01

2.5 条件函数


if(boolean testCondition, T valueTrue, T valueFalseOrNull)

如果条件testCondition成立,那么返回valueTrue,否则valueFalseOrNull

isnull( a )

如果a是NULL,返回True,否则返回false

isnotnull ( a )

如果a不是Null,返回True

nvl(T value, T default_value)

如果value是Null,就返回指定的默认值default_value

COALESCE(T v1, T v2, …)

返回第一个不是Null的值,如果全为Null,就返回Null

CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END

如果a=b那么就返回c,以此类推,如果都不符合,就返回f。

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

如果a为true就返回b,以此类推,如果都不符合就返回e

nullif( a, b )

如果a=b就返回null,否则返回a。等价于:CASE WHEN a = b then NULL else a

assert_true(boolean condition)

判定条件condition是true。如果condition是false,就抛异常。

2.6 字符串函数


ascii(string str)

返回字符串第一个字符的ascii码值,以十进制的方式返回。

base64(binary bin)

将参数从二进制转换为基64字符串

character_length(string str)

返回一个字符串中字符个数。(Hive2.2.0新增的)

chr(bigint|double A)

返回指定Ascii码值所对应的字符。

concat(string|binary A, string|binary B…)

连接字符串。

context_ngrams(array<array>, array, int K, int pf)

Returns the top-k contextual N-grams from a set of tokenized sentences, given a string of “context”. See StatisticsAndDataMining for more information.

concat_ws(string SEP, string A, string B…)

和concat函数相似,但是可以指定各个字符串的分隔符。

举例:
concat_ws('_','123','abc')=123_abc
concat_ws(string SEP, array)

Like concat_ws() above, but taking an array of strings. (as of Hive 0.9.0)

和concat_ws类似,只是参数为array类型的

举例:concat_ws('_',array('123','abc'))=123_abc
encode(string src, string charset)

使用指定的编码方式(‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’)将字符串编码为二进制,如果输入参数为Null,那么返回也是Null。

decode(binary bin, string charset)

使用指定的编码方式(‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’)将二进制解码为字符串,如果输入参数为Null,那么返回也是Null。

elt(N int,str1 string,str2 string,str3 string,…)

返回指定位置的字符串,如果N小于1或者大于字符串总个数,那么返回Null。

举例:elt(2,'a','b','c')='b'
field(val T,val1 T,val2 T,val3 T,…)

返回指定字符串在字符串列表中的位置。如果没有找到就返回0。

举例:field('world','say','hello','world')=3
field('123','say','hello','world')=0
find_in_set(string str, string strList)

返回第一次出现字符串str的位置,strList是逗号隔开的字符串。如果没有找到,就返回0。如果str或者strList为Null,那么返回null。

format_number(number x, int d)

将一个数字以小数点后多少位方式显示。

举例:1. format_number(1.2,3)=1.200
2. format_number(1.9,0)=2
get_json_object(string json_string, string path)

根据指定的json路径从json字符串中提取json对象,并返回提取的json对象的json字符串。如果输入json字符串无效,它将返回null。注意:json路径只能有字符[0-9a-z_],即,没有大写或特殊字符。同样,键*不能以数字开头。*这是由于对Hive列名的限制。

举例:1. get_json_object('{"id":123,"name":"zhangsan"}','$.name')='zhangsan'
2. get_json_object('{"id":123,"name":"zhangsan","info":{"add":"beijing","tel":"01088876543"}}','$.info')={"add":"beijing","tel":"01088876543"}
3. select get_json_object('{"id":123,"name":"zhangsan","info":{"add":"beijing","tel":"01088876543"}}','$.info.tel')=01088876543
4. get_json_object('{"id":123,"name":"zhangsan","info":{"add":"beijing","tel":["01088876543","15010254587"]}}','$.info.tel\[*]')=["01088876543","15010254587"]

其中第二个参数path使用格式:

$ : 表示根目录
. : 表示Json下级
[] : 表示第几个元素

  • : 列表的通配符
in_file(string str, string filename)

如果指定的字符串str在文件filename中以整行出现,就返回true

instr(string str, string substr)

返回子字符串在字符串中出现的位置。如果找不到返回0。第一个位置为1.

length(string A)

返回字符串的长度

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

返回从位置pos之后,子字符串第一次出现的位置。

lower(string A) lcase(string A)

转小写

lpad(string str, int len, string pad)

左边补齐字符.

举例:
1. lpad('abc',5,'0')=00abc
2. lpad('abc',2,'0')=ab
ltrim(string A)

左边去除空格:

举例:ltrim('   abc')='abc'
ngrams(array<array>, int N, int K, int pf)

返回出现次数TOP K的的子序列,n表示子序列的长度,具体看StatisticsAndDataMining

octet_length(string str)

返回在UTF-8编码中保存字符串str所需的八进制数

parse_url(string urlString, string partToExtract [, string keyToExtract])

解析url,返回指定的部分。partToExtract参数可以是HOST、PATH、QUERY、REF、PROTOCOL、 AUTHORITY、 FILE、 USERINFO。

举例:1. parse_url('https://blog.csdn.net/chybin500/article/details/80587985','HOST')='blog.csdn.net'
2. parse_url('https://blog.csdn.net/chybin500/article/details/80587985','PATH')='/chybin500/article/details/80587985'
3. parse_url('https://blog.csdn.net/chybin500/article/details/80587985?v=1','QUERY')='v=1'
4. parse_url('https://blog.csdn.net/chybin500/article/details/80587985?v=1','PROTOCOL')='https'
5. parse_url('https://blog.csdn.net/chybin500/article/details/80587985?v=1','QUERY','v')='1'
printf(String format, Obj… args)

格式化输出

regexp_extract(string subject, string pattern, int index)

根据正则表达式提取第index个部分的字符串。index参数可以参考JAVA文档

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

正则替换字符串。

repeat(string str, int n)

将字符串重复n次。

replace(string A, string OLD, string NEW)

替换字符串。

reverse(string A)

翻转字符串

rpad(string str, int len, string pad)

右补齐字符串

rtrim(string A)

右侧去空格

sentences(string str, string lang, string locale)

将字符串转换为单词数组。

举例:sentences('Hello there! How are you?')=[["Hello","there"],["How","are","you"]]
space(int n)

返回n个空格

split(string str, string pat)

根据指定字符分割字符串。

str_to_map(text[, delimiter1, delimiter2])

将字符串转换为map。

第一个参数是需要转换字符串,第二个参数是键值对之间的分隔符,默认为逗号;第三个参数是键值之间的分隔符,默认为"="

substr(string|binary A, int start) substring(string|binary A, int start)

截取字符串

substr(string|binary A, int start, int len) substring(string|binary A, int start, int len)

截取字符串

substring_index(string A, string delim, int count)

截取第count分隔符之前的字符串,如count为正则从左边开始截取,如果为负则从右边开始截取

translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)

将字符串from中的input字符串替换为to字符串。

trim(string A)

前后去空格。

unbase64(string str)

将基于64位的字符串转换为二进制

upper(string A) ucase(string A)

转换为大写

initcap(string A)

首字母大写

levenshtein(string A, string B)

计算两个字符串之间的差距。

举例:levenshtein('kitten', 'sitting')=3
soundex(string A)

将普通字符串转换成soundex字符串

2.7 数据屏蔽函数


mask(string str[, string upper[, string lower[, string number]]])

将字符串中指定字符串做屏蔽处理(Hive2.0新增的函数),第一个参数是要做处理的字符串,upper参数指定了将大写字母替换为什么(默认X),lower指定了将小写字母替换为什么(默认x),number指定了将数字替换为什么(默认为n)。

举例:1. mask("abcd-EFGH-8765-4321")='xxxx-XXXX-nnnn-nnnn'
2. mask("abcd-EFGH-8765-4321", "U", "l", "#")='llll-UUUU-####-####'
mask_first_n(string str[, int n])

屏蔽前n个字符。

举例:
1. mask_first_n('15010254587',2)='nn010254587'
2. mask_first_n('15010254587',2,'*','*','*')='**010254587'
mask_last_n(string str[, int n])

对最后n个字符进行屏蔽

举例:1. mask_last_n('15010254587',4)='1501025nnnn'
2. mask_last_n('15010254587',4,'*','*','*')='1501025****'
mask_show_first_n(string str[, int n])

只显示前N个字符。

举例:mask_show_first_n('15012548745','3')='150nnnnnnnn'
mask_show_last_n(string str[, int n])

只显示后N个字符。

mask_hash(string|char|varchar str)

返回字符串的Hash值,如果输入的不是字符串,那么就返回null

2.8 聚合函数


count(), count(expr), count(DISTINCT expr[, expr…]) count()

返回总个数。

sum(col), sum(DISTINCT col)

返回累加和

avg(col), avg(DISTINCT col)

返回平均数。

min(col)

求最小值

max(col)

求最大值

variance(col), var_pop(col)

求方差

var_samp(col)

求样本方差

stddev_pop(col)

求标准差

stddev_samp(col)

求样本标准差

covar_pop(col1, col2)

求协方差

covar_samp(col1, col2)

求样本协方差

corr(col1, col2)

求皮尔逊相关系数

percentile(BIGINT col, p)

求分位数

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

求指定列表的分位数

percentile_approx(DOUBLE col, p [, B])
percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B])

Same as above, but accepts and returns an array of percentile values instead of a single one.

regr_avgx(independent, dependent)

等价于avg函数(Hive2.2.0中新增)

regr_count(independent, dependent)

返回用于拟合线性回归直线的非空对的数目

regr_intercept(independent, dependent)

Returns the y-intercept of the linear regression line, i.e. the value of b in the equation dependent = a * independent + b. As of Hive 2.2.0.

regr_r2(independent, dependent)

返回回归的确定系数,Hive2.2.0中新增

regr_slope(independent, dependent)

返回线性回归直线的斜率

regr_sxx(independent, dependent)

Equivalent to regr_count(independent, dependent) * var_pop(dependent). As of Hive 2.2.0.

regr_sxy(independent, dependent)

Equivalent to regr_count(independent, dependent) * covar_pop(independent, dependent). As of Hive 2.2.0.

regr_syy(independent, dependent)

Equivalent to regr_count(independent, dependent) * var_pop(independent). As of Hive 2.2.0.

histogram_numeric(col, b)

Computes a histogram of a numeric column in the group using b non-uniformly spaced bins. The output is an array of size b of double-valued (x,y) coordinates that represent the bin centers and heights

collect_set(col)

Returns a set of objects with duplicate elements eliminated.

去重后生成一个set数组。

collect_list(col)

返回一个列表,不去重

ntile(INTEGER x)

Divides an ordered partition into x groups called buckets and assigns a bucket number to each row in the partition. This allows easy calculation of tertiles, quartiles, deciles, percentiles and other common summary statistics. (As of Hive 0.11.0.)

2.9 表格生成函数


explode(ARRAY a)

将一个array数组转换为多行的表格。生成的表格只有一列,列名为col。一行对应原来的一个元素。

explode(MAP<Tkey,Tvalue> m)

将一个map对象生成一个表格,表格有两列,分别对应于map的key和value。

posexplode(ARRAY a)

将arary转换为一个表格,并增加一个位置列,从0开始。

inline(ARRAY<STRUCTf1:T1,...,fn:Tn> a)

将struct数组生成表格。

stack(int r,T1 V1,…,Tn/r Vn)

将列转行,r是行数。

json_tuple(string jsonStr,string k1,…,string kn)

将从json字符串中一次提取多个数据,生成表格。

举例:json_tuple('{"id":123,"name":"zhangsan","age":18,"info":{"add":"beijing","tel":"01088876543"}}','id','name','age')返回表格:123    zhangsan    18
parse_url_tuple(string urlStr,string p1,…,string pn)

解析url,一次提取多个数据

举例:parse_url_tuple('https://blog.csdn.net/chybin500/article/details/80587985?v=1','HOST','FILE','QUERY')返回表格:blog.csdn.net    /chybin500/article/details/80587985?v=1    v=1

2.10 其他函数


reflect(class, method[, arg1[, arg2…]])

调用一个java函数。

java_method(class, method[, arg1[, arg2…]])

等同于reflect函数。

hash(a1[, a2…])

返回hash value。

current_user()

返回当前用户名。

logged_in_user()

从session中读取所有当前已经登录的账号,Hive2.2.0中新增的这个函数。

current_database()

返回当前数据库。

md5(string/binary)

返回字符串的md5值

sha1(string/binary)
crc32(string/binary)
sha2(string/binary, int)
aes_encrypt(input string/binary, key string/binary)

AES加密

aes_decrypt(input binary, key string/binary)

AES解密

version()

返回当前Hive版本,Hive2.0中新增的。

Hive2.1函数列表相关推荐

  1. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表

    R语言效用分析 ( 效能分析.Power analysis)确定样本量.假设检验与两类错误.pwr包进行效用分析 ( 效能分析.Power analysis)的常用函数列表 目录

  2. python3精要(23)-递归与函数列表

    递归 def fun1(*n):res=mysum(n)print(res)def mysum(n):if not n:return 0else:return n[0]+mysum(n[1:])fun ...

  3. ecshop 函数列表大全

    ecshop 函数列表大全 所有函数功能说明: lib_time.php gmtime() P: 获得当前格林威治时间的时间戳 /$0 server_timezone() P: 获得服务器的时区 /$ ...

  4. php postgresql多条,PHPPostgreSQL函数列表 - phpStudy

    echo $r["fun"].' '.$r["title"]; ?> PostgreSQL函数列表 pg_close - 关闭一个 PostgreSQL ...

  5. vim 函数列表插件

    1.apt-get install exuberant-ctags 2.unzip taglist_42.zip 把解压出来的文件放到 /home/weiqifa(自己的用户名)/.vim/ 资源下载 ...

  6. Oracle分析函数一——函数列表

    Oracle 分析函数 Oracle 分析函数--函数列表 SUM         : 该函数计算组中表达式的累积和 MIN         : 在一个组中的数据窗口中查找表达式的最小值 MAX    ...

  7. python函数参数列表_python函数列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python函数函数是python里组织代码的最小单元,python函数包含以下 ...

  8. 转: 中/英文资料 PKCS #11 函数列表

    https://www.cryptsoft.com/pkcs11doc/v220/ PKCS #11 函数列表 PKCS #11 加密令牌接口函数列表中文版 , 取自 Oracle Solaris 1 ...

  9. jsp 页面之${fn:}内置函数列表

    函数列表: 函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchStrin ...

最新文章

  1. 聚集索引和非聚集索引实例
  2. idea中修改项目代码后,Git没有提示代码有改动(解决办法)
  3. android 之ViewStub
  4. HDU1250 Hat's Fibonacci 大数斐波那契数列
  5. [机器学习收藏] TensorFlow初学者必须了解的55个经典案例
  6. Redis为什么变慢了?一文详解Redis性能问题 | 万字长文
  7. promise.all_所有您需要了解的Promise.all
  8. (117)FPGA面试题-使用三态缓冲器实现漏极开路缓冲
  9. 祥云,灯笼,剪纸……春节海报,点缀必备PSD素材
  10. 树莓派 烧录arm64架构centos7
  11. Myeclipse快键键
  12. 《编译与反编译技术实战》——1.2 词法分析生成器LEX
  13. c语言循环重新输入Y,大佬们帮帮忙 帮我改改 怎样能在输入Y后 再次进行for循环...
  14. 手写分页sql_MyBatis-Plus 分页查询以及自定义sql分页的实现
  15. 固态硬盘 游戏测试软件,固态硬盘检测工具(Intel Solid-State Drive Toolbox)
  16. 一文带你掌握抓包工具的使用-科来
  17. MySQL: 为什么使用 innobackupex 备份恢复搭建主从时,必须人为设置 gtid_purged 变量
  18. 2010南非世界杯32强手绘海报
  19. CSS里的BFC和IFC的用法
  20. 解锁三星bl锁有几种方法_三星Note5解锁教程_三星Note5 CROM解BL锁的方法

热门文章

  1. Linux(CentOS7) NVIDIA GeForece GTX 745 显卡驱动
  2. HashMap概述与用法总结
  3. 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)​
  4. keras如何获取中间层的输出
  5. 英雄之刃显示服务器断开怎么办,英魂之刃手游新手常见问题
  6. 判断文件或目录是否存在的几种方式
  7. 温度传感器温度数据LED屏幕展示--物联网服务器搭建
  8. python用unittest+HTMLTestRunner的框架测试并生成测试报告
  9. TensorFlow 学习(一)—— tf get variable vs tf Variable ,tf nam
  10. 3D模型欣赏:原始部落女神 自带仙气 让人眼前一亮