hadoop - tables - ¿Por qué no puede colmenar reconocer alias nombrado en la parte seleccionada?
hiveql (1)
La cláusula where
se evalúa antes que la cláusula select
, que es la razón por la que no puede hacer referencia a seleccionar alias en su cláusula where.
Sin embargo, puede referirse a los alias de una tabla derivada.
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;
Nota al margen: una forma más eficiente de escribir la última consulta sería
select user, count(*) as cnt from rank_test group by user
having count(*) >= 2
Si recuerdo correctamente, puede referirse al alias en having
es decir, having cnt >= 2
Este es el escenario: cuando invoco hql de la siguiente manera, me dice que no puede encontrar alias para 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)
Este problema es el mismo que cuando intento usar count(*) as cnt
. ¿Alguien podría darme alguna pista sobre cómo usar alias en where clause? ¡Muchas gracias!
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''