decode:字符解码与值映射
速查结论
decode 是 Spark SQL 中提供两种重载形式的函数:一种用于按字符集解码二进制数据,另一种用于按条件匹配返回值(类似 CASE 表达式)。
语法
-- 形式一:字符集解码
decode(bin, charset)
-- 形式二:条件值映射
decode(expr, search, result [, search, result ] ... [, default])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| bin | BINARY | 待解码的二进制数据 |
| charset | STRING | 用于解码的字符集名称,如 'utf-8' |
| expr | 任意 | 待匹配的表达式 |
| search | 任意 | 与 expr 比较的值 |
| result | 任意 | 匹配成功后返回的结果 |
| default | 任意 | 可选,无匹配项时返回的默认值。如果省略则返回 NULL |
示例
-- 形式一:字符集解码
SELECT decode(encode('abc', 'utf-8'), 'utf-8');
abc
-- 形式二:条件值映射
SELECT decode(2, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic');
San Francisco
SELECT decode(6, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic');
Non domestic
SELECT decode(6, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle');
NULL
SELECT decode(null, 6, 'Spark', NULL, 'SQL', 4, 'rocks');
SQL
常见报错与避坑指南
- NULL 匹配:在条件值映射形式中,
decode可以匹配 NULL 值(如示例中decode(null, ..., NULL, 'SQL', ...)返回 'SQL'),这与CASE表达式的行为有所不同。 - 缺少默认值:如果所有 search 值都不匹配且未提供 default 参数,函数返回 NULL,不会报错。
- 字符集支持:字符集解码形式依赖 JVM 支持的字符集。传入不支持的字符集名称将导致运行时错误。
Since: 3.2.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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