Hive窗口函数、聚合函数和Table-Generating函数

以下资料来源于网络,我只是整理了下:

hive聚合函数:

函数名:count(*)、count(expr)、count(DISTINCT expr[, expr_.])
描述:返回检索到的行的总数,包括含有NULL值的行。count(expr) – 返回expr表达式不是NULL的行的数量count(DISTINCT expr[, expr]) – 返回expr是唯一的且非NULL的行的数量

函数名:sum(col)、sum(DISTINCT col)
描述:对组内某列求和(包含重复值)或者对组内某列求和(不包含重复值)

函数名:avg(col)、avg(DISTINCT col)
描述:对组内某列元素求平均值者(包含重复值或不包含重复值)

函数名:min(col)
描述:返回组内某列的最小值

函数名:max(col)
描述:返回组内某列的最大值

函数名:variance(col)、var_pop(col)
描述:返回组内某个数字列的方差

函数名:var_samp(col)
描述:返回组内某个数字列的无偏样本方差

函数名:stddev_pop(col)
描述:返回组内某个数字列的标准差

函数名:stddev_samp(col)
描述:返回组内某个数字列的无偏样本标准差

函数名:covar_pop(col1, col2)
描述:返回组内两个数字列的总体协方差

函数名:covar_samp(col1, col2)
描述:返回组内两个数字列的样本协方差

函数名:corr(col1, col2)
描述:返回组内两个数字列的皮尔逊相关系数

函数名:percentile(BIGINT col, p)
描述:返回组内某个列精确的第p位百分数,p必须在0和1之间

函数名:percentile(BIGINT col, array(p1 [, p2]…))
描述:返回组内某个列精确的第p1,p2,……位百分数,p必须在0和1之间

函数名:percentile_approx(DOUBLE col, p [, B])
描述:返回组内数字列近似的第p位百分数(包括浮点数),参数B控制近似的精确度,B值越大,近似度越高,默认值为10000。当列中非重复值的数量小于B时,返回精确的百分数

函数名:percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B])
描述:同上,但接受并返回百分数数组

函数名:histogram_numeric(col, b)
描述:使用b个非均匀间隔的箱子计算组内数字列的柱状图(直方图),输出的数组大小为b,double类型的(x,y)表示直方图的中心和高度

函数名:collect_set(col)
描述:返回消除了重复元素的数组

函数名:collect_list(col)
描述:返回允许重复元素的数组

函数名:ntile(INTEGER x)
描述:该函数将已经排序的分区分到x个桶中,并为每行分配一个桶号。这可以容易的计算三分位,四分位,十分位,百分位和其它通用的概要统计

内置 Table-Generating函数(UDTF)

正常的用户定义函数,如concat,输入一个单行然后输出一个单行,但table-generating函数将一个单输入行转换为多个输出行。下表为Hive内置的table-generating函数。

函数名:explode(ARRAY)
描述:参数列为数组类型,将数组数据中的每个元素做为一行返回

函数名:explode(MAP)
描述:将输入map中的每个键值对转换为两列,一列为key,另一列为value,然后返回新行

函数名:inline(ARRAY)
描述:分解struct数组到表中

函数名:explode(array 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:

函数名: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窗口函数

Hive窗口函数可以计算一定范围内、一定值域内、或者一段时间内的累积和以及移动平均值等;可以结合聚集函数SUM() 、AVG()等使用;可以结合FIRST_VALUE() 和LAST_VALUE(),返回窗口的第一个和最后一个值。

  • 如果只使用partition by子句,未指定order by的话,我们的聚合是分组内的聚合.
  • 使用了order by子句,未使用window子句的情况下,默认从起点到当前行.
    window子句:
  • PRECEDING:往前
  • FOLLOWING:往后
  • CURRENT ROW:当前行
  • UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点

你可能感兴趣的:(Hive窗口函数、聚合函数和Table-Generating函数)