•
正則表達式解析函數: 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
注意,在有些狀況下要使用轉義字符,下面的等號要用雙豎線轉 義,這是 java 正則表達式的規則。
select data_field,
regexp_extract(data_field,'.*?bgStart\\=([^&]+)',1) as aaa,
regexp_extract(data_field,'.*?contentLoaded_headStart\\=([^&]+)',1) as bbb,
regexp_extract(data_field,'.*?AppLoad2Req\\=([^&]+)',1) as ccc
from pt_nginx_loginlog_st
where pt = '2012-03-26' limit 2;
•
URL 解析函數: parse_url
語法: parse_url(string urlString, string partToExtract [, string keyToExtract])
返回值: string
說明:返回URL中指定的部分。partToExtract的有效值爲:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
舉例:
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') from dual;
facebook.com
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1') from dual;
v1
•
json 解析函數: get_json_object
語法: get_json_object(string json_string, string path)
返回值: string
說明:解析json的字符串json_string,返回path指定的內容。若是輸入的json字符串無效,那麼返回NULL。
舉例:
hive> select get_json_object('{"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"
> }
> ','$.owner') from dual;
amy
•
空格字符串函數: 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
第七部分:集合統計函數
•個數統計函數: count
•總和統計函數: sum
•平均值統計函數: avg
• 最小值統計函數: min
•最大值統計函數: max
•
個數統計函數 : count
語法: count(*), count(expr), count(DISTINCT expr[, expr_.])
返回值: int
說明: count(*)統計檢索出的行的個數,包括NULL值的行;count(expr)返回指定字段的非空值的個數;count(DISTINCT expr[, expr_.])返回指定字段的不一樣的非空值的個數
舉例:
hive> select count(*) from dual;
20
hive> select count(distinct t) from dual;
10
•
總和統計函數 : sum
語法: sum(col), sum(DISTINCT col)
返回值: double
說明: sum(col)統計結果集中col的相加的結果;sum(DISTINCT col)統計結果中col不一樣值相加的結果
舉例:
hive> select sum(t) from dual;
100
hive> select sum(distinct t) from dual;
70
•
平均值統計函數 : avg
語法: avg(col), avg(DISTINCT col)
返回值: double
說明: avg(col)統計結果集中col的平均值;avg(DISTINCT col)統計結果中col不一樣值相加的平均值
舉例:
hive> select avg(t) from dual;
50
hive> select avg (distinct t) from dual;
30
•
最小值統計函數 : min
語法: min(col)
返回值: double
說明: 統計結果集中col字段的最小值
舉例:
hive> select min(t) from dual;
20
•
最大值統計函數 : max
語法: maxcol)
返回值: double
說明: 統計結果集中col字段的最大值
舉例:
hive> select max(t) from dual;
120
第八部分:符合類型構建操做
•Map類型構建: map
•Struct類型構建: struct
•array類型構建: array
•
Map 類型構建 : map
語法: map (key1, value1, key2, value2, …)
說明:根據輸入的key和value對構建map類型
舉例:
hive> Create table alex_test as select map('100','tom','200','mary') as t from dual;
hive> describe alex_test;
t map<string,string>
hive> select t from alex_test;
{"100":"tom","200":"mary"}
•
Struct 類型構建 : struct
語法: struct(val1, val2, val3, …)
說明:根據輸入的參數構建結構體struct類型
舉例:
hive> create table alex_test as select struct('tom','mary','tim') as t from dual;
hive> describe alex_test;
t struct<col1:string,col2:string,col3:string>
hive> select t from alex_test;
{"col1":"tom","col2":"mary","col3":"tim"}
•
array 類型構建 : array
語法: array(val1, val2, …)
說明:根據輸入的參數構建數組array類型
舉例:
hive> create table alex_test as select array("tom","mary","tim") as t from dual;
hive> describe alex_test;
t array<string>
hive> select t from alex_test;
["tom","mary","tim"]
第九部分:複雜類型訪問操做
•array類型訪問: A[n]
•map類型訪問: M[key]
•struct類型訪問: S.x
•
array 類型訪問 : A[n]
語法: A[n]
操做類型: A爲array類型,n爲int類型
說明:返回數組A中的第n個變量值。數組的起始下標爲0。好比,A是個值爲['foo', 'bar']的數組類型,那麼A[0]將返回'foo',而A[1]將返回'bar'
舉例:
hive> create table alex_test as select array("tom","mary","tim") as t from dual;
hive> select t[0],t[1],t[2] from alex_test;
tom mary tim
•
map 類型訪問 : M[key]
語法: M[key]
操做類型: M爲map類型,key爲map中的key值
說明:返回map類型M中,key值爲指定值的value值。好比,M是值爲{'f' -> 'foo', 'b' -> 'bar', 'all' -> 'foobar'}的map類型,那麼M['all']將會返回'foobar'
舉例:
hive> Create table alex_test as select map('100','tom','200','mary') as t from dual;
hive> select t['200'],t['100'] from alex_test;
mary tom
•
struct 類型訪問 : S.x
語法: S.x
操做類型: S爲struct類型
說明:返回結構體S中的x字段。好比,對於結構體struct foobar {int foo, int bar},foobar.foo返回結構體中的foo字段
舉例:
hive> create table alex_test as select struct('tom','mary','tim') as t from dual;
hive> describe alex_test;
t struct<col1:string,col2:string,col3:string>
hive> select t.col1,t.col3 from alex_test;
tom tim
第十部分:複雜類型長度統計函數
•Map類型長度函數: size(Map<K.V>)
•array類型長度函數: size(Array<T>)
•類型轉換函數
•
Map 類型長度函數 : size(Map<K.V>)
語法: size(Map<K.V>)
返回值: int
說明: 返回map類型的長度
舉例:
hive> select size(map('100','tom','101','mary')) from dual;
2
•
array 類型長度函數 : size(Array<T>)
語法: size(Array<T>)
返回值: int
說明: 返回array類型的長度
舉例:
hive> select size(array('100','101','102','103')) from dual;
4
•
類型轉換函數
類型轉換函數: cast
語法: cast(expr as <type>)
返回值: Expected "=" to follow "type"
說明: 返回array類型的長度
舉例:
hive> select cast(1 as bigint) from dual;
1