Hive: Wie man eine SELECT-Abfrage für die Ausgabe der eindeutige Primärschlüssel mit HiveQL?
Habe ich Folgendes schema dataset, das will ich verwandeln in eine Tabelle, die exportiert werden können, um SQL. Ich bin mit HIVE
. Eingabe wie folgt
call_id,stat1,stat2,stat3
1,a,b,c,
2,x,y,z,
3,d,e,f,
1,j,k,l,
Den output-Tabelle haben muss, um call_id
als seine primäre Schlüssel, also muss er einzigartig sein. Die output-schema werden sollte
call_id,stat2,stat3,
1,b,c, or (1,k,l)
2,y,z,
3,e,f,
Das problem ist, dass wenn ich das Stichwort DISTINCT
im HIVE
Abfrage, die DISTINCT
gilt für alle Spalten zusammen. Ich möchte die DISTINCT-Vorgang nur die call_id
. Etwas auf den Linien der
SELECT DISTINCT(call_id), stat2,stat3 from intable;
Dies ist jedoch nicht gültig in HIVE
(ich bin nicht sehr versiert in SQL, entweder).
Nur rechtliche Fragen zu sein scheint
SELECT DISTINCT call_id, stat2,stat3 from intable;
Aber dieser liefert mehrere Zeilen mit gleichen call_id
wie die anderen Spalten sind andere und die Zeile auf die gesamte unterscheidbar ist.
HINWEIS: Es ist keine arithmetische Beziehung zwischen a,b,c,x,y,z, etc. Also irgendeinen trick der Mittelwertbildung oder Summierung ist nicht lebensfähig.
Irgendwelche Ideen, wie ich dies tun kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine schnelle Idee,nicht die beste, aber die Arbeit-
hive - >create table temp1(a int,b string);
hive - >insert overwrite table temp1
wählen Sie call_id,max(concat(stat1,'|',stat2,'|',stat3)) von intable Gruppe von call_id;
hive - >einfügen, überschreiben Tabelle intable
wählen Sie eine,split(b,'|')[0],split(b,'|')[1],split(b,'|')[2] temp1;
Aber wie wird dann Hive wissen, welche Zeile zu beseitigen?
Ohne zu wissen, die Datenmenge /Größe des stat-Felder haben Sie die folgende Abfrage kann der job: