cardinality:获取数组/Map大小
速查结论
cardinality(expr) 是 Spark SQL 中用于返回数组或 Map 的元素个数的函数。
语法
cardinality(expr)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | ARRAY 或 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真题
