hive聚合函数
Posted change_world
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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字符串,返回值的元组。该方法比 |
元组 |
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聚合函数的主要内容,如果未能解决你的问题,请参考以下文章