1. 概述 聚合统计,即对数据进行汇总和计算,以生成摘要统计信息或得到聚合结果。聚合函数通常与groupBy操作结合使用,以便在分组的数据上执行计算。 2. 函数列表 本文列表里的函数示例基于下图数据进行计算。
2.1. 常用聚合计算用途 | 函数 | 示例 | 结果 | 求和 | sum(col) try_sum(col) * | sum([expr1]) try_sum([expr1]) | 20 | |
平均值 | avg(col) mean(col) try_avg(col) * | avg([expr1]) mean([expr]) try_avg([expr]) | 3.333333 | |
|
计数 count(*):返回包含null的行数; count(col):返回col列非null的行数。 | count(col) | count(*) count([expr1]) | 7 6 | 去重计数 count_distinct是精确计算;approx_count_distinct是近似估算。 | count(distinct col) approx_count_distinct(col) * | count(distinct [expr1]) approx_count_distinct([expr1]) | 5 5 | 对计算满足特定条件的值计数 | count_if(expr) | count_if([expr1]>=3 and [expr1]<=5) | 2 | 去重求和 | sum(distinct col) | sum(distinct [expr1]) | 18 | 最大值 | max(col) | max([expr1]) | 6 | 返回与y的最大值关联的x的值 | max_by(x, y) | max_by([expr1],[Date]) | null | 最小值 | min(col) | min([expr1]) | 1 | 返回与y的最小值关联的x的值 | min_by(x, y) | min_by([expr2],[Date]) | 4 | 中位数 | median(col) | median([expr1]) | 3 | 众数,即列中最频繁的值。 | mode(col) | mode([expr1]) | 2 | 返回数据列的确切百分位数值。 百分比在0.0和1.0之间,可用于求四分位数。 | percentile(col, pct) | percentile([expr1],0.5) percentile([expr1],array(0.25,0.5,0.75)) | 3 [2.0, 3.0, 4.75] | 返回数据列的近似百分位数值。 百分比在0.0和1.0之间,可用于求四分位数。acc越高越精确,省略时默认为10000。 | approx_percentile(col, pct [, acc]) * percentile_approx(col, pct [, acc]) * | approx_percentile([expr1],0.5) | 2 | 总体标准差 | stddev_pop(col) | stddev_pop([expr1]) | 1.795055 | 样本标准差 | std(col) ; stddev(col) ; stddev_samp(col) | stddev([expr1]) | 1.966384 | 总体方差 | var_pop(col) | var_pop([expr1]) | 3.222222 | 样本方差 | var_samp(col) variance(col) | var_samp([expr1]) | 3.866667 | 返回两个数值之间的总体协方差。 | covar_pop(col1,col2) | covar_pop([expr1],[expr2]) | 0.222222 | 返回两个数值之间的样本协方差。 | covar_samp(col1,col2) | covar_samp([expr1],[expr2]) | 0.266667 | 两个数值列之间的皮尔逊相关系数 | corr(col1,col2) | corr([expr1],[expr2]) | 0.092131 |
注释*: - 包含 try 的函数,数值溢出时返回null,适用于位数较长的数值计算场景;
- 包含 approx 的函数为近似计算,通常用于大数据集,在牺牲一点精确度的情况下大幅提高计算速度。这种方法对于需要快速分析的场景特别有用,如实时数据处理或大规模数据集探索。
2.2. 数组聚合用途 | 函数 | 示例 | 结果 | 多行数据合并成一个数组,不去重 | collect_list(expr) | collect_list([expr1]) | [1, 2, 4, 6, 2, 5] | 多行数据合并成一个数组,去重 | collect_set(expr) | collect_set([expr1]) | [1, 5, 2, 6, 4] |
2.3. 逻辑判断聚合用途 | 函数 | 示例 | 结果 | 如果列 expr 中至少有一个值为true,则返回true。 | any(expr) | any( [expr1] >=3 ) | true | some(expr) | some( [expr1] is null ) | true | bool_or(expr) | bool_or( month([Date]) >1 ) | false | 如果列 expr 中所有值都为true,则返回true。 | every(expr) | every( [expr1] >=3 ) | false | bool_and(expr) | bool_and( [expr1]<10 ) | true |
3. 注意事项:- 聚合函数创建的字段,在卡片里展示为聚合度量,放入数值栏后不能选择聚合方式;
- 聚合函数不能放在维度栏中,因为聚合函数需要根据指定的维度项进行聚合;
- 聚合函数不可再嵌套聚合函数或者开窗函数,会导致语义上的混淆,BI系统也会抛出报错。
|