ho seguente tabella in alveareHive ottenendo n record nel Gruppo dal interrogazione
user-id, nome utente, utente-indirizzo, clic, impressioni, pagina-id, pagina-nome
I bisogno di scoprire i primi 5 utenti [id-utente, nome-utente, indirizzo-utente] per click per ogni pagina [id-pagina, nome-pagina]
Capisco che dobbiamo prima raggruppare per [pagina- id, nome-pagina] e all'interno di ogni gruppo che voglio ordinare [clic, impressioni] desc e quindi emettere solo i primi 5 utenti [user-id, user-name, user-address] per ogni pagina ma trovo difficile costruire la query.
Come possiamo farlo utilizzando HIve UDF?
Ciao Maxime, Ci scusiamo per ti dà fastidio come questo. Sto anche avendo il problema simile. Ho postato su SO, ma non ho avuto una buona risposta dato che sto lavorando con Hive e HiveQL è nuovo per me. [http://stackoverflow.com/questions/11405446/find-10-latest-record-for-each-buyer-id-for-yesterdays-date](http://stackoverflow.com/questions/11405446/find- 10-ultima-record per-ogni-acquirente-id-per-ieri-oggi). Sarà di grande aiuto per me. – ferhan
Ho solo messo in ore facendo questo lavoro ma non ha funzionato. Il bug è che ti stai prima classificando e poi facendo DISTRIBUIRE BY e SORT BY. Invece dovresti applicare il rank in una query esterna e usare DISTRIBUTE BY e SORT BY in una query interna. Ad esempio, selezionare ID pagina, ID utente, clic FROM (ID pagina SELECT, ID utente, rank (ID utente) come ranking, clic FROM (SELECT * FROM mytable DISTRIBUTE BY ID-id, user-id SORT PER ID-id, id-utente, clicca DESC) a) b WHERE rank <5 ORDER BY id-page, rank; –
Confermato che @HimanshuGahlot è corretto. La risposta ha un * BUG *! Devi usare rank() in una query esterna e usare DISTRIBUTE/SORT BY nella query interna! –