Как я могу использовать row_number в запросе Hive, чтобы получить последний логин пользователя? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть этот запрос, который работает нормально

Таблица журнала выглядит следующим образом

reportid, timestamp, userid

SELECT
  reportid,
  b.email
FROM
  logs
  JOIN mongo.user b on a.userid = b.id
WHERE
  a.dt >= date_sub(current_date, 14)
GROUP BY
  reportid,
  b.email

Результат будет примерно таким

reportid, email
1, xxx@xxx.com
1, xxx1@xxx.com

Тем не менее, я хочу, чтобы результат был просто

reportid, email
1, xxx1@xxx.com

Это только на основе отметки времени.Я узнал о row_number, но когда я добавил это

row_number() over (partition by userid order by timestamp desc)

, я получаю эту ошибку

Ошибка при компиляции оператора: FAILED: SemanticException Не удалось разбитьОконные вызовы в группы.Как минимум 1 группа должна зависеть только от входных столбцов.Также проверьте наличие циклических зависимостей.Основная ошибка: org.apache.hadoop.hive.ql.parse.SemanticException: строка 7:34 Выражение отсутствует в ключе GROUP BY 'userid'

Я просто хочу использовать идентификатор пользователя, который обращался к отчету последнимна основе отметки времени

1 Ответ

0 голосов
/ 09 июня 2018

Если вы ищете последний идентификатор пользователя, обращающийся к отчету, то отсортируйте записи по убыванию отметки времени и получите первую строку, используя limit

select userid, b.email
from  logs a
join mongo.user b on a.userid = b.id
where  a.dt >= date_sub(current_date, 14)
sort by timestamp desc 
limit 1

Если вы хотите получить список пользователейи их последние отметки времени доступа к отчетам, тогда вам нужно дать имя столбцу row_number() и использовать его, чтобы получить 1 строку для каждой группы идентификаторов пользователей.

select userid,email
from
(
    select userid, b.email, row_number() over (partition by userid order by timestamp desc) as r_no
    from  logs a
    join mongo.user b on a.userid = b.id
    where  a.dt >= date_sub(current_date, 14)
) t
where t.r_no=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...