跳到主要内容

decode:字符解码与值映射

速查结论

decode 是 Spark SQL 中提供两种重载形式的函数:一种用于按字符集解码二进制数据,另一种用于按条件匹配返回值(类似 CASE 表达式)。

语法

-- 形式一:字符集解码
decode(bin, charset)

-- 形式二:条件值映射
decode(expr, search, result [, search, result ] ... [, default])

参数说明

参数类型说明
binBINARY待解码的二进制数据
charsetSTRING用于解码的字符集名称,如 '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真题

交流微信二维码

你可能还想看