Hive 函數大全(吐血整理)
- 前言
- 關係運算
- 1、等值比較:=
- 2、不等值比較:<>
- 3、小於比較:<
- 4、小於等於比較:<=
- 5、大於比較:>
- 6、大於等於比較:>
- 7、空值判斷:IS NULL
- 8、非空判斷:IS NOT NULL
- 9、LIKE 比較:LIKE
- 10、JAVA 的 LIKE 比較:RLIKE
- 11、正則匹配:REGEXP
- 數學運算
- 邏輯運算
- 條件運算
- 數值計算
- 1、近似函數:round
- 2、指定精度近似函數:round
- 3、向下取整函數:floor
- 4、向上取整函數:ceil
- 5、向上取整函數:ceiling
- 6、取隨機函數:rand
- 7、自然指數函數:exp
- 8、以 10 爲底的對數函數:log10
- 9、以 2 爲底的對數函數:log2
- 10、對數函數:log
- 11、冪運算函數:pow
- 12、冪運算函數:power
- 13、平方根函數:sqrt
- 14、二進制函數:bin
- 15、十六進制函數:hex
- 16、反轉十六進制函數:unhex
- 17、進制轉換函數:conv
- 18、絕對值函數:abs
- 19、正取餘函數:pmod
- 20、正弦函數:sin
- 21、反正弦函數:asin
- 22、餘弦函數:cos
- 23、反餘弦函數:acos
- 24、positive 函數:positive
- 25、negative 函數:negative
- 日期函數
- 1、UNIX 時間戳轉日期函數:fom_unixtime
- 2、獲取當前 UNIX 時間戳函數:unix_timestamp
- 3、日期轉 UNIX 時間戳函數:unix_timestamp
- 4、指定格式日期轉 UNIX 時間戳函數:unix_timestamp
- 5、日期時間轉日期函數:to_date
- 6、日期轉年函數:year
- 7、日期轉月函數:month
- 8、日期轉天函數:day
- 9、日期轉小時函數:hour
- 10、日期轉分鐘函數:minute
- 11、日期轉秒函數:second
- 12、日期轉周函數:weekofyear
- 13、日期比較函數:datediff
- 14、日期增加函數:date_add
- 15、日期減少函數:date_sub
- 字符串函數
- 1、字符串長度函數:length
- 2、字符串反轉函數:reverse
- 3、字符串連接函數:concat
- 4、帶分隔符字符串連接函數:concat_ws
- 5、字符串截取函數:substr | substring
- 6、字符串截取函數:substr | substring
- 7、字符串轉大寫函數:upper | ucase
- 8、字符串轉小寫函數:lower | lcase
- 9、去空格函數:trim
- 10、左邊去空格函數:ltrim
- 11、右邊去空格函數:rtrim
- 12、正則表達式替換函數:regexp_replace
- 13、正則表達式解析函數:regexp_extract
- 14、URL 解析函數:parse_url
- 15、JSON 解析函數:get_json_object
- 16、空字符串函數:space
- 17、重複字符串函數:repeat
- 18、首字符 ASCII 函數:ascii
- 19、左補足函數:lpad
- 20、右補足函數:rpad
- 21、分割字符串函數:split
- 22、集合查找函數:find_in_set
- 聚合函數
前言
Hive 內部提供了很多函數給開發者使用,包括數學函數,類型轉換函數,條件函數,字符函數,聚合函數,表生成函數等等,這些函數都統稱爲內置函數。
在 hive 中可通過以下命令查看函數信息:
--顯示所有的可用函數,包括運算符、內置函數、自定義函數
show functions;
--顯示指定函數的描述信息
desc function trim;
--顯示指定函數的詳細信息
desc function extended trim;
關係運算
1、等值比較:=
語法:A = B
操作類型:基本類型
描述:如果表達式 A 與表達式 B 相等,則爲 TRUE;否則爲 FALSE。
select 1 where 1 = 1;
1
2、不等值比較:<>
語法:A <> B
操作類型:基本類型
描述:如果表達式 A 或表達式 B 爲 NULL,則返回 NULL;如果表達式 A 與 表達式 B 不相等,則爲 TRUE;否則爲 FALSE。
select 1 where 1 <> 2;
1
3、小於比較:<
語法:A < B
操作類型:基本類型
描述:如果表達式 A 或表達式 B 爲 NULL,則返回 NULL;如果表達式 A 小於表達式 B,則爲 TRUE;否則爲 FALSE。
select 1 where 1 < 2;
1
4、小於等於比較:<=
語法:A <= B
操作類型:基本類型
描述:如果表達式 A 或表達式 B 爲 NULL,則返回 NULL;如果表達式 A 小於或者等於表達式 B,則爲 TRUE;否則爲 FALSE。
select 1 where 1 <= 1;
1
5、大於比較:>
語法:A > B
操作類型:基本類型
描述:如果表達式 A 或表達式 B 爲 NULL,則返回 NULL;如果表達式 A 大於表達式 B,則爲 TRUE;否則爲 FALSE。
select 1 where 2 > 1;
1
6、大於等於比較:>
語法:A >= B
操作類型:基本類型
描述:如果表達式 A 或表達式 B 爲 NULL,則返回 NULL;如果表達式 A 大於或者等於表達式 B,則爲 TRUE;否則爲 FALSE。
select 1 where 1 >= 1;
1
7、空值判斷:IS NULL
語法:A IS NULL
操作類型:所有類型
描述:如果表達式 A 的值爲 NULL,則爲 TRUE;否則爲 FALSE。
select 1 where null is null;
1
8、非空判斷:IS NOT NULL
語法:A IS NOT NULL
操作類型:所有類型
描述:如果表達式 A 的值爲 NULL,則爲 FALSE;否則爲 TRUE。
select 1 where 1 is null;
1
9、LIKE 比較:LIKE
語法:A LIKE B
操作類型:字符類型
描述:如果字符串 A 或字符串 B 爲 NULL,則返回 NULL;如果字符串 A 符合簡單 SQL 正則表達式 B 的語法,則爲 TRUE;否則爲 FALSE。
字符 ”_” 表示任意單個字符
select 1 where 'football' like 'foot____';
1
字符 ”%” 表示任意數量的字符
select 1 where 'football' like 'foot%';
1
注意:否定比較時候用 NOT A LIKE B
select 1 where not 'football' like 'fff%';
1
10、JAVA 的 LIKE 比較:RLIKE
語法:A RLIKE B
操作類型:字符類型
描述:如果字符串 A 或字符串 B 爲 NULL,則返回 NULL;如果字符串 A 符合 JAVA 正則表達式 B 的正則語法,則爲 TRUE;否則爲 FALSE。
select 1 where 'football' rlike '^f.*l$';
1
11、正則匹配:REGEXP
語法:A REGEXP B
操作類型:字符類型
描述:功能與 RLIKE 相同
select 1 where 'football' regexp '^f.*l$';
1
數學運算
1、加法操作:+
語法:A + B
操作類型:數值類型
說明:返回 A 與 B 相加的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。比如,int + int 一般結果爲 int 類型,而 int + double 一般結果爲 double 類型。
select 1 + 2;
3
select 1 + 0.5;
1.5
2、減法操作:-
語法:A - B
操作類型:數值類型
說明:返回 A 與 B 相減的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。比如,int - int 一般結果爲 int 類型,而 int - double 一般結果爲 double 類型。
select 3 - 2;
1
select 1.5 - 1;
0.5
3、乘法操作:*
語法:A * B
操作類型:數值類型
說明:返回 A 與 B 相乘的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。注意,如果 A 乘以 B 的結果超過默認結果類型的數值範圍,則需要通過 cast 將結果轉換成範圍更大的數值類型。
select 3 * 8;
24
4、除法操作:/
語法:A / B
操作類型:數值類型
說明:返回 A 除以 B 的結果。結果的數值類型爲 double。
select 10 / 5;
2.0
注意:hive 中最高精度的數據類型是 double,只精確到小數點後16位,在做除法運算的時候要特別注意
5、取餘操作:%
語法:A % B
操作類型:數值類型
說明:返回 A 除以 B 的餘數。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。
select 5 % 2;
1
若對浮點數求餘,可能會出現如下結果
select 4.2 % 2;
0.20000000000000018
注意:精度在 hive 中是個很大的問題,類似這樣的操作最好通過 round 指定精度
select round(4.2 % 2, 2);
0.2
6、位與操作:&
語法:A & B
操作類型:整數類型
說明:返回 A 和 B 按位進行與操作的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。
select 4 & 8;
0
select 6 & 4;
4
7、位或操作:|
語法:A | B
操作類型:整數類型
說明:返回 A 和 B 按位進行或操作的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。
select 4 | 8;
12
select 6 | 8;
14
8、位異或操作:^
語法:A ^ B
操作類型:整數類型
說明:返回 A 和 B 按位進行異或操作的結果。結果的數值類型等於 A 的類型和 B 的類型的最小父類型。
select 4 ^ 8;
12
select 6 ^ 4;
2
9、按位取反操作:~
語法:~ A
操作類型:整數類型
說明:返回 A 按位取反操作的結果。結果的數值類型等於 A 的類型。
select ~ 4;
-5
select ~ 6;
-7
邏輯運算
1、邏輯與操作:AND
語法:A AND B
操作類型:boolean
說明:如果 A 或 B 爲 NULL,則返回 NULL;如果 A 和 B 均爲 TRUE,則爲 TRUE;否則爲 FALSE。
select 1 where 1 = 1 and 2 = 2;
1
2、邏輯與操作:OR
語法:A OR B
操作類型:boolean
說明:如果 A 或 B 爲 NULL,則返回 NULL;如果 A 或 B 有一個爲 TRUE,則爲 TRUE;否則爲 FALSE。
select 1 where 1 = 2 or 2 = 2;
1
3、邏輯非操作:NOT
語法:NOT A
操作類型:boolean
說明:如果 A 爲 NULL,或者 A 爲 FALSE,則爲TRUE;否則爲FALSE。
select 1 where not 1 = 2;
1
條件運算
1、IF 函數:IF
語法:IF(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回類型:T
描述:當條件 testCondition 爲 True 時,返回 valueTrue;否則返回 valueFalseOrNull。
select if(1 = 2, 100, 200);
200
2、非空查找函數:COALESCE
語法: COALESCE(T v1, T v2, …)
返回類型:T
描述:返回參數中的第一個非空值;如果所有值都爲 NULL,那麼返回NULL。
select coalesce(null, '100', '50');
100
3、條件判斷函數:CASE
語法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
返回類型:T
描述:如果 a 等於 b,那麼返回 c;如果 a 等於 d,那麼返回 e;否則返回 f。
select case 100 when 50 then 'tom' when 100 then 'jack' else 'mary' end
jack
4、條件判斷函數:CASE
語法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
返回類型:T
描述:如果 a 爲 TRUE,則返回 b;如果 c 爲 TRUE,則返回 d;否則返回 e。
select case when 1 = 2 then 'tom' when 2 = 2 then 'jack' else 'mary' end
jack
數值計算
1、近似函數:round
語法:round(double a)
返回類型:bigint
說明:返回 double 類型的整數值部分 (遵循四捨五入)
select round(3.1415926);
3
select round(3.5);
4
2、指定精度近似函數:round
語法:round(double a)
返回類型:double
說明:返回指定精度 d 的 double 類型
select round(3.1415926, 4);
3.1416
3、向下取整函數:floor
語法:floor(double a)
返回類型:double
說明:返回不大於 a 的最大整數
select round(3.1415926, 4);
3
4、向上取整函數:ceil
語法:ceil(double a)
返回類型:bigint
說明:返回不小於 a 的最小整數
select round(3.1415926, 4);
4
5、向上取整函數:ceiling
語法:ceiling(double a)
返回類型:bigint
說明:與 ceil 功能相同
select round(3.1415926, 4);
4
6、取隨機函數:rand
語法:rand(),rand(int seed)
返回類型:bigint
說明:返回一個 0 到 1 範圍內的隨機數。如果指定種子 seed,則會得到一個穩定的隨機數序列。
select rand();
0.712311371683693
select rand(100);
0.7308781907032909
7、自然指數函數:exp
語法:exp(double a)
返回類型:double
說明:返回自然對數 e 的 a 次方
select exp(2);
7.38905609893065
8、以 10 爲底的對數函數:log10
語法:log10(double a)
返回類型:double
說明:返回以 10 爲底的 a 的對數
select log10(100);
2.0
9、以 2 爲底的對數函數:log2
語法:log2(double a)
返回類型:double
說明:返回以 2 爲底的 a 的對數
select log2(8);
3.0
10、對數函數:log
語法:log2(double base, double a)
返回類型:double
說明:返回以 base 爲底的 a 的對數
select log(2, 1024);
10.0
11、冪運算函數:pow
語法:pow(double a, double p)
返回類型:double
說明:返回以 a 的 p 次冪
select pow(2, 5);
32.0
12、冪運算函數:power
語法:power(double a, double p)
返回類型:double
說明:返回以 a 的 p 次冪,與 pow 功能相同。
select pow(2, 10);
1024.0
13、平方根函數:sqrt
語法:sqrt(double a)
返回類型:double
說明:返回 a 的 平方根
select sqrt(100);
10.0
14、二進制函數:bin
語法:bin(bigint a)
返回類型:string
說明:返回 a 的 二進制代碼表示
select bin(7);
111
15、十六進制函數:hex
語法:hex(bigint a)
返回類型:string
說明:如果變量是 int 類型,那麼返回 a 的十六進制表示;如果變量是 string 類型,則返回該字符串的十六進制表示。
select hex(17);
11
select hex('abc');
616263
16、反轉十六進制函數:unhex
語法:unhex(string a)
返回類型:string
說明:返回該十六進制數或字符串所反轉的字符串
select unhex(616263);
abc
select unhex('616263');
abc
17、進制轉換函數:conv
語法:conv(bigint num, int from_base, int to_base)
返回類型:string
說明:將數值 num 從 from_base 進制轉化到 to_base 進制
select conv(17, 10, 2);
10001
select conv(17, 10, 16);
11
18、絕對值函數:abs
語法:abs(int a ),absdouble a)
返回類型:int double
說明:返回數值 a 的絕對值
select abs(-1);
1
select abs(3.14);
3.14
19、正取餘函數:pmod
語法:pmod(int a, int b),pmod(double a, double b)
返回類型:int double
說明:返回正的 a 除以 b 的餘數
select pmod(9, 4);
1
select pmod(-9, 4);
3
20、正弦函數:sin
語法:sin(double a)
返回類型:double
說明:返回 a 的正弦值
select sin(0.8);
0.7173560908995228
21、反正弦函數:asin
語法:asin(double a)
返回類型:double
說明:返回 a 的反正弦值
select sin(0.7173560908995228);
0.8
22、餘弦函數:cos
語法:cos(double a)
返回類型:double
說明:返回 a 的餘弦值
select cos(0.8);
0.6967067093471654
23、反餘弦函數:acos
語法:acos(double a)
返回類型:double
說明:返回 a 的反餘弦值
select acos(0.6967067093471654);
0.8
24、positive 函數:positive
語法:positive(int a),positive(double a)
返回類型:int double
說明:返回 a 自身
select positive(-1);
-1
select positive(3.14);
3.14
25、negative 函數:negative
語法:negative(int a),negative(double a)
返回類型:int double
說明:返回 a 的相反數
select negative(-1);
1
select negative(3.14);
-3.14
日期函數
1、UNIX 時間戳轉日期函數:fom_unixtime
語法:fom_unixtime(bigint unixtime[, string format])
返回類型:string
說明:轉化 UNIX 時間戳(從1970-01-01 00:00:00 UTC 到指定時間的秒數)到當前時區的時間格式。
select from_unixtime(1590000000, 'yyyy-MM-dd');
2020-05-21
2、獲取當前 UNIX 時間戳函數:unix_timestamp
語法:unix_timestamp()
返回類型:bigint
說明:轉獲取當前時區的 UNIX 時間戳
select unix_timestamp();
1592361030
3、日期轉 UNIX 時間戳函數:unix_timestamp
語法:unix_timestamp(string date)
返回類型:bigint
說明:轉換格式爲 “yyyy-MM-dd HH:mm:ss” 的日期到 UNIX 時間戳。如果轉換失敗,則返回 NULL。
select unix_timestamp('2020-05-21 02:40:00');
1590000000
4、指定格式日期轉 UNIX 時間戳函數:unix_timestamp
語法:unix_timestamp(string date, string pattern)
返回類型:bigint
說明:轉換 pattern 格式的日期到 UNIX 時間戳。如果轉換失敗,則返回 NULL。
select unix_timestamp('20200521 02:40:00', 'yyyyMMdd HH:mm:ss');
1590000000
5、日期時間轉日期函數:to_date
語法:to_date(string timestamp)
返回類型:string
說明:返回日期時間字段中的日期部分。
select to_date('2020-05-21 02:40:00');
2020-05-21
6、日期轉年函數:year
語法:year(string date)
返回類型:int
說明:返回日期中的年份。
select year('2020-05-21 02:40:00');
2020
7、日期轉月函數:month
語法:month(string date)
返回類型:int
說明:返回日期中的月份。
select month('2020-05-21 02:40:00');
5
8、日期轉天函數:day
語法:day(string date)
返回類型:int
說明:返回日期中的天。
select day('2020-05-21 02:40:00');
21
9、日期轉小時函數:hour
語法:hour(string date)
返回類型:int
說明:返回日期中的小時。
select hour('2020-05-21 02:40:00');
2
10、日期轉分鐘函數:minute
語法:minute(string date)
返回類型:int
說明:返回日期中的分鐘。
select minute('2020-05-21 02:40:00');
40
11、日期轉秒函數:second
語法:second(string date)
返回類型:int
說明:返回日期中的秒。
select second('2020-05-21 02:40:00');
0
12、日期轉周函數:weekofyear
語法:weekofyear(string date)
返回類型:int
說明:返回日期在該年的週數。
select weekofyear('2020-05-21 02:40:00');
21
13、日期比較函數:datediff
語法:datediff(string enddate, string startdate)
返回類型:int
說明:返回結束日期減去開始日期的天數。
select datediff('2020-05-21', '2020-01-01');
141
14、日期增加函數:date_add
語法:date_add(string startdate, int days)
返回類型:string
說明:返回開始日期 startdate 增加 days 天后的日期。
select date_add('2020-05-21', 10);
2020-05-31
15、日期減少函數:date_sub
語法:date_sub(string startdate, int days)
返回類型:string
說明:返回開始日期 startdate 減少 days 天后的日期。
select date_sub('2020-05-21', 10);
2020-05-11
字符串函數
1、字符串長度函數:length
語法:length(string A)
操作類型:int
描述:返回字符串 A 的長度
select length('abcedfg');
7
2、字符串反轉函數:reverse
語法:reverse(string A)
操作類型:string
描述:返回字符串 A 的反轉結果
select reverse('abcedfg');
gfdecba
3、字符串連接函數:concat
語法:concat(string A, string B…)
操作類型:string
描述:返回輸入字符串連接後的結果,支持任意多個輸入字符串。
select concat(‘abc’, 'def’, 'gh');
abcedfg
4、帶分隔符字符串連接函數:concat_ws
語法:concat_ws(string SEP, string A, string B…)
操作類型:string
描述:返回輸入字符串連接後的結果,SEP 表示各個字符串間的分隔符。
select concat_ws(',', 'abc', 'def', 'gh');
abc,def,gh
5、字符串截取函數:substr | substring
語法:substr(string A, int start)
操作類型:string
描述:返回字符串 A 從 start 位置到結尾的字符串。
select substr('abcde', 3);
cde
select substring('abcde', -1);
e
6、字符串截取函數:substr | substring
語法:substr(string A, int start, int len)
操作類型:string
描述:返回字符串 A 從 start 位置開始,長度爲 len 的字符串。
select substr('abcde', 3, 2);
cd
select substring('abcde', -2, 2);
de
7、字符串轉大寫函數:upper | ucase
語法:upper(string A)
操作類型:string
描述:返回字符串 A 的大寫格式
select upper('Apple');
APPLE
8、字符串轉小寫函數:lower | lcase
語法:lower(string A)
操作類型:string
描述:返回字符串 A 的小寫格式
select upper('Apple');
apple
9、去空格函數:trim
語法:trim(string A)
操作類型:string
描述:去除字符串兩邊的空格
select trim(' abc ');
abc
10、左邊去空格函數:ltrim
語法:ltrim(string A)
操作類型:string
描述:去除字符串左邊的空格
select ltrim(' abc ');
abc[空格]
11、右邊去空格函數:rtrim
語法:rtrim(string A)
操作類型:string
描述:去除字符串右邊的空格
select rtrim(' abc ');
[空格]abc
12、正則表達式替換函數:regexp_replace
語法:regexp_replace(string A, string B, string C)
操作類型:string
描述:將字符串 A 中的符合 Java 正則表達式 B 的部分替換爲 C
select regexp_replace('foobar', 'oo|ar', '');
fb
13、正則表達式解析函數:regexp_extract
語法:regexp_extract(string subject, string pattern, int index)
操作類型:string
描述:將字符串 subject 按照 pattern 正則表達式的規則拆分,返回 index 指定的字符。
select regexp_extract('foothebar', 'foo(.*?)(bar)', 0);
foothebar
select regexp_extract('foothebar', 'foo(.*?)(bar)', 1);
the
select regexp_extract('foothebar', 'foo(.*?)(bar)', 2);
bar
14、URL 解析函數:parse_url
語法:parse_url(string urlString, string partToExtract [, string keyToExtract])
操作類型:string
描述:返回 URL 中指定的部分。partToExtract 的有效值爲:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
select parse_url('https://www.baidu.com/path/p.php?k1=v1&k2=v2#ref1', 'HOST');
www.baidu.com
select parse_url('https://www.baidu.com/path/p.php?k1=v1&k2=v2#ref1', 'QUERY', 'k1');
v1
15、JSON 解析函數:get_json_object
語法:get_json_object(string json_string, string path)
操作類型:string
描述:解析 json 的字符串 json_string,返回 path 指定的內容。如果輸入的 json 字符串無效,那麼返回 NULL。
select get_json_object('{"name":"zs","age":"25"}', '$.name');
zs
16、空字符串函數:space
語法:space(int n)
操作類型:string
描述:返回長度爲 n 的字符串
select space(3);
[空格][空格][空格]
17、重複字符串函數:repeat
語法:repeat(string str, int n)
操作類型:string
描述:返回重複 n 次後的 str 字符串
select repeat('abc', 3);
abcabcabc
18、首字符 ASCII 函數:ascii
語法:ascii(string str)
操作類型:int
描述:返回字符串 str 第一個字符的 ascii 碼
select ascii('abc');
97
19、左補足函數:lpad
語法:lpad(string str, int len, string pad)
操作類型:string
描述:將 str 用 pad 進行左補足到 len 位
select lpad('abc', 10, '#');
#######abc
20、右補足函數:rpad
語法:rpad(string str, int len, string pad)
操作類型:string
描述:將 str 用 pad 進行右補足到 len 位
select rpad('abc', 10, '#');
abc#######
21、分割字符串函數:split
語法:split(string str, string pat)
操作類型:array
描述:按照 pat 字符串分割 str,會返回分割後的字符串數組。
select split('ab,cd,ef', ',');
["ab","cd","ef"]
22、集合查找函數:find_in_set
語法:find_in_set(string str, string strList)
操作類型:int
描述:返回 str 在 strlist 第一次出現的位置,strlist 是用逗號分割的字符串。如果沒有找到該 str 字符,則返回 0。
select find_in_set('cd','{ab,cd,ef}');
2
聚合函數
創建 test 表
create table test(id int, t int);
插入測試數據
insert into test values(1,60),(2,30),(3,80),(4,40),(5,60),(6,50),(7,80),(8,70),(9,90),(10,100);
查看錶中數據
select * from test;
+----------+---------+
| test.id | test.t |
+----------+---------+
| 1 | 60 |
| 2 | 30 |
| 3 | 80 |
| 4 | 40 |
| 5 | 60 |
| 6 | 50 |
| 7 | 80 |
| 8 | 70 |
| 9 | 90 |
| 10 | 100 |
+----------+---------+
1、統計函數:count
語法:count(),count(expr),count(DISTINCT expr[, expr_.])
返回類型:int
描述:count() 統計檢索出的行的個數,包括 NULL 值的行;count(expr) 返回指定字段的非空值的個數;count(DISTINCT expr[, expr_.]) 返回指定字段的不同的非空值的個數。
select count(*) from test;
10
select count(distinct t) from test;
8
2、求和函數:sum
語法:sum(col),sum(DISTINCT col)
返回類型:double
描述:sum(col) 統計結果集中 col 的相加的結果;sum(DISTINCT col) 統計結果中 col 不同值相加的結果。
select sum(t) from test;
660
select sum(distinct t) from test;
520
3、平均值函數:avg
語法:avg(col),avg(DISTINCT col)
返回類型:double
描述:avg(col) 統計結果集中 col 的平均值;avg(DISTINCT col) 統計結果中 col 不同值相加的平均值。
select avg(t) from test;
66.0
select avg(distinct t) from test;
65。0
4、最小值函數:min
語法:min(col)
返回類型:double
描述:統計結果集中 col 字段的最小值
select min(t) from test;
30
5、最大值函數:max
語法:max(col)
返回類型:double
描述:統計結果集中 col 字段的最大值
select max(t) from test;
100
6、總體方差函數:var_pop
語法:var_pop(col)
返回類型:double
描述:統計結果集中 col 非空集合的總體變量(忽略 null)
select round(var_pop(t), 2) from test;
444.0
7、樣本方差函數:var_samp
語法:var_samp(col)
返回類型:double
描述:統計結果集中 col 非空集合的樣本變量(忽略 null)
select round(var_samp(t), 2) from test;
493.33
8、總體標準差函數:stddev_pop
語法:stddev_pop(col)
返回類型:double
描述:該函數計算總體標準偏離,並返回總體變量的平方根,其返回值與 VAR_POP 函數的平方根相同。
select round(stddev_pop(t), 2) from test;
21.07
9、樣本標準差函數:stddev_samp
語法:stddev_samp(col)
返回類型:double
描述:該函數計算樣本標準偏離
select round(stddev_samp(t), 2) from test;
22.21
10、百分位函數:percentile
語法:percentile(BIGINT col, p)
返回類型:double
描述:求準確的 p 對應的百分位數,p 必須介於 0 和 1 之間,返回類型爲 double,但是 col 字段目前只支持整數,不支持浮點數類型。
select percentile(t, 0.5) from test;
65.0
11、百分位函數:percentile
語法: percentile(BIGINT col, array(p1 [, p2]…))
返回類型:array
描述:功能和上述類似,array 中可以輸入多個百分位數,返回類型也爲 array,其中爲對應的百分位數。
select percentile(t, array(0.2, 0.3, 0.5)) from test;
[48.0,57.0,65.0]
12、近似百分位函數:percentile_approx
語法:percentile_approx(BIGINT col, p [, B])
返回類型:double
描述:求近似的 p 對應的百分位數,p 必須介於 0 和 1 之間,返回類型爲 double,col 字段支持浮點類型。參數 B 控制內存消耗的近似精度,B越大,結果的準確度越高。默認爲10,000。當 col 字段中的 distinct 值的個數小於 B 時,結果爲準確的百分位數。
select percentile_approx(t, 0.5, 5) from test;
58.888888888888886
13、近似百分位函數:percentile_approx
語法:percentile_approx(BIGINT col, array(p1 [, p2]…) [, B])
返回類型:double
描述:功能和上述類似,array 中可以輸入多個百分位數,返回類型也爲 array,其中爲對應的百分位數。
select percentile_approx(t, array(0.2, 0.3, 0.5), 5) from test;
[35.0,50.0,58.888888888888886]
14、直方圖:histogram_numeric
語法:histogram_numeric(col, b)
返回類型:array<struct {‘x’,‘y’}>
描述:以 b 爲基準計算 col 的直方圖信息,得到的結果可用於作圖。
select histogram_numeric(t, 100) from test;
[{"x":30.0,"y":1.0},{"x":40.0,"y":1.0},{"x":50.0,"y":1.0},{"x":60.0,"y":2.0},{"x":70.0,"y":1.0},{"x":80.0,"y":2.0},{"x":90.0,"y":1.0},{"x":100.0,"y":1.0}]