类型转换函数
功能描述
类型转换函数用于在不同数据类型之间进行转换。Spark 4.0将常用类型转换函数归类,包括显式转换、格式化转换和特殊类型转换。
函数列表
| 函数 | 描述 |
|---|---|
| cast(expr AS type) | 将表达式转换为指定类型。标准SQL类型转换。也支持 expr :: type 语法。 |
| try_cast(expr AS type) | 将表达式转换为指定类型。转换失败时返回NULL而非报错。 |
| typeof(expr) | 返回表达式的数据类型名称(DDL格式字符串)。 |
| bigint(expr) | 将值转换为BIGINT类型。 |
| binary(expr) | 将值转换为BINARY类型。 |
| boolean(expr) | 将值转换为BOOLEAN类型。 |
| date(expr) | 将值转换为DATE类型。 |
| decimal(expr) | 将值转换为DECIMAL类型。 |
| double(expr) | 将值转换为DOUBLE类型。 |
| float(expr) | 将值转换为FLOAT类型。 |
| int(expr) | 将值转换为INT类型。 |
| smallint(expr) | 将值转换为SMALLINT类型。 |
| string(expr) | 将值转换为STRING类型。 |
| timestamp(expr) | 将值转换为TIMESTAMP类型。 |
| tinyint(expr) | 将值转换为TINYINT类型。 |
示例
cast — 标准类型转换
SELECT cast('123' AS INT);
-- 123
SELECT cast(3.14 AS INT);
-- 3
SELECT cast('2024-01-01' AS DATE);
-- 2024-01-01 使用 :: 语法(PostgreSQL风格)
SELECT '10' :: INT; -- 10 SELECT '2024-01-01' :: DATE; -- 2024-01-01
try_cast — 安全类型转换
SELECT try_cast('123' AS INT);
-- 123
SELECT try_cast('abc' AS INT);
-- NULL(转换失败返回NULL,不报错)
typeof — 查看数据类型
SELECT typeof(1);
-- int
SELECT typeof('hello');
-- string
SELECT typeof(array(1, 2, 3));
-- array<int> 简写类型转换函数
SELECT int('123');
-- 123
SELECT string(3.14);
-- 3.14
SELECT date('2024-01-01');
-- 2024-01-01 注意事项
- cast 在转换失败时会报错,try_cast 在转换失败时返回NULL。
- try_cast 是Spark 3.0+新增的函数,适用于数据清洗场景,避免因个别脏数据导致整个查询失败。
- 简写类型转换函数(如 int()、string())等价于 cast(expr AS type)。
- Spark 4.0支持PostgreSQL风格的 :: 类型转换语法,如 '10' :: INT。
- typeof 返回的是DDL格式的类型字符串,可用于调试和动态schema处理。