【问题标题】:Druid query to get "latest" value from third column德鲁伊查询从第三列获取“最新”值
【发布时间】: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


    【解决方案1】:

    最新(expr)

    返回expr 的最新值,它必须是数字。如果expr 来自与时间戳列的关系(如德鲁伊 datasource) 然后 "latest" 是最后遇到的值 聚合的所有值的最大总时间戳。如果expr 不是来自与时间戳的关系,那么它只是 遇到的最后一个值。

    https://druid.apache.org/docs/0.20.0/querying/sql.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多