Apache Arrow DataFusion 聚合函数完全指南
概述
Apache Arrow DataFusion 是一个高性能的查询引擎,提供了丰富的聚合函数来处理数据集。聚合函数是数据分析中不可或缺的工具,它们能够对一组值进行计算并返回单个结果。本文将全面介绍 DataFusion 支持的各种聚合函数,包括基本统计函数、位运算函数、字符串处理函数以及高级统计分析函数。
基础聚合函数
计数与统计
count
函数
用于计算非空值的数量,是数据分析中最常用的聚合函数之一。
-- 计算某列非空值的数量
SELECT count(column_name) FROM table_name;
-- 计算所有行数(包括空值)
SELECT count(*) FROM table_name;
avg
/mean
函数
计算数值列的平均值,这两个函数是等价的。
SELECT avg(salary) FROM employees;
SELECT mean(salary) FROM employees;
sum
函数
计算数值列的总和。
SELECT sum(revenue) FROM sales;
max
和 min
函数
分别返回列中的最大值和最小值。
SELECT max(temperature), min(temperature) FROM weather_data;
布尔聚合
bool_and
和 bool_or
函数
用于布尔值的聚合运算:
bool_and
:当所有非空值都为 true 时返回 truebool_or
:当任意非空值为 true 时返回 true
-- 检查所有产品是否都有库存
SELECT bool_and(in_stock) FROM products;
-- 检查是否有任何产品缺货
SELECT bool_or(NOT in_stock) FROM products;
位运算聚合
DataFusion 提供了三种位运算聚合函数:
bit_and
:按位与运算bit_or
:按位或运算bit_xor
:按位异或运算
-- 计算权限掩码的公共部分
SELECT bit_and(permission_mask) FROM user_permissions;
高级聚合函数
数组与字符串聚合
array_agg
函数
将多行数据聚合成一个数组,支持排序和去重。
-- 简单的数组聚合
SELECT array_agg(product_name) FROM products;
-- 带排序的数组聚合
SELECT array_agg(product_name ORDER BY price DESC) FROM products;
-- 去重并排序
SELECT array_agg(DISTINCT category ORDER BY category) FROM products;
string_agg
函数
将字符串列的值连接成一个字符串,可指定分隔符。
-- 基本用法
SELECT string_agg(name, ', ') FROM employees;
-- 带排序的去重连接
SELECT string_agg(DISTINCT department, '|' ORDER BY department) FROM employees;
分位数统计
median
函数
计算中位数,对于数据分析非常有用。
-- 计算工资中位数
SELECT median(salary) FROM employees;
窗口函数相关聚合
first_value
和 last_value
函数
获取分组中的第一个和最后一个值。
-- 获取每个部门最早入职的员工
SELECT department,
first_value(employee_name ORDER BY hire_date)
FROM employees
GROUP BY department;
nth_value
函数
获取分组中指定位置的值。
-- 获取每个部门工资第二高的员工
SELECT department,
nth_value(employee_name, 2 ORDER BY salary DESC)
FROM employees
GROUP BY department;
统计函数
方差与标准差
DataFusion 提供了多种方差计算函数:
var
/var_samp
/var_sample
:样本方差var_pop
/var_population
:总体方差stddev
/stddev_samp
:样本标准差stddev_pop
:总体标准差
-- 计算工资的样本方差和总体标准差
SELECT var(salary), stddev_pop(salary) FROM employees;
协方差与相关性
covar
/covar_samp
和 covar_pop
函数
分别计算样本协方差和总体协方差。
-- 计算广告支出与销售额的协方差
SELECT covar(ad_spend, sales) FROM marketing_data;
corr
函数
计算两个变量的皮尔逊相关系数。
-- 计算温度与冰淇淋销量的相关性
SELECT corr(temperature, ice_cream_sales) FROM sales_data;
线性回归函数
DataFusion 提供了一组完整的线性回归分析函数:
regr_avgx
和regr_avgy
:计算自变量和因变量的平均值regr_count
:计算用于回归的数据点数量regr_intercept
:计算回归线截距regr_r2
:计算决定系数 R²regr_slope
:计算回归线斜率regr_sxx
、regr_sxy
、regr_syy
:计算各种平方和
-- 完整的线性回归分析
SELECT
regr_slope(y, x) AS slope,
regr_intercept(y, x) AS intercept,
regr_r2(y, x) AS r_squared
FROM experiment_data;
使用技巧与最佳实践
- 性能考虑:对于大数据集,
approx_median
可能比精确的median
更高效 - 空值处理:大多数聚合函数会忽略 NULL 值,使用
count(*)
可以包含 NULL 值 - 内存使用:
array_agg
和string_agg
可能消耗较多内存,对大结果集要谨慎使用 - 组合使用:聚合函数可以与其他 SQL 功能如 GROUP BY、HAVING 等组合使用
-- 复杂聚合示例
SELECT
department,
avg(salary) AS avg_salary,
median(salary) AS median_salary,
string_agg(DISTINCT job_title, '|') AS job_titles
FROM employees
GROUP BY department
HAVING count(*) > 5;
总结
Apache Arrow DataFusion 提供了丰富的聚合函数,从基本的计数求和到高级的统计分析功能。这些函数使得在 DataFusion 中进行复杂的数据分析变得简单高效。掌握这些聚合函数的使用方法,能够大大提升数据处理的效率和分析的深度。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考