1. 程式人生 > >大資料系列之hive(八、hive內建函式全解)

大資料系列之hive(八、hive內建函式全解)

1.內建運算子1.1關係運算符

運算子

型別

說明

A = B

所有原始型別

如果A與B相等,返回TRUE,否則返回FALSE

A == B

失敗,因為無效的語法。 SQL使用”=”,不使用”==”。

A <> B

所有原始型別

如果A不等於B返回TRUE,否則返回FALSE。如果A或B值為”NULL”,結果返回”NULL”。

A < B

所有原始型別

如果A小於B返回TRUE,否則返回FALSE。如果A或B值為”NULL”,結果返回”NULL”。

A <= B

所有原始型別

如果A小於等於B返回TRUE,否則返回FALSE。如果A或B值為”NULL”,結果返回”NULL”。

A > B

所有原始型別

如果A大於B返回TRUE,否則返回FALSE。如果A或B值為”NULL”,結果返回”NULL”。

A >= B

所有原始型別

如果A大於等於B返回TRUE,否則返回FALSE。如果A或B值為”NULL”,結果返回”NULL”。

A IS NULL

所有型別

如果A值為”NULL”,返回TRUE,否則返回FALSE

A IS NOT NULL

所有型別

如果A值不為”NULL”,返回TRUE,否則返回FALSE

A LIKE B

字串

如果A或B值為”NULL”,結果返回”NULL”。字串A與B通過sql進行匹配,如果相符返回TRUE,不符返回FALSE。B字串中 的”_”代表任一字元,”%”則代表多個任意字元。例如: (‘foobar’ like ‘foo’)返回FALSE,( ‘foobar’ like ‘foo_ _ _’或者 ‘foobar’ like ‘foo%’)則返回TURE

A RLIKE B

字串

如果A或B值為”NULL”,結果返回”NULL”。字串A與B通過java進行匹配,如果相符返回TRUE,不符返回FALSE。例如:( ‘foobar’ rlike ‘foo’)返回FALSE,(’foobar’ rlike ‘^f.*r$’ )返回TRUE。

A REGEXP B

字串

與RLIKE相同。

1.2算術運算子

運算子

型別

說明

A + B

所有數字型別

A和B相加。結果的與運算元值有共同型別。例如每一個整數是一個浮點數,浮點數包含整數。所以,一個浮點數和一個整數相加結果也是一個浮點數。

A – B

所有數字型別

A和B相減。結果的與運算元值有共同型別。

A * B

所有數字型別

A和B相乘,結果的與運算元值有共同型別。需要說明的是,如果乘法造成溢位,將選擇更高的型別。

A / B

所有數字型別

A和B相除,結果是一個double(雙精度)型別的結果。

A % B

所有數字型別

A除以B餘數與運算元值有共同型別。

A & B

所有數字型別

運算子檢視兩個引數的二進位制表示法的值,並執行按位”與”操作。兩個表示式的一位均為1時,則結果的該位為 1。否則,結果的該位為 0。

A|B

所有數字型別 

運算子檢視兩個引數的二進位制表示法的值,並執行按位”或”操作。只要任一表達式的一位為 1,則結果的該位為 1。否則,結果的該位為 0。 

A ^ B

所有數字型別

運算子檢視兩個引數的二進位制表示法的值,並執行按位”異或”操作。當且僅當只有一個表示式的某位上為 1 時,結果的該位才為 1。否則結果的該位為 0。

~A

所有數字型別

對一個表示式執行按位”非”(取反)。

1.3邏輯運算子

運算子

型別

說明

A AND B

布林值

A和B同時正確時,返回TRUE,否則FALSE。如果A或B值為NULL,返回NULL。

A && B

布林值

與”A AND B”相同

A OR B

布林值

A或B正確,或兩者同時正確返返回TRUE,否則FALSE。如果A和B值同時為NULL,返回NULL。

A | B

布林值

與”A OR B”相同

NOT A

布林值

如果A為NULL或錯誤的時候返回TURE,否則返回FALSE。

! A

布林值

與”NOT A”相同

1.4複雜型別函式

函式

型別

說明

map

(key1, value1, key2, value2, …)

通過指定的鍵/值對,建立一個map。

struct

(val1, val2, val3, …)

通過指定的欄位值,建立一個結構。結構欄位名稱將COL1,COL2,…

array

(val1, val2, …)

通過指定的元素,建立一個數組。

1.5對複雜型別函式操作

函式

型別

說明

A[n]

A是一個數組,n為int型

返回陣列A的第n個元素,第一個元素的索引為0。如果A陣列為['foo','bar'],則A[0]返回’foo’和A[1]返回”bar”。

M[key]

M是Map<K, V>,關鍵K型

返回關鍵值對應的值,例如mapM為 \{‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’\},則M['all'] 返回’foobar’。

S.x

S為struct

返回結構x字串在結構S中的儲存位置。如 foobar \{int foo, int bar\} foobar.foo的領域中儲存的整數。

2.內建函式2.1數學函式

返回型別

函式

說明

BIGINT

round(double a)

四捨五入

DOUBLE

round(double a, int d)

小數部分d位之後數字四捨五入,例如round(21.263,2),返回21.26

BIGINT

floor(double a)

對給定資料進行向下舍入最接近的整數。例如floor(21.2),返回21。

BIGINT

ceil(double a), ceiling(double a)

將引數向上舍入為最接近的整數。例如ceil(21.2),返回23.

double

rand(), rand(int seed)

返回大於或等於0且小於1的平均分佈隨機數(依重新計算而變)

double

exp(double a)

返回e的n次方

double

ln(double a)

返回給定數值的自然對數

double

log10(double a)

返回給定數值的以10為底自然對數

double

log2(double a)

返回給定數值的以2為底自然對數

double

log(double base, double a)

返回給定底數及指數返回自然對數

double

pow(double a, double p) power(double a, double p)

返回某數的乘冪

double

sqrt(double a)

返回數值的平方根

string

unhex(string a)

十六進位制字元轉換由數字表示的字元。

string

conv(BIGINT num, int from_base, int to_base)

將指定數值,由原來的度量體系轉換為指定的試題體系。例如CONV(‘a’,16,2),返回。參考:’1010′ http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv

double

abs(double a)

取絕對值

int double

pmod(int a, int b) pmod(double a, double b)

返回a除b的餘數的絕對值

double

sin(double a)

返回給定角度的正弦值

double

asin(double a)

返回x的反正弦,即是X。如果X是在-1到1的正弦值,返回NULL。

double

cos(double a)

返回餘弦

double

acos(double a)

返回X的反餘弦,即餘弦是X,,如果-1<= A <= 1,否則返回null.

int double

positive(int a) positive(double a)

返回A的值,例如positive(2),返回2。

int double

negative(int a) negative(double a)

返回A的相反數,例如negative(2),返回-2。

2.2收集函式

返回型別

函式

說明

int

size(Map<K.V>)

返回的map型別的元素的數量

int

size(Array<T>)

返回陣列型別的元素數量

2.3型別轉換函式

返回型別

函式

說明

指定 “type”

cast(expr as <type>)

型別轉換。例如將字元”1″轉換為整數:cast(’1′ as bigint),如果轉換失敗返回NULL。

2.4日期函式

返回型別

函式

說明

string

from_unixtime(bigint unixtime[, string format])

UNIX_TIMESTAMP引數表示返回一個值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,這取決於是否是在一個字串或數字語境中使用的功能。該值表示在當前的時區。

bigint

unix_timestamp()

如果不帶引數的呼叫,返回一個Unix時間戳(從’1970- 01 – 0100:00:00′到現在的UTC秒數)為無符號整數。

bigint

unix_timestamp(string date)

指定日期引數呼叫UNIX_TIMESTAMP(),它返回引數值’1970- 01 – 0100:00:00′到指定日期的秒數。

bigint

unix_timestamp(string date, string pattern)

string

to_date(string timestamp)

返回時間中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″

string

to_dates(string date)

給定一個日期date,返回一個天數(0年以來的天數)

int

year(string date)

返回指定時間的年份,範圍在1000到9999,或為”零”日期的0。

int

month(string date)

返回指定時間的月份,範圍為1至12月,或0一個月的一部分,如’0000-00-00′或’2008-00-00′的日期。

int

day(string date) dayofmonth(date)

返回指定時間的日期

int

hour(string date)

返回指定時間的小時,範圍為0到23。

int

minute(string date)

返回指定時間的分鐘,範圍為0到59。

int

second(string date)

返回指定時間的秒,範圍為0到59。

int

weekofyear(string date)

返回指定日期所在一年中的星期號,範圍為0到53。

int

datediff(string enddate, string startdate)

兩個時間引數的日期之差。

int

date_add(string startdate, int days)

給定時間,在此基礎上加上指定的時間段。

int

date_sub(string startdate, int days)

給定時間,在此基礎上減去指定的時間段。

2.5條件函式

返回型別

函式

說明

T

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

判斷是否滿足條件,如果滿足返回一個值,如果不滿足則返回另一個值。

T

COALESCE(T v1, T v2, …)

返回一組資料中,第一個不為NULL的值,如果均為NULL,返回NULL。

T

CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END

當a=b時,返回c;當a=d時,返回e,否則返回f。

T

CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

當值為a時返回b,當值為c時返回d。否則返回e。

2.6字元函式

返回型別

函式

說明

int

length(string A)

返回字串的長度

string

reverse(string A)

返回倒序字串

string

concat(string A, string B…)

連線多個字串,合併為一個字串,可以接受任意數量的輸入字串

string

concat_ws(string SEP, string A, string B…)

連結多個字串,字串之間以指定的分隔符分開。

string

substr(string A, int start) substring(string A, int start)

從文字字串中指定的起始位置後的字元。

string

substr(string A, int start, int len) substring(string A, int start, int len)

從文字字串中指定的位置指定長度的字元。

string

upper(string A) ucase(string A)

將文字字串轉換成字母全部大寫形式

string

lower(string A) lcase(string A)

將文字字串轉換成字母全部小寫形式

string

trim(string A)

刪除字串兩端的空格,字元之間的空格保留

string

ltrim(string A)

刪除字串左邊的空格,其他的空格保留

string

rtrim(string A)

刪除字串右邊的空格,其他的空格保留

string

regexp_replace(string A, string B, string C)

字串A中的B字元被C字元替代

string

regexp_extract(string subject, string pattern, int index)

通過下標返回正則表示式指定的部分。regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) returns ‘bar.’

string

parse_url(string urlString, string partToExtract [, string keyToExtract])

返回URL指定的部分。parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) 返回:’facebook.com’

string

get_json_object(string json_string, string path)

select a.timestamp, get_json_object(a.appevents, ‘$.eventid’), get_json_object(a.appenvets, ‘$.eventname’) from log a;

string

space(int n)

返回指定數量的空格

string

repeat(string str, int n)

重複N次字串

int

ascii(string str)

返回字串中首字元的數字值

string

lpad(string str, int len, string pad)

返回指定長度的字串,給定字串長度小於指定長度時,由指定字元從左側填補。

string

rpad(string str, int len, string pad)

返回指定長度的字串,給定字串長度小於指定長度時,由指定字元從右側填補。

array

split(string str, string pat)

將字串轉換為陣列。

int

find_in_set(string str, string strList)

返回字串str第一次在strlist出現的位置。如果任一引數為NULL,返回NULL;如果第一個引數包含逗號,返回0。

array<array<string>>

sentences(string str, string lang, string locale)

將字串中內容按語句分組,每個單詞間以逗號分隔,最後返回陣列。 例如sentences(‘Hello there! How are you?’) 返回:( (“Hello”, “there”), (“How”, “are”, “you”) )

array<struct<string,double>>

ngrams(array<array<string>>, int N, int K, int pf)

SELECT ngrams(sentences(lower(tweet)), 2, 100 [, 1000]) FROM twitter;

array<struct<string,double>>

context_ngrams(array<array<string>>, array<string>, int K, int pf)

SELECT context_ngrams(sentences(lower(tweet)), array(null,null), 100, [, 1000]) FROM twitter;

3.內建的聚合函式(UDAF)

返回型別

函式

說明

bigint

count(*) , count(expr), count(DISTINCT expr[, expr_., expr_.])

返回記錄條數。

double

sum(col), sum(DISTINCT col)

求和

double

avg(col), avg(DISTINCT col)

求平均值

double

min(col)

返回指定列中最小值

double

max(col)

返回指定列中最大值

double

var_pop(col)

返回指定列的方差

double

var_samp(col)

返回指定列的樣本方差

double

stddev_pop(col)

返回指定列的偏差

double

stddev_samp(col)

返回指定列的樣本偏差

double

covar_pop(col1, col2)

兩列數值協方差

double

covar_samp(col1, col2)

兩列數值樣本協方差

double

corr(col1, col2)

返回兩列數值的相關係數

double

percentile(col, p)

返回數值區域的百分比數值點。0<=P<=1,否則返回NULL,不支援浮點型數值。

array<double>

percentile(col, array(p~1,,\ [, p,,2,,]…))

返回數值區域的一組百分比值分別對應的數值點。0<=P<=1,否則返回NULL,不支援浮點型數值。

double

percentile_approx(col, p[, B])

Returns an approximate p^th^ percentile of a numeric column (including floating point types) in the group. The B parameter controls approximation accuracy at the cost of memory. Higher values yield better approximations, and the default is 10,000. When the number of distinct values in col is smaller than B, this gives an exact percentile value.

array<double>

percentile_approx(col, array(p~1,, [, p,,2_]…) [, B])

Same as above, but accepts and returns an array of percentile values instead of a single one.

array<struct\{‘x’,'y’\}>

histogram_numeric(col, b)

Computes a histogram of a numeric column in the group using b non-uniformly spaced bins. The output is an array of size b of double-valued (x,y) coordinates that represent the bin centers and heights

array

collect_set(col)

返回無重複記錄

4.內建表生成函式(UDTF)

返回型別

函式

說明

陣列

explode(array<TYPE> a)

陣列一條記錄中有多個引數,將引數拆分,每個引數生成一列。

json_tuple

get_json_object語句:select a.timestamp, get_json_object(a.appevents, ‘$.eventid’), get_json_object(a.appenvets, ‘$.eventname’) from log a; json_tuple語句: select a.timestamp, b.* from log a lateral view json_tuple(a.appevent, ‘eventid’, ‘eventname’) b as f1, f2

explode示例:

陣列

SQL

返回

myCol  [1,2]  [3,4]

SELECT explode(myCol) AS myNewCol FROM myTable

myNewCol 1  2  3  4