У меня есть таблица в Друиде, что-то вроде
Timestamp || UserId || Action
И мне нужно получить последнее Действие для каждого UserId.В MySQL я бы сделал что-то вроде
Select * from users u1 inner join (
select UserId, max(Timestamp) as maxt from users group by UserId
) u2
on u1.UserId = u2.UserId and u1.Timestamp = u2.maxt
Но Друид не может выполнять объединения и выполнять только очень простые подвыборы.
Я знаю, что «правильный» ответ, вероятно, состоит в денормализации данныхво время приема, но, к сожалению, это не вариант, так как я не «владею» частью приема.
Единственное решение, которое я до сих пор придумал, - это получить все результаты для обоих запросов в коде Java.и выполнить объединение вручную, но я столкнусь с ограничениями памяти при увеличении набора данных, как я себе представляю.
Я пытался посмотреть на материализованные представления, но похоже, что он все еще инкубируется и потребует кластера hadoop, поэтомуне очень жизнеспособен.
Я пытался сделать что-то вроде
Select * from users u1 where concat(Timestamp, UserId) in (
select concat(UserId, max(Timestamp)) from users group by UserId
)
Но это тоже не понравилось.
Есть предложения?