• 正则表达式解析函数: 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