hive函式篇一
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。
每次只能返回一個數據項。
舉例:
- data =
- {
- "store":
- {
- "fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],
- "bicycle":{"price":19.95,"color":"red"}
- },
- "email":"[email protected]_for_json_udf_test.net",
- "owner":"amy"
- }
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