IMPALA: Zeitlich aktuelle Zeilen übernehmen. Veraltete Duplikate entfernen.

fatony

Commander
Registriert
Dez. 2009
Beiträge
2.841
Liebe CB'ler,

aktuell habe ich die folgende Tabelle "INFO_A" in Impala SQL (Beispielausschnitt): (Fett markiert, sind doppelte ID Einträge)

ID_Person (String)Spiel (String)Kontostand (INT)Ausgang (String; Format: DD/TT/JJJJ HH:MM:SS)
N2340JTennis21512/01/2019 14:05:29
M456DFußball24511/03/2019 20:38:17
B2677KBoxen12325/02/2019 16:59:49
09LOP2Basketball9009/09/2019 12:03:55
B2677KBoxen427/02/2019 18:09:07
N2340JTennis5124/01/2019 12:04:29

Wie man sieht, sind zwei Zeilen für N2340J und B2677K (beides "ID_Person" (String)) vorhanden. In dieser Tabelle soll jedoch nur der aktuelle Wert beibehalten werden. Einzig der "Kontostand" und die "Ausgang"(szeit) sind variabel.

Mein Ziel ist die folgende Tabelle als Ergebnis zu erhalten:

ID_Person (String)Spiel (String)Kontostand (INT)Ausgang (String; Format: DD/TT/JJJJ HH:MM:SS)
N2340JTennis5124/01/2019 12:04:29
M456DFußball24511/03/2019 20:38:17
B2677KBoxen427/02/2019 18:09:07
09LOP2Basketball9009/09/2019 12:03:55


Das größte Problem an der ganzen Geschichte ist, dass die Ausgangszeit als String hinterlegt ist und mit der Impala Dokumentation komme ich nicht wirklich weit und auch nicht mit den Foren via Cast Funktion. Ganz zu schweigen auch nicht mit der normalen SQL Syntax.

Versuche wie hier...
SQL:
SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev

habe ich auch schon probiert. Impala behauptet dann, dass es die Spalte "b.rev" nicht findet.

Übertragen habe ich folgendes gemacht:
Ich habe ein Duplikat von "INFO_A" namens "INFO_B" erstellt und dann versuche ich folgenden SQL Code in der Impala Oberfläche auszuführen:

SQL:
SELECT INFO_A.ID_Person, INFO_A.rev, INFO_A.contents
FROM INFO_A
INNER JOIN (
    SELECT ID_Person, MAX(Ausgang)
    FROM INFO_A
    GROUP BY ID_Person, Spiel
) INFO_B ON INFO_A.ID_Person = INFO_B.ID_Person AND INFO_A.Ausgang = INFO_B.Ausgang

Leider erhalte ich dann den Fehler, dass IMPALA die Spalte "INFO_B.Ausgang" nicht findet. Wieso?
Und wie kann ich den String-Datum in Timestamp umwandeln?

Impala scheint das ganze eher komplizierter zu machen als die Dinge zu vereinfachen ...

Vielen lieben Dank für eure Hilfe!

LG
fatony
 
fatony schrieb:
Und wie kann ich den String-Datum in Timestamp umwandeln?
Soweit ich das sehe steht das in der Dokumentation von Impala:
to_timestamp(bigint unixtime), to_timestamp(string date, string pattern)Purpose: Converts an integer or string representing a date/time value into the corresponding TIMESTAMP value.

Vielleicht ist bei der JOIN Abfrage das "MAX" ein Problem - wenn er die Spalte nicht findet - wird denn diese überhaupt bei der einzelnen Unterabfrage "b" ausgegeben ?
 
Zurück
Oben