1. 程式人生 > >Hive內建聚合函式

Hive內建聚合函式

聚合函式

下表為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)

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