sql - Hive 中的 CASE 语句

标签 sql 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

对我来说意义为零,而且似乎太明显了,不可能成为执行引擎中的错误。我错过了什么?

最佳答案

这都是关于 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)

关于sql - Hive 中的 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023835/

相关文章:

sql - 检测某些记录是否被排除在 INSERT INTO 操作之外

hadoop - Pig.temp.dir属性是强制性的吗?

java - 如何使用 JDBC 驱动程序 0.13.0 在 Hive 中设置 FetchSize

hadoop - 如何将 Cassandra 与 Hadoop 集成以利用 Hive

c# - 使用 C# 将 XML 文件加载到 SQL Server 表中

mysql - 性能全选择与独特选择

hadoop - SQOOP-将配置单元中的ORC格式表导出到DB2数据库

hadoop - ResourceManager卡在接受状态

java - 运行 hive 0.12 错误为 slf4j

Mysql日期范围价格