目录
- 前言
- 函数介绍
-
- 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。它不能用于字符串。
- 语法
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函数实现。