Hive 逻辑运算,函数

Hive自身提供了逻辑运算以及数学上的一些函数,基本和mysql
里差不多.简单的不再多说了,只记录一些常用的

函数

Hive自带的函数非常多,大致分为一下几块介绍,详细信息在Hive Wiki官网

数学函数

返回类型 函数 说明
bigint round(double a) 四舍五入
double round(double a, int d) 小数部分d位之后数字四舍五入
bigint floor(double a) 对给定数据进行向下舍入最接近的整数
bigint ceil(double a)
ceiling(double a)
将参数向上舍入为最接近的整数
double rand()
rand(int seed)
返回大于或等于0且小于1的平均分布随机数(依重新计算而变)
double pow(double a, double p)
power(double a, double p)
返回某数的乘幂
double sqrt(double a) 返回数值的平方根
int
double
positive(int a)
positive(double a)
返回A的值
int
double
negative(int a)
negative(double a)
返回A的相反数

日期函数

返回类型 函数 说明
string from_unixtime(bigint unixtime[, string format]) UNIX_TIMESTAMP参数表示返回一个值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,这取决于是否是在一个字符串或数字语境中使用的功能。该值表示在当前的时区。
bigint unix_timestamp() 如果不带参数的调用,返回一个Unix时间戳(从’1970-01–0100:00:00′到现在的UTC秒数)为无符号整数。
bigint unix_timestamp(string date) 指定日期参数调用UNIX_TIMESTAMP(),它返回参数值’1970- 01 – 0100:00:00′到指定日期的秒数。
bigint unix_timestamp(string date, string pattern) 指定时间输入格式,返回到1970年秒数:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400
string to_date(string timestamp) 返回时间中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″
string to_dates(string date) 给定一个日期date,返回一个天数(0年以来的天数)
int year(string date) 返回指定时间的年份
int month(string date) 返回指定时间的月份
int day(string date) dayofmonth(date) 返回指定时间的日期
int hour(string date) 返回指定时间的小时,范围为0到23。
int minute(string date) 返回指定时间的分钟,范围为0到59。
int second(string date) 返回指定时间的秒,范围为0到59。
int weekofyear(string date) 返回指定日期所在一年中的星期号,范围为0到53。
int datediff(string enddate, string startdate) 两个时间参数的日期之差。
int date_add(string startdate, int days) 给定时间,在此基础上加上指定的时间段。
int date_sub(string startdate, int days) 给定时间,在此基础上减去指定的时间段。

NOTE:所以想把一个20160302转换成2016-03-02这种时间格式,要么用**strsub()配合concat()**来实现,或者就使用from_unixtime(unix_timestamp(create_time, 'yyyyMMdd'), 'yyyy-MM-dd)

字符函数

返回类型 函数 说明
int length(string A) 返回字符串的长度
string reverse(string A) 返回倒序字符串
string concat(string A, string B…) 连接多个字符串,合并为一个字符串,可以接受任意数量的输入字符串
string concat_ws(string SEP, string A, string B…) 链接多个字符串,字符串之间以指定的分隔符分开。
string substr(string A, int start, int len)
substring(string A, int start, int len)
从文本字符串中指定的位置指定长度的字符。
string upper(string A)
ucase(string A)
将文本字符串转换成字母全部大写形式
string lower(string A)
lcase(string A)
将文本字符串转换成字母全部小写形式
string trim(string A) 删除字符串两端的空格,字符之间的空格保留
string ltrim(string A) 删除字符串左边的空格,其他的空格保留
string rtrim(string A) 删除字符串右边的空格,其他的空格保留
string regexp_replace(string A, string B, string C) 字符串A中的B字符被C字符替代
string regexp_extract(string subject, string pattern, int index) 通过下标返回正则表达式指定的部分。需要注意的是:原来的\ 转义,这里变成了双斜杠了\\,所以对于[,{这些特殊字符,需要注意使用两个斜杠,包括原来的正则表达式,如果是\d匹配数字,就需要使用\\d
string parse_url(string urlString, string partToExtract [, string keyToExtract]) 返回URL指定的部分。parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) 返回:’facebook.com’,key处理指定为host,还可以指定为path,[query,key]
string get_json_object(string json_string, string path) select a.timestamp, get_json_object(a.appevents, ‘$.eventid’), get_json_object(a.appenvets, ‘$.eventname’) from log a;
string space(int n) 返回指定数量的空格
string repeat(string str, int n) 重复N次字符串
int ascii(string str) 返回字符串中首字符的数字值
string lpad(string str, int len, string pad) 返回指定长度的字符串,给定字符串长度小于指定长度时,由指定字符从左侧填补。
string rpad(string str, int len, string pad) 返回指定长度的字符串,给定字符串长度小于指定长度时,由指定字符从右侧填补。
array split(string str, string pat) 将字符串转换为数组。
int find_in_set(string str, string strList) 返回字符串str第一次在strlist出现的位置。如果任一参数为NULL,返回NULL;如果第一个参数包含逗号,返回0。
array<array> sentences(string str, string lang, string locale) 将字符串中内容按语句分组,每个单词间以逗号分隔,最后返回数组。 例如sentences(‘Hello there! How are you?’) 返回:( (“Hello”, “there”), (“How”, “are”, “you”) )

内置聚合函数

还有一些是内置的统计函数,可以免去不少计算的步骤

返回类型 函数 说明
bigint count(*)
count(expr)
count(DISTINCT expr[, expr_., expr_.])
返回记录条数。
double sum(col)
sum(DISTINCT col)
求和
double avg(col)
avg(DISTINCT col)
求平均值
double 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(col, p) 返回数值区域的百分比数值点。0<=P<=1,否则返回NULL,不支持浮点型数值。