查看函数用法
命令如下:
desc function extended FUNC_NAME;
使用方法:
数学函数
log()
log(x,y) — 返回以x为底数的y的对数
命令:
select log(2,4);
结果:
pow()
pow(x,y) — 取x的y次方
命令:
select pow(2,3);
结果:
conv()
conv(bigint/string base,int from_base,int to_base) — 将base从from_base的进制数转换成to_base的进制数
命令:
select conv(1100,2,10);
结果:
命令:
select conv('100',10,2);
结果:
pmod()
pmod(int/double a,int/double b) — 取模
命令:
select pmod(5,2);
结果:
abs()
abs(double/decimal x) — 求x的绝对值
命令:
select abs(-20);
结果:
floor()
floor(double/decimal x) — 去除x的小数位
命令:
select floor(6.66);
结果:
ceil()
ceil(double/decimal x) — 将x向上取整数
命令:
select ceil(6.66);
结果:
rand()
rand() — 返回0~1的内的随机数
命令:
select rand();
结果:
round()
round(double/decimal x) — 将小数x四舍五入取整
命令:
select round(5.55);
结果:
degrees()
degrees(double/decimal a) — 将弧度a转化为角度double
命令:
select degrees(2.56);
结果:
radians()
radians(double/decimal a) — 将角度a转化为弧度double
命令:
select radians(2.56);
结果:
positive()
positive(int/double a) — 返回a
命令:
select positive(15);
结果:
negative()
negative(int/double a) — 返回-a
命令:
select negative(15);
结果:
sign()
sign(double/decimal a) — 返回a的符号
命令:
select sign(8);
结果:
命令:
select sign(-8);
结果:
命令:
select sign(0);
结果:
e/pi()
e()/pi() — 返回e/Π的值
命令:
select e();
select pi();
结果:
greatest()
greatest(T…vs) — 返回参数中最大的值
命令:
select greatest(1,3,5);
结果:
least()
least(T…vs) — 返回参数中最小的值
命令:
select least(1,3,5);
结果:
集合函数
size()
size(Map<K,V>/Array< T>) — 返回键值对/集合的个数,返回类型是int
命令:
--scores字段类型为Map
select size(scores) from employee_id;
结果:
命令:
--cities字段类型为array
select size(cities) from employee_id;
结果:
map_keys()
map_keys(Map<K,V>) — 返回一个无序数组,包含输入映射的键
命令:
--scores字段类型为Map
select map_keys(scores) as subject from employee1;
结果:
map_values()
map_values(Map<K,V>) — 返回一个无序数组,包含输入映射的值
命令:
--cities字段类型为array
select map_values(scores) as score from employee1;
结果:
array_contains()
array_contains(Array,T) — 如果参数1集合中含有参数2的值,返回true
命令:
select array_contains(cities,'Montreal') from employee1;
结果:
sort_array()
sort_array(Array) — 按升序对参数数组排序
命令:
select sort_array(map_values(volumn)) from shop;
结果:
array()
array(T…t) — 用参数给定的元素创建数组
命令:
select array('我','和','你');
结果:
map()
map(K k1,V v1,…) — 用参数给定的键/值对创建一个映射
命令:
select map('sub','hive','score',100);
结果:
struct()
struct(p1,v1,p2,v2,…) — 用参数给定的字段值创建结构
命令:
select struct('sub','score','pass');
结果:
日期函数
from_unixtime()
from_unixtime(bigint time,string format) — 以指定的格式format返回time
命令:
select from_unixtime(124124124,'yyyy-MM-dd');
结果:
date_format()
date_format(date/timestamp/string date,string format) — 将日期/时间戳/字符串转换为日期格式format指定的字符串值
命令:
select date_format(current_date(),'yyyy-MM-dd hh:mm:ss');
结果:
命令:
select date_format(current_timestamp(),'yyyy-MM-dd hh:mm:ss');
结果:
current_date()
current_date() — 获得当前日期
命令:
select current_date();
结果:
to_date()
to_date(string timestamp) — 提取timestamp中的年月日
命令:
select to_date(current_timestamp());
结果:
current_timestamp()
current_timestamp() — 获得当前具体时间(年-月-日 时:分:秒.毫秒)
命令:
select current_timestamp();
结果:
unix_timestamp()
unix_timestamp(string datetime) — 把参数时间转换为数字
命令:
select unix_timestamp(current_date());
结果:
date_add()
date_add(string date,int days) — 返回days天之后的date,days可以是负数
命令:
select date_add(current_date(),5);
结果:
命令:
select date_add(current_date(),-5);
结果:
add_months()
add_months(string date,int months) — 返回months月之后的date,months可以是负数
命令:
select add_months(current_date(),3);
结果:
命令:
select add_months(current_date(),-3);
结果:
next_day()
next_day(string date,string dayOfWeek) — 返回date之后的下一个dayOfWeek为哪一天
命令:
--‘SU’为星期日
select next_day(current_date(),'SU');
--返回今天之后的下一个星期日为哪一天
结果:
last_day()
last_day(string date) — 返回该月最后一天的日期
命令:
select last_day(current_date());
结果:
trunc()
trunc(string date,string format) — 返回日期的最开始日期
命令:
--'YY'代表返回该日期的年的第一天
select trunc(current_date(),'YY');
结果:
命令:
--'MM'代表返回该日期的月的第一天
select trunc(current_date(),'MM');
结果:
datediff()
datediff(string date1,string date2) — 计算两个日期天数的差值
命令:
select datediff('2020-11-11','1999-05-15');
结果:
months_between()
months_between(string date1,string date2) — 计算两个日期月份的差值
命令:
select months_between('2020-11-11','1999-05-15');
结果:
例题
1.计算本季度第一天
命令:
select concat_ws('-',cast(year(current_date) as string),cast(ceil(month(current_date())/3)*3-2 as string),'1');
结果:
2.计算本周第一天
命令:
select date_add(next_day(current_date(),'SU'),-7);
结果:
条件函数
if()
if(expr1,expr2,expr3) — 如果expr1为真(expr1<>0且expr1<>null)则返回expr2,否则返回expr3
命令:
select if(1<>1,'yes','no');
结果:
命令:
select if(1=1,'yes','no');
结果:
nvl()
nvl(value,default_value) — 如果value为空,则返回default_value,否则返回value
命令:
select nvl(null,'hive');
结果:
select nvl('hadoop','hive');
结果:
coalesce()
coalesce(T…vs) — 返回第一个非null值
命令:
select coalesce(null,'map','reduce','hdfs');
结果:
case()
1.case a when b then c when d then e else … end
当a=b,返回c,当a=d,返回e…
命令:
select case name when 'Will' then 'weier' when 'Lucy' then 'luxi' else 'somebody' end from employee1;
结果:
2.case when a then … when b then … else … end
命令:
select name,case when name='Will' then 'W' when name='Lucy' then 'L' else 'SB.' end from employee1;
结果:
isnull()
isnull(a) — 如果a为空,返回true,否则返回false
命令:
select isnull(null);
结果:
isnotnull()
isnotnull(a) — 如果a不为空,返回true,否则返回false
命令:
select isnotnull(null);
结果:
字符串函数
ascii()
ascii(string a) — 返回字符串首字母的阿斯克码
命令:
select ascii('abc');
结果:
concat_ws()
concat_ws(string sep,array< string>/string…array) — 以sep拼接数组或字符串
命令:
select concat_ws('+','I','love','China');
结果:
命令:
select concat_ws('+',array('I','and','you'));
结果:
sentences()
sentences(string sentence) — 将str分割成句子数组,其中每个句子是单词数组
命令:
select sentences('I like hive!I love you,anyway');
结果:
ngrams()
ngrams(array<array< string>> arr,int n,int k) — 按n个单词出现频次,倒序取TOP k
命令:
select ngrams(array('you','me'),array('you','I'),array('he','I'),1,2);
结果:
命令:
select select ngrams(sentences('my boy!you are handsome~are you?'),1,2);
结果:
context_ngrams()
context_ngrams(array<array< string>>) arr,array< string>,int k) — 在第一个参数集合里,第二个参数中指定单词之后的单词出现频次,倒序取TOP K,第二个参数指定一个单词字符串,该字符串指定n-gram元素的位置,其中一个null代表必须由n-gram元素填充的“空白”
命令:
select context_ngrams(sentences('you are?you bad!you bad@you are!are you bad'),array('you',null),2);
结果:
encode
字符集:‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’
encode(string source,string charset) — 使用第二个参数字符集对第一个参数进行编码
命令:
select encode('我爱中华001abc你们','UTF-16BE');
结果:
decode
decode(string source,string charset) — 使用第二个参数字符集解码第一个参数
命令:
select decode(encode('我爱中华001abc你们','UTF-16BE'),'UTF-16BE');
结果:
format_number()
format_number(decimal X,int D) — 将数字X格式化为’#,###,###.##’,四舍五入到小数点后D位
命令:
select format_number(31321.56762,2);
结果:
get_json_object()
get_json_object(string json,string path) — 根据指定的json路径从json字符串中提取json对象,并返回提取的json对象的json字符串。如果输入的json字符串无效,它将返回null
命令:
select get_json_object('{"name":"kyrie"}','$.name');
结果:
命令:
select get_json_object('{"name":"kyrie","info":{"city":"NJ"}}','$.info.city');
结果:
in_file()
in_file(strirng str,string filename) — 如果str出现在filename中,返回true
查看people.txt文件内容
命令:
select in_file('006,jasper,24,2017-12-12','/root/test/people.txt');
结果:
parse_url()
parse_url(string urlString,string part[,string key]) — 返回 URL 中指定的部分。partToExtract 的有效值为:HOST, PATH, QUERY, REF,PROTOCOL, AUTHORITY, FILE, and USERINFO
命令:
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST');
结果:
命令:
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY',
'k1');
结果:
printf()
printf(string format,T…t) — 格式化输出
命令:
select printf('%s-%d-%s','I',520,'U');
结果:
regexp_replace()
regexp_replace(string A, string B, string C) — 将字符串A中的符合java正则表达式B的部分替换为C
命令:
select regexp_replace('hivefunc','vefu','my');
结果:
regexp_extract()
regexp_extract(string subject, string pattern, int index) — 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符
命令:
select regexp_extract('namehenryokdalingduck','name(.*?)(ok)(.*?)duck',3);
结果:
split()
split(string str, string pat) — 按照pat字符串分割str,会返回分割后的字符串数组
命令:
select split('hiveisgod','is');
结果:
str_to_map()
str_to_map(string src,string sep1,string sep2) — 将字符串str按照指定分隔符转换成Map
sep1为键值对之间分隔符默认为’,‘sep2为键和值之间分隔符默认为’:’
命令:
select str_to_map('name:jun,sub:hive');
结果:
命令:
select str_to_map('name-jun=sub-hive','=','-');
结果:
translate()
translate(string src,string from,string to) — 用to替换src里的from,无关位置
命令:
select translate('aabbcc','ab','#*')
结果:
initcap
initcap(string str) — 返回str,每个单词的第一个字母大写,其他所有字母小写,文字由空格分隔
命令:
select initcap('word count is Mr');
结果:
substr/substring
substr(string src,int begin[,int len]) — 截取[len]长度的字符
substring用法相同
命令:
select substr('whysoserious',4);
结果:
命令:
select substring('whysoserious',4,2);
结果:
locate()
locate(string sub,string src[,int startPos]) — 返回sub第一次出现在startPos之后的位置,子前父后
命令:
select locate('abc','abc123abc');
结果:
命令:
select locate('abc','abc123abc',2);
结果:
instr()
instr(string src,string sub) — 返回sub第一次在src出现的位置,父前子后
命令:
select instr('abc123qqq',1);
结果:
md5()
md5(string src) — 加密
命令:
select md5('hivepassword');
结果:
soundex()
soundex(string src) — 返回字符串首字母+3个数字
命令:
select soundex('abc');
结果: