查看函数的功能
DESCRIBE FUNCTION 函数名;
返回: 函数名和函数使用方法
DESCRIBE FUNCTION EXTENDED 函数名;
返回: 函数名, 函数使用方法 和示例

日期函数
默认日期格式
是yyyy-MM-dd hh24:mm:ss
-
y
:表示年份 -
M
:表示月份,注意是大写的 -
d
:表示天 -
h
:表示小时 -
m
:表示分钟,注意是小写的 -
s
:表示秒钟
获取系统当前时间
select current_date
current_date 表示hive系统当前日期, 不含时间
current_timestamp() 表示系统当前时间, 包括**日期和时间,**属于时间戳, 即秒后面包含小数点
unix_timestamp() 表示unix风格的时间戳, 是一串数字; 数字表示从计算机元年(1970-01-01),到当前时间所进过的秒数
日期格式转换
将unix风格的时间戳转换成 日期时间
from_unixtime() 函数, 默认按照 Hive中的默认日期格式进行转换
select from_unixtime(unix_timestamp());
将字符串转换成 unix时间戳
unix_timestamp(str,format)
示例
select unix_timestamp('2014-02-02','yyyy-MM-dd');
select unix_timestamp('20140202','yyyyMMdd');
字符串转换成标准的日期格式
select from_unixtime(unix_timestamp('20140202','yyyyMMdd'));
日期的计算
天数差 datediff(date1,date2)
select datediff('2014-02-02','2013-10-11'); -- 114
增加天数 date_add(date, num)
减少天数 date_sub(date, num)
增加/减少月份 add_months(date, num)
num > 0,增加月份; num < 0 减少月份
select add_months('2014-02-02',2);
两个日期之间的月份差 months_between(date1, date2)
获取日期中的年、月、日, Hive中没有 to_char 函数,
-- 需要使用 year(), month(), day(), hour(), minute(), second() 获取
select year('2014-02-02');
-- 也可以使用截断函数进行内容的截取
select substring('2014-02-02',1,4);
字符串函数
字符串连接函数
concat(str1, str2, ... strN)
select concat("angela","baby");
Oracle和Hive中的CONCAT
函数的区别

带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+)
concat_ws 即 Concatenate With Separator
-- 可以将多个字符串拼接成一个整体, 内容之间使用指定的符号进行分隔
select concat_ws(',', '111', '222', '333');
-- 数组元素拼接示例
SELECT concat_ws(',', array('111', '222', '333'));
select concat_ws('-', array('1','2','3','4'));
重复字符串函数:repeat(str, n) 重复str字符串n次
用于生成重复的字符串
select repeat("angela",2);
分割字符串函数: split(str, regex)
select split('apache-hive', '-');
返回结果: 数组 ["apache","hive"]
字符串长度函数 length(str)
select length("angelababy");
字符串反转函数:reverse
select reverse("angelababy");
返回结果 "ybabylanega"
字符串截取函数:substr(str, pos[, len]) 或者 substring(str, pos[, len])
select substr("angelababy",-2);
pos为负数时, 从右边开始截取, 返回 "by"
SELECT substr("angelababy", -2, 3);
从右边开始的第二个字符是"b" ,截取3个字符是"by", 因此返回"by"
字符串转大写函数:upper,ucase
select upper("angelababy");
select ucase("angelababy");
字符串转小写函数:lower,lcase
select lower("ANGELABABY");
select lcase("ANGELABABY");
去空格函数:trim 去除左右两边的空格
select trim(" angelababy ");
左边去空格函数:ltrim
右边去空格函数:rtrim
正则表达式替换函数:regexp_replace(str, regexp, rep)
三个参数:str
(要进行替换的字符串),regexp
(正则表达式),和rep
(用于替换匹配到的字符串)。它返回一个新的字符串,其中所有匹配正则表达式的子串都被替换为指定的字符串
SELECT regexp_replace('100-200', '(\\d+)', 'num');
正则表达式 (\\d+)
匹配一个或多个数字。函数会将这些匹配的部分替换为字符串 'num'
返回
"num-num"

正则表达式解析函数:regexp_extract(str, regexp[, idx]) 提取正则匹配到的指定组内容
select regexp_extract('100-200', '(\\d+)-(\\d+)', 2);

URL解析函数:parse_url 注意要想一次解析出多个 可以使用parse_url_tuple这个UDTF函数

select parse_url('http://www.itcast.cn/path/p1.php?query=1', 'HOST');
想要提取的是主机名(即域名)。因此,这个查询将返回 URL http://www.itcast.cn/path/p1.php?query=1
的主机名部分,即:
www.itcast.cn
json解析函数:get_json_object



空格字符串函数:space(n) 返回指定个数空格
select space(4);

首字符ascii函数:ascii
select ascii("angela");


左补足函数:lpad
l 即left
select lpad('hi', 5, '??');
返回"???hi"
select lpad('hi', 1, '??');
由于指定的长度为1,小于字符串 'hi' 的实际长度2,因此在Hive中,这个函数会返回原始字符串本身,即 'hi'
--右补足函数:rpad
r即right
select rpad('hi', 5, '??');
返回 "hi???"
集合查找函数: find_in_set(str,str_array)
select find_in_set('a','abc,b,ab,c,def');

杂项函数
取哈希值函数:hash
select hash("allen");
这将返回字符串 "allen"
的哈希值。具体返回的值取决于Hive中使用的哈希算法。


SHA-1加密: sha1(string/binary)
SHA-1(Secure Hash Algorithm 1)是一种加密哈希函数,它可以产生一个160位(20字节)的哈希值,通常用一个40位的十六进制字符串表示。
select sha1("allen");
SHA-2(Secure Hash Algorithm 2)是一系列加密哈希函数,它包括多个不同的变体,如 SHA-224、SHA-256、SHA-384 和 SHA-512,它们分别产生不同长度的哈希值。


crc32
是一种用于生成数据校验和(checksum)的哈希函数。CRC32(循环冗余校验32位)是一种广泛使用的哈希算法,用于检测数据传输或存储过程中的错误。它生成一个32位(4字节)的校验值,通常用于文件完整性检查和网络通信中。
"Cyclic"(循环)指的是在进行CRC计算时,数据被视为一个大的多项式,而生成多项式(polynomial)是这个多项式的一个因子。计算过程中,这个多项式会循环地与数据进行除法运算。
"Redundancy"(冗余)指的是在数据中添加额外的信息,这些信息用于校验数据的完整性。在CRC中,这些额外的信息就是CRC校验值,它被附加在数据的末尾。
"Check"(校验)指的是使用CRC值来验证数据的完整性。如果在数据传输或存储过程中发生错误,重新计算的CRC值将与原始CRC值不匹配,从而可以检测到错误。

MD5加密: md5(string/binary)
select md5("allen");
会将任意长度的输入数据转换为一个固定长度(128位,通常表示为32个十六进制字符)的哈希值
"MD"代表"Message-Digest",即"消息摘要"
取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数
select rand();