Hive中的CASE语句

时间:2016-12-07 17:34:23

标签: hadoop hive case hiveql

好的,我有一个以下代码来标记具有二进制标志的tabl中具有最高month_cd的记录:

Select t1.month_cd, t2.max_month_cd
  ,CASE WHEN t2.max_month_cd != null then 0 else 1 end test_1
  ,CASE WHEN t2.max_month_cd = null then 0 else 1 end test_2
from source t1
Left join (
  Select 
    MAX(month_cd) as max_month_cd 
  From source 
) t2 
on t1.month_cd = t2.max_month_cd;

对我来说似乎很直接,但返回的结果是:

month_cd  max_month_cd  test_1  test_2
201610    null          1       1
201611    201611        1       1

对我来说没有任何意义,并且似乎太明显不能成为执行引擎中的错误。我错过了什么?

1 个答案:

答案 0 :(得分:6)

这是关于NULL概念的全部内容。

由于Null不是任何数据域的成员,因此它不被视为"值",而是表示缺少值的标记(或占位符)。因此,与Null的比较永远不会导致True或False,但总是在第三个逻辑结果Unknown中。 NULL没什么,没有对象。所以,没有什么不能等于NULL或其他东西。在SQL中,有IS NULLIS NOT NULL条件用于测试空值。

在CASE中,逻辑表达式的结果未知,因此分配了ELSE值。

更正版本:

CASE WHEN t2.max_month_cd IS NOT null then 0 else 1 end test_1,
CASE WHEN t2.max_month_cd IS null     then 0 else 1 end test_2

请参阅此参考:Null (SQL)