在Hive中是否有类似于Oracle中的解码功能?

时间:2015-04-10 07:53:35

标签: hive

我正在寻找一个像Oracle的DECODE一样工作的字符串函数 使表tab包含一列col

col
----
a
b
c
d

使用简单的查询:

select decode(col,'a',1,'b',2',9) dec from tab

我希望得到这样的结果:

dec
---
1
2
9
9

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

我不想使用case条款。

问候
的Pawel

2 个答案:

答案 0 :(得分:4)

您可以编写嵌套的if语句。

<强>查询

select col
  , if(col='a', 1, if(col='b', 2, 9)) dec
from table

<强>输出

---------
col | dec
---------
 a     1
 b     2
 c     9
 d     9

答案 1 :(得分:1)

使用扁平CASE THEN表达式时,可能更容易阅读和检查是否避免嵌套:

SELECT
  CASE 
    WHEN col = 'a' THEN 1
    WHEN col = 'b' THEN 2
    ELSE 9
  END dec
FROM tab