【问题标题】:IS NOT NULL in Cloudera-Impala在 Cloudera-Impala 中不为空
【发布时间】:2016-04-04 11:34:38
【问题描述】:

我是 Impala 的新手,我正在尝试编写一个查询,其中一个字段是 SUM(X),我想在该字段上设置一个条件。 当我在 MySQL 中使用该查询时,“HAVING SUM(X) IS NOT NULL”效果很好 - 有谁知道 Impala 中的等价物是什么?

我尝试了几种方法,这就是我得到的:

  • "HAVING SUM(X) IS NOT NULL" --> AnalysisException: No matching function with signature: isnull(STRING)。
  • “HAVING SUM(X) NOT NULL”-> AnalysisException:第 93 行中的语法错误:HAVING SUM(X) NOT NULL ^ 遇到:NULL 预期:BETWEEN、IN、LIKE、REGEXP、RLIKE 导致:异常:语法错误

如果有人能回答我,我将不胜感激...谢谢!

【问题讨论】:

  • 请发布您正在运行的查询的示例

标签: hadoop cloudera impala having-clause


【解决方案1】:

你试过IF条件函数吗?

HAVING IF(SUM(X) = NULL, FALSE, TRUE)

文档: http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_conditional_functions.html

【讨论】:

  • 您永远不应该直接将 = 与 NULL 进行比较。无论 SUM(X) 实际上是什么,这可能总是产生错误。例如 select IF( NULL = NULL, 1, 0 ) 产生 0 而不是 1 如你所料。另一方面,select IF( NULL != NULL, 1, 0 ) 也产生 0 而不是前者的否定......select if( NULL is NULL, 1, 0 ), if( NULL is not NULL, 1, 0 ) 按预期工作我在这里谈论的是 Impala 的具体情况。这是独立于实现的,但我相信 Impala 在这方面的行为遵循 SQL 标准。
  • 顺便说一下,在 Impala 中,IF( expr, false, true ) 的简单替代方案就是 NOT( expr )
猜你喜欢
  • 2018-05-12
  • 2015-06-27
  • 1970-01-01
  • 2013-05-10
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多