跳到主要内容

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(*) vs count(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真题

交流微信二维码

你可能还想看