数据分析平台Druid实施建议

问题描述 投票:0回答:0

我需要使用德鲁伊制作某种分析平台。我想征求社区关于德鲁伊是否适合的想法以及实现此类想法的某种想法。 我有一个通过 RabbitMQ 接收消息的系统。我可能收到的示例消息如下:

session_id: 123e4567-e89b-12d3-a456-556642440000
type: NORMAL or DLR_INTERIM or DLR (as final)
direction: IN or OUT
customer_id: 1
seizures: 1
units: 1
datetime: 2022-11-08 12:00:00
status: OK
dlr_status: NONE

Final table 需要包含至少具有以下字段的所有记录(您可能建议的任何额外的帮助都很好)

DateTime InCustomer OutCustomer InSeizures OutSeizures InUnits OutUnits InStatus OutStatus InDlrStatus OutDlrStatus

系统的工作方式如下(注意这个过程中的每个session id都是一样的)(还要注意所有的消息都是通过Kafka发送给druid的):

  1. 我得到没有状态和 DLR 状态的 IN 记录。它需要是 以某种方式立即登录
  2. 我得到 OUT 记录,直到其中一个最终成功。每个失败的记录都需要记录。一旦我终于得到了锻炼记录,我需要“update”IN记录,所以最后一个不再重要。
  3. 现在我得到 DLR INTERIM OUT,所以我需要再次将 OutDlrStatus 更新为 ENROUTE
  4. 现在我也得到了 DLR INTERIM IN,所以我将 InDrlStatus 更新为例如 ENROUTE
  5. 现在我得到 DLR OUT,所以我将 OutDlrStatus 更新为 DELIEVERED
  6. 现在我得到 DLR IN,所以我将 InDlrStatus 更新为 DELIEVERED,例如

看看我怎么说更新 - 所以基本上如果我得到两个失败的记录(第 2 步)并且第三个成功,我需要一个将返回如下内容的查询:

DateTime InCustomer OutCustomer InSeizures OutSeizures InUnits OutUnits InStatus OutStatus InDlrStatus OutDlrStatus
time     1          3           1          3           1       1        OK       OK        DELIEVERED  DELIEVERED
failed1t 1          1           0          1           0       1        NONE     RSYSERR   NONE        NONE
failed2t 1          2           0          1           0       1        NONE     RSYSERR   NONE        NONE

据我了解,在德鲁伊中没有“更新”,尤其是在 Streaming 模式下。据我所知,我可能只需要添加新记录,但是在执行查询时,只需为该会话(或在本例中为时间范围)获取最后一个记录,对吗?

所以我要寻找的是一种实时存储和“更新”这些数据的方法,以及一个最终输出我想要的结果的 SQL 查询(例如上表中的那个)。

我不确定我是否能够正确解释所有内容,但我希望您至少对要求有所了解,当然,请随时在评论中要求任何进一步的说明。

database apache database-design aggregate-functions druid
© www.soinside.com 2019 - 2024. All rights reserved.