Hive中的CASE语句

Jag*_*rab 4 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;
Run Code Online (Sandbox Code Playgroud)

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

month_cd  max_month_cd  test_1  test_2
201610    null          1       1
201611    201611        1       1
Run Code Online (Sandbox Code Playgroud)

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

lef*_*oin 10

这都是关于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
Run Code Online (Sandbox Code Playgroud)

请参阅此参考:Null(SQL)