Запрос друида для получения "последнего" значения из третьего столбца - PullRequest
0 голосов
/ 10 июля 2019

У меня есть таблица в Друиде, что-то вроде

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
)

Но это тоже не понравилось.

Есть предложения?

...