2017-07-26 2 views
0

Ich habe die folgenden Spalten in einer Hive-Tabelle. Alle Spalten haben den Datentyp string. Jede Zeile ist unterschiedlich, da die anderen Spalten (7 oder 8 weitere Spalten) mindestens einen eindeutigen Wert enthalten. Ich möchte eine Hive-Abfrage schreiben, um die Datensätze auszuwählen, in denen datetime >= 2017-05 und Datensätze fallen, wo datetime < 2017-05. Hier sollte die Ausgabe von Zeilen mit orderid - 101, 102, 103 sein. Alle Datensätze mit orderid100 sollten gelöscht werden. Hinweis: Orderid 100 hat 1 Datensatz mit datetime> 2017-05. Trotzdem sollte es gelöscht werden, da es mindestens 1 Datensatz mit Datum < 2017-05 hat. Orderid könnte jede 12- bis 16-stellige Nummer sein. Die Tabelle hat Milliarden von Datensätzen.Hive Date Comparison

Kann jemand helfen, eine Bienenstockabfrage dafür zu schreiben? Danke im Voraus.

datetime   orderid  other columns 
2017-04-30 17:10:05 100 
2017-03-05 12:25:30 100 
2017-05-09 08:18:44 100 
2017-05-15 04:21:43 101 
2017-06-20 11:20:10 101 
2017-05-22 05:09:35 102 
2017-07-01 06:25:30 102 
2017-06-25 08:24:40 103 
2017-05-11 11:50:49 103 

Output Ergebnis:

datetime   orderid  other columns 

2017-05-15 04:21:43 101 
2017-06-20 11:20:10 101 
2017-05-22 05:09:35 102 
2017-07-01 06:25:30 102 
2017-06-25 08:24:40 103 
2017-05-11 11:50:49 103 

Antwort

0
select * 

from (select * 
       ,min(datetime) over (partition by orderid) as min_datetime 

     from mytable 
     ) t 

where min_datetime >= '2017-05' 
; 
+0

Danke, Dudu Mark. – Murali

+0

Hallo Dudu, aus irgendwelchen Gründen bekomme ich nicht die richtigen Ergebnisse von Ihrer Abfrage ... also habe ich modifiziert und die richtigen Ergebnisse bekommen ... Ich habe die modifizierte Abfrage gepostet ... danke. – Murali

0

select * aus (select min (Datumzeit) als date_time, orderid aus Mytable Gruppe von orderid) t wo date_time> = '2017-05 % ';

+0

Es gibt keine Möglichkeit, die von Ihnen angeforderten Ausgabeergebnisse zurückzugeben –