跳到主要内容

cardinality:获取数组/Map大小

速查结论

cardinality(expr) 是 Spark SQL 中用于返回数组或 Map 的元素个数的函数。

语法

cardinality(expr)

参数说明

参数类型说明
exprARRAY 或 MAP要计算大小的数组或 Map

返回值

返回数组或 Map 中的元素个数,类型为 INT。

  • 如果设置了 spark.sql.legacy.sizeOfNull 为 false 或 spark.sql.ansi.enabled 为 true,且输入为 null,则函数返回 null。
  • 否则,对于 null 输入,函数返回 -1。在默认设置下,函数对 null 输入返回 -1。

示例

> SELECT cardinality(array('b', 'd', 'c', 'a'));
4
> SELECT cardinality(map('a', 1, 'b', 2));
2

常见报错与避坑指南

  • null 输入返回值因配置而异:在默认设置下,cardinality(null) 返回 -1,而非 null。这与大多数函数的 null 传播行为不同。如果需要统一使用 null 语义,请设置 spark.sql.legacy.sizeOfNull 为 false,或使用 array_size(仅限数组类型,null 输入返回 null)。
  • 与 array_size 的区别cardinality 同时支持数组和 Map 类型;array_size 仅支持数组类型。如果明确操作数组,array_size 的语义更清晰(null 输入始终返回 null)。
  • Map 的计数单位:对于 Map 类型,cardinality 返回的是键值对的数量,而非键或值的独立计数。

Since: 1.5.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看