count:计数行数
速查结论
count(*) 是 Spark SQL 中用于统计行数的聚合函数,支持 count(*)、count(expr) 和 count(DISTINCT expr) 三种形态。
语法
count(*) - 返回检索到的总行数,包括包含 null 的行。
count(expr[, expr...]) - 返回表达式列表中所有表达式都不为 null 的行数。
count(DISTINCT expr[, expr...]) - 返回表达式列表中唯一且非 null 的行数。
参数说明
| 参数 | 说明 |
|---|---|
| * | 统计所有行,包括 NULL |
| expr | 任意表达式。当 expr 不为 NULL 时才计入 |
| DISTINCT expr | 对 expr 先去重,统计唯一且非 NULL 的行数 |
示例
> SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col);
4
> SELECT count(col) FROM VALUES (NULL), (5), (5), (20) AS tab(col);
3
> SELECT count(DISTINCT col) FROM VALUES (NULL), (5), (5), (10) AS tab(col);
2
常见报错与避坑指南
count(*)vscount(col)的区别:count(*)统计所有行(包括全 NULL 行),而count(col)只统计 col 不为 NULL 的行。这是初学者最容易混淆的地方。count(DISTINCT)的性能:count(DISTINCT col)需要额外的 shuffle 和去重操作,数据量大时性能远低于count(*)。对于近似场景,可考虑使用approx_count_distinct。count(1)与count(*)等价:在 Spark SQL 中,count(1)和count(*)执行计划完全相同,没有性能差异。
Since: 1.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
