【发布时间】:2021-01-08 20:42:29
【问题描述】:
我在 Druid 中有一张桌子,类似于
Timestamp || UserId || Action
我需要为每个 UserId 获取最新的 Action。在 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
)
但它也不喜欢那样。
有什么建议吗?
【问题讨论】:
标签: druid apache-calcite