为什么不能识别选择部分中命名的别名?

时间:2014-09-25 00:47:52

标签: hadoop hive hql

以下是该场景:当我按如下方式调用hql时,它告诉我它无法找到u1的别名。

hive> select user as u1, url as u2 from rank_test where u1 != "";
FAILED: SemanticException [Error 10004]: Line 1:50 Invalid table alias or column reference 'u1': (possible column names are: user, url)

此问题与我尝试使用count(*) as cnt时的问题相同。任何人都可以给我一些关于如何在where子句中使用别名的提示吗?非常感谢!

hive> select user, count(*) as cnt from rank_test where cnt >= 2 group by user;
FAILED: ParseException line 1:58 missing EOF at 'where' near 'user'

2 个答案:

答案 0 :(得分:27)

where子句之前评估select子句,这就是为什么你不能在where子句中引用select别名的原因。

但是,您可以从派生表中引用别名。

select * from (
  select user as u1, url as u2 from rank_test
) t1 where u1 <> "";

select * from (
  select user, count(*) as cnt from rank_test group by user
) t1 where cnt >= 2;

旁注:编写最后一个查询的更有效方法是

select user, count(*) as cnt from rank_test group by user
having count(*) >= 2

如果我没记错的话,您可以参考having中的别名,即having cnt >= 2

答案 1 :(得分:2)

我可以使用反引号符号``。

在我的Hive select语句中使用Alias
SELECT COL_01 AS `Column_A`;

上述解决方案适用于Hive 1.2.1版。

reference link