我有一个内部构建的数字商务系统,并且运行良好。我们现在希望实施 OLAP 来为我们的客户提供高级报告和 BI 功能。
在寻找所需的组件时,我遇到了几种“不可变”数据存储,它们似乎是数据仓库的流行选择。我正在考虑 Apache Druid,因为它似乎与 Metabase(或其他类似工具)等可视化工具配合得很好。
我无法弄清楚如何处理这样一个不可变存储中的记录更新。与任何订单管理系统一样,我们系统中的订单也会在其生命周期内进行更新(状态、行项目、数量等)。在这种情况下,如何使用不可变存储?
即使我要使用星型模式之类的东西,我也可以看到事实表和维度表都需要更新。例如,如果销售记录为总收入事实,则金额可能需要更新,或者订单可能会被取消,商品可能会发生变化等。
我能想到的唯一方法是仅在事务关闭(即冻结)后将事务推送到数据仓库。在这种情况下,处理中订单的所有指标和报告都必须基于主数据库(又名 OLTP DB)(这违背了 Druid 的“实时分析”功能)。
这是唯一的出路吗?有更好的方法吗?
已在此处询问并部分回答了这个问题。如果我必须为订单总金额、单个行项目等维护单独的查找表,那么那里提到的方法可能会变得笨拙,因为它们都可能在订单生命周期过程中发生变化。
P.S:我在here发布了同样的问题,首先才意识到 Apache Druid 推荐 Stackoverflow。如果这种双重发布不合时宜,那么模组可以存档这个问题。
Druid的很多实现都有类似的情况。 有两种方法可以解决这些更新:
REPLACE INTO tableX OVERWRITE WHERE <time condition>
SELECT <your fields with or without transformations>
FROM TABLE(EXTERN( <the source of your data for reingestion>))
PARTITIONED BY <segment granularity>