HiveQL函数9—聚合函数(UDAF)


说明:本文中示例使用了TPC-DS中的表

1.count(*), count(expr), count(DISTINCT expr[, expr…])

返回值:BIGINT
功能:
count(*) 统计总行数,包括含有NULL值的行
count(expr) - 统计所提供表达式为non-NULL的行数
count(DISTINCT expr[, expr]) - 统计所提供expr表达式为非non-NULL且去重后的行数。
示例:

> select count(*) as f1 from store_sales limit 1
+-----------+
|    f1    |
+-----------+
| 28800991  |
+-----------+

> select count(ss_ticket_number>100) as f1 from store_sales limit 1
+-----------+
|    f1     |
+-----------+
| 28800991  |
+-----------+

2.sum(col), sum(DISTINCT col)

返回值:DOUBLE
功能:返回组中元素的和或组中列元素去重后的和
示例:

> select sum(ss_ticket_number) as f1 from store_sales limit 1
+-----------------+
|       f1       |
+-----------------+
| 34562754977298  |
+-----------------+

> select sum(DISTINCT ss_ticket_number) as f1 from store_sales limit 1
+----------------+
|      f1       |
+----------------+
| 2880001200000  |
+----------------+

3.avg(col), avg(DISTINCT col)

返回值:DOUBLE
功能:返回组中元素的平均值或组中列元素去重后的平均值
示例:

select avg(ss_ticket_number) as f1 from store_sales limit 1
+---------------------+
|         f1          |
+---------------------+
| 1200054.3653965935  |
+---------------------+

select avg(DISTINCT ss_ticket_number) as f1 from store_sales limit 1
+------------+
|     f1     |
+------------+
| 1200000.5  |
+------------+

4.min(col)

返回值:DOUBLE
功能:返回组中元素的最小值
示例:

select min(ss_ticket_number) as f1 from store_sales limit 1
+-----+
| f1  |
+-----+
| 1   |
+-----+

5.max(col)

返回值:DOUBLE
功能:返回组中元素的最大值
示例:

select max(ss_ticket_number) as f1 from store_sales limit 1
+----------+
|    f1    |
+----------+
| 2400000  |
+----------+

6.variance(col), var_pop(col)

返回值:DOUBLE
功能:返回组中数值列的方差
示例:

select variance(ss_ticket_number) as f1 from store_sales limit 1
+-----------------------+
|          f1           |
+-----------------------+
| 4.800567791493703E11  |
+-----------------------+

补充:方差的概念参考https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE/3108412#2

7.var_samp(col)

返回值:DOUBLE
功能:返回组中数值列的无偏性样本方差。
示例:

select var_samp(ss_ticket_number) as f1 from store_sales limit 1
+------------------------+
|           f1           |
+------------------------+
| 4.8005679581743494E11  |
+------------------------+

补充:样本方差参考https://baike.baidu.com/item/%E6%A0%B7%E6%9C%AC%E6%96%B9%E5%B7%AE/8991877#3

8.stddev_pop(col)

返回值:DOUBLE
功能:返回组中数值列的标准差。
示例:

select stddev_pop(ss_ticket_number) as f1 from store_sales limit 1
+-------------------+
|        f1         |
+-------------------+
| 692861.298637303  |
+-------------------+

补充:标准差参考https://baike.baidu.com/item/%E6%A0%87%E5%87%86%E5%B7%AE

9.stddev_samp(col)

返回值:DOUBLE
功能:返回组中数值列的无偏性样本标准差。
示例:

select stddev_samp(ss_ticket_number) as f1 from store_sales limit 1
+--------------------+
|         f1         |
+--------------------+
| 692861.3106657314  |
+--------------------+

补充:样本标准差参考https://baike.baidu.com/item/%E6%A0%B7%E6%9C%AC%E6%A0%87%E5%87%86%E5%B7%AE

10.covar_pop(col1, col2)

返回值:DOUBLE
功能:返回组中数值列的协方差
示例:

select covar_pop(ss_sold_date_sk, ss_sold_time_sk) as f1 from store_sales limit 1
+---------------------+
|         f1          |
+---------------------+
| -4161.133752742163  |
+---------------------+

补充:协方差参考https://baike.baidu.com/item/%E5%8D%8F%E6%96%B9%E5%B7%AE

11.covar_samp(col1, col2)

返回值:DOUBLE
功能:返回组中一对数值列的样本协方差
示例:

select covar_samp(ss_sold_date_sk, ss_sold_time_sk) as f1 from store_sales limit 1
+---------------------+
|         f1          |
+---------------------+
| -4161.133907682913  |
+---------------------+

12.corr(col1, col2)

返回值:DOUBLE
功能:返回组中一对数值列的皮尔逊相关系数
示例:

select corr(ss_sold_date_sk, ss_sold_time_sk) as f1 from store_sales limit 1
+------------------------+
|           f1           |
+------------------------+
| -6.212088770354935E-4  |
+------------------------+

补充:皮尔逊相关系数参考https://baike.baidu.com/item/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0/12712835?fromtitle=Pearson%20Correlation%20Coefficients&fromid=2903702

13.percentile(BIGINT col, p)

返回值:DOUBLE
功能:返回组中列的精确的第p百分位数(不适用于浮点类型)。p必须介于0和1之间。注意:只有整数值才能计算出确切的百分位数。如果输入为非整数,则使用PERCENTILE_APPROX
示例:

select percentile(ss_sold_time_sk,0.9) as f1 from store_sales limit 1
+----------+
|    f1    |
+----------+
| 69302.0  |
+----------+

补充:百分位数参考https://baike.baidu.com/item/%E7%99%BE%E5%88%86%E4%BD%8D%E6%95%B0

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

返回值:array<double>
功能:返回组中列的第p1,p2等一系列的精确百分位数(不适用于浮点类型)。pi必须介于0和1之间。注意:只有整数值才能计算出确切的百分位数。如果输入为非整数,则使用PERCENTILE_APPROX
示例:

select percentile(ss_sold_time_sk,array(0.5,0.6)) as f1 from store_sales limit 1
+--------------------+
|         f1         |
+--------------------+
| [51009.0,54026.0]  |
+--------------------+

15.percentile_approx(DOUBLE col, p [, B])

返回值:DOUBLE
功能:返回组中列的第p的近似百分位数(也包括浮点类型)。参数B控制B以内存为代价的近似精度。更高的值产生更好的近似值,默认值是10000。当col中不同值的数目小于B时,将给出精确的百分位数值。
示例:

select percentile_approx(ss_sold_time_sk,0.5) as f1 from store_sales limit 1
+--------------------+
|         f1         |
+--------------------+
| 51006.77779116558  |
+--------------------+

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

返回值:array<double>
功能:返回组中列的第p1,p2等一系列的近似百分位数(也包括浮点类型)。参数B控制B以内存为代价的近似精度。更高的值产生更好的近似值,默认值是10000。当col中不同值的数目小于B时,将给出精确的百分位数值。
示例:

select percentile_approx(ss_sold_time_sk,array(0.5,0.6),20000) as f1 from store_sales limit 1
+---------------------------------------+
|                  f1                   |
+---------------------------------------+
| [51008.12716479356,54024.2662495729]  |
+---------------------------------------+

17.regr_avgx(independent, dependent)

返回值:double
功能:线性回归函数,从所有非 NULL (Y, X) 值对返回 x 值的平均值,相当于 avg(dependent)(从Hive2.2.0开始)。
示例:

> select regr_avgx(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+---------------------+
|         f1          |
+---------------------+
| 3597.8381188743324  |
+---------------------+

18.regr_avgy(independent, dependent)

返回值:double
功能:线性回归函数,从所有非 NULL (Y, X) 值对返回 y 值的平均值,相当于avg(independent)(从Hive2.2.0开始)。
示例:

> select regr_avgy(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+--------------------+
|         f1         |
+--------------------+
| 960706.4812228354  |
+--------------------+

19.regr_count(independent, dependent)

返回值:double
功能:线性回归函数,返回输入中非 NULL (Y, X) 值对的数量。仅当给定对中的 X 和 Y 都为非 NULL 时,才应在所有线性回归计算中使用此观测(从Hive2.2.0开始)。
示例:

> select regr_count(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+-----------+
|    f1     |
+-----------+
| 26856664  |
+-----------+

20.regr_intercept(independent, dependent)

返回值:double
功能:线性回归函数,计算可最佳拟合非独立和独立变量的线性回归线的 y 截距(从Hive2.2.0开始)。
示例:

> select regr_intercept(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+--------------------+
|         f1         |
+--------------------+
| 960535.9918867329  |
+--------------------+

21.regr_r2(independent, dependent)

返回值:double
功能:线性回归函数,计算回归线的确定系数(也称为 R 平方或适配度统计)(从Hive2.2.0开始)。
示例:

> select regr_r2(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+------------------------+
|           f1           |
+------------------------+
| 3.1563100103224406E-8  |
+------------------------+

22.regr_slope(independent, dependent)

返回值:double
功能:线性回归函数,计算拟合到非 NULL 数对的线性回归线的斜率(从Hive2.2.0开始)。
示例:

select regr_slope(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+---------------------+
|         f1          |
+---------------------+
| 0.0473866056435987  |
+---------------------+

23.regr_sxx(independent, dependent)

返回值:double
功能:线性回归函数,返回 (Y, X) 对中 x 值的平方和(从Hive2.2.0开始)。
示例:

select regr_sxx(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+------------------------+
|           f1           |
+------------------------+
| 1.1603130829852834E14  |
+------------------------+

24.regr_sxy(independent, dependent)

返回值:double
功能:线性回归函数,返回 (Y, X) 对集中两项积和的差值(从Hive2.2.0开始)。
示例:

select regr_sxy(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1;
+-----------------------+
|          f1           |
+-----------------------+
| 5.498329848653175E12  |
+-----------------------+

25.regr_syy(independent, dependent)

返回值:double
功能:线性回归函数,返回 (Y, X) 对中 y 值的平方和(从Hive2.2.0开始)。
示例:

select regr_syy(ss_cdemo_sk,ss_hdemo_sk) as f1 from store_sales limit 1
+------------------------+
|           f1           |
+------------------------+
| 8.2548034693822259E18  |
+------------------------+

26.histogram_numeric(col, b)

返回值:array<struct {‘x’,‘y’}>
功能:使用b个非均匀间隔的存储箱计算组中数值列的直方图。输出是一个大小为b的双值(x,y)坐标数组,分别表示箱的中心和高度。

> select histogram_numeric(ss_cdemo_sk,5) as f1 from store_sales limit 1;
+----------------------------------------------------+
|                         f1                         |
+----------------------------------------------------+
| [{"x":201652.68480577026,"y":5704765.0},{"x":600796.1760687291,"y":5686302.0},{"x":975781.8771361593,"y":5174143.0},{"x":1345327.445891793,"y":5497374.0},{"x":1729487.277896256,"y":5442704.0}] |
+----------------------------------------------------+

27.collect_set(col)

返回值:array
功能:返回删除了重复元素的对象集
示例:

> select collect_set(ss_cdemo_sk) as f1 from store_sales limit 1;
--返回数据量太大,省略结果

28.collect_list(col)

返回值:array
功能:返回包含重复元素的对象列表
示例:

> select collect_list(ss_cdemo_sk) as f1 from store_sales limit 1;
--返回数据量太大,省略结果

29.ntile(INTEGER x)

返回值:INTEGER
功能:把有序的数据集合平均分配到指定的数量x个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。可以方便地计算三位数、四位数、十位数、百分位数和其他常见的汇总统计数据。
使用语法是:ntile (num) over ([partition_clause] order_by_clause) as your_bucket_num

示例:

> select cr_returned_date_sk,cr_returned_time_sk,ntile(10) over (order by cr_returned_time_sk desc) as f1 from catalog_returns limit 10+----------------------+----------------------+-----+
| cr_returned_date_sk  | cr_returned_time_sk  | f1  |
+----------------------+----------------------+-----+
| 2451421              | 86399                | 1   |
| 2452035              | 86399                | 1   |
| 2452017              | 86399                | 1   |
| 2451016              | 86399                | 1   |
| 2452240              | 86399                | 1   |
| 2452333              | 86398                | 1   |
| 2451486              | 86398                | 1   |
| 2451214              | 86398                | 1   |
| 2451165              | 86398                | 1   |
| 2452758              | 86398                | 1   |
+----------------------+----------------------+-----+

示例参考https://blog.csdn.net/zhangxianx1an/article/details/80609514

参考

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)
https://www.cnblogs.com/MOBIN/p/5618747.html#7
http://dcx.sybase.com/1101/zh/dbusage_zh11/ug-olap-s-6410540.html
http://dcx.sap.com/1101/zh/dbusage_zh11/ug-olap-s-51258144.html

发布了57 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/104065989
今日推荐