欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

hive函数篇一

程序员文章站 2022-04-13 22:31:06
hive 查看函数: show functions; desc functions 函数名 1. 时间函数 1.1 时间戳函数--日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数select unix_timestamp(); --获得当前时区的UNIX时间戳selec ......

hive 查看函数:

show  functions;

desc functions 函数名

1. 时间函数

1.1 时间戳函数
--日期转时间戳:从1970-01-01 00:00:00 utc到指定时间的秒数
select unix_timestamp(); --获得当前时区的unix时间戳
select unix_timestamp('2017-09-15 14:23:00'); 
select unix_timestamp('2017-09-15 14:23:00','yyyy-mm-dd hh:mm:ss');
select unix_timestamp('20170915 14:23:00','yyyymmdd hh:mm:ss'); 

--时间戳转日期
select from_unixtime(1505456567); 
select from_unixtime(1505456567,'yyyymmdd'); 
select from_unixtime(1505456567,'yyyy-mm-dd hh:mm:ss'); 
select from_unixtime(unix_timestamp(),'yyyy-mm-dd hh:mm:ss'); --获取系统当前时间

1.2 获取当前日期: current_date
hive> select current_date from dual
2017-09-15

1.3 日期时间转日期:to_date(string timestamp) 
hive> select to_date('2017-09-15 11:12:00') from dual;
2017-09-15

1.4 获取日期中的年/月/日/时/分/秒/周
with dtime as(select from_unixtime(unix_timestamp(),'yyyy-mm-dd hh:mm:ss') as dt)
select year(dt),month(dt),day(dt),hour(dt),minute(dt),second(dt),weekofyear(dt)
  from dtime
  
1.5 计算两个日期之间的天数: datediff
hive> select datediff('2017-09-15','2017-09-01') from dual;  
14

1.6 日期增加和减少: date_add/date_sub(string startdate,int days)
hive> select date_add('2017-09-15',1) from dual;    
2017-09-16
hive> select date_sub('2017-09-15',1) from dual;    
2017-09-14

--其他日期函数
查询当前系统时间(包括毫秒数): current_timestamp;  
查询当月第几天: dayofmonth(current_date);
月末: last_day(current_date)
当月第1天: date_sub(current_date,dayofmonth(current_date)-1)
下个月第1天: add_months(date_sub(current_date,dayofmonth(current_date)-1),1)

2.字符串函数

--正则表达式替换函数:regexp_replace
语法: regexp_replace(string a, string b, string c) 
返回值: string
说明:将字符串a中的符合java正则表达式b的部分替换为c。注意,在有些情况下要使用转义字符
举例:
hive> select regexp_replace(‘foobar’, ‘oo|ar’, ”) from dual;
fb


正则表达式解析函数:regexp_extract
语法: regexp_extract(string subject, string pattern, int index) 
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符
举例:
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;
the
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;
bar
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;
foothebar

0表示把整个正则表达式对应的结果全部返回

1表示返回正则表达式中第一个() 对应的结果 以此类推 


url解析函数:parse_url
语法: parse_url(string urlstring, string parttoextract [, string keytoextract]) 
返回值: string
说明:返回url中指定的部分。parttoextract的有效值为:host, path, query, ref, protocol, authority, file, and userinfo.

举例:
* parse_url('http://facebook.com/path/p1.php?query=1', 'host')返回'facebook.com' 
* parse_url('http://facebook.com/path/p1.php?query=1', 'path')返回'/path/p1.php' 
* parse_url('http://facebook.com/path/p1.php?query=1', 'query')返回'query=1',
可以指定key来返回特定参数,例如
* parse_url('http://facebook.com/path/p1.php?query=1', 'query','query')返回'1',

* parse_url('http://facebook.com/path/p1.php?query=1#ref', 'ref')返回'ref' 
* parse_url('http://facebook.com/path/p1.php?query=1#ref', 'protocol')返回'http'

 

json解析函数:get_json_object
语法: get_json_object(string json_string, string path) 
返回值: string

说明:解析json的字符串json_string,返回path指定的内容。

第一个参数(string json_string)填写json对象变量,第二个参数(string path)使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;

如果输入的json字符串无效,那么返回null。 
每次只能返回一个数据项。
举例:

  1. data =
  2. {
  3. "store":
  4. {
  5. "fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],
  6. "bicycle":{"price":19.95,"color":"red"}
  7. },
  8. "email":"amy@only_for_json_udf_test.net",
  9. "owner":"amy"
  10. }

get单层值

hive> select get_json_object(data, '$.owner') from test;
结果:amy
get多层值.

hive> select get_json_object(data, '$.store.bicycle.price') from test;
结果:19.95
get数组值[]

hive> select get_json_object(data, '$.store.fruit[0]') from test;
结果:{"weight":8,"type":"apple"}

如request ={“store”: {“fruit”:[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],  “bicycle”:{“price”:19.95,”color”:”red”}  }

>get_json_object(request,'$.weight')

8

 

空格字符串函数:space
语法: space(int n) 
返回值: string
说明:返回长度为n的字符串
举例:
hive> select space(10) from dual;
hive> select length(space(10)) from dual;
10


重复字符串函数:repeat
语法: repeat(string str, int n) 
返回值: string
说明:返回重复n次后的str字符串
举例:
hive> select repeat(‘abc’,5) from dual;
abcabcabcabcabc


首字符ascii函数:ascii
语法: ascii(string str) 
返回值: int
说明:返回字符串str第一个字符的ascii码
举例:
hive> select ascii(‘abcde’) from dual;
97


左补足函数:lpad
语法: lpad(string str, int len, string pad) 
返回值: string
说明:将str进行用pad进行左补足到len位
举例:
hive> select lpad(‘abc’,10,’td’) from dual;
tdtdtdtabc
与gp,oracle不同,pad 不能默认


右补足函数:rpad
语法: rpad(string str, int len, string pad) 
返回值: string
说明:将str进行用pad进行右补足到len位
举例:
hive> select rpad(‘abc’,10,’td’) from dual;
abctdtdtdt


分割字符串函数: split
语法:  split(string str, string pat) 
返回值:  array
说明: 按照pat字符串分割str,会返回分割后的字符串数组
举例:
hive> select split(‘abtcdtef’,'t’) from dual;
["ab","cd","ef"]


集合查找函数: find_in_set
语法: find_in_set(string str, string strlist) 
返回值: int
说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0
举例:
hive> select find_in_set(‘ab’,'ef,ab,de’) from dual;
2
hive> select find_in_set(‘at’,'ef,ab,de’) from dual;
0