【问题标题】:NULL check in HIVEHIVE 中的 NULL 检查
【发布时间】:2018-08-25 18:56:47
【问题描述】:

我在 Hive 查询中遇到了一个奇怪的行为。在基于输入参数插入值时,我将属性设置为 NULL。当我执行计数时

select count(id) from hive_table where val1 is NULL;

我得到 0 作为结果。但我知道大约有 7.5 K 记录已设置为 NULL。而下面的查询返回准确的结果

select count(id) from hive_table where trim(val1) is NULL;

我使用的是 Apache Hive 1.2 版和 Hortonworks Hadoop 2.7。任何想法为什么会发生这种情况。

【问题讨论】:

  • 你是如何插入 NULL 的?您说“我将属性设置为 NULL。”,请给我们看这段代码。
  • NULL 作为 val1, ...

标签: hadoop hive


【解决方案1】:

count 忽略 null 值,这就是为什么你得到 0 作为输出。你应该计算行数。

select count(*) from hive_table where val1 is NULL;

编辑:我想您将空字符串解释为nulls。试试这个来检查。

select sum(cast(trim(val1)='' as int)) as empty_str_count
,sum(cast(val1 is null as int)) as null_count
from hive_table 

【讨论】:

  • 实际上计数在不为空的 id 上。我在第一次编辑中错过了。
【解决方案2】:

我不知道为什么第二个有效。但如果你想计算NULL 值,请使用:

select count(*)
from hive_table
where val1 is NULL;

【讨论】:

    【解决方案3】:

    您可以尝试另一种方法从 hive 中查找 Null 记录数,

    select count(id) from hive_table where length(val1)=0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多