I would like to know what is the replacement of NULLIF
in Hive? I am using COALESCE but its not serving my requirement. My query statement is something like:
COALESCE(A,B,C) AS D
COALESCE
will return first NOT NULL value. But my A/B/C contain blank values so COALESCE is not assigning that value to D as it is considering blank as NOT NULL. But I want the correct value to be get assign to D.
In SQL I could have use COALESCE(NULLIF(A,'')......)
so it will check for blank as well. I tried CASE but it's not working.
Just use case
:
select (case when A is null or A = '' then . . . end)
This is standard SQL, so it will work in Hive and elsewhere.
For your particular problem:
select (case when A is not null and A <> '' then A
when B is not null and B <> '' then B
else C
end)
You can actually shorten this to:
select (case when A <> '' then A
when B <> '' then B
else C
end)
because NULL
values fail comparisons. I would use this version but often people learning SQL prefer the more explicit version with the not null
comparison.
NULLIF is available in Hive as of 2.3.0.
You can see it in their list of conditional functions .
Just use case syntax like following below :
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
Hope can solved your problem. Thank you..
Another HiveQL specific option is here:
create temporary macro nullify(s string) if(s = '', null, s);
--
select coalesce(nullify(A), nullify(B), nullify(C)) as D ...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.