Mam poniższej tabeli w chrząszczaHive uzyskanie najwyższej rekordy nw grupy przez zapytania
user-ID, User-Name, łatwość adresowej, kliknięcia, wyświetlenia, strona-id, strona-name
I musisz znaleźć 5 najlepszych użytkowników [identyfikator użytkownika, nazwę użytkownika, adres użytkownika] przez kliknięcia dla każdej strony [id-strony, nazwa-strony]
Rozumiem, że musimy najpierw pogrupować według [page- id, nazwa-strony] iw ramach każdej grupy chcę zamówić przez [kliknięcia, wyświetlenia], a następnie wyemitować tylko 5 najlepszych użytkowników [identyfikator użytkownika, nazwę użytkownika, adres użytkownika] dla każdej strony, ale napotykam na trudności skonstruuj zapytanie.
Jak możemy to zrobić za pomocą HIVE UDF?
Hi Maxime, przepraszam za przeszkadza Ci tak. Mam podobny problem. Napisałem na SO, ale nie mam żadnej dobrej odpowiedzi, ponieważ pracuję z Hive i HiveQL jest dla mnie nowy. [http://stackoverflow.com/questions/11405446/find-10-latest-record-for-each-buyer-id-for-yesterdays-date](http://stackoverflow.com/questions/11405446/find- 10 ostatnich rekordów dla każdego kupującego, id-in-yesterdays-date). To mi bardzo pomoże. – ferhan
Po prostu poświęciłem godziny na wykonanie tej pracy, ale to nie zadziałało. Błąd polega na tym, że najpierw dokonujesz rankingu, a następnie wykonujesz DISTRIBUTE BY i SORT BY BY. Zamiast tego powinieneś zastosować rangę w zewnętrznej kwerendzie i użyć DISTRIBUTE BY i SORT BY BY w wewnętrznej kwerendzie. Na przykład SELECT id-strony, user-id, kliknięcia FROM (SELECT id-strony, user-id, ranga (user-id) jako rang, kliknie FROM (SELECT * FROM mytable DISTRIBUTE BY id-strony, user-id SORT BY id-strony, id-użytkownika, klika DESC) a) b WHERE pozycja <5 ORDER BY id-page, ranga; –
Potwierdzono, że @HimanshuGahlot jest poprawny. Odpowiedź ma * BUG *! Musisz użyć rank() w zewnętrznej kwerendzie i użyj DISTRIBUTE/SORT BY w wewnętrznej kwerendzie! –