Hive中有什么功能可以在Oracle中进行解码?

psm*_*ith 5 hive

我正在寻找一个像Oracle的DECODE那样具有tab单个列的表的字符串函数col

col
----
a
b
c
d
Run Code Online (Sandbox Code Playgroud)

用一个简单的查询:

select decode(col,'a',1,'b',2',9) dec from tab
Run Code Online (Sandbox Code Playgroud)

我希望这样的结果:

dec
---
1
2
9
9
Run Code Online (Sandbox Code Playgroud)

我在《语言手册》中找不到任何内置函数。有没有可以模拟DECODE的UDF?

我不想使用case子句。

问候
帕维尔

gob*_*s14 5

您可以编写一个嵌套if语句。

查询

select col
  , if(col='a', 1, if(col='b', 2, 9)) dec
from table
Run Code Online (Sandbox Code Playgroud)

输出

---------
col | dec
---------
 a     1
 b     2
 c     9
 d     9
Run Code Online (Sandbox Code Playgroud)


Bro*_*ale 5

如果使用扁平的 CASE WHEN THEN 表达式避免嵌套,可能更容易阅读和检查:

SELECT
  CASE 
    WHEN col = 'a' THEN 1
    WHEN col = 'b' THEN 2
    ELSE 9
  END dec
FROM tab
Run Code Online (Sandbox Code Playgroud)