я следующую таблицу в улейHive получать верхние п записей в группе по запросу
идентификатор пользователя, имя пользователя, пользователь-адрес, клики, показы, стр-ид, страница имен
I вам нужно найти 5 лучших пользователей [user-id, user-name, user-address] по щелчкам для каждой страницы [page-id, page-name]
Я понимаю, что нам нужно сначала сгруппировать [page- id, page-name] и внутри каждой группы я хочу упорядочить [клики, показы] desc, а затем испустить только 5 лучших пользователей [user-id, user-name, user-address] для каждой страницы, но мне трудно постройте запрос.
Как мы можем это сделать, используя HIve UDF?
Привет Maxime, Извините, что беспокою вас, как это. У меня также есть аналогичная проблема. Я опубликовал на SO, но у меня нет хорошего ответа, поскольку я работаю с Hive, и HiveQL для меня новичок. [http://stackoverflow.com/questions/11405446/find-10-latest-record-for-each-buyer-id-for-yesterdays-date](http://stackoverflow.com/questions/11405446/find- 10-последний рекорд-для-каждый-покупатель-ID для-вчерашних-настоящего времени). Это будет очень полезно для меня. – ferhan
Я просто потратил часы на выполнение этой работы, но это не сработало. Ошибка в том, что вы первый рейтинг, а затем выполняете DISTRIBUTE BY и SORT BY. Вместо этого вы должны применять ранжирование во внешнем запросе и использовать DISTRIBUTE BY и SORT BY во внутреннем запросе. Например, идентификатор страницы SELECT, идентификатор пользователя, клики FROM (идентификатор страницы SELECT, идентификатор пользователя, ранг (идентификатор пользователя) в качестве ранга, клики FROM (SELECT * FROM mytable DISTRIBUTE BY page-id, user-id SORT BY page-id, идентификатор пользователя, клики DESC) a) b WHERE rank <5 ORDER BY page-id, rank; –
Подтверждено, что @HimanshuGahlot является правильным. Ответ имеет * BUG *! Вы должны использовать rank() во внешнем запросе и использовать DISTRIBUTE/SORT BY во внутреннем запросе! –