hive常用函式
阿新 • • 發佈:2020-09-15
關係運算
等值比較: =
語法:A=B
操作型別:所有基本型別
描述: 如果表示式 A 與表示式 B 相等,則為 TRUE;否則為 FALSE;只要有任意比較項為
NULL,均返回 FALSE;
舉例:
hive> select 1 from test where 1=1;
1
hive> select 1 from test where NULL = NULL;
OK
等值比較:<=>
語法:A <=> B 操作型別:所有基本型別 描述:如果 A 和 B 都是非 NULL 值,則返回結果和=一樣,如果兩者都為 NULL,返回 TRUE, 如果有一個為 NULL,則返回 FALSE。 舉例: hive> select 1 from test where NULL <=> NULL; OK 1
不等值比較: <>和!=
語法: A <> B A != B
操作型別: 所有基本型別
描述: 如果表示式 A 為 NULL,或者表示式 B 為 NULL,返回 NULL;如果表示式 A 與表
達式 B 不相等,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where 1 <> 2;
1
小於比較: <
語法: A < B 操作型別: 所有基本型別 描述: 如果表示式 A 為 NULL,或者表示式 B 為 NULL,返回 NULL;如果表示式 A 小於 表示式 B,則為 TRUE;否則為 FALSE 舉例: hive> select 1 from test where 1 < 2; 1
小於等於比較: <=
語法: A <= B
操作型別: 所有基本型別
描述: 如果表示式 A 為 NULL,或者表示式 B 為 NULL,返回 NULL;如果表示式 A 小於
或者等於表示式 B,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where 1 <= 1;
1
大於比較: >
語法: A > B 操作型別: 所有基本型別 描述: 如果表示式 A 為 NULL,或者表示式 B 為 NULL,返回 NULL;如果表示式 A 大於 表示式 B,則為 TRUE;否則為 FALSE 舉例: hive> select 1 from test where 2 > 1; 1
大於等於比較: >=
語法: A >= B
操作型別: 所有基本型別
描述: 如果表示式 A 為 NULL,或者表示式 B 為 NULL,返回 NULL;如果表示式 A 大於或者等於表示式 B,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where 1 >= 1;
1
注意:String 的比較要注意(常用的時間比較可以先 to_date 之後再比較)
hive> select * from test;
OK
2011111209 00:00:00 2011111209
hive> select a,b,a<b,a>b,a=b from test;
2011111209 00:00:00 2011111209 false true false
區間比較
語法: A [NOT] BETWEEN B AND C
操作型別: 所有型別
描述: 如果 A、B、C 有任一個為 NULL,則返回 FALSE. 等價於 B <= A < C.
舉例:
hive> select 1 from test where 1 between 1 and 2;
OK
1
空值判斷: IS NULL
語法: A IS NULL
操作型別: 所有型別
描述: 如果表示式 A 的值為 NULL,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where null is null;
1
非空判斷: IS NOT NULL
語法: A IS NOT NULL
操作型別: 所有型別
描述: 如果表示式 A 的值為 NULL,則為 FALSE;否則為 TRUE
舉例:
hive> select 1 from test where 1 is not null;
1
LIKE 比較: LIKE
語法: A LIKE B
操作型別: strings
描述: 如果字串 A 或者字串 B 為 NULL,則返回 NULL;如果字串 A 符合表示式 B
的正則語法,則為 TRUE;否則為 FALSE。B 中字元”_”表示任意單個字元,而字
符”%”表示任意數量的字元。
舉例:
hive> select 1 from test where 'football' like 'foot%';
1
hive> select 1 from test where 'football' like 'foot____';
1
注意:否定比較時候用 NOT A LIKE B
hive> select 1 from test where NOT 'football' like 'fff%';
1
JAVA 的 LIKE 操作: RLIKE
語法: A RLIKE B
操作型別: strings
描述: 如果字串 A 或者字串 B 為 NULL,則返回 NULL;如果字串 A 符合 JAVA 正
則表示式 B 的正則語法,則為 TRUE;否則為 FALSE。
舉例:
hive> select 1 from test where 'footbar’ rlike '^f.*r$’;
1
注意:判斷一個字串是否全為數字:
hive>select 1 from test where '123456' rlike '^\\d+$';
1
hive> select 1 from test where '123456aa' rlike '^\\d+$';
REGEXP 操作: REGEXP
語法: A REGEXP B
操作型別: strings
描述: 功能與 RLIKE 相同
舉例:
hive> select 1 from test where 'footbar' REGEXP '^f.*r$';
1
數學運算
加法操作: +
語法: A + B
操作型別:所有數值型別
說明:返回 A 與 B 相加的結果。結果的數值型別等於 A 的型別和 B 的型別的最小父類
型(詳見資料型別的繼承關係)。比如,int + int 一般結果為 int 型別,而 int + double 一般
結果為 double 型別
舉例:
hive> select 1 + 9 from test;
10
hive> create table test as select 1 + 1.2 from test;
hive> describe test;
_c0 double
減法操作: -
語法: A – B
操作型別:所有數值型別
說明:返回 A 與 B 相減的結果。結果的數值型別等於 A 的型別和 B 的型別的最小父類
型(詳見資料型別的繼承關係)。比如,int – int 一般結果為 int 型別,而 int – double 一
般結果為 double 型別
舉例:
hive> select 10 – 5 from test;
5
hive> create table test as select 5.6 – 4 from test;
hive> describe test;
_c0 double
乘法操作: *
語法: A * B
操作型別:所有數值型別
說明:返回 A 與 B 相乘的結果。結果的數值型別等於 A 的型別和 B 的型別的最小父類
型(詳見資料型別的繼承關係)。注意,如果 A 乘以 B 的結果超過預設結果型別的數值範圍,
則需要通過 cast 將結果轉換成範圍更大的數值型別
舉例:
hive> select 40 * 5 from test;
200
除法操作: /
語法: A / B
操作型別:所有數值型別
說明:返回 A 除以 B 的結果。結果的數值型別為 double
舉例:
hive> select 40 / 5 from test;
8.0
注意:hive 中最高精度的資料型別是 double,只精確到小數點後 16 位,在做除法運算的時候要特別注意
hive>select ceil(28.0/6.999999999999999999999) from test limit 1;
結果為 4
hive>select ceil(28.0/6.99999999999999) from test limit 1;
結果為 5
取餘操作: %
語法: A % B
操作型別:所有數值型別
說明:返回 A 除以 B 的餘數。結果的數值型別等於 A 的型別和 B 的型別的最小父型別(詳見資料型別的繼承關係)。
舉例:
hive> select 41 % 5 from test;
1
hive> select 8.4 % 4 from test;
0.40000000000000036
注意:精度在 hive 中是個很大的問題,類似這樣的操作最好通過 round 指定精度
hive> select round(8.4 % 4 , 2) from test;
0.4
位與操作: &
語法: A & B
操作型別:所有數值型別
說明:返回 A 和 B 按位進行與操作的結果。結果的數值型別等於 A 的型別和 B 的型別
的最小父型別(詳見資料型別的繼承關係)。
舉例:
hive> select 4 & 8 from test;
0
hive> select 6 & 4 from test;
4
位或操作: |
語法: A | B
操作型別:所有數值型別
說明:返回 A 和 B 按位進行或操作的結果。結果的數值型別等於 A 的型別和 B 的型別
的最小父型別(詳見資料型別的繼承關係)。
舉例:
hive> select 4 | 8 from test;
12
hive> select 6 | 8 from test;
14
位異或操作: ^
語法: A ^ B
操作型別:所有數值型別
說明:返回 A 和 B 按位進行異或操作的結果。結果的數值型別等於 A 的型別和 B 的類
型的最小父型別(詳見資料型別的繼承關係)。
舉例:
hive> select 4 ^ 8 from test;
12
hive> select 6 ^ 4 from test;
2
位取反操作: ~
語法: ~A
操作型別:所有數值型別
說明:返回 A 按位取反操作的結果。結果的數值型別等於 A 的型別。
舉例:
hive> select ~6 from test;
-7
hive> select ~4 from test;
-5
邏輯運算
邏輯與操作: AND 、&&
語法: A AND B
操作型別:boolean
說明:如果 A 和 B 均為 TRUE,則為 TRUE;否則為 FALSE。如果 A 為 NULL 或 B 為 NULL,
則為 NULL
舉例:
hive> select 1 from test where 1=1 and 2=2;
1
邏輯或操作: OR 、||
語法: A OR B
操作型別:boolean
說明:如果 A 為 TRUE,或者 B 為 TRUE,或者 A 和 B 均為 TRUE,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where 1=2 or 2=2;
1
邏輯非操作: NOT、!
語法: NOT A、!A
操作型別:boolean
說明:如果 A 為 FALSE,或者 A 為 NULL,則為 TRUE;否則為 FALSE
舉例:
hive> select 1 from test where not 1=2;
1
hive> select 1 from test where !1=2;
OK
1
複合型別建構函式
map 結構
語法:map(k1,v1,k2,v2,…)
操作型別:map
說明:使用給定的 key-value 對,構造一個 map 資料結構
舉例:
hive> select map('k1','v1','k2','v2') from test;
OK
{"k2":"v2","k1":"v1"}
struct 結構
語法:struct(val1,val2,val3,…)
操作型別:struct
說明:使用給定的表示式,構造一個 struct 資料結構
舉例:
hive> select struct(1,'aaa',FALSE) from test;
OK
{"col1":1,"col2":"aaa","col3":false}
named_struct 結構
語法:named_struct(name1,val1,name2,val2,name3,val3,…)
操作型別:struct
說明:使用給定的表示式,構造一個指定列名的 struct 資料結構
舉例:
hive> select named_struct('a',1,'b','aaa','c',FALSE) from test;
OK
{"a":1,"b":"aaa","c":false}
array 結構
語法:array(val1,val2,val3,…)
操作型別:array
說明:使用給定的表示式,構造一個 array 資料結構
舉例:
hive> select array(1,2,3) from test;
OK
[1,2,3]
create_union 結構
語法:create_union (tag, val1, val2, ...)
操作型別:uniontype
說明:使用給定的 tag 和表示式,構造一個 uniontype 資料結構。tag 表示使用第 tag 個
表示式作為 uniontype 的 value
舉例:
hive> select create_union(0,'ss',array(1,2,3)) from test;
OK
{0:"ss"}
hive> select create_union(1,'ss',array(1,2,3)) from test;
OK
{1:[1,2,3]}
複合型別操作符
獲取 array 中的元素
語法:A[n]
操作型別:所有基礎型別
說明:返回陣列 A 中第 n 個索引的元素值。
舉例:
hive> select array('a','b','c')[1] from test;
OK
b
獲取 map 中的元素
語法:M[key]
操作型別:所有基礎型別
說明:返回 map 結構 M 中 key 對應的 value。
舉例:
hive> select map('k1','v1')['k1'] from test;
OK
v1
獲取 struct 中的元素
語法:S.x
操作型別:所有型別
說明:返回 struct 結構 S 中名為 x 的元素。
舉例:
hive> select named_struct('a',1,'b','aaa','c',FALSE).c from test;
OK
false
數值計算函式
取整函式: round
語法: round(double a)
返回值: BIGINT
說明: 返回 double 型別的整數值部分 (遵循四捨五入)
舉例:
hive> select round(3.1415926) from test;
3
hive> select round(3.5) from test;
4
hive> create table test as select round(9542.158) from test;
hive> describe test;
_c0 bigint
指定精度取整函式: round
語法: round(double a, int d)
返回值: DOUBLE
說明: 返回指定精度 d 的 double 型別
舉例:
hive> select round(3.1415926,4) from test;
3.1416
向下取整函式: floor
語法: floor(double a)
返回值: BIGINT
說明: 返回等於或者小於該 double 變數的最大的整數
舉例:
hive> select floor(3.1415926) from test;
3
hive> select floor(25) from test;
25
向上取整函式: ceil
語法: ceil(double a)
返回值: BIGINT
說明: 返回等於或者大於該 double 變數的最小的整數
舉例:
hive> select ceil(3.1415926) from test;
4
hive> select ceil(46) from test;
46
向上取整函式: ceiling
語法: ceiling(double a)
返回值: BIGINT
說明: 與 ceil 功能相同
舉例:
hive> select ceiling(3.1415926) from test;
4
hive> select ceiling(46) from test;
46
取隨機數函式: rand
語法: rand(),rand(int seed)
返回值: double
說明: 返回一個 0 到 1 範圍內的隨機數。如果指定種子 seed,則會等到一個穩定的隨機
數序列
舉例:
hive> select rand() from test;
0.5577432776034763
hive> select rand() from test;
0.6638336467363424
hive> select rand(100) from test;
0.7220096548596434
hive> select rand(100) from test;
0.7220096548596434
自然指數函式: exp
語法: exp(double a)
返回值: double
說明: 返回自然對數 e 的 a 次方
舉例:
hive> select exp(2) from test;
7.38905609893065
自然對數函式: ln
語法: ln(double a)
返回值: double
說明: 返回 a 的自然對數
舉例:
hive> select ln(7.38905609893065) from test;
2.0
以 10 為底對數函式: log10
語法: log10(double a)
返回值: double
說明: 返回以 10 為底的 a 的對數
舉例:
hive> select log10(100) from test;
2.0
以 2 為底對數函式: log2
語法: log2(double a)
返回值: double
說明: 返回以 2 為底的 a 的對數
舉例:
hive> select log2(8) from test;
3.0
對數函式: log
語法: log(double base, double a)
返回值: double
說明: 返回以 base 為底的 a 的對數
舉例:
hive> select log(4,256) from test;
4.0
冪運算函式: pow
語法: pow(double a, double p)
返回值: double
說明: 返回 a 的 p 次冪
舉例:
hive> select pow(2,4) from test;
16.0
冪運算函式: power
語法: power(double a, double p)
返回值: double
說明: 返回 a 的 p 次冪,與 pow 功能相同
舉例:
hive> select power(2,4) from test;
16.0
開平方函式: sqrt
語法: sqrt(double a)
返回值: double
說明: 返回 a 的平方根
舉例:
hive> select sqrt(16) from test;
4.0
二進位制函式: bin
語法: bin(BIGINT a)
返回值: string
說明: 返回 a 的二進位制程式碼表示
舉例:
hive> select bin(7) from test;
111
十六進位制函式: hex
語法: hex(BIGINT a)
返回值: string
說明: 如果變數是 int 型別,那麼返回 a 的十六進位制表示;如果變數是 string 型別,則
返回該字串的十六進位制表示
舉例:
hive> select hex(17) from test;
11
hive> select hex(‘abc’) from test;
616263
反轉十六進位制函式: unhex
語法: unhex(string a)
返回值: string
說明: 返回該十六進位制字串所程式碼的字串
舉例:
hive> select unhex(‘616263’) from test;
abc
hive> select unhex(‘11’) from test;
-
hive> select unhex(616263) from test;
abc
進位制轉換函式: conv
語法: conv(BIGINT num, int from_base, int to_base)
返回值: string
說明: 將數值 num 從 from_base 進位制轉化到 to_base 進位制
舉例:
hive> select conv(17,10,16) from test;
11
hive> select conv(17,10,2) from test;
10001
絕對值函式: abs
語法: abs(double a) abs(int a)
返回值: double int
說明: 返回數值 a 的絕對值
舉例:
hive> select abs(-3.9) from test;
3.9
hive> select abs(10.9) from test;
10.9
正取餘函式: pmod
語法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
說明: 返回正的 a 除以 b 的餘數
舉例:
hive> select pmod(9,4) from test;
1
hive> select pmod(-9,4) from test;
3
正弦函式: sin
語法: sin(double a)
返回值: double
說明: 返回 a 的正弦值
舉例:
hive> select sin(0.8) from test;
0.7173560908995228
反正弦函式: asin
語法: asin(double a)
返回值: double
說明: 返回 a 的反正弦值
舉例:
hive> select asin(0.7173560908995228) from test;
0.8
餘弦函式: cos
語法: cos(double a)
返回值: double
說明: 返回 a 的餘弦值
舉例:
hive> select cos(0.9) from test;
0.6216099682706644
反餘弦函式: acos
語法: acos(double a)
返回值: double
說明: 返回 a 的反餘弦值
舉例:
hive> select acos(0.6216099682706644) from test;
0.9
positive 函式: positive
語法: positive(int a), positive(double a)
返回值: int double
說明: 返回 a
舉例:
hive> select positive(-10) from test;
-10
hive> select positive(12) from test;
12
negative 函式: negative
語法: negative(int a), negative(double a)
返回值: int double
說明: 返回-a
舉例:
hive> select negative(-5) from test;
5
hive> select negative(8) from test;
-8
集合操作函式
map 型別大小:size
語法: size(Map<K.V>)
返回值: int
說明: 返回 map 型別的 size
舉例:
hive> select size(map('k1','v1','k2','v2')) from test;
OK
2
array 型別大小:size
語法: size(Array<T>)
返回值: int
說明: 返回 array 型別的 size
舉例:
hive> select size(array(1,2,3,4,5)) from test;
OK
5
判斷元素陣列是否包含元素:array_contains
語法: array_contains(Array<T>, value)
返回值: boolean
說明: 返回 Array<T>中是否包含元素 value
舉例:
hive> select array_contains(array(1,2,3,4,5),3) from test;
OK
true
獲取 map 中所有 value 集合
語法: map_values(Map<K.V>)
返回值: array<V>
說明: 返回 Map<K.V>中所有 value 的集合
舉例:
hive> select map_values(map('k1','v1','k2','v2')) from test;
OK
["v2","v1"]
獲取 map 中所有 key 集合
語法: map_keys(Map<K.V>)
返回值: array<K>
說明: 返回 Map<K.V>中所有 key 的集合
舉例:
hive> select map_keys(map('k1','v1','k2','v2')) from test;
OK
["k2","k1"]
陣列排序
語法: sort_array(Array<T>)
返回值: array<t>
說明: 對 Array<T>進行升序排序
舉例:
hive> select sort_array(array(5,7,3,6,9)) from test;
OK
[3,5,6,7,9]
型別轉換函式
二進位制轉換:binary
語法: binary(string|binary)
返回值: binary
說明: 將 string 型別轉換為二進位制
舉例:
hive> select binary('test') from test;
OK
test
基礎型別之間強制轉換:cast
語法: cast(expr as <type>)
返回值: <type>
說明: 將 expr 轉換成<type>
舉例:
hive> select cast('1' as DOUBLE) from test;
OK
1.0
日期函式
UNIX 時間戳轉日期函式: from_unixtime
語法: from_unixtime(bigint unixtime[, string format])
返回值: string
說明: 轉化 UNIX 時間戳(從 1970-01-01 00:00:00 UTC 到指定時間的秒數)到當前時區
的時間格式
舉例:
hive> select from_unixtime(1323308943,'yyyyMMdd') from test;
20111208
獲取當前 UNIX 時間戳函式: unix_timestamp
語法: unix_timestamp()
返回值: bigint
說明: 獲得當前時區的 UNIX 時間戳
舉例:
hive> select unix_timestamp() from test;
1323309615
日期轉 UNIX 時間戳函式: unix_timestamp
語法: unix_timestamp(string date)
返回值: bigint
說明: 轉換格式為"yyyy-MM-dd HH:mm:ss"的日期到 UNIX 時間戳。如果轉化失敗,則返
回 0。
舉例:
hive> select unix_timestamp('2011-12-07 13:01:03') from test;
1323234063
指定格式日期轉 UNIX 時間戳函式: unix_timestamp
語法: unix_timestamp(string date, string pattern)
返回值: bigint
說明: 轉換 pattern 格式的日期到 UNIX 時間戳。如果轉化失敗,則返回 0。
舉例:
hive> select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from test;
1323234063
日期時間轉日期函式: to_date
語法: to_date(string timestamp)
返回值: string
說明: 返回日期時間欄位中的日期部分。
舉例:
hive> select to_date('2011-12-08 10:03:01') from test;
2011-12-08
日期轉年函式: year
語法: year(string date)
返回值: int
說明: 返回日期中的年。
舉例:
hive> select year('2011-12-08 10:03:01') from test;
2011
hive> select year('2012-12-08') from test;
2012
日期轉月函式: month
語法: month (string date)
返回值: int
說明: 返回日期中的月份。
舉例:
hive> select month('2011-12-08 10:03:01') from test;
12
hive> select month('2011-08-08') from test;
8
日期轉天函式: day
語法: day (string date)
返回值: int
說明: 返回日期中的天。
舉例:
hive> select day('2011-12-08 10:03:01') from test;
8
hive> select day('2011-12-24') from test;
24
日期轉小時函式: hour
語法: hour (string date)
返回值: int
說明: 返回日期中的小時。
舉例:
hive> select hour('2011-12-08 10:03:01') from test;
10
日期轉分鐘函式: minute
語法: minute (string date)
返回值: int
說明: 返回日期中的分鐘。
舉例:
hive> select minute('2011-12-08 10:03:01') from test;
3
日期轉秒函式: second
語法: second (string date)
返回值: int
說明: 返回日期中的秒。
舉例:
hive> select second('2011-12-08 10:03:01') from test;
1
日期轉周函式: weekofyear
語法: weekofyear (string date)
返回值: int
說明: 返回日期在當前的週數。
舉例:
hive> select weekofyear('2011-12-08 10:03:01') from test;
49
28
日期比較函式: datediff
語法: datediff(string enddate, string startdate)
返回值: int
說明: 返回結束日期減去開始日期的天數。
舉例:
hive> select datediff('2012-12-08','2012-05-09') from test;
213
日期增加函式: date_add
語法: date_add(string startdate, int days)
返回值: string
說明: 返回開始日期 startdate 增加 days 天后的日期。
舉例:
hive> select date_add('2012-12-08',10) from test;
2012-12-18
日期減少函式: date_sub
語法: date_sub (string startdate, int days)
返回值: string
說明: 返回開始日期 startdate 減少 days 天后的日期。
舉例:
hive> select date_sub('2012-12-08',10) from test;
2012-11-28
條件函式
If 函式: if
語法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值: T
說明: 當條件 testCondition 為 TRUE 時,返回 valueTrue;否則返回 valueFalseOrNull
舉例:
hive> select if(1=2,100,200) from test;
200
hive> select if(1=1,100,200) from test;
100
非空查詢函式: COALESCE
語法: COALESCE(T v1, T v2, …)
返回值: T
說明: 返回引數中的第一個非空值;如果所有值都為 NULL,那麼返回 NULL
舉例:
hive> select COALESCE(null,'100','50′) from test;
100
條件判斷函式:CASE
語法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
返回值: T
說明:如果 a 等於 b,那麼返回 c;如果 a 等於 d,那麼返回 e;否則返回 f
舉例:
hive> Select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from
test;
mary
hive> Select case 200 when 50 then 'tom' when 100 then 'mary' else 'tim' end from
test;
tim
條件判斷函式:CASE
語法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
返回值: T
說明:如果 a 為 TRUE,則返回 b;如果 c 為 TRUE,則返回 d;否則返回 e
舉例:
hive> select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end from test;
mary
hive> select case when 1=1 then 'tom' when 2=2 then 'mary' else 'tim' end from test;
tom
字串函式
字元 ascii 碼函式:ascii
語法: ascii(string str)
返回值: int
說明:返回字串 str 中第一個字元的 ascii 碼
舉例:
hive> select ascii('ba') from test;
OK
98
base64 字串
語法: base64(binary bin)
返回值: string
說明:返回二進位制 bin 的 base 編碼字串
舉例:
hive> select base64(binary('test')) from test;
OK
bHh3MTIzNA==
字串連線函式:concat
語法: concat(string A, string B…)
返回值: string
說明:返回輸入字串連線後的結果,支援任意個輸入字串
舉例:
hive> select concat(‘abc’,'def’,'gh’) from test;
abcdefgh
帶分隔符字串連線函式:concat_ws
語法: concat_ws(string SEP, string A, string B…)
返回值: string
說明:返回輸入字串連線後的結果,SEP 表示各個字串間的分隔符
舉例:
hive> select concat_ws(',','abc','def','gh') from test;
abc,def,gh
陣列轉換成字串的函式:concat_ws
語法: concat_ws(string SEP, array<string>)
返回值: string
說明:返回將陣列連結成字串後的結果,SEP 表示各個字串間的分隔符
舉例:
hive> select concat_ws('|',array('a','b','c')) from test;
OK
a|b|c
小數位格式化成字串函式:format_number
語法: format_number(number x, int d)
返回值: string
說明:將數值 x 的小數位格式化成 d 位,四捨五入
舉例:
hive> select format_number(5.23456,3) from test;
OK
5.235
字串擷取函式:substr,substring
語法: substr(string A, int start),substring(string A, int start)
返回值: string
說明:返回字串 A 從 start 位置到結尾的字串
舉例:
hive> select substr('abcde',3) from test;
cde
hive> select substring('abcde',3) from test;
cde
hive> select substr('abcde',-1) from test; (和 ORACLE 相同)
e
字串擷取函式:substr,substring
語法: substr(string A, int start, int len),substring(string A, int start, int len)
返回值: string
說明:返回字串 A 從 start 位置開始,長度為 len 的字串
舉例:
hive> select substr('abcde',3,2) from test;
cd
hive> select substring('abcde',3,2) from test;
cd
hive>select substring('abcde',-2,2) from test;
de
字串查詢函式:instr
語法: instr(string str, string substr)
返回值: int
說明:返回字串 substr 在 str 中首次出現的位置
舉例:
hive> select instr('abcdf','df') from test;
OK
4
字串長度函式:length
語法: length(string A)
返回值: int
說明:返回字串的長度
舉例:
hive> select length('abc') from test;
OK
3
字串查詢函式:locate
語法: locate(string substr, string str[, int pos])
返回值: int
說明:返回字串 substr 在 str 中從 pos 後查詢,首次出現的位置
舉例:
hive> select locate('a','abcda',1) from test;
OK
1
hive> select locate('a','abcda',2) from test;
OK
5
字串格式化函式:printf
語法: printf(String format, Obj... args)
返回值: string
說明:將指定物件用 format 格式進行格式化.
舉例:
hive> select printf("%08X",123) from test;
OK
0000007B
字串轉換成 map 函式:str_to_map
語法: str_to_map(text[, delimiter1, delimiter2])
返回值: map<string,string>
說明:將字串按照給定的分隔符轉換成 map 結構.
舉例:
hive> select str_to_map('k1:v1,k2:v2') from test;
OK
{"k2":"v2","k1":"v1"}
hive> select str_to_map('k1=v1,k2=v2',',','=') from test;
OK
{"k2":"v2","k1":"v1"}
base64 解碼函式:unbase64(string str)
語法: unbase64(string str)
返回值: binary
說明:將給定的 base64 字串解碼成二進位制.
舉例:
hive> select unbase64('bHh3MTIzNA==') from test;
OK
test
字串轉大寫函式:upper,ucase
語法: upper(string A) ucase(string A)
返回值: string
說明:返回字串 A 的大寫格式
舉例:
hive> select upper('abSEd') from test;
ABSED
hive> select ucase('abSEd') from test;
ABSED
字串轉小寫函式:lower,lcase
語法: lower(string A) lcase(string A)
返回值: string
說明:返回字串 A 的小寫格式
舉例:
hive> select lower('abSEd') from test;
absed
hive> select lcase('abSEd') from test;
absed
去空格函式:trim
語法: trim(string A)
返回值: string
說明:去除字串兩邊的空格
舉例:
hive> select trim(' abc ') from test;
abc
左邊去空格函式:ltrim
語法: ltrim(string A)
返回值: string
說明:去除字串左邊的空格
舉例:
hive> select ltrim(' abc') from test;
abc
右邊去空格函式:rtrim
語法: rtrim(string A)
返回值: string
說明:去除字串右邊的空格
舉例:
hive> select rtrim('abc ') from test;
abc
正則表示式替換函式:regexp_replace
語法: regexp_replace(string A, string B, string C)
返回值: string
說明:將字串 A 中的符合 java 正則表示式 B 的部分替換為 C。注意,在有些情況下要
使用轉義字元,類似 oracle 中的 regexp_replace 函式。
舉例:
hive> select regexp_replace('foobar', 'oo|ar', '') from test;
fb
正則表示式解析函式:regexp_extract
語法: regexp_extract(string subject, string pattern, int index)
返回值: string
說明:將字串 subject 按照 pattern 正則表示式的規則拆分,返回 index 指定的字元。
舉例:
hive> select regexp_extract('foothebar', 'foo(.*?)(bar)', 1) from test;
the
36
hive> select regexp_extract('foothebar', 'foo(.*?)(bar)', 2) from test;
bar
hive> select regexp_extract('foothebar', 'foo(.*?)(bar)', 0) from test;
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
test;
facebook.com
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1')
from test;
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 test;
amy
空格字串函式:space
語法: space(int n)
返回值: string
說明:返回長度為 n 的字串
舉例:
hive> select space(10) from test;
hive> select length(space(10)) from test;
10
重複字串函式:repeat
語法: repeat(string str, int n)
返回值: string
說明:返回重複 n 次後的 str 字串
舉例:
hive> select repeat('abc',5) from test;
abcabcabcabcabc
左補足函式:lpad
語法: lpad(string str, int len, string pad)
返回值: string
說明:將 str 進行用 pad 進行左補足到 len 位
舉例:
hive> select lpad('abc',10,'td') from test;
tdtdtdtabc
注意:與 GP,ORACLE 不同,pad 不能預設
右補足函式:rpad
語法: rpad(string str, int len, string pad)
返回值: string
說明:將 str 進行用 pad 進行右補足到 len 位
舉例:
hive> select rpad('abc',10,'td') from test;
abctdtdtdt
分割字串函式: split
語法: split(string str, string pat)
返回值: array
說明: 按照 pat 字串分割 str,會返回分割後的字串陣列
舉例:
hive> select split('abtcdtef','t') from test;
["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 test;
2
hive> select find_in_set('at','ef,ab,de') from test;
0
分詞函式:sentences
語法: sentences(string str, string lang, string locale)
返回值: array<array<string>>
說明:返回輸入 str 分詞後的單詞陣列
舉例:
hive> select sentences('hello word!hello hive,hi hive,hello hive') from test;
OK
[["hello","word"],["hello","hive","hi","hive","hello","hive"]]
分詞後統計一起出現頻次最高的 TOP-K
語法: ngrams(array<array<string>>, int N, int K, int pf)
返回值: array<struct<string,double>>
說明:與 sentences()函式一起使用,分詞後,統計分詞結果中 一起出現頻次最高的
TOP-K 結果
舉例:
hive> SELECT ngrams(sentences('hello word!hello hive,hi hive,hello hive'),2,2)
FROM test;
[
{"ngram":["hello","hive"],"estfrequency":2.0},
{"ngram":["hive","hello"],"estfrequency":1.0}
]
該查詢中,統計的是兩個詞在一起出現頻次最高的 TOP-2
結果中,hello 與 hive 同時出現 2 次
分詞後統計與指定單詞一起出現頻次最高的 TOP-K
語法: context_ngrams(array<array<string>>, array<string>, int K, int pf)
返回值: array<struct<string,double>>
說明:與 sentences()函式一起使用,分詞後,統計分詞結果中與陣列中指定的單詞一起出現(包括順序)頻次最高的
TOP-K結果
舉例:
hive> SELECT context_ngrams(
sentences('hello word!hello hive,hi hive,hellohive'),
array('hello',null),3)
FROM test;
[{"ngram":["hive"],"estfrequency":2.0},{"ngram":["word"],"estfrequency":1.0}]
該查詢中,統計的是與’hello’一起出現,並且在 hello 後面的頻次最高的 TOP-3
結果中,hello 與 hive 同時出現 2 次,hello 與 word 同時出現 1 次。
hive> SELECT context_ngrams(
sentences('hello word!hello hive,hi hive,hellohive'),
array(null,'hive'),3)
FROM test;
[{"ngram":["hello"],"estfrequency":2.0},{"ngram":["hi"],"estfrequency":1.0}]
該查詢中,統計的是與’hive’一起出現,並且在 hive 之前的頻次最高的 TOP-3
混合函式
用 Java 函式:java_method
語法: java_method(class, method[, arg1[, arg2..]])
返回值: varies
說明: 呼叫 Java 中的方法處理資料。
舉例:
hive> select reflect("java.net.URLEncoder", "encode", 'http://test.com',"UTF-8") from
test;
OK
http%3A%2F%2Ftest.com
該查詢中呼叫 java.net.URLEncoder 中的 encode 方法,給該方法傳的引數為 'http://test.com',"UTF-8"
呼叫 Java 函式:reflect
語法: reflect(class, method[, arg1[, arg2..]])
返回值: varies
說明: 呼叫 Java 中的方法處理資料。
舉例:
hive> select reflect("java.net.URLDecoder","decode",'http%3A%2F%2Ftest.com',"UTF-8")
from test;
OK
http://test.com
字串的 hash 值:hash
語法: hash(a1[, a2...])
返回值: int
說明: 返回字串的 hash 值。
舉例:
hive> select hash('test.com') from test;
OK
-809268416
XPath 解析 XML 函式
xpath
語法: xpath(string xmlstr,string xpath_expression)
返回值: array<string>
說明: 從 xml 字串中返回匹配到表示式的結果陣列。
舉例:
獲取 xml 字串中 a/b/節點的值
hive> select xpath('<a><b>b1</b><b>b2</b><c>c1</c></a>','a/b/text()') from test;
OK
["b1","b2"]
獲取 xml 字串中所有名為 id 的屬性值
hive> select xpath('<a><b id="foo">b1</b><b id="bar">b2</b></a>','//@id') from test;
OK
["foo","bar"]
xpath_string
語法: xpath_string(string xmlstr,string xpath_expression)
返回值: string
說明: 預設情況下,從 xml 字串中返回第一個匹配到表示式的節點的值。
舉例:
hive> SELECT xpath_string ('<a><b>b1</b><b>b2</b></a>', '//b') FROM test;
OK
b1
3.
指定返回匹配到哪一個節點
hive> SELECT xpath_string ('<a><b>b1</b><b>b2</b></a>', '//b[2]') FROM test;
OK
b2
xpath_boolean
語法: xpath_boolean (string xmlstr,string xpath_expression)
返回值: boolean
說明: 返回 xml 字串中是否匹配 xml 表示式。
舉例:
hive> SELECT xpath_boolean ('<a><b>b</b></a>', 'a/b') FROM test;
OK
true
hive> SELECT xpath_boolean ('<a><b>10</b></a>', 'a/b < 10') FROM test;
OK
false
xpath_short, xpath_int, xpath_long
語法: xpath_short (string xmlstr,string xpath_expression)
xpath_int (string xmlstr,string xpath_expression)
xpath_long (string xmlstr,string xpath_expression)
返回值: int
說明: 返回 xml 字串中經過 xml 表示式計算後的值,如果不匹配,則返回 0。
舉例:
hive> SELECT xpath_int ('<a>this is not a number</a>', 'a') FROM test;
OK
0
hive> SELECT xpath_int('<a><b class="odd">1</b><b class="even">2</b><b
class="odd">4</b><c>8</c></a>', 'sum(a/*)') FROM test;
OK
15
hive> select xpath_long('<a><b>10.5</b><c>11.2</c></a>','sum(a/*)') from test;
OK
21
xpath_float, xpath_double, xpath_number
語法: xpath_float (string xmlstr,string xpath_expression)
xpath_double (string xmlstr,string xpath_expression)
xpath_number (string xmlstr,string xpath_expression)
返回值: number
說明: 返回 xml 字串中經過 xml 表示式計算後的值,如果不匹配,則返回 0。
舉例:
hive> select xpath_double('<a><b>10.5</b><c>11.2</c></a>','sum(a/*)') from test;
OK
21.7
彙總統計函式(UDAF)
個數統計函式: count
語法: count(*), count(expr), count(DISTINCT expr[, expr_.])
返回值: int
說明: count(*)統計檢索出的行的個數,包括 NULL 值的行;count(expr)返回指定欄位的
非空值的個數;count(DISTINCT expr[, expr_.])返回指定欄位的不同的非空值的個數
舉例:
hive> select count(*) from test;
20
hive> select count(distinct t) from test;
10
總和統計函式: sum
語法: sum(col), sum(DISTINCT col)
返回值: double
說明: sum(col)統計結果集中 col 的相加的結果;sum(DISTINCT col)統計結果中 col 不同值
相加的結果
舉例:
hive> select sum(t) from test;
100
hive> select sum(distinct t) from test;
70
平均值統計函式: avg
語法: avg(col), avg(DISTINCT col)
返回值: double
說明: avg(col)統計結果集中 col 的平均值;avg(DISTINCT col)統計結果中 col 不同值相加
的平均值
舉例:
hive> select avg(t) from test;
50
hive> select avg (distinct t) from test;
30
最小值統計函式: min
語法: min(col)
返回值: double
說明: 統計結果集中 col 欄位的最小值
舉例:
hive> select min(t) from test;
20
最大值統計函式: max
語法: max(col)
返回值: double
說明: 統計結果集中 col 欄位的最大值
舉例:
hive> select max(t) from test;
120
非空集合總體變數函式: var_pop
語法: var_pop(col)
返回值: double
說明: 統計結果集中 col 非空集合的總體變數(忽略 null)
舉例:
非空集合樣本變數函式: var_samp
語法: var_samp (col)
返回值: double
說明: 統計結果集中 col 非空集合的樣本變數(忽略 null)
舉例:
總體標準偏離函式: stddev_pop
語法: stddev_pop(col)
返回值: double
說明: 該函式計算總體標準偏離,並返回總體變數的平方根,其返回值與 VAR_POP 函
數的平方根相同
舉例:
樣本標準偏離函式: stddev_samp
語法: stddev_samp (col)
返回值: double
說明: 該函式計算樣本標準偏離
舉例:
中位數函式: percentile
語法: percentile(BIGINT col, p)
返回值: double
說明: 求準確的第 pth 個百分位數,p 必須介於 0 和 1 之間,但是 col 欄位目前只支援
整數,不支援浮點數型別
舉例:
中位數函式: percentile
語法: percentile(BIGINT col, array(p1 [, p2]…))
返回值: array<double>
說明: 功能和上述類似,之後後面可以輸入多個百分位數,返回型別也為 array<double>,
其中為對應的百分位數。
舉例:
select percentile(score,<0.2,0.4>) from test; 取 0.2,0.4 位置的資料
近似中位數函式: percentile_approx
語法: percentile_approx(DOUBLE col, p [, B])
返回值: double
說明: 求近似的第 pth 個百分位數,p 必須介於 0 和 1 之間,返回型別為 double,但是
col 欄位支援浮點型別。引數 B 控制記憶體消耗的近似精度,B 越大,結果的準確度越高。
預設為 10,000。當 col 欄位中的 distinct 值的個數小於 B 時,結果為準確的百分位數
舉例:
近似中位數函式: percentile_approx
語法: percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B])
返回值: array<double>
說明: 功能和上述類似,之後後面可以輸入多個百分位數,返回型別也為 array<double>,
其中為對應的百分位數。
舉例:
直方圖: histogram_numeric
語法: histogram_numeric(col, b)
返回值: array<struct {‘x’,’y’}>
說明: 以 b 為基準計算 col 的直方圖資訊。
舉例:
hive> select histogram_numeric(100,5) from test;
[{"x":100.0,"y":1.0}]
集合去重數:collect_set
語法: collect_set (col)
返回值: array
說明: 將 col 欄位進行去重,合併成一個數組。
舉例:
hive> select cookie,ip from test;
cookie1 127.0.0.1
cookie1 127.0.0.1
cookie1 127.0.0.2
cookie1 127.0.0.3
hive> select cookie,collect_set(ip) from test group by cookie;
cookie1 "127.0.0.1","127.0.0.2","127.0.0.3"]
集合不去重函式:collect_list
語法: collect_list (col)
返回值: array
說明: 將 col 欄位合併成一個數組,不去重
舉例:
hive> select cookie,ip from test;
cookie1 127.0.0.1
cookie1 127.0.0.1
cookie1 127.0.0.2
cookie1 127.0.0.3
hive>select cookie,collect_list(ip) from test group by cookie;
cookie1 "127.0.0.1","127.0.0.1","127.0.0.2","127.0.0.3"]
表格生成函式 (UDTF)
陣列拆分成多行:explode
語法: explode(ARRAY)
返回值: 多行
說明: 將陣列中的元素拆分成多行顯示
舉例:
hive> select explode(array(1,2,3)) from test;
OK
1
2
3
Map 拆分成多行:explode
語法: explode(Map)
返回值: 多行
說明: 將 Map 中的元素拆分成多行顯示
舉例:
hive> select explode(map('k1','v1','k2','v2')) from test;
OK
k2 v2
k1 v1