为什么配置单元不能识别在选择部分中命名的别名?

ttcibm8c  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(645)

下面是一个场景:当我如下调用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'
des4xlb0

des4xlb01#

我可以在hiveselect语句中使用alias,使用backtick符号``。

SELECT COL_01 AS `Column_A`;

上述解决方案适用于hive版本1.2.1。
参考链接

nx7onnlm

nx7onnlm2#

这个 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

相关问题