【问题标题】:Hadoop SQL - Impala and a calculated fieldHadoop SQL - Impala 和计算字段
【发布时间】:2018-07-06 04:35:28
【问题描述】:

我对 Hadoop 非常陌生,并尝试像在 SQL 中一样使用“计算”​​字段:

SELECT "one" as test, 
    CASE WHEN calculated test = "one" then "This works"
    else "Nope" 
    end as checker

但这似乎会产生错误:

AnalysisException:第 1 行中的语法错误:...est,CASE WHEN 计算测试 =“一个”然后“这项工作...... ^ 遇到:IDENTIFIER 预期:AND、BETWEEN、DIV、ILIKE、IN、IREGEXP、IS、LIKE、NOT、OR、 REGEXP, RLIKE, THEN CAUSED BY: 异常: 语法错误

难道不能在 Hadoop 中使用“计算”​​字段吗?如果是这样,我做错了什么?如果我遗漏了一些明显的东西,再次道歉,这是 Hadoop 的新手。

【问题讨论】:

  • 用单引号代替双引号。
  • 我很感激,但不幸的是没有效果。请注意,我正在尝试使用计算字段,“计算”一词是导致问题的原因,否则它运行正常。
  • 。 . calculated 是我从 SAS proc sql 环境中知道的。我不记得在任何其他数据库中看到过它。

标签: sql hadoop impala


【解决方案1】:

事实并非如此。 calculated 不是 Impala SQL 的保留字。

您应该改用ifcase

这里有一些例子,来自文章Impala Conditional Functions: IF, CASE, COALESCE, DECODE, NVL, ZEROIFNULL

select if(1=1,'TRUE','FALSE') as IF_TEST;

...

select case x when 1 then 'one'
 when 2 then 'two' 
 when 0 then 'zero' 
 else 'out of range' 
 end
 from t1;

参考资料:

【讨论】:

  • 谢谢,但重点是创建值,然后在同一语句中引用它。 SELECT 'one' as test, if(test = 'one', 'TRUE', 'FALSE') as checker ...但是在这种情况下找不到变量“test”。
  • 我对此表示怀疑。 Impala 仅支持 SQL 的一个子集,并且主要用于 Hive 兼容性,因为这是主要用例。看看stackoverflow.com/questions/24873380/…。这可能会有所帮助。
  • 谢谢,事实证明我的问题更多是基于我对 SQL 的了解,然后是对 Hadoop 的了解。本周对它进行了更多探索,嵌套 select 语句非常适合我尝试做的事情。
【解决方案2】:

以下查询可能在 hive/impala 中按照您想要的方式工作

select 
    case when test="one" then "this works"
    else "nope" end as checker 
    from 
    (select "one" as test) a;

【讨论】:

  • 很高兴报告这完全符合我的期望。我只能达到一个层次,但将代码减半是一个很大的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多