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