9 votes

Ruche : SELECT AS et GROUP BY

J'ai une requête Hive comme

SELECT Year, Month, Day, Hours, Minutes,
           cast((cast(Seconds as int)/15) as int)*15
AS secondMod, Count(*) AS PerCount FROM LoggerTable 
 GROUP BY Year, Month, Day, Hours, Minutes, secondMod 
ORDER BY PerCount;

la requête ci-dessus échoue avec une erreur

ÉCHEC : Erreur dans l'analyse sémantique : ligne 1:175 Alias de table ou référence de colonne non valides secondMod

LoggerTable' est une table de ruche dont toutes les colonnes sont de type chaîne.

Y a-t-il une solution de contournement pour ce problème ?

12voto

Alexey Bychkov Points 581

Essayez ça :

SELECT Year, Month, Day, Hours, Minutes, 
cast((cast(Seconds as int)/15) as int)*15 
AS secondMod, Count(*) AS PerCount FROM LoggerTable 
 GROUP BY Year, Month, Day, Hours, Minutes, 
   cast((cast(Seconds as int)/15) as int)*15
ORDER BY PerCount;

4voto

rafaelvalle Points 31

Dans Hive 0.11.0 et les versions ultérieures, les colonnes peuvent être spécifiées par leur position si hive.groupby.orderby.position.alias est réglé sur true . Veuillez confirmer si la requête suivante fonctionne pour vous.

SET hive.groupby.orderby.position.alias=true;
SELECT Year
       ,Month
       ,Day
       ,Hours
       ,Minutes
       ,cast((cast(Seconds as int)/15) as int)*15 AS secondMod
       ,count(*) AS PerCount 
FROM LoggerTable 
GROUP BY 1, 2, 3, 4, 5, 6
ORDER BY 7;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X