【问题标题】:is there any function in Hive similiar to decode in Oracle?Hive 中是否有任何类似于 Oracle 中解码的功能?
【发布时间】:2015-04-10 07:53:34
【问题描述】:

我正在寻找一个像 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 子句。

问候
帕维尔

【问题讨论】:

    标签: hive


    【解决方案1】:

    您可以编写一个嵌套的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
    

    【讨论】:

      【解决方案2】:

      如果您通过使用平面 CASE WHEN THEN 表达式来避免嵌套,可能会更易于阅读和检查:

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

      【讨论】:

      • 我想这是最好的选择,易于阅读。第三种方法是用 Java 开发 UDF,但要权衡维护自定义代码。
      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2021-04-11
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多