spark sql 中LENGTH 和 SIZE 函数介绍

目录

  • 前言
  • 函数介绍
    • LENGTH函数
    • SIZE函数
  • 实战

前言

我将为您详细介绍 Spark SQL 中的 LENGTH 和 SIZE 函数。它们虽都用于"计量",但处理的数据类型和目的截然不同。

简单的区分是:
LENGTH 用于处理字符串,计算其长度(字符数)。
SIZE 用于处理集合类型(如数组Array、映射Map),计算其元素或键值对的数量。

函数介绍

LENGTH函数

1.语法

LENGTH 函数(或 len,两者同义)用于计算一个字符串的长度,返回字符的个数

sql 复制代码
LENGTH(str) 

2.示例

sql 复制代码
select 
LENGTH('Spark') as ln1	 --5
,LENGTH('')  as ln2--0
,LENGTH(NULL) as ln3 --null

SIZE函数

SIZE 函数用于计算集合数据类型(Array, Map)中的元素个数或键值对数量5。它不能用于字符串。

  1. 语法
sql 复制代码
SIZE(collection)

2.示例

sql 复制代码
select  
SIZE(ARRAY(1, 5, 9)) as sz1 ---3
,SIZE(ARRAY())	as sz2 --0
,SIZE(MAP('k1', 'v1', 'k2', 'v2')) as sz3 ---2
,SIZE(NULL)	as sz5 ---- -1

备注:

size(null)值为-1,可以将 -1 理解为一个明确的标记,表示"无法计算大小的无效输入或缺失值"

实战

现在有一字段:str,以逗号分割,想统计str逗号分开的个数

sql 复制代码
----方法1
with temp_1 as (
	select array('a','b','d','efg') as str
)
select 
size(str) as sz --4
from  temp_1

--方法2
with temp_0 as (
select  'a,b,d,efg' as str
)

select size(split(str, ',')) as sz ---4
from  temp_0

---方法3
with temp_0 as (
select  'a,b,d,efg' as str
)

SELECT 
  LENGTH(str) - LENGTH(REPLACE(str, ',', '')) +1 as ln ---4 
FROM temp_0;

分析:方法1和方法2,都是通过size函数来实现,需要先转换成数组,方法3是通过length函数实现。

相关推荐
Decay__18 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
Decay__1 天前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
吃一碗粉只付一碗钱1 天前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
sun03221 天前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
l1t1 天前
DeepSeek总结的AI 智能体应该用哪种语言搜索其记忆:SQL 还是 SPARQL?
数据库·人工智能·sql
geovindu1 天前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
l1t1 天前
DeepSeek总结的从 SQL 桥梁到智能体基础设施:Hex 的 DuckDB 实践
数据库·sql·duckdb
正儿八经的少年1 天前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis
Decay__1 天前
03_MySQL 存储引擎与存储管理 —— InnoDB 深入、表空间/ibd、binlog/redo/undo 与双写缓冲
运维·数据库·sql·mysql·架构