2016-06-24 11 views
2

in HIVE der folgenden Tabelle vor:ein Verfahren benötigen Daten für die Datensätze filtern mehr als einen Datensatz in HIVE für eine ID mit

Hier muss ich die einzigartige Kombination von Haushalts herauszufinden, Fahrzeug und Kunde. Aber die Bedingung ist dies. Wenn für den gleichen Haushalt und Fahrzeug gibt es zwei verschiedene Kunden mit der Rolle DRIVER und Besitzer, muss ich EIGENTÜMER betrachten. Aber wenn für einen einzelnen Haushalt und ein Fahrzeug nur ein einziger Kunde vorhanden ist und wenn dieser Kunde FAHRER oder BESITZER ist, muss ich diesen Datensatz ebenfalls berücksichtigen. Ich brauche dafür eine HIVE-Abfrage.

Das Ergebnis sollte wie unten Tabelle sein:

jemand kann mir helfen hier draußen?

Antwort

0

Dies kann nützlich sein, versuchen Sie dies: -

select Household,Vehicle,Customer,Cust_role from (select *,row_number() 
over (partition by Household,Vehicle order by Cust_role desc) rn from test_table) tableouter where rn=1; 

Ausgang: -

I  1  A  OWNER 
II  2  C  DRIVER 
III  3  D  OWNER 
IV  4  E  OWNER 
+0

Dank viel Freund !! – Vaishak

+0

Wenn Sie denken, diese Antwort hat Ihre Frage richtig gelöst oder beantwortet. Bitte markieren Sie es als akzeptiert, indem Sie auf das Häkchen neben der Antwort klicken. siehe: [Wie funktioniert die Annahme einer Antwort?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)? für mehr Informationen – syadav

0

Im Grunde, was Sie suchen, ist eine Top-N-Fensterfunktion Abfrage, mit N in Ihrem Fall ist 1. Sie können eine Hive-Abfrage mit RANK-Funktion mit einer zusätzlichen Klausel "LIMIT 1" schreiben, um zu erreichen, was Sie wollen. Rufen Sie Rank function in Hive auf, um loszulegen.

Sie können ein einfaches Beispiel finden Sie hier - Hive - top n records within a group