hive官网函数-中文说明文档

Hive的安装与配置 Hive官网:http://hive.apache.org下载网址:http://archive.apache.org/dist/hive/文档网址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual安装前提:3台虚拟机,安装了Hadoop安装软件:Hive(2.3.7) + MySQL (5.7.26) 阅读详情

关系运算符

以下运算符比较传递的操作数,并根据操作数之间的比较是否成立来生成TRUE或FALSE值。

操作员

操作数类型

描述

A = B

所有原始类型

如果表达式A等于表达式B,则为TRUE,否则为FALSE。

A == B所有原始类型=运算符的同义词。

A <=> B

所有原始类型

对于非空操作数,使用EQUAL(=)运算符返回相同的结果,但如果两个均为NULL,则返回TRUE,如果其中之一为NULL,则返回FALSE。(从0.9.0版开始。)

A <> B

所有原始类型

如果A或B为NULL,则为NULL,如果表达式A不等于表达式B,则为TRUE,否则为FALSE。

A!= B

所有原始类型

<>运算符的同义词。

A <B

所有原始类型

如果A或B为NULL,则为NULL,如果表达式A小于表达式B,则为TRUE,否则为FALSE。

A <= B

所有原始类型

如果A或B为NULL,则为NULL,如果表达式A小于或等于表达式B,则为TRUE,否则为FALSE。

A> B

所有原始类型

如果A或B为NULL,则为NULL,如果表达式A大于表达式B,则为TRUE,否则为FALSE。

A> = B

所有原始类型

如果A或B为NULL,则为NULL,如果表达式A大于或等于表达式B,则为TRUE,否则为FALSE。

A [NOT] BETWEEN B AND C

所有原始类型

如果A,B或C为NULL,则为NULL;如果A大于或等于B,而A小于或等于C,则为TRUE,否则为FALSE。可以使用NOT关键字将其反转。(从0.9.0版开始。)

A IS NULL

所有类型

如果表达式A的计算结果为NULL,则为TRUE,否则为FALSE。

A IS NOT NULL

所有类型

如果表达式A的计算结果为NULL,则为FALSE,否则为TRUE。

A IS [NOT] (TRUE|FALSE)布尔类型

仅当A满足条件时评估为TRUE。(因为:3.0.0 )注意:NULL为UNKNOWN,因此(UNKNOWN IS TRUE)和(UNKNOWN IS FALSE)都评估为FALSE。  

A [NOT] LIKE B

字符串

如果A或B为NULL,则为NULL,如果字符串A与SQL简单正则表达式B匹配,则为TRUE,否则为FALSE。逐个字符进行比较。B中的_字符匹配A中的任何字符(类似于posix正则表达式中的。),而B中的%字符匹配A中任意数目的字符(类似于posix正则表达式中的。*)。例如,像'foo'这样的'foobar'的值为FALSE,而像'foo_ _ _'这样的'foobar'的值为TRUE,而'foobar'这样的'foo%'的值为。

A RLIKE B字符串

如果A或B为NULL,则为NULL,如果A的任何子字符串(可能为空)与Java正则表达式B匹配,则为TRUE,否则为FALSE。例如,'foobar'RLIKE'foo'的计算结果为TRUE,'foobar'RLIKE'^ f。* r $'的计算结果也为TRUE。

A REGEXP B

字符串

与RLIKE相同。

算术运算符

以下运算符支持对操作数的各种常见算术运算。所有返回号码类型;如果任何操作数为NULL,则结果也为NULL。

操作员

操作数类型

描述

A + B

所有数字类型

给出将A和B相加的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。例如,由于每个整数都是浮点数,因此float是整数的包含类型,因此浮点数上的+运算符和int会导致浮点数。

A-B

所有数字类型

给出从A减去B的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。

A * B

所有数字类型

给出将A和B相乘的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。请注意,如果乘法导致溢出,则必须将其中一个运算符强制转换为类型层次结构中较高的类型。

A / B

所有数字类型

给出将A除以B的结果。在大多数情况下,该结果为双精度类型。当A和B都是整数时,结果是双精度类型,除非将hive.compat配置参数设置为“ 0.13”或“ latest”,在这种情况下,结果是十进制类型。

A DIV B整数类型给出将A除以BEg 17 div 3所得的整数部分结果为5。

A%B

所有数字类型

给出A除以B的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。

A & B

所有数字类型

给出A和B的按位与的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。

A | B

所有数字类型

给出A和B的按位或的结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。

A ^ B

所有数字类型

给出A和B的按位XOR结果。结果的类型与操作数类型的公共父级(在类型层次结构中)相同。

~A

所有数字类型

给出A的按位NOT的结果。结果的类型与A的类型相同。

逻辑运算符

以下运算符为创建逻辑表达式提供支持。它们都根据操作数的布尔值返回布尔值TRUE,FALSE或NULL。NULL表现为“未知”标志,因此,如果结果取决于未知状态,则结果本身是未知的。

操作员

操作数类型

描述

A和B

布尔值

如果A和B均为TRUE,则为TRUE,否则为FALSE。如果A或B为NULL,则为NULL。

A或B

布尔值

如果A或B或两者均为TRUE,则为TRUE,否则为FALSE或NULL为NULL。

NOT A

布尔值

如果A为FALSE,则为TRUE;如果A为NULL,则为NULL。否则为FALSE。

! A

布尔值

与NOT A相同。

A IN (val1, val2, ...)

布尔值

如果A等于任何值,则为TRUE。从Hive开始,IN语句支持0.13 子查询。

A NOT IN (val1, val2, ...)

布尔值

如果A不等于任何值,则为TRUE。从Hive开始,NOT IN语句支持0.13 子查询。

[NOT] EXISTS (subquery)

 

如果子查询返回至少一行,则为TRUE。从Hive 0.13开始受支持。

字符串运算符

 

操作员

操作数类型

描述

A || B

字符串

连接操作数-的简写concat(A,B)。从Hive 2.2.0开始受支持。

复杂类型构造函数

以下函数构造复杂类型的实例。

构造函数

操作数

描述

map

(key1,value1,key2,value2,...)

使用给定的键/值对创建一个映射。

struct

(val1,val2,val3,...)

用给定的字段值创建一个结构。结构字段名称将为col1,col2,...。

named_struct

(name1, val1, name2, val2, ...)

用给定的字段名称和值创建一个结构。(从Hive 0.8.0开始。)

array

(val1,val2,...)

用给定的元素创建一个数组。

create_union

(tag, val1, val2, ...)

使用tag参数指向的值创建联合类型。

复杂类型上的运算符

以下运算符提供了访问复杂类型中的元素的机制。

操作员

操作数类型

描述

A[n]

A是一个数组,n是一个整数

返回数组A中的第n个元素。第一个元素的索引为0。例如,如果A是包含['foo','bar']的数组,则A [0]返回'foo',而A [1]返回'酒吧'。

M[key]

M是Map <K,V>并且键的类型为K

返回与映射中的键对应的值。例如,如果M是包含{'f'->'foo','b'->'bar','all'->'foobar'}的映射,则M ['all']返回'foobar'。

S.x

S是一个struct

返回S的x字段。例如,对于结构foobar {int foo,int bar},foobar.foo返回存储在结构的foo字段中的整数。

内建功能

数学函数

Hive支持以下内置数学函数;当参数为NULL时,大多数返回NULL:

返回类型

姓名(签名)

描述

DOUBLEround(DOUBLE a)

返回的舍入BIGINT值a。

DOUBLEround(DOUBLE a, INT d)

返回a四舍五入到d小数位。

DOUBLEbround(DOUBLE a)返回a使用HALF_EVEN舍入模式的舍入后的BIGINT值(从Hive 1.3.0,2.0.0开始)。也称为高斯舍入或银行家舍入。例如:bround(2.5)= 2,bround(3.5)= 4。
DOUBLEbround(DOUBLE a, INT d)使用HALF_EVEN舍入模式返回a舍入到d小数位(从Hive 1.3.0,2.0.0开始)。例如:bround(8.25,1)= 8.2,bround(8.35,1)= 8.4。
BIGINTfloor(DOUBLE a)

返回BIGINT等于或小于的最大值a。

BIGINTceil(DOUBLE a), ceiling(DOUBLE a)

返回等于或大于的最小BIGINT值a。

DOUBLErand(), rand(INT seed)

返回从0到1均匀分布的随机数(逐行变化)。指定种子将确保所生成的随机数序列具有确定性。

DOUBLEexp(DOUBLE a), exp(DECIMAL a)

返回这里是自然对数的底数。Hive 0.13.0中添加了十进制版本。eae

DOUBLEln(DOUBLE a), ln(DECIMAL a)

返回参数的自然对数a。Hive 0.13.0中添加了十进制版本。

DOUBLE

log10(DOUBLE a), log10(DECIMAL a)

返回参数的以10为底的对数a。Hive 0.13.0中添加了十进制版本。

DOUBLE

log2(DOUBLE a), log2(DECIMAL a)

返回参数的以2为底的对数a。Hive 0.13.0中添加了十进制版本。

DOUBLE

log(DOUBLE base, DOUBLE a)

log(DECIMAL base, DECIMAL a)

返回base参数的底数对数a。Hive 0.13.0中添加了十进制版本。

DOUBLE

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

返回 ap

DOUBLEsqrt(DOUBLE a), sqrt(DECIMAL a)

返回的平方根a。Hive 0.13.0中添加了十进制版本。

STRING

bin(BIGINT a)

以二进制格式返回数字(请参见http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_bin)。

STRING

hex(BIGINT a) hex(STRING a) hex(BINARY a)

如果参数是INTor binary,hex则以STRING十六进制格式返回数字。否则,如果数字为a STRING,它将每个字符转换为十六进制表示形式并返回结果STRING。(见http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex,BINARY版本蜂巢0.12.0)。

BINARY

unhex(STRING a)

十六进制的倒数。将每对字符解释为十六进制数字,并转换为数字的字节表示形式。(BINARYHive 0.12.0以后的版本,用于返回字符串。)

STRING

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

将数字从给定的基数转换为另一个(请参见http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv)。

DOUBLE

abs(DOUBLE a)

返回绝对值。

INT or DOUBLE

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

返回的正值a mod b。

DOUBLE

sin(DOUBLE a), sin(DECIMAL a)

返回a(a以弧度为单位)的正弦值。Hive 0.13.0中添加了十进制版本。

DOUBLE

asin(DOUBLE a), asin(DECIMAL a)

返回a-1 <= a <= 1的反正弦值,否则返回NULL 。Hive 0.13.0中添加了十进制版本。

DOUBLE

cos(DOUBLE a), cos(DECIMAL a)

返回a(a以弧度为单位)的余弦值。Hive 0.13.0中添加了十进制版本。

DOUBLE

acos(DOUBLE a), acos(DECIMAL a)

返回a-1 <= a <= 1 的反余弦值,否则返回NULL 。Hive 0.13.0中添加了十进制版本。

DOUBLE

tan(DOUBLE a), tan(DECIMAL a)

返回a(a以弧度为单位)的切线。Hive 0.13.0中添加了十进制版本。

DOUBLE

atan(DOUBLE a), atan(DECIMAL a)

返回的反正切值a。Hive 0.13.0中添加了十进制版本。

DOUBLE

degrees(DOUBLE a), degrees(DECIMAL a)

将的值a从弧度转换为度。Hive 0.13.0中添加了十进制版本。

DOUBLE

radians(DOUBLE a), radians(DOUBLE a)

将值a从度转换为弧度。Hive 0.13.0中添加了十进制版本。

INT or DOUBLE

positive(INT a), positive(DOUBLE a)

返回a。

INT or DOUBLE

negative(INT a), negative(DOUBLE a)

返回-a。

DOUBLE or INT

sign(DOUBLE a), sign(DECIMAL a)

返回符号a“ 1.0”(如果a为正)或“ -1.0”(如果a为负),否则返回“ 0.0”。十进制版本返回INT而不是DOUBLE。Hive 0.13.0中添加了十进制版本。

DOUBLE

e()

返回的值e。

DOUBLE

pi()

返回的值pi。

BIGINTfactorial(INT a)返回a (从Hive 1.2.0开始)的阶乘。有效a值为[0..20]。
DOUBLEcbrt(DOUBLE a)返回adouble值的多维数据集根(从Hive 1.2.0开始)。

INT

BIGINT

shiftleft(TINYINT|SMALLINT|INT a, INT b)

shiftleft(BIGINT a, INT b)

按位左移(从Hive 1.2.0开始)。a b向左移动位置。

为tinyint,smallint和int返回int a。为bigint返回bigint a。

INT

BIGINT

shiftright(TINYINT|SMALLINT|INT a, INT b)

shiftright(BIGINT a, INT b)

按位右移(从Hive 1.2.0开始)。a b向右移动位置。

为tinyint,smallint和int返回int a。为bigint返回bigint a。

INT

BIGINT

shiftrightunsigned(TINYINT|SMALLINT|INTa, INT b),

shiftrightunsigned(BIGINT a, INT b)

按位无符号右移(从Hive 1.2.0开始)。向右移动位置。a b

为tinyint,smallint和int返回int a。为bigint返回bigint a。

Tgreatest(T v1, T v2, ...)返回值列表的最大值(从Hive 1.1.0开始)。修复了当一个或多个参数为NULL且放宽了严格的类型限制(与“>”运算符一致时,从Hive 2.0.0开始)时返回NULL的问题。
Tleast(T v1, T v2, ...)返回值列表中的最小值(从Hive 1.1.0开始)。修复了当一个或多个参数为NULL并且放宽了严格的类型限制(与Hive 2.0.0相同)时返回严格的类型限制的问题。
INTwidth_bucket(NUMERIC expr, NUMERIC min_value, NUMERIC max_value, INT num_buckets)

通过将expr映射到第i个大小相等的存储桶中,返回0到num_buckets + 1之间的整数。通过将[min_value,max_value]分成大小相等的区域来制作存储桶。如果expr <min_value,则返回1,如果expr> max_value,则返回num_buckets + 1。请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions214.htm (自Hive 3.0.0起)

十进制数据类型的数学函数和运算符

Version

Hive 0.11.0(HIVE-2693)中引入了十进制数据类型。

所有常规算术运算符(例如+,-,*,/)和相关的数学UDF(Floor,Ceil,Round等)都已更新为处理十进制类型。有关支持的UDF的列表,请参阅数学的UDF在蜂巢的数据类型。

收集功能

Hive支持以下内置收集功能:

返回类型

姓名(签名)

描述

int

size(Map<K.V>)

返回地图类型中的元素数。

int

size(Array<T>)

返回数组类型中的元素数。

array<K>

map_keys(Map<K.V>)

返回包含输入映射键的无序数组。

array<V>

map_values(Map<K.V>)

返回包含输入映射值的无序数组。

boolean

array_contains(Array<T>, value)

如果数组包含值,则返回TRUE。

array<t>

sort_array(Array<T>)

根据数组元素的自然顺序对输入数组进行升序排序并返回(从0.9.0版本开始)。

类型转换功能

Hive支持以下类型转换功能:

返回类型

姓名(签名)

描述

binary

binary(string|binary)

将参数转换为二进制。

Expected "=" to follow "type"

cast(expr as <type>)

将表达式expr的结果转换为<type>。例如,cast('1'as BIGINT)会将字符串'1'转换为其整数表示。如果转换不成功,则返回null。如果cast(expr为boolean),则Hive对于非空字符串返回true。

日期功能

Hive支持以下内置日期功能:

返回类型

姓名(签名)

描述

string

from_unixtime(bigint unixtime[, string format])

将unix纪元(1970-01-01 00:00:00 UTC)的秒数转换为一个字符串,该字符串表示当前系统时区中该时刻的时间戳,格式为“ 1970-01-01 00:00: 00”。

bigint

unix_timestamp()

以秒为单位获取当前的Unix时间戳。此函数不是确定性的,其值在查询执行范围内也不是固定的,因此会阻止对查询的适当优化-自2.0版以来已弃用此函数,而推荐使用CURRENT_TIMESTAMP常量。

bigint

unix_timestamp(string date)

yyyy-MM-dd HH:mm:ss使用默认时区和默认语言环境将时间字符串格式转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp('2009-03-20 11:30:01')= 1237573801

bigint

unix_timestamp(string date, string pattern)

将具有给定模式的时间字符串(请参阅[ http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html])转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp('2009 -03-20','yyyy-MM-dd')= 1237532400。

pre 2.1.0: string

2.1.0 on: date

to_date(string timestamp)

返回时间戳字符串(Hive 2.1.0之前)的日期部分:to_date(“ 1970-01-01 00:00:00”)=“ 1970-01-01”。从Hive 2.1.0开始,返回日期对象。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

int

year(string date)

返回日期或时间戳字符串的年份部分:year(“ 1970-01-01 00:00:00”)= 1970,year(“ 1970-01-01”)= 1970。

int

quarter(date/timestamp/string)返回日期,时间戳或范围在1到4之间的字符串的一年的四分之一(从Hive 1.3.0开始)。示例:quarter('2015-04-08')= 2。 

int

month(string date)

返回日期或时间戳字符串的月份部分:month(“ 1970-11-01 00:00:00”)= 11,month(“ 1970-11-01”)= 11。

int

day(string date) dayofmonth(date)

返回日期或时间戳字符串的日期部分:day(“ 1970-11-01 00:00:00”)= 1,day(“ 1970-11-01”)= 1。

int

hour(string date)

返回时间戳的小时:hour('2009-07-30 12:58:59')= 12,hour('12:58:59')= 12。

int

minute(string date)

返回时间戳的分钟。

int

second(string date)

返回时间戳的秒数。

int

weekofyear(string date)

返回时间戳字符串的星期数:weekofyear(“ 1970-11-01 00:00:00”)= 44,weekofyear(“ 1970-11-01”)= 44。

int

extract(field FROM source)

从源中检索字段,例如天或小时(从Hive 2.2.0开始)。源必须是日期,时间戳,时间间隔或可以转换为日期或时间戳的字符串。支持的字段包括:日,星期几,小时,分钟,月,季度,秒,周和年。

例子:

  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.

int

datediff(string enddate, string startdate)

返回从开始日期到结束日期的天数:datediff('2009-03-01','2009-02-27')= 2。

pre 2.1.0: string

2.1.0 on: date

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

添加开始日期的天数:date_add('2008-12-31',1)='2009-01-01'。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

pre 2.1.0: string

2.1.0 on: date

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

减去开始日期的天数:date_sub('2008-12-31',1)='2008-12-30'。

在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。

timestamp

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

将UTC中的timestamp *转换为给定的时区(从Hive 0.8.0开始)。

* 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 

小数部分被视为秒。整数值以毫秒为单位。例如,from_utc_timestamp (2592000.0,'PST'),from_utc_timestamp (2592000000,'PST')和from_utc_timestamp (timestamp'1970-01-30 16:00:00','PST')都返回时间戳1970-01-30 08:00:00。

timestamp

to_utc_timestamp({any primitive type} ts, string timezone)

将给定时区中的时间戳*转换为UTC(从Hive 0.8.0开始)。

* 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 

小数部分被视为秒。整数值以毫秒为单位。例如,to_utc_timestamp(2592000.0,'PST'),to_utc_timestamp(2592000000,'PST')和to_utc_timestamp(timestamp'1970-01-30 16:00:00','PST')都返回时间戳1970-01-31 00:00:00。

datecurrent_date

返回查询评估开始时的当前日期(从Hive 1.2.0开始)。同一查询中对current_date的所有调用均返回相同的值。

timestampcurrent_timestamp

返回查询评估开始时的当前时间戳(从Hive 1.2.0开始)。同一查询中对current_timestamp的所有调用均返回相同的值。

stringadd_months(string start_date, int num_months, output_date_format)

返回起始日期之后num_months的日期(从Hive 1.1.0开始)。start_date是字符串,日期或时间戳。num_months是一个整数。如果start_date是该月的最后一天,或者如果结果月份的天数少于start_date的天部分,则结果是结果月份的最后一天。否则,结果与start_date具有相同的日组成部分。默认输出格式为“ yyyy-MM-dd”。

在Hive 4.0.0之前,日期的时间部分将被忽略。

从Hive 4.0.0开始,add_months支持可选参数output_date_format,该参数接受一个String,该String表示输出的有效日期格式。这样可以在输出中保留时间格式。

例如 :

add_months('2009-08-31',1)返回'2009-09-30'。
add_months('2017-12-31 14:15:16',2,'YYYY-MM-dd HH:mm:ss')返回'2018-02-28 14:15:16'。

stringlast_day(string date)返回日期所属月份的最后一天(从Hive 1.1.0开始)。date是格式为“ yyyy-MM-dd HH:mm:ss”或“ yyyy-MM-dd”的字符串。日期的时间部分将被忽略。
stringnext_day(string start_date, string day_of_week)返回第一个日期,该日期晚于start_date,并命名为day_of_week (从Hive 1.2.0开始)。start_date是字符串/日期/时间戳。day_of_week是2个字母,3个字母或一周中某天的全名(例如Mo,tue,FRIDAY)。start_date的时间部分将被忽略。例如:next_day('2015-01-14','TU')= 2015-01-20。
stringtrunc(string date, string format)返回截断为格式指定单位的日期(从Hive 1.2.0开始)。支持的格式:MONTH / MON / MM,YEAR / YYYY / YY。示例:trunc('2015-03-17','MM')= 2015-03-01。
doublemonths_between(date1, date2)返回日期date1和date2之间的月份数(从Hive 1.2.0开始)。如果date1晚于date2,则结果为正。如果date1早于date2,则结果为负。如果date1和date2是月份的同一天或月份的最后几天,则结果始终是整数。否则,UDF将基于31天的月份来计算结果的分数部分,并考虑时间分量date1和date2的差异。date1和date2类型可以是日期,时间戳或字符串,格式为“ yyyy-MM-dd”或“ yyyy-MM-dd HH:mm:ss”。结果四舍五入到小数点后8位。例如:months_between('1997-02-28 10:30:00','1996-10-30')= 3.94959677 
stringdate_format(date/timestamp/string ts, string fmt)

将日期/时间戳记/字符串转换为日期格式fmt指定的格式的字符串值(从Hive 1.2.0开始)。支持的格式是Java SimpleDateFormat格式– https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 。第二个参数fmt应该是常量。示例:date_format('2015-04-08','y')='2015'。 

date_format可用于实现其他UDF,例如:

  • dayname(date)是date_format(date,'EEEE')
  • dayofyear(date)是date_format(date,'D')

条件函数

返回类型

姓名(签名)

描述

T

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

当testCondition为true时返回valueTrue,否则返回valueFalseOrNull。

booleanisnull( a )如果a为NULL,则返回true,否则返回false。
booleanisnotnull ( a )如果a不为NULL,则返回true,否则返回false。
Tnvl(T value, T default_value)如果value为null,则返回默认值,否则返回值(从HIve 0.11开始)。

T

COALESCE(T v1, T v2, ...)

返回第一个不为NULL的v,如果所有v均为NULL,则返回NULL。

T

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

当a = b时,返回c; 当a = d时,返回e; 否则返回f。

T

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

当a = true时,返回b; 当c = true时,返回d; 否则返回e。

Tnullif( a, b )

如果a = b,则返回NULL。否则返回a (从Hive 2.3.0开始)。

简写:CASE,当a = b时为NULL,否则为a

voidassert_true(boolean condition)如果'condition'不为true,则引发异常,否则返回null(从Hive 0.8.0开始)。例如,选择assert_true(2 <1)。

字符串函数

Hive支持以下内置的String函数:

返回类型

姓名(签名)

描述

int

ascii(string str)

返回str的第一个字符的数值。

string

base64(binary bin)

将参数从二进制转换为基本64字符串(从Hive 0.12.0开始)。

intcharacter_length(string str)返回str中包含的UTF-8字符数(从Hive 2.2.0开始)。函数char_length是该函数的简写。
stringchr(bigint|double A)返回具有与A等效的二进制值的ASCII字符(从Hive 1.3.0和2.1.0开始)。如果A大于256,则结果等于chr(A%256)。示例:选择chr(88); 返回“ X”。

string

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

返回按顺序串联作为参数传入的字符串或字节所得到的字符串或字节。例如,concat('foo','bar')的结果为'foobar'。请注意,此函数可以接受任意数量的输入字符串。

array<struct<string,double>>

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

给定字符串“ context”,从一组标记化语句返回前k个上下文N-gram。有关更多信息,请参见StatisticsAndDataMining。

string

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

与上面的concat()类似,但具有自定义分隔符SEP。

string

concat_ws(string SEP, array<string>)

就像上面的concat_ws()一样,但是采用字符串数组。(从Hive 0.9.0开始)

string

decode(binary bin, string charset)

使用提供的字符集(“ US-ASCII”,“ ISO-8859-1”,“ UTF-8”,“ UTF-16BE”,“ UTF-16LE”,“ UTF- 16')。如果任一参数为null,则结果也将为null。(从Hive 0.12.0开始。)

stringelt(N int,str1 string,str2 string,str3 string,...)

返回索引号处的字符串。例如elt(2,'hello','world')返回'world'。如果N小于1或大于参数个数,则返回NULL。

(请参阅https://dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_elt)

binary

encode(string src, string charset)

使用提供的字符集(“ US-ASCII”,“ ISO-8859-1”,“ UTF-8”,“ UTF-16BE”,“ UTF-16LE”,“ UTF- 16')。如果任一参数为null,则结果也将为null。(从Hive 0.12.0开始。)

intfield(val T,val1 T,val2 T,val3 T,...)

返回val1,val2,val3,...列表中val的索引;如果未找到,则返回0。例如,字段(“ world”,“ say”,“ hello”,“ world”)返回3。
支持所有原始类型,使用str.equals(x)比较参数。如果val为NULL,则返回值为0。

(请参阅https://dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_field)

int

find_in_set(string str, string strList)

返回str在strList中的第一次出现,其中strList是一个逗号分隔的字符串。如果任一参数为null,则返回null。如果第一个参数包含逗号,则返回0。例如,find_in_set('ab','abc,b,ab,c,def')返回3。

string

format_number(number x, int d)

将数字X格式化为'#,###,###。##'之类的格式,四舍五入到D小数位,然后将结果作为字符串返回。如果D为0,则结果没有小数点或小数部分。(由于蜂房的0.10.0 ;臭虫以固定在浮子类型蜂房0.14.0,在加入十进制型支撑蜂巢0.14.0)

string

get_json_object(string json_string, string path)

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

boolean

in_file(string str, string filename)

如果字符串str在文件名中显示为整行,则返回true。

int

instr(string str, string substr)

返回substrin 中第一次出现的位置str。返回null的如果任一参数是null返回0,如果substr不能在找到str。请注意,这不是基于零的。中的第一个字符的str索引为1。

int

length(string A)

返回字符串的长度。

int

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

返回在位置pos之后的str中第一次出现substr的位置。

string

lower(string A) lcase(string A)

返回将B的所有字符都转换为小写形式的字符串。例如,lower('fOoBaR')会导致'foobar'。

string

lpad(string str, int len, string pad)

返回str,在其左边填充pad,长度为len。如果str大于len,则返回值缩短为len个字符。如果填充字符串为空,则返回值为null。

string

ltrim(string A)

返回从A的开头(左侧)起修剪空格所得的字符串。例如,ltrim('foobar')的结果为'foobar'。

array<struct<string,double>>

ngrams(array<array<string>>, int N, int K, int pf)

从一组标记化的句子中返回前k个N-gram,例如句子()UDAF返回的句子。有关更多信息,请参见StatisticsAndDataMining。

intoctet_length(string str)返回以UTF-8编码保存字符串str所需的八位字节数(从Hive 2.2.0开始)。请注意,octet_length(str)可以大于character_length(str)。

string

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

从URL返回指定的部分。partToExtract的有效值包括HOST,PATH,QUERY,REF,PROTOCOL,AUTHORITY,FILE和USERINFO。例如,parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','HOST')返回'facebook.com'。通过将键作为第三个参数,也可以提取QUERY中特定键的值,例如parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY','k1')返回'v1'。

string

printf(String format, Obj... args)

返回根据do printf样式格式字符串格式化的输入(从Hive 0.9.0开始)。

stringquote(String text)

返回带引号的字符串(包括任何单引号HIVE-4.0.0的转义字符)

输入项
输出量
空值空值
谁的'谁的'
别'别'

string

regexp_extract(string subject, string pattern, int index)

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

string

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

返回将替换INITIAL_STRING中所有与PATTERN中定义的Java正则表达式语法匹配的子字符串替换为REPLACEMENT的实例所产生的字符串。例如,regexp_replace(“ foobar”,“ oo | ar”,“”)返回'fb'。请注意,使用预定义的字符类时必须格外小心:使用'\ s'作为第二个参数将与字母s匹配;'\\ s'是匹配空格等所必需的。

string

repeat(string str, int n)

重复str n次。

stringreplace(string A, string OLD, string NEW)返回字符串A,其中所有不重叠的OLD都替换为NEW(从Hive 1.3.0和2.1.0开始)。示例:选择replace(“ ababab”,“ abab”,“ Z”); 返回“ Zab”。

string

reverse(string A)

返回反转的字符串。

string

rpad(string str, int len, string pad)

返回str,右用pad填充到len的长度。如果str大于len,则返回值缩短为len个字符。如果填充字符串为空,则返回值为null。

string

rtrim(string A)

返回从A的结尾(右侧)修剪空格所得到的字符串。例如,rtrim('foobar')结果为'foobar'。

array<array<string>>

sentences(string str, string lang, string locale)

将一串自然语言文本标记为单词和句子,其中每个句子在适当的句子边界处断开并作为单词数组返回。“ lang”和“ locale”是可选参数。例如,句子(“ Hello there!你好吗?”)返回((“ Hello”,“ there”),(“ How”,“ are”,“ you”)))。

string

space(int n)

返回n个空格的字符串。

array

split(string str, string pat)

在pat周围拆分str(pat是一个正则表达式)。

map<string,string>

str_to_map(text[, delimiter1, delimiter2])

使用两个定界符将文本拆分为键/值对。Delimiter1将文本分成KV对,Delimiter2将每个KV对分开。默认的定界符是','代表定界符1,':'代表定界符2。

string

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

返回A的字节数组的子字符串或切片,从字符串的起始位置开始到字符串A的结尾。例如,substr('foobar',4)的结果为'bar'(请参见[ http://dev.mysql.com /doc/refman/5.0/zh-CN/string-functions.html#function_substr ])。

string

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

从长度为len的起始位置返回A的字节数组的子字符串或切片。例如,substr('foobar',4,1)的结果为'b'(请参阅[ http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr ])。

stringsubstring_index(string A, string delim, int count)在计数出现定界符delim之前,从字符串A返回子字符串(从Hive 1.3.0开始)。如果count为正,则返回最后定界符左侧的所有内容(从左侧开始计数)。如果count为负,则返回最后定界符右边的所有内容(从右边开始计数)。搜索delim时,Substring_index执行区分大小写的匹配。例如:substring_index('www.apache.org','。',2)='www.apache'。

string

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

通过将字符串中存在的字符替换为from字符串中的相应字符来翻译输入to字符串。这类似于PostgreSQL中的translate功能。如果此UDF的任何参数为NULL,则结果也为NULL。(自Hive 0.10.0起,适用于字符串类型)

从Hive 0.14.0开始添加了对Char / varchar的支持。

string

trim(string A)

返回由A两端的空格修剪产生的字符串。例如,trim('foobar')结果为'foobar'

binary

unbase64(string str)

将参数从基数为64的字符串转换为BINARY。(从Hive 0.12.0开始。)

string

upper(string A) ucase(string A)

返回将A的所有字符都转换为大写形式的字符串。例如,upper('fOoBaR')的结果为'FOOBAR'。

stringinitcap(string A)返回字符串,每个单词的首字母大写,所有其他字母小写。单词由空格分隔。(从Hive 1.1.0开始。)
intlevenshtein(string A, string B)返回两个字符串之间的Levenshtein距离(从Hive 1.2.0开始)。例如,levenshtein('kitten','sitting')得出3。
stringsoundex(string A)返回字符串的soundex代码(从Hive 1.2.0开始)。例如,soundex('Miller')生成M460。

数据屏蔽功能

Hive支持以下内置数据屏蔽功能:

返回类型

姓名(签名)

描述

string

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

返回str的掩码版本(从Hive 2.1.0开始)。默认情况下,大写字母转换为“ X”,小写字母转换为“ x”,数字转换为“ n”。例如mask(“ abcd-EFGH-8765-4321”)的结果为xxxx-XXXX-nnnn-nnnn。您可以通过提供其他参数来覆盖掩码中使用的字符:第二个参数控制大写字母的掩码字符,第三个参数控制小写字母的字符,第四个参数控制数字的字符。例如,mask(“ abcd-EFGH-8765-4321”,“ U”,“ l”,“#”)生成llll-UUUU-####-####。

stringmask_first_n(string str[, int n])返回带有str的被屏蔽版本,其中前n个值被屏蔽(从Hive 2.1.0开始)。大写字母转换为“ X”,小写字母转换为“ x”,数字转换为“ n”。例如,mask_first_n(“ 1234-5678-8765-4321”,4)生成nnnn-5678-8765-4321。
stringmask_last_n(string str[, int n])返回带有掩码的最后一个n值的str的掩码版本(从Hive 2.1.0开始)。大写字母转换为“ X”,小写字母转换为“ x”,数字转换为“ n”。例如,mask_last_n(“ 1234-5678-8765-4321”,4)生成1234-5678-8765-nnnn。
stringmask_show_first_n(string str[, int n])返回带掩码的str版本,显示未掩码的前n个字符(从Hive 2.1.0开始)。大写字母转换为“ X”,小写字母转换为“ x”,数字转换为“ n”。例如,mask_show_first_n(“ 1234-5678-8765-4321”,4)的结果为1234-nnnn-nnnn-nnnn。
stringmask_show_last_n(string str[, int n])返回str的掩码版本,显示未掩码的最后n个字符(从Hive 2.1.0开始)。大写字母转换为“ X”,小写字母转换为“ x”,数字转换为“ n”。例如,mask_show_last_n(“ 1234-5678-8765-4321”,4)的结果为nnnn-nnnn-nnnn-4321。
stringmask_hash(string|char|varchar str)返回基于str的哈希值(从Hive 2.1.0开始)。哈希是一致的,可用于将跨表的掩码值连接在一起。对于非字符串类型,此函数返回null。

Misc. 功能

返回类型

姓名(签名)

描述

varies

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

的同义词reflect。(从Hive 0.9.0开始。)

varies

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

通过使用反射匹配参数签名来调用Java方法。(从Hive 0.7.0开始。)有关示例,请参见反射(通用)UDF。

int

hash(a1[, a2...])

返回参数的哈希值。(从Hive 0.4开始。)

stringcurrent_user()从配置的身份验证器管理器(从Hive 1.2.0开始)返回当前用户名。可以与连接时提供的用户相同,但是与某些身份验证管理器(例如HadoopDefaultAuthenticator)不同。
stringlogged_in_user()从会话状态返回当前的用户名(从Hive 2.2.0开始)。这是连接到Hive时提供的用户名。
stringcurrent_database()返回当前数据库名称(从Hive 0.13.0开始)。
stringmd5(string/binary)计算字符串或二进制文件的MD5 128位校验和(从Hive 1.3.0开始)。该值以32个十六进制数字的字符串形式返回,如果参数为NULL,则返回NULL。示例:md5('ABC')='902fbdd2b1df0c4f70b4a5d23525e932'。
string

sha1(string/binary)

sha(string/binary)

计算字符串或二进制文件的SHA-1摘要,并以十六进制字符串形式返回值(从Hive 1.3.0开始)。例如:sha1('ABC')='3c01bdbb26f358bab27f267924aa2c9a03fcfdb8'。
bigintcrc32(string/binary)计算字符串或二进制参数的循环冗余校验值,并返回bigint值(从Hive 1.3.0开始)。例如:crc32('ABC')= 2743272264。
stringsha2(string/binary, int)计算SHA-2系列哈希函数(SHA-224,SHA-256,SHA-384和SHA-512)(从Hive 1.3.0开始)。第一个参数是要哈希的字符串或二进制。第二个参数表示结果的所需位长度,该位长度必须具有224、256、384、512或0(等于256)的值。从Java 8开始支持SHA-224。如果任一参数为NULL或哈希长度不是允许的值之一,则返回值为NULL。例如:sha2('ABC',256)='b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78'。
binaryaes_encrypt(input string/binary, key string/binary)使用AES加密输入(自Hive 1.3.0起)。可以使用128、192或256位的密钥长度。如果安装了Java密码学扩展(JCE)无限强度管辖权策略文件,则可以使用192位和256位密钥。如果任一参数为NULL或密钥长度不是允许的值之一,则返回值为NULL。示例:base64(aes_encrypt('ABC','1234567890123456'))='y6Ss + zCYObpCbgfWfyNWTw =='。
binaryaes_decrypt(input binary, key string/binary)使用AES解密输入(自Hive 1.3.0起)。可以使用128、192或256位的密钥长度。如果安装了Java密码学扩展(JCE)无限强度管辖权策略文件,则可以使用192位和256位密钥。如果任一参数为NULL或密钥长度不是允许的值之一,则返回值为NULL。示例:aes_decrypt(unbase64('y6Ss + zCYObpCbgfWfyNWTw =='),'1234567890123456')='ABC'。
stringversion()返回Hive版本(从Hive 2.1.0开始)。该字符串包含2个字段,第一个是内部版本号,第二个是内部散列。示例:“ select version();”可能会返回“ 2.1.0.2.5.0.0-1245 r027527b9c5ce1a3d7d0b6d2e6de2378fb0c39232”。实际结果将取决于您的构建。
bigintsurrogate_key([write_id_bits, task_id_bits])在向表中输入数据时自动为行生成数字ID。只能用作酸表或仅插入表的默认值。

xpath  路径

LanguageManual XPathUDF中描述了以下功能:

  • xpath,xpath_short,xpath_int,xpath_long,xpath_float,xpath_double,xpath_number,xpath_string

get_json_object

支持受限版本的JSONPath:

  • $:根对象
  • . :子运算符
  • []:数组的下标运算符
  • *:[]的通配符

不支持的语法值得注意:

  • :零长度字符串作为键
  • ..:递归下降
  • @:当前对象/元素
  • ():脚本表达式
  • ?():过滤(脚本)表达式。
  • [,]:联合运算符
  • [start:end.step]:数组切片运算符

示例:src_json表是单列(json),单行表:

+----+

                               json

+----+

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

}

+----+

可以使用以下查询来提取json对象的字段:

hive> SELECT get_json_object(src_json.json, '$.owner') FROM src_json;

amy

 

hive> SELECT get_json_object(src_json.json, '$.store.fruit\[0]') FROM src_json;

{"weight":8,"type":"apple"}

 

hive> SELECT get_json_object(src_json.json, '$.non_exist_key') FROM src_json;

NULL

内置汇总功能(UDAF)

Hive支持以下内置聚合函数:

返回类型

姓名(签名)

描述

BIGINT

count(*), count(expr), count(DISTINCT expr[, expr...])

count(*)-返回检索到的行总数,包括包含NULL值的行。

count(expr)-返回为其提供的表达式为非NULL的行数。

count(DISTINCT expr [,expr])-返回为其提供的表达式唯一且非NULL的行数。可以使用hive.optimize.distinct.rewrite优化执行。

DOUBLE

sum(col), sum(DISTINCT col)

返回组中元素的总和或组中列的不同值的总和。

DOUBLE

avg(col), avg(DISTINCT col)

返回组中元素的平均值或组中列的不同值的平均值。

DOUBLE

min(col)

返回组中列的最小值。

DOUBLE

max(col)

返回组中列的最大值。

DOUBLE

variance(col), var_pop(col)

返回组中数字列的方差。

DOUBLE

var_samp(col)

返回组中数字列的无偏样本方差。

DOUBLE

stddev_pop(col)

返回组中数字列的标准偏差。

DOUBLE

stddev_samp(col)

返回组中数字列的无偏样本标准差。

DOUBLE

covar_pop(col1, col2)

返回组中一对数字列的总体协方差。

DOUBLE

covar_samp(col1, col2)

返回组中一对数字列的样本协方差。

DOUBLE

corr(col1, col2)

返回组中一对数字列的皮尔逊相关系数。

DOUBLE

percentile(BIGINT col, p)

返回组中列的精确第p 个百分位数(不适用于浮点类型)。p必须在0到1之间。注意:只能为整数值计算真实百分位数。如果您输入的内容不是整数,请使用PERCENTILE_APPROX。

array<double>

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

返回组中列的精确百分位数p 1,p 2,...(不适用于浮点类型)。p i必须在0到1之间。注意:只能为整数值计算真实百分位数。如果您输入的内容不是整数,请使用PERCENTILE_APPROX。

DOUBLE

percentile_approx(DOUBLE col, p [, B])

返回组中数字列(包括浮点类型)的大约p 个百分位数。B参数控制近似精度,但要以存储为代价。值越高,近似值越好,默认值为10,000。当col中的不同值的数量小于B时,这将给出一个精确的百分位值。

array<double>

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

与上面相同,但是接受并返回一个百分位值数组,而不是单个值。

double

regr_avgx(independent, dependent)

等效于avg(dependent)。从Hive 2.2.0开始。

double

regr_avgy(independent, dependent)

等效于avg(独立)。从Hive 2.2.0开始。

double

regr_count(independent, dependent)

返回用于拟合线性回归线的非空对的数量。从Hive 2.2.0开始。

double

regr_intercept(independent, dependent)

返回线性回归线的y截距,即等式中的b值=独立* a *独立+ b。从Hive 2.2.0开始。

double

regr_r2(independent, dependent)

返回回归的确定系数。从Hive 2.2.0开始。

double

regr_slope(independent, dependent)

返回线性回归线的斜率,即等式= a *独立+ b中a的值。从Hive 2.2.0开始。

double

regr_sxx(independent, dependent)

等效于regr_count(独立,从属)* var_pop(独立)。从Hive 2.2.0开始。

double

regr_sxy(independent, dependent)

等效于regr_count(独立,从属)* covar_pop(独立,从属)。从Hive 2.2.0开始。

doubleregr_syy(independent, dependent)

等效于regr_count(独立,从属)* var_pop(独立)。从Hive 2.2.0开始。

array<struct {'x','y'}>

histogram_numeric(col, b)

使用b个非均匀间隔的bin计算组中数字列的直方图。输出是大小为b的双值(x,y)坐标数组,这些坐标表示箱的中心和高度

array

collect_set(col)

返回消除了重复元素的一组对象。

array

collect_list(col)

返回具有重复项的对象列表。(从Hive 0.13.0开始。)

INTEGERntile(INTEGER x)

将有序分区划分为x多个桶,并为分区中的每一行分配一个桶号。这样可以轻松计算三分位数,四分位数,十分位数,百分位数和其他常见的汇总统计信息。(从Hive 0.11.0开始。)

内置表生成函数(UDTF)

普通的用户定义函数(例如concat())接受单个输入行并输出单个输出行。相反,表生成函数将单个输入行转换为多个输出行。

行集列类型

姓名(签名)

描述

T

explode(ARRAY<T> a)

将数组分解为多行。返回带有单列(col)的行集,该数组代表数组中每个元素的一行。

Tkey,Tvalue

explode(MAP<Tkey,Tvalue> m)

将地图分解为多行。返回一个行集合与两列(键,值),一个行从输入图中的每个键-值对。(从Hive 0.8.0开始。)。

int,Tposexplode(ARRAY<T> a)使用附加的int类型位置列将数组分解为多行(原始数组中项的位置,从0开始)。返回具有两列(pos,val)的行集,该数组中的每个元素一行。

T1,...,Tn

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

将结构数组分解为多行。返回具有N列的行集(N =结构中顶级元素的数量),数组中每个结构一行一行。(从Hive0.10开始。)

T1,...,Tn/rstack(int r,T1 V1,...,Tn/r Vn)将n个值V 1,...,V n分解为r行。每行将有n / r列。r必须是常数。
   

string1,...,stringn

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

接收JSON字符串和一组n个键,并返回n个值的元组。这是get_json_objectUDF的一种更有效的版本,因为它只需一次调用就可以获取多个密钥。

string 1,...,stringn

parse_url_tuple(string urlStr,string p1,...,string pn)

接受URL字符串和一组n个URL部分,并返回n个值的元组。这类似于parse_url()UDF,但可以一次从URL中提取多个部分。有效的部件名称是:主机,路径,查询,参考,协议,授权,文件,用户信息,查询:<密钥>。

 

使用范例

爆炸(数组)

select explode(array('A','B','C'));

select explode(array('A','B','C')) as col;

select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf;

select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf as col;

 

col

A
B
C

 

 

explode (map)

 

select explode(map('A',10,'B',20,'C',30));

select explode(map('A',10,'B',20,'C',30)) as (key,value);

select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf;

select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf as key,value;

 

key

value

A10
B20
C30

 

 

 

 

posexplode(array)

 

select posexplode(array('A','B','C'));

select posexplode(array('A','B','C')) as (pos,val);

select tf.* from (select 0) t lateral view posexplode(array('A','B','C')) tf;

select tf.* from (select 0) t lateral view posexplode(array('A','B','C')) tf as pos,val;

 

pos

val

0A
1B
2C

 

 

 

 

inline (array of structs)

select inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02')));

select inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02'))) as (col1,col2,col3);

select tf.* from (select 0) t lateral view inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02'))) tf;

select tf.* from (select 0) t lateral view inline(array(struct('A',10,date '2015-01-01'),struct('B',20,date '2016-02-02'))) tf as col1,col2,col3;

 

col1

col2

col3

A102015-01-01
B202016-02-02

 

 

 

 

stack (values)

 

select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01');

select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2);

select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') tf;

select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') tf as col0,col1,col2;

 

col0

col1

col2

A102015-01-01
B202016-01-01

 

 

 

 

使用语法 "SELECT udtf(col) AS colAlias..." 有一些限制:

  • SELECT中不允许其他表达式
    • 不支持 SELECT pageid, explode(adid_list) AS myCol...
  • UDTF不能嵌套
    • 不支持 SELECT explode(explode(adid_list)) AS myCol...
  • 不支持GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY
    • 不支持 SELECT explode(adid_list) AS myCol ... GROUP BY myCol

请参阅LanguageManual LateralView,以获取没有这些限制的替代语法。

如果要创建自定义UDTF,也请参见编写 UDTF。

 

explode

explode()接受数组(or a map)作为输入,并将array (map)的元素作为单独的行输出。UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。

作为explode()在SELECT表达式列表中使用的示例  ,请考虑一个名为myTable的表,该表具有单列(myCol)和两行:

Array <int> myCol

[100,200,300]

[400,500,600]

然后运行查询:

SELECT explode(myCol) AS myNewCol FROM myTable;

将产生:

(int)myNewCol

100

200

300

400

500

600

Maps的用法类似:

SELECT explode(myMap) AS (myMapKey, myMapValue) FROM myMapTable;

 

posexplode

Version

自Hive 0.13.0起可用。参见HIVE-4943。

posexplode()类似于explode但不只是返回数组的元素,它还返回元素及其在原始数组中的位置。

作为posexplode()在SELECT表达式列表中使用的示例  ,请考虑一个名为myTable的表,该表具有单列(myCol)和两行:

Array <int> myCol

[100,200,300]

[400,500,600]

然后运行查询:

SELECT posexplode(myCol) AS pos, myNewCol FROM myTable;

将产生:

(int)pos

(int)myNewCol

1

100

2

200

3

300

1

400

2

500

3

600

json_tuple

Hive 0.7中引入了新的json_tuple()UDTF。它使用一组名称(键)和一个JSON字符串,并使用一个函数返回值的元组。这比调用GET_JSON_OBJECT从单个JSON字符串中检索多个密钥要有效得多。在任何情况下,单个JSON字符串都会被解析多次,如果您解析一次JSON_TUPLE,查询将更加高效。由于JSON_TUPLE是UDTF,因此您需要使用LATERAL VIEW语法才能实现相同的目标。

例如,

select a.timestamp, get_json_object(a.appevents, '$.eventid'), get_json_object(a.appenvets, '$.eventname') from log a;

应该更改为:

select a.timestamp, b.*
from log a lateral view json_tuple(a.appevent, 'eventid', 'eventname') b as f1, f2;

parse_url_tuple

parse_url_tuple()UDTF与parse_url()相似,但是可以提取给定URL的多个部分,以元组形式返回数据。可以通过将冒号和键附加到partToExtract参数来提取QUERY中特定键的值,例如parse_url_tuple(''http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY:k1', 'QUERY:k2')返回值为'v1','v2'的元组。这比多次调用parse_url()更有效。所有输入参数和输出列类型都是字符串。

SELECT b.*
FROM src LATERAL VIEW parse_url_tuple(fullurl, 'HOST', 'PATH', 'QUERY', 'QUERY:id') b as host, path, query, query_id LIMIT 1;

GROUPing and SORTing on f(column)

一个典型的OLAP模式是您有一个timestamp列,并且您希望按每日或其他粒度较小的日期窗口(而不是按秒)进行分组。因此,您可能要select concat(year(dt),month(dt)) and then group on that concat()。但是,如果您尝试在应用了函数和别名的列上使用GROUP BY或SORT BY,如下所示:

select f(col) as fc, count(*) from table_name group by fc;

你会得到一个错误:

FAILED: Error in semantic analysis: line 1:69 Invalid Table Alias or Column Reference fc

因为您不能对应用了功能的列别名进行GROUP BY或SORT BY。有两种解决方法。首先,您可以使用子查询来重新构造此查询,这有点复杂:

select sq.fc,col1,col2,...,colN,count(*) from
  (select f(col) as fc,col1,col2,...,colN from table_name) sq
 group by sq.fc,col1,col2,...,colN;

或者您可以确保不使用更简单的列别名:

select f(col) as fc, count(*) from table_name group by f(col);

如果您想进一步讨论,请与RiotGames dot com的Tim Ellis(tellis)联系。

实用功能

功能名称

返回类型

描述

跑步

version

String

提供Hive版本详细信息(软件包内置版本)

select version();
buildversionString版本功能的扩展,其中包括校验和select buildversion();

UDF内部

UDF的评估方法的上下文是一次一行。像这样的UDF的简单调用

SELECT length(string_col) FROM table_name;

将评估作业的地图部分中每个string_col值的长度。在地图端评估UDF的副作用是您无法控制发送到映射器的行的顺序。发送到映射器的文件拆分的序列化顺序与此相同。任何reduce边操作(例如SORT BY,ORDER BY,常规JOIN等)都将应用于UDF输出,就好像它只是表的另一列一样。这很好,因为UDF的评估方法的上下文一次只能排成一行。

如果您想控制将哪些行发送到相同的UDF(并可能以什么顺序),您将敦促在简化阶段对UDF进行评估。这可以通过使用DISTRIBUTE BY,DISTRIBUTE BY + SORT BY,CLUSTER BY来实现。查询示例为:

SELECT reducer_udf(my_col, distribute_col, sort_col) FROM
(SELECT my_col, distribute_col, sort_col FROM table_name DISTRIBUTE BY distribute_col SORT BY distribute_col, sort_col) t

但是,可能有人争辩说,控制发送到同一UDF的行集的前提是在该UDF中进行聚合。在这种情况下,使用用户定义的聚合函数(UDAF)是更好的选择。您可以在此处阅读有关编写UDAF的更多信息。另外,您可以使用Hive的Transform功能,使用自定义的reduce脚本来完成相同的任务。这两个选项都将在归约方面进行汇总。

创建自定义UDF

有关如何创建自定义UDF的信息,请参见Hive插件  和创建功能。

 

select explode(array('A','B','C'));select explode(array('A','B','C')) as col;select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf;select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf as col;

Hive中hash函数及md5函数 该算法将输入数据分为若干个块,每个块都进行哈希计算,最终将所有块的哈希值合并起来得到最终的哈希值。参数2: 224, 256, 384, 512, 或 0(=256)中的一个,表示SHA-224, SHA-256, SHA-384, SHA-512。由于哈希函数的特性,相同的输入数据每次计算得到的哈希值都是相同的,因此HASH函数可以用于对数据进行快速的去重或分组。4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。2、容易计算:从原数据计算出MD5值很容易。 阅读详情

相关推荐

Hive中的HASH函数规则及示例

Hive中的哈希函数采用的是MurmurHash算法,这是一种非常高效的哈希算法。该算法将输入数据分为若干个块,每个块都进行哈希计算,最终将所有块的哈希值合并起来得到最终的哈希值。在执行上述查询语句时,Hive会自动调用HASH函数对每个姓名进行哈希计算,并将具有相同哈希值的姓名放入同一个分组中,最终对每个分组进行统计计算。由于哈希函数的特性,相同的输入数据每次计算得到的哈希值都是相同的,因此HASH函数可以用于对数据进行快速的去重或分组。下面举一个简单的例子来说明HASH函数的使用。

qq_40953864的博客 3254

-Hive-Apache.org(官网)使用手册

hive官网:http://hive.apache.org/

chen_2_2的博客 5170

hive3.x 安装

文章目录地址MySql安装报错初始化Hive元数据库报错 地址 1)Hive官网地址 http://hive.apache.org/ 2)文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3)下载地址 http://archive.apache.org/dist/hive/ 4)github地址 https://github.com/apache/hive MySql安装 在CDP中建议推荐使用MariaDB 作为h

张不帅 986

Hive的安装及配置

一、Hive安装地址 1、Hive官网地址 http://hive.apache.org/ 2、文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3、下载地址 http://archive.apache.org/dist/hive/ 二、Hive安装部署 2.1 Hive安装及配置 1、把 apache-...

a1786742005的博客 2633

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程

本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。

weixin_33964987的博客 364

EBS开发_离散工单创建API

--以下代码于20171213在TONY环境中实现 DECLARE     l_iface_rec    wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表     l_group_id     NUMBER;     l_returnstatus VARCHAR2(40);     l_errormsg     VARCHAR2(2000

蜗牛先生快跑的博客 2596

hive官网函数-说明文档(原文)

Built-in Operators Operators Precedences Example Operators Description A[B] , A.identifier bracket_op([]), dot(.) element selector, dot -A unary(+), unary(-), unary(~) unary prefix operato

hello_java_lcl的博客 4164

ZYNQ工业级串口方案:AXI UART 16550扩展RS-485实战(自动方向控制+Linux驱动)

可以轻松扩展出多路工业级串口。但常规方案需要手动控制收发方向(DE/RE引脚),存在实时性差、CPU占用高等痛点。本文从硬件逻辑设计到Linux驱动开发,完整实现了ZYNQ平台的RS-485工业通信方案。,解决了传统方案实时性差的痛点。所有代码均经过实际项目验证,可直接用于生产环境。:尝试将此设计扩展为多协议兼容接口(支持RS-422/RS-232切换)!等特性,依然是现场总线通信的首选。,通过硬件逻辑+Linux驱动协同设计,实现零延迟切换。在工业自动化、能源电力等场景中,RS-485凭借。

QQ_778132974的博客 832

Hive 快速上手--官网中文翻译

目录 安装和配置 从一个稳定的发行版安装Hive 编译Hive源码 编译主干的Hive 编译分支branch-1 在Hadoop 0.20上在0.13之前编译Hive 在Hadoop 0.23上在0.13之前编译Hive(Ant) 运行Hive 运行Hive CLI 运行HiveServer2 和 Beeline 运行HCatalog 运行WebHCat (Temp...

JacksonKing的专栏 1969

RTCA DO-160G标准详解:航空电子设备的全面环境适应性测试指南

第二章的主要目的是提供标准中使用的术语和定义。了解这些术语对于准确理解标准的要求至关重要,特别是在技术实施过程中。RTCA DO-160G 涉及多个学科的知识,包括航空、电子、电磁学和机械工程,因此需要确保使用的术语在所有学科中具有一致的定义。为了确保测试人员和工程师在执行测试时对所有条件和要求的理解一致,RTCA DO-160G 标准中定义了大量术语。环境应力:指的是设备在操作过程中可能遇到的外部物理或化学条件,包括温度、湿度、振动等。电磁干扰(EMI)

qq_41854911的博客 5278

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 315

花了一天的时间将官网描述Hive运算符和函数逐一测试了一遍

Hive运算符和函数使用方法(全)(中文文档, 手动修改翻译并测试) 目录 参考文档 0 前言 1 内置函数 UDFs 1.1 数学函数 1.2 集合函数 1.3 类型转换函数 1.4 日期函数 1.5 条件函数 1.6 字符串函数 1.7 数据屏蔽函数 1.8 加密等其他函数 xpath get_json_object 2 内置聚合函数UDAF 3 内置表生成函数UDTF UDTF用法描述 UDTF用法示例 **explode (array)** **explode (map)** LateralView

idataduck的博客 1417

告别JavaScript!C#通过WebAssembly在浏览器中实现“原生级“性能

C# + WebAssembly:前端开发的革命性替代方案 摘要:本文探讨了C#通过WebAssembly取代JavaScript开发前端应用的新趋势。文章分析了JavaScript的局限性(弱类型、回调地狱等),并详细介绍了C#+WebAssembly组合的优势:强类型系统、高性能、多线程支持和代码重用。技术实现方面,阐述了C#通过Mono/.NET编译为WebAssembly字节码的原理,重点介绍了Blazor框架的两种模式。文章还提供了实战指南,包括项目创建、多线程配置,以及一个与ChatGPT AP

墨夶的博客 946

Hive内容分享(一):Hive介绍

Hive是基于Hadoop的一个数据仓库(Data Aarehouse,简称数仓、DW),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。是用于存储、分析、报告的数据系统。在Hadoop生态系统中,HDFS用于存储数据,Yarn用于资源管理,MapReduce用于数据处理,而Hive是构建在Hadoop之上的数据仓库,包括以下方面:使用HQL作为查询接口;使用HDFS存储;使用MapReduce或其它计算框架计算;执行程序运行在Yarn上。

之乎者也·的博客 1124

使用ChatGPT工具阅读文献的实战教程

本文介绍核心内容为使用ChatGPT工具阅读文献,希望对学习和使用ChatGPT的同学们有所帮助。为了兼顾质量和速度,本专栏的更新频率为一周一到两更。 文章目录 1. 前言 2. 实战教程 2.1 下载工具并登录 2.2 提取文献中的关键信息

herosunly的博客 15万+

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

Gradle中文实用教程技术文档总结

Gradle中文实用教程技术文档总结

wang2leee的博客 1733

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Apache Paimon 官方文档中文翻译——Concepts

的数据划分方式,用于根据某些列的值(如日期、城市、部门等)将表拆分成相关的部分。每张表可以有一个或多个分区键(partition key),用于标识特定的分区。记录了有关 LSM 数据文件和变更日志文件(changelog files)的变更信息,例如:在对应快照中,哪些 LSM 数据文件被创建,哪些文件被删除。也就是说,最终表的状态可能是两次提交的混合结果,但不会丢失任何变更。从一个快照文件开始,Paimon 的读取器可以递归地访问表中的所有记录。,用户也可以通过较早的快照访问表的历史状态。

qq_42418398的博客 2547

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Hive表进阶操作_2

摘要:分桶表 复杂数据类型(array struct map) 乱码解决 hive Sql

分享~ 2037

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WebHCat使用指南--官网中文翻译

目录 WebHCat介绍 URL 格式 安全性 标准参数 安全错误响应 WebHDFS和代码推送 错误代码和响应 项目名称 版本信息 HCatalog项目毕业于Apache孵化器,并于2013年3月26日与Hive项目合并。 Hive版本0.11.0是第一个包含HCatalog及其REST API WebHCat的版本。 WebHCat介绍 本文档描...

JacksonKing的专栏 3437

Hive ACID事务表

关于hive ACID事务表的一些内容记载

qq_44540985的博客 1965

python操作hive数据库代码_windows下怎么用python连接hive数据库

展开全部由于版本的不同,Python 连接 Hive 的方式也就不一样。在网上搜索关键字 python hive 的时候可以找到一些解决方案。大部分是这32313133353236313431303231363533e4b893e5b19e31333361326339样的,首先把hive 根目录下的$HIVE_HOME/lib/py拷贝到 python 的库中,也就是 site-package 中...

weixin_39750731的博客 622

spark 读取hive java_Spark2.0入门:连接Hive读写数据(DataFrame)

【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载![返回Spark教程首页]Hive是基于Hadoop的数据仓库(要想了解更多数据仓库Hive的知识以及如何安装Hive,可以参考厦门大学数据库实验室的Hive授课视频、Hive安装指南)。本节内容介绍Spark如何连接Hive并读写数据。一、让Spark包含Hive支持为了让Spark能够访问Hive,必须为Spark添加Hi...

weixin_35397676的博客 1126

WebHCat安装--官网中文翻译

WebHCat与Hive的安装 目录 WebHCat与Hive的安装 WebHCat安装过程 服务器命令 要求 Hadoop 分布式缓存 权限 集群安全性 代理用户支持 版本 WebHCat和HCatalog与Hive一起安装,从Hive release 0.11.0开始。 如果从二进制tarball安装Hive, WebHCat服务器命令webhcat_server.sh...

JacksonKing的专栏 909

Hive官方手册翻译(Getting Started)(转)

原文:http://slaytanic.blog.51cto.com/2057708/939950 翻译Hive官方文档系列,文中括号中包含 注: 字样的,为我自行标注的,水平有限,翻译不是完美无缺的。如有疑问,请参照Hive官方文档对照查看。 内容列表 Cloudera制作的Hive介绍视频 安装与配置 系统需求 安装Hive发行版 从Hive源码编译 运...

weixin_33701251的博客 133

Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建

虚拟机+Zookeeper+Hadoop+Hbase+hive+kylin+nginx集群搭建,本文详细的从自身搭建时遇到的问题出发讲述了虚拟机安装、jdk安装、zookeeper、Hadoop、hbase、hive、kylin、nginx安装与配置、集群设置等方面的内容,作为学习路上的参考

tiki的博客 1906
上一篇: hive 函数总结--更新中
下一篇: 挂起虚拟机导致hbase异常
lcl_bigdata
博客等级 码龄11年 268粉丝 67原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值