2014-09-25 88 views
7

以下是這種情況:當我如下調用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' 

回答

20

where子句的select子句前進行評估,這就是爲什麼你不能引用您的where子句中選擇別名。

但是,您可以引用派生表中的別名。

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 

如果我沒記錯的話,你可以參照別名havinghaving cnt >= 2

+1

真棒東西模糊樹 – Wanderer 2015-04-29 18:04:50

+1

事實上,這不是通常的情況下,但與蜂巢,你可以在'having'引用的別名。 – tokland 2016-11-25 12:32:15

0

我能在我的Hive select語句中使用反斜槓符號``使用別名。

SELECT COL_01 AS `Column_A`; 

上述解決方案適用於Hive版本1.2.1。

reference link