2015-10-09 1 views
3

Я хотел бы знать, что такое замена NULLIF в Hive? Я использую COALESCE, но это не соответствует моему требованию. Мое заявление запрос что-то вроде:Что такое замена NULLIF в Hive?

COALESCE(A,B,C) AS D 

COALESCE возвратит первый NOT NULL значение. Но мой A/B/C содержит пустые значения, поэтому COALESCE не присваивает этому значению значение D, поскольку оно рассматривает пробел как NOT NULL. Но я хочу, чтобы правильное значение было присвоено D.

В SQL я мог бы использовать COALESCE(NULLIF(A,'')......), так что он будет проверять и на пустой. Я попробовал CASE, но он не работает.

ответ

6

Просто используйте case:

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

Это стандартный SQL, так что он будет работать в улье и в других местах.

Для конкретной задачи:

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.

+0

Большое спасибо за вашу очень быструю помощь ... :) – Shan