Hive內置函數

數學函數

下面表格中的函數爲Hive的內置數學函數,大部分當參數爲NULL時返回NULL。

返回類型

函數名

描述

bigint 

round(double a)

返回a經過四捨五入的BIGINT 值

double

round(double a, int d)

返回a經過四捨五入,保留d位小數的DOUBLE 值

bigint

floor(double a)

返回小於等於a的最大BIGINT 值

bigint

ceil(double a), ceiling(double a)

返回大於等於a的最小BIGINT 值

double

rand(),

rand(int seed)

返回一個均勻分佈在0到1之間的隨機數,指定seed將會確保產生的隨機數序列是確定的

double

exp(double a), exp(decimal a)

返回ea

double

ln(double a), ln(decimal a)

返回a的自然對數值

double

log10(double a), log10(decimal a)

返回a的以10爲底的對數值

double

log2(double a), log2(decimal a)

返回a的以2爲底的對數值

double

log(double base, double a)

返回a以base爲底的對數值,除了DOUBLE 類型,還可以是DECIMAL 類型,並且兩種類型可以混合使用

double

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

返回ap

double

sqrt(double a), sqrt(decimal a)

返回a的平方根

string

bin(bigint a)

返回a的二進制格式

string

hex(bigint a)

hex(string a)

hex(binary a)

如果參數爲整數或者二進制,返回十六進制的字符串,如果參數爲字符串,該函數將每個字符轉換爲十六進制表示,並返回結果字符串

binary

unhex(string a)

將每對字符解釋爲十六進制並轉換爲該十六進制的字節表示

string

conv(bigint num, int from_base, int to_base),

conv(string num, int from_base, int to_base)

將數值從一種進製表示轉換爲另一種進制,比如從二進制轉換爲十進制

double

abs(double a)

返回a的絕對值

int or double

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

返回a mod b的正數值

double

sin(double a),

sin(decimal a)

返回a的正弦值,a爲弧度值

double

asin(double a), asin(decimal a)

如果1<=a<=-1,返回a的反正弦值,否則返回NULL

double

cos(double a), cos(decimal a)

返回a的餘弦值,a爲弧度值

double

acos(double a), acos(decimal a)

如果-1<=a<=1,返回a的反餘弦值,否則返回NULL

double

tan(double a),

tan(decimal a)

返回a的正切值,a爲弧度值

double

atan(double a), atan(decimal a)

返回a的反正切值

double

degrees(double a), degrees(decimal a)

將a從弧度值轉換爲對應的角度值

double

radians(double a), radians(double a)

將a從角度值轉換爲弧度值

int or double

positive(int a), positive(double a)

返回a

int or double

negative(int a), negative(double a)

返回-a

double or int

sign(double a), sign(decimal a)

如果a爲正數返回1.0,若爲負數返回-1.0,否則返回0.0。參數爲DECIMAL 時返回值爲INT類型

double

e()

返回e的值

double

pi()

返回π的值

集合函數

下表爲Hive中的集合函數。

返回類型

函數名

描述

int

size(Map<K.V>)

返回map中的元素數量

int

size(Array<T>)

返回數組中的元素數量

array<K>

map_keys(Map<K.V>)

返回未經排序的包含map中keys的數組

array<V>

map_values(Map<K.V>)

返回未經排序的包含map中values的數組

boolean

array_contains(Array<T>, value)

如果數組包含value,返回true

array<t>

sort_array(Array<T>)

將數組按照升序排序並返回

 

類型轉換函數

下表爲Hive中的類型轉換函數。

返回類型

函數名

描述

binary

binary(string|binary)

將輸入參數轉換爲binary

<type>

cast(expr as <type>)

將表達式的結果expr轉換爲<type>,如果轉換不成功則返回NULL,例如cast(‘2014-08-09’ as date)

 

日期函數

下表中爲Hive中的內置日期函數。

返回類型

函數名

描述

string

from_unixtime(bigint unixtime[, string format])

將從unix時間(1970-01-01 00:00:00 UTC)開始的秒數轉換爲表示當前系統時區的時間戳,格式爲“1970-01-01 00:00:00”

bigint

unix_timestamp()

返回當前Unix時間戳表示的秒數

bigint

unix_timestamp(string date)

將格式爲yyyy-MM-dd HH:mm:ss的字符串轉換爲Unix時間戳(秒),使用默認的時區和區域,如果失敗返回0

bigint

unix_timestamp(string date, string pattern)

根據指定模式將時間字符串轉換爲Unix時間戳(秒),失敗返回0

string

to_date(string timestamp)

返回時間戳字符串的日期部分,如:to_date("1970-01-01 00:00:00") = "1970-01-01"

int

year(string date)

返回日期或時間戳字符串的年部分,如: year("1970-01-01 00:00:00") = 1970, year("1970-01-01") = 1970

int

month(string date)

返回日期或時間戳字符串的月部分,如: month("1970-11-01 00:00:00") = 11, month("1970-11-01") = 11

int

day(string date) dayofmonth(date)

返回日期或時間戳字符串的天部分,如:day("1970-11-01 00:00:00") = 1, day("1970-11-01") = 1

int

hour(string date)

返回時間戳的小時部分: hour('2009-07-30 12:58:59') = 12, hour('12:58:59') = 12

int

minute(string date)

返回時間戳的分鐘

int

second(string date)

返回時間戳的秒

int

weekofyear(string date)

返回時間戳的星期數,如: weekofyear("1970-11-01 00:00:00") = 44, weekofyear("1970-11-01") = 44

int

datediff(string enddate, string startdate)

返回從startdate到enddate的天數,如: datediff('2009-03-01', '2009-02-27') = 2

string

date_add(string startdate, int days)

向startdate增加指定的天數,如: date_add('2008-12-31', 1) = '2009-01-01'

string

date_sub(string startdate, int days)

從startdate減去指定的天數,如: date_sub('2008-12-31', 1) = '2008-12-30'

timestamp

from_utc_timestamp(timestamp, string timezone)

假設給定時間戳爲UTC時間,並將其轉換爲給定時區的時間戳

timestamp

to_utc_timestamp(timestamp, string timezone)

假設給定時間戳爲給定時區的時間,將其轉換爲UTC時間戳

 

條件函數

 

下表爲Hive支持的一些條件函數。

返回類型

函數名

描述

T

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

如果testCondition爲真,返回valueTrue,否則返回valueFalseOrNull

T

COALESCE(T v1, T v2, ...)

返回第一個不是NULL的v,若全部爲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=true返回b,當c=true返回d,其它返回e

 

 

字符串函數

下表爲Hive內置的字符串函數。

 

返回類型

函數名

描述

int

ascii(string str)

返回str第一個字符串的數值

string

base64(binary bin)

將二進制參數轉換爲base64字符串

string

concat(string|binary A, string|binary B...)

返回將A和B按順序連接在一起的字符串,如:concat('foo', 'bar') 返回'foobar'

array<struct<string,double>>

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

從一組標記化的句子中返回前k個文本

string

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

類似concat() ,但使用自定義的分隔符SEP

string

concat_ws(string SEP, array<string>)

類似concat_ws() ,但參數爲字符串數組

string

decode(binary bin, string charset)

使用指定的字符集將第一個參數解碼爲字符串,如果任何一個參數爲null,返回null。可選字符集爲: 'US_ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'

binary

encode(string src, string charset)

使用指定的字符集將第一個參數編碼爲binary ,如果任一參數爲null,返回null

int

find_in_set(string str, string strList)

返回str在strList中第一次出現的位置,strList爲用逗號分隔的字符串,如果str包含逗號則返回0,若任何參數爲null,返回null。如: find_in_set('ab', 'abc,b,ab,c,def') 返回3

string

format_number(number x, int d)

將數字x格式化爲'#,###,###.##',四捨五入爲d位小數位,將結果做爲字符串返回。如果d=0,結果不包含小數點或小數部分

string

get_json_object(string json_string, string path)

從基於json path的json字符串中提取json對象,返回json對象的json字符串,如果輸入的json字符串無效返回null。Json 路徑只能有數字、字母和下劃線,不允許大寫和其它特殊字符

boolean

in_file(string str, string filename)

如果str在filename中以正行的方式出現,返回true

int

instr(string str, string substr)

返回substr在str中第一次出現的位置。若任何參數爲null返回null,若substr不在str中返回0。Str中第一個字符的位置爲1

int

length(string A)

返回A的長度

int

locate(string substr, string str[, int pos])

返回substr在str的位置pos後第一次出現的位置

string

lower(string A) lcase(string A)

返回字符串的小寫形式

string

lpad(string str, int len, string pad)

將str左側用字符串pad填充,長度爲len

string

ltrim(string A)

去掉字符串A左側的空格,如:ltrim(' foobar ')的結果爲'foobar '

array<struct<string,double>>

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

從一組標記化的Returns the top-k 句子中返回前K個N-grams

string

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

返回給定URL的指定部分,partToExtract的有效值包括HOST,PATH, QUERY, REF, PROTOCOL, AUTHORITY,FILE和USERINFO。例如:  parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') 返回 'facebook.com'.。當第二個參數爲QUERY時,可以使用第三個參數提取特定參數的值,例如: parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1') 返回'v1'

string

printf(String format, Obj... args)

將輸入參數進行格式化輸出

string

regexp_extract(string subject, string pattern, int index)

使用pattern從給定字符串中提取字符串。如: regexp_extract('foothebar', 'foo(.*?)(bar)', 2) 返回'bar' 有時需要使用預定義的字符類:使用'\s' 做爲第二個參數將匹配s,'s'匹配空格等。參數index是Java正則匹配器方法group()方法中的索引

string

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

使用REPLACEMENT替換字符串INITIAL_STRING中匹配PATTERN的子串,例如: regexp_replace("foobar", "oo|ar", "") 返回'fb'

string

repeat(string str, int n)

將str重複n次

string

reverse(string A)

將字符串A翻轉

string

rpad(string str, int len, string pad)

在str的右側使用pad填充至長度len

string

rtrim(string A)

去掉字符串A右側的空格,如: rtrim(' foobar ') 返回 ' foobar'

array<array<string>>

sentences(string str, string lang, string locale)

將自然語言文本處理爲單詞和句子,每個句子在適當的邊界分割,返回單詞的數組。參數lang和local爲可選參數,例如: sentences('Hello there! How are you?') 返回( ("Hello", "there"), ("How", "are", "you") )

string

space(int n)

返回n個空格的字符串

array

split(string str, string pat)

用pat分割字符串str,pat爲正則表達式

map<string,string>

str_to_map(text[, delimiter1, delimiter2])

使用兩個分隔符將文本分割爲鍵值對。第一個分隔符將文本分割爲K-V 對,第二個分隔符分隔每個K-V 對。默認第一個分隔符爲““,第二個分隔符爲=

string

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

返回A從位置start直到結尾的子串

string

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

返回A中從位置start開始,長度爲len的子串,如: substr('foobar', 4, 1) 返回 'b'

string

translate(string input, string from, string to)

將input中出現在from中的字符替換爲to中的字符串,如果任何參數爲null,結果爲null

string

trim(string A)

去掉字符串A兩端的空格

binary

unbase64(string str)

將base64字符串轉換爲二進制

string

upper(string A) ucase(string A)

返回字符串A的大寫形式

 

 

聚合函數

 

下表爲Hive內置的聚合函數。

返回類型

函數名

描述

BIGINT

count(*)

count(expr)

count(DISTINCT expr[, expr_.])

count(*) – 返回檢索到的行的總數,包括含有NULL值的行。count(expr) – 返回expr表達式不是NULL的行的數量count(DISTINCT expr[, expr]) – 返回expr是唯一的且非NULL的行的數量

DOUBLE

sum(col)

sum(DISTINCT col)

對組內某列求和(包含重複值)或者對組內某列求和(不包含重複值)

DOUBLE

avg(col),

avg(DISTINCT col)

對組內某列元素求平均值者(包含重複值或不包含重複值)

DOUBLE

min(col)

返回組內某列的最小值

DOUBLE

max(col)

返回組內某列的最大值

DOUBLE

variance(col),

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(BIGINT col, p)

返回組內某個列精確的第p位百分數,p必須在0和1之間

array<double>

percentile(BIGINT col, array(p1 [, p2]...))

返回組內某個列精確的第p1,p2,……位百分數,p必須在0和1之間

DOUBLE

percentile_approx(DOUBLE col, p [, B])

返回組內數字列近似的第p位百分數(包括浮點數),參數B控制近似的精確度,B值越大,近似度越高,默認值爲10000。當列中非重複值的數量小於B時,返回精確的百分數

array<double>

percentile_approx(DOUBLE col, array(p1 [, p2]...) [, B])

同上,但接受並返回百分數數組

array<struct {'x','y'}>

histogram_numeric(col, b)

使用b個非均勻間隔的箱子計算組內數字列的柱狀圖(直方圖),輸出的數組大小爲b,double類型的(x,y)表示直方圖的中心和高度

array

collect_set(col)

返回消除了重複元素的數組

array

collect_list(col)

返回允許重複元素的數組

INTEGER

ntile(INTEGER x)

該函數將已經排序的分區分到x個桶中,併爲每行分配一個桶號。這可以容易的計算三分位,四分位,十分位,百分位和其它通用的概要統計

內置 Table-Generating函數(UDTF)

正常的用戶定義函數,如concat,輸入一個單行然後輸出一個單行,但table-generating函數將一個單輸入行轉換爲多個輸出行。下表爲Hive內置的table-generating函數。

返回類型

函數名

描述

N rows

explode(ARRAY)

參數列爲數組類型,將數組數據中的每個元素做爲一行返回

N rows

explode(MAP)

將輸入map中的每個鍵值對轉換爲兩列,一列爲key,另一列爲value,然後返回新行

 

inline(ARRAY<STRUCT[,STRUCT]>)

分解struct數組到表中

Array Type

explode(array<TYPE> a)

對於數組a中的每個元素,該函數產生包含該元素的行For

元組

json_tuple(jsonStr, k1, k2, ...)

參數爲一組鍵k1,k2……和JSON字符串,返回值的元組。該方法比 get_json_object 高效,因爲可以在一次調用中輸入多個鍵

元組

parse_url_tuple(url, p1, p2, ...)

該方法同parse_url() 相似,但可以一次性提取URL的多個部分,有效的參數名稱爲: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY>

N rows

posexplode(ARRAY)

行爲與參數爲數組的explode方法相似,但包含項在原始數組中的位置,返回(pos,value)的二元組

 

stack(INT n, v_1, v_2, ..., v_k)

將v_1, ..., v_k 分爲n行,每行包含n/k列,n必須爲常數

使用語法”SELECT udtf(col) AS colAlias...”有以下幾點限制:

 

  •  在SELECT中不允許再有其他表達式:不支持SELECT pageid, explode(adid_list) AS myCol...
  •  UDTF不能夠嵌套使用:不支持SELECT explode(explode(adid_list)) AS myCol...
  • 不支持GROUP BY /CLUSTER BY / DISTRIBUTE BY / SORT BY:不支持SELECT explode(adid_list) AS myCol ... GROUP BY myCol
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章