Hive(三) Hive的运算符和函数

您所在的位置:网站首页 hive支持的数据类型不包括以下哪种 Hive(三) Hive的运算符和函数

Hive(三) Hive的运算符和函数

2024-07-14 07:35| 来源: 网络整理| 查看: 265

1 Hive 运算符和函数

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

创建类似 oracle 数据库的虚拟表 dual,便于测试:

create table dual(id string); insert into dual values(" "); select * from dual; +----------+--+ | dual.id | +----------+--+ | | +----------+--+

 

1.1内置运算符 1.1.1 关系运算符(where 子句中) 运算符 类型说明A = B所有原始类型如果 A 与 B 相等,返回 TRUE,否则返回 FALSEA == B无失败,因为无效的语法。 SQL 使用”=”,不使用”==”。A B所有原始类型如果 A 不等于 B 返回 TRUE,否则返回 FALSE。如果 A 或 B 值 为”NULL”,结果返回”NULL”。A < B所有原始类型如果 A 小于 B 返回 TRUE,否则返回 FALSE。如果 A 或 B 值 为”NULL”,结果返回”NULL”。A B所有原始类型如果 A 大于 B 返回 TRUE,否则返回 FALSE。如果 A 或 B 值 为”NULL”,结果返回”NULL”。A >= B所有原始类型如果 A 大于等于 B 返回 TRUE,否则返回 FALSE。如果 A 或 B 值 为”NULL”,结果返回”NULL”。A IS NULL所有类型如果 A 值为”NULL”,返回 TRUE,否则返回 FALSEA IS NOT NULL所有类型如果 A 值不为”NULL”,返回 TRUE,否则返回 FALSEA LIKE B字符串

如 果 A 或 B 值为”NULL”,结果返回”NULL”。字符串 A 与 B 通过 sql 进行匹配,如果相符返回 TRUE,不符返回 FALSE。 B 字符串中 的”_”代表任一字符,”%”则代表多个任意字符。

例如: (‘foobar’ like ‘foo’)返回 FALSE, ( ‘foobar’ like ‘foo_ _ _’或者 ‘foobar’ like ‘foo%’)则返回 TURE

A RLIKE B字符串如 果 A 或 B 值为”NULL”,结果返回”NULL”。字符串 A 与 B 通过 java 进行匹配,如果相符返回 TRUE,不符返回 FALSE。 例如:( select 'foobar' rlike 'foo')返回 FALSE,(select 'foobar' rlike '^f.*r$'; )返回 TRUE。A REGEXP B字符串与 RLIKE 相同。 1.1.2 算术运算符 运算符类型 说明A + B所有数字类型A 和 B 相加。结果的与操作数值有共同类型。例如每一个整数是 一个浮点数,浮点数包含整数。所以,一个浮点数和一个整数 相加结果也是一个浮点数。A – B所有数字类型A 和 B 相减。结果的与操作数值有共同类型。A * B所有数字类型A 和 B 相乘,结果的与操作数值有共同类型。需要说明的是,如 果乘法造成溢出,将选择更高的类型。A / B所有数字类型A 和 B 相除,结果是一个 double(双精度)类型的结果。A % B所有数字类型A 除以 B 余数与操作数值有共同类型。A & B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”与” 操作。两个表达式的一位均为 1 时,则结果的该位为 1。否则, 结果的该位为 0。A|B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”或” 操作。只要任一表达式的一位为 1,则结果的该位为 1。否则, 结果的该位为 0。A ^ B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”异 或”操作。当且仅当只有一个表达式的某位上为 1 时,结果的 该位才为 1。否则结果的该位为 0。~A所有数字类型对一个表达式执行按位”非”(取反)。 1.1.3 逻辑运算符 运算符类型 说明A AND B布尔值A 和 B 同时正确时,返回 TRUE,否则 FALSE。如果 A 或 B 值为 NULL, 返回 NULL。A && B布尔值与”A AND B”相同A OR B布尔值A 或 B 正确,或两者同时正确返返回 TRUE,否则 FALSE。如果 A 和 B 值同时为 NULL,返回 NULL。A | B布尔值与”A OR B”相同NOT A布尔值如果 A 为 NULL 或错误的时候返回 TURE,否则返回 FALSE。! A布尔值与”NOT A”相同 1.1.4 复杂类型函数 函数类型 说明map(key1, value1, key2,value2, …)通过指定的键/值对,创建一个 map。struct(val1, val2, val3, …)通过指定的字段值,创建一个结构。结构字 段名称将 COL1,COL2,…array(val1, val2, …)通过指定的元素,创建一个数组。 1.1.5 对复杂类型函数操作 函数类型说明A[n]A 是一个数组,n 为 int型

返回数组 A 的第 n 个元素,第一个元素的索引为 0。

如果A 数组为['foo','bar'],则 A[0]返回’foo’和 A[1]返回”bar”。

select likes[0] from person;

M[key]M 是 Map,关键 K 型

返回关键值对应的值,

例如 mapM 为 \{‘f’ -> ‘foo’,‘b’ -> ‘bar’, ‘all’ -> ‘foobar’\},

则M['all'] 返回’foobar’。

select  address['beijing'] from  person;

S.xS 为 struct

返回结构 x 字符串在结构 S 中的存储位置。

如 foobar \{int foo, int bar\}  foobar.foo 的领域中存储的整数。

1.2内置函数 1.2.1 数学函数 返回类型函数说明BIGINTround(double a)四舍五入DOUBLEround(double a, int d)

小数部分 d 位之后数字四舍五入,

例如 round(21.263,2),返回 21.26

BIGINTfloor(double a)

对给定数据进行向下舍入最接近的整数。

例如 floor(21.2),返回 21。

BIGINTceil(double a), ceiling(double a)将参数向上舍入为最接近的整数。例如 ceil(21.2),返回 22.doublerand(), rand(int seed)返回大于或等于 0 且小于 1 的平均分布随机数(依重新 计算而变)doubleexp(double a)返回 e 的 n 次方doubleln(double a)返回给定数值的自然对数doublelog10(double a)返回给定数值的以 10 为底自然对数 doubl log2(double a) 返回给定数值的以 2 为底自然对数doublelog(double base, double a)返回给定底数及指数返回自然对数doublepow(double a,double p) power(double a, double p)返回某数的乘幂doublesqrt(double a)返回数值的平方根stringbin(BIGINT a)返回二进制格式stringhex(BIGINT a) hex(string a)将整数或字符转换为十六进制格式stringunhex(string a)十六进制字符转换由数字表示的字符。string

conv(BIGINT num,

int from_base,

int to_base)

将 指定数值,由原来的度量体系转换为指定的试题体 系。例如 CONV(‘a’,16,2),返回。参考:’1010′ http://dev.mysql.com/doc/refman/5.0/en/mathemat ical-functions.html#function_convdoubleabs(double a)取绝对值int doublepmod(int a,int b) pmod(double a,double b)返回 a 除 b 的余数的绝对值doublesin(double a)返回给定角度的正弦值doubleasin(double a)返回 x 的反正弦,即是 X。如果 X 是在-1 到 1 的正弦值, 返回 NULL。doublecos(double a)返回余弦doubleacos(double a)返回 X 的反余弦,即余弦是 X,,如果-1int 需要强制类型

返回类型 函数 说明指定 “type”cast(expr as )

类型转换。

例如将字符”1″转换为整数:cast(’1′ as bigint),

如果转换失败返回NULL。

1.2.4 日期函数 返回类型函数说明stringfrom_unixtime(bigint unixtime[, string format])UNIX_TIMESTAMP 参数表示返回一个 值’YYYY- MM – DD HH:MM:SS’或 YYYYMMDDHHMMSS.uuuuuu 格式,这取决于是 否是在一个字符串或数字语境中使用的功 能。该值表示在当前的时区。bigintunix_timestamp()

如果不带参数的调用,返回一个 Unix 时间戳

(从’1970- 01 – 0100:00:00′到现在的 UTC 秒数)为无符号整数。

bigintunix_timestamp(string date)指定日期参数调用 UNIX_TIMESTAMP(), 它返回参数值’1970- 01 – 0100:00:00′ 到指定日期的秒数。bigintunix_timestamp(string date, string pattern)指定时间输入格式,返回到 1970 年秒数: unix_timestamp(’2020-07-24′,‘yyyy-MM-dd’) = 1595520000stringto_date(string timestamp)返回时间中的年月日: to_date(“1970-01-01 00:00:00″) =“1970-01-01″stringto_dates(string date)

给定一个日期 date,返回一个天数

(0 年以来的天数)

intyear(string date)返回指定时间的年份,范围在1000到9999, 或为”零”日期的 0。intmonth(string date)

返回指定时间的月份,范围为 1 至 12 月, 或 0 一个月的一部分,

如’0000-00-00′或’2008-00-00′的日期。

intday(string date) dayofmonth(date)返回指定时间的日期inthour(string date)返回指定时间的小时,范围为 0 到 23。intminute(string date)返回指定时间的分钟,范围为 0 到 59。intsecond(string date)返回指定时间的秒,范围为 0 到 59。intweekofyear(string date)返回指定日期所在一年中的星期号,范围为 0 到 53。intdatediff(string enddate,string startdate)两个时间参数的日期之差。intdate_add(string startdate, int days)给定时间,在此基础上加上指定的时间段。intdate_sub(string startdate, int days)给定时间,在此基础上减去指定的时间段。 1.2.5 条件函数?Case 返回类型函数 说明Tif(boolean testCondition, T valueTrue, T valueFalseOrNull)判断是否满足条件,如果满足返回 一个值,如果不满足则返回另一个 值。TCOALESCE(T v1, T v2, …)返回一组数据中,第一个不为 NULL 的值,如果均为 NULL,返回 NULL。TCASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END当 a=b 时,返回 c;当 a=d 时,返 回 e,否则返回 f。TCASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END当值为 a 时返回 b,当值为 c 时返 回 d。否则返回 e。

select substr(key,13,2), case when birthday


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3