Voici le scénario: lorsque j'appelle hql comme suit, il me dit qu'il ne peut pas trouver d'alias pour 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)
Ce problème est le même que lorsque j'essaie d'utiliser count(*) as cnt
. Quelqu'un pourrait-il me donner un indice sur la façon d'utiliser l'alias dans la clause where? Merci beaucoup!
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'
La clause where
est évaluée avant la clause select
, c'est pourquoi vous ne pouvez pas faire référence à des alias sélectionnés dans votre clause where.
Vous pouvez cependant vous référer aux alias d'une table dérivée.
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;
Note: une manière plus efficace d'écrire la dernière requête serait
select user, count(*) as cnt from rank_test group by user
having count(*) >= 2
Si je me souviens bien, vous pouvez vous référer à l'alias dans having
c'est-à-dire having cnt >= 2
J'ai pu utiliser Alias dans ma déclaration de sélection Hive en utilisant le symbole de backtick ``.
SELECT COL_01 AS `Column_A`;
La solution ci-dessus a fonctionné pour Hive version 1.2.1.