什么是Hive中的NULLIF替换?

时间:2015-10-09 18:21:07

标签: sql hive hiveql hadoop2

我想知道Hive中NULLIF的替换是什么?我正在使用COALESCE,但它不符合我的要求。我的查询语句类似于:

COALESCE(A,B,C) AS D

COALESCE将首先返回NOT NULL值。但是我的A / B / C包含空值,因此COALESCE没有将该值赋给D,因为它将空白视为NOT NULL。但我希望将正确的值分配给D。

在SQL中,我可以使用COALESCE(NULLIF(A,'')......),因此它也会检查空白。我试过CASE,但它没有用。

3 个答案:

答案 0 :(得分:7)

只需使用case

select (case when A is null or A = '' then . . . end)

这是标准的SQL,因此它可以在Hive和其他地方使用。

针对您的特定问题:

select (case when A is not null and A <> '' then A
             when B is not null and B <> '' then B
             else C
        end)

您实际上可以将其缩短为:

select (case when A <> '' then A
             when B <> '' then B
             else C
        end)

因为NULL值无法进行比较。我会使用这个版本,但是经常学习SQL的人更喜欢使用not null比较的更明确的版本。

答案 1 :(得分:1)

另一个HiveQL专用选项在这里:

create temporary macro nullify(s string) if(s = '', null, s);
--
select coalesce(nullify(A), nullify(B), nullify(C)) as D ...

答案 2 :(得分:0)

仅用例语法如下:

select
     coalesce(
              case when A = '' then NULL else A end
              ,case when B = '' then NULL else B end
              ,case when C = '' then NULL else C end
             ) as D
 from myTable

希望可以解决您的问题。 谢谢你。