La ruche: Somme sur un groupe déterminé (HiveQL)
J'ai une table:
key product_code cost
1 UK 20
1 US 10
1 EU 5
2 UK 3
2 EU 6
Je voudrais trouver la somme de tous les produits pour chaque groupe de "clé" et d'ajouter à chaque ligne. Par exemple pour la clé = 1, trouver la somme des coûts de tous les produits (20+10+5=35) et ensuite ajouter le résultat à toutes les lignes qui correspondent à la clé = 1. Donc résultat final:
key product_code cost total_costs
1 UK 20 35
1 US 10 35
1 EU 5 35
2 UK 3 9
2 EU 6 9
Je préfère le faire sans l'aide d'un sous-joignez-vous que ce serait inefficace. Ma meilleure idée serait d'utiliser le over
de la fonction en collaboration avec le sum
fonction, mais je ne peux pas le faire fonctionner. De mon mieux essayer:
SELECT key, product_code, sum(costs) over(PARTITION BY key)
FROM test
GROUP BY key, product_code;
Iv avait un look à la docs mais il y a tellement alambiquées, je n'ai aucune idée de la façon de travailler sur la façon de le faire. Im en utilisant la Ruche v0.12.0, HDP v2.0.6, hortonworks a distribution Hadoop.
Il donne juste une erreur de syntaxe. Je dois être en utilisant le plus de fonction dans le mauvais sens
OriginalL'auteur joshlk | 2014-08-01
Vous devez vous connecter pour publier un commentaire.
Similaire à @VB_ réponse, utilisez le
BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
déclaration.La requête HiveQL est donc:
OriginalL'auteur joshlk
Vous pouvez utiliser
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
de réaliser que sans une auto-jointure.Code comme ci-dessous:
OriginalL'auteur VB_
La fonction analytique somme donne des sommes cumulées. Par exemple, si vous avez fait:
ensuite, vous recevez:
qui, paraît-il, n'est pas ce que vous voulez.
Au lieu de cela, vous devez utiliser la fonction d'agrégation somme, combiné avec une jointure réflexive pour ce faire:
OriginalL'auteur Joe K
Le tableau ci-dessus ressemblait
L'utilisateur voulait un tableau avec le total des coûts comme suit
À cet effet, nous avons utilisé la requête suivante
So far So good.
Je veux une colonne de plus, compter le nombre d'occurences de chaque pays
À cet effet, j'ai utilisé la requête suivante
Malheureusement, ce n'est pas de travail. J'obtiens une erreur cryptique. Pour exclure une erreur dans ma requête je veux vous demander si j'ai fait quelque chose de mal.
Grâce
OriginalL'auteur Peter
Cette requête me donne un résultat parfait
select key, product_code, cost, sum(cost) over (partition by key) as total_costs from zone;
OriginalL'auteur Ashish Mohan