【问题标题】:Coalesce in Hive returns nullHive 中的合并返回 null
【发布时间】:2019-08-27 13:59:00
【问题描述】:

我想取第一个非缺失值:

它不能正常工作

,coalesce(var1,var2,var3) 

虽然

var1=null
var2=null
var3=variable

由于合并,我得到了 null。

【问题讨论】:

    标签: sql hive coalesce


    【解决方案1】:

    两种可能性。首先是三个都是null。您可以通过添加第四个默认值来测试它是否被选中。

    我怀疑是第二种可能性——null 真的是'null'。如果是这样,coalesce() 将无法直接工作。

    如果是这种情况,您可以使用nullif()case 表达式:

    coalesce(case when var1 <> 'null' then var1 end), 
             case when var2 <> 'null' then var2),
             var3) 
    

    【讨论】:

    • 如果 null 真的是 'null',你不认为 COALESCE 会返回 'null' 而不是 null。
    • 我收到错误:SemanticException [错误 10011]:第 9:18 行无效函数 'nullif':28:27,org.apache.hive.service.cli.operation.Opera
    • @CharlottePanais, nullif() 是几种 SQL 方言中CASE 表达式的简写。在 Hive 中,使用 COALESCE(CASE WHEN var1 = 'null' THEN NULL ELSE var1 END,CASE WHEN var2 = 'null' THEN NULL ELSE var2...etc. 你会明白为什么简写很好,但是由于 Hive 不支持快捷方式,所以功能是一样的。
    • 似乎合并中的可变顺序确实很重要。当我编译 coalesce(var2,var3,var1) 时,我得到了 var3(正确),当我编译 coalesce(var3,var1,var2) 时,它也可以正常工作(提供者 var3)。为什么会这样?
    • 更重要的是,函数 nvl 也取决于顺序。当我编译 nvl(nvl(var1,var2),var3) 时我有另一个结果,当我编译 nvl((var3,var2),var1) 时我有另一个结果。为什么???
    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2015-07-15
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多