hive-sql finden Sie die neuesten Datensatz

dem Tisch ist:

create table test (
id string,
name string,
age string,
modified string)

Daten wie diese:

id    name   age  modifed
1     a      10   2011-11-11 11:11:11
1     a      11   2012-11-11 12:00:00
2     b      20   2012-12-10 10:11:12
2     b      20   2012-12-10 10:11:12
2     b      20   2012-12-12 10:11:12
2     b      20   2012-12-15 10:11:12

Ich möchte den aktuellen Datensatz(jede Spalten-id,name,Alter,modifiziert) group by id,wie die oben angeführten Daten,das richtige Ergebnis ist:

1     a      11   2012-11-11 12:00:00
2     b      20   2012-12-15 10:11:12

Ich dies so tun:

insert overwrite table t 
select b.id, b.name, b.age, b.modified 
from (
        select id,max(modified) as modified 
        from test 
        group by id
) a 
left outer join test b on (a.id=b.id  and a.modified=b.modified);

Diese sql kann das richtige Ergebnis,aber bei der Masse von Daten,es läuft langsam.

**Gibt es eine Möglichkeit, dies zu tun, ohne left-outer-join? **

InformationsquelleAutor der Frage qiulp | 2012-11-23

Schreibe einen Kommentar