Hive中的函式列表
阿新 • • 發佈:2019-02-03
原文見:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
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,,]…)) | 返回數值區域的一組百分比值分別對應 |