Hive 函數大全(吐血整理)

Hive 函數大全(吐血整理)

前言

 
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;
650

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}]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章