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) |
返回組內某個列精確的第p位百分數,p必須在0和1之間 |
array<double> |
percentile(BIGINT col, array(p1 |
返回組內某個列精確的第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字符串,返回值的元組。該方法比 |
元組 |
parse_url_tuple(url, p1, p2, ...) |
該方法同 |
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
hive聚合函數