8
votes

Obtenez la ligne avec une valeur maximale dans la ruche / SQL?

Je suis nouveau à ruche / SQL, et je suis coincé sur un problème assez simple. Mes données ressemblent à: xxx pré>

Je veux la ruche de retourner la ligne avec la valeur max de métro. J'ai: p> xxx pré>

qui renvoie effectivement le max (j'utilise de la distribution parce que mes valeurs sont enregistrées en tant que chaîne). ALORS: P>

FAILED: ParseException line 1:44 cannot recognize input near 'select' 'cast' '(' in expression specification


0 commentaires

4 Réponses :


0
votes

Je ne pense pas que votre sous-requête soit autorisée ...

Un look rapide ici:

https://cwiki.apache.org/confluence/display/hive/ Languageanual + sous-requêtes

états:

comme de la ruche 0.13 Certains types de sous-requêtes sont supportés dans le lieu où clause. Ce sont des requêtes où le résultat de la requête peut être traité comme une constante pour et non dans des déclarations (appelées non corrélées sous-requêtes parce que la sous-requête ne fait pas référence aux colonnes de la Querre parent):


1 commentaires

Oh ... Y a-t-il un moyen pratique autour de cela?



1
votes

Vous pouvez utiliser le collect_max code> udf de Brickhouse ( http://github.com/ klout / brickhouse ) Pour résoudre ce problème, en passant une valeur de 1, ce qui signifie que vous voulez seulement la valeur maximale unique.

select array_index( map_keys( collect_max( carrier_id, meandelay, 1) ), 0 ) from flightinfo;


0 commentaires

2
votes

Utilisez votre jointure à la place. xxx


0 commentaires

11
votes

Utilisez le Fonctions de fenêtres et d'analyses

SELECT carrier_id, meandelay, meancanceled
FROM
 (SELECT carrier_id, meandelay, meancanceled,
         rank() over (order by cast(meandelay as float) desc) as r 
  FROM table) S 
WHERE S.r = 1;


0 commentaires