更新仓库事实 table 中的事实 table 如果它代表流程

Updating fact table in warehouse fact table if it represents the process

我正在设计数据仓库结构和ETL过程。

我已经确定 'purchase' 事实 table,它将包含用户完成的所有购买。

问题是,用户必须在这个过程中做很多事情:

  1. 订阅时事通讯(无需注册,可选步骤)
  2. 注册他的账号
  3. 购买某物

在控制面板上显示订阅、注册、购买的用户数量和转化率非常重要。

我创建了以下事实 table(还有其他内容,为了更清楚,我跳过了它们):

subscription_date
account_id
purchase_date

我的想法是,如果有人订阅但没有注册,则只会填写 subscription_date,其余的将为空。如果他订阅并注册 - subscription_date 和 account_id 已填写。如果他完成整个过程,将填写所有三个字段。

问题是,用户可以在第 1 天订阅,第 2 天注册,第 3 天购买。 我正在使用 AWS 胶水来创建 ETL 过程。一切正常 - 它正在从多个数据库 table 中获取记录(订阅、帐户、购买),将它们组合在一起并插入购买 table。不过我不知道如何处理更新。

如果用户在第 1 天订阅,ETL 作业将运行并插入此记录。如果用户在第 2 天注册并在第 3 天进行购买,则不会更新此行。那里也没有添加新记录。

这个问题我能想到两个解决方案:

  1. 将事实 table 拆分为三个不同的事实 table 并在填充仪表板时加入它们(为此我正在使用 quicksight)。那么就不需要更新了。如果新购买的账户被插入到源数据库中,它将被正确地插入 account_id.

  2. 以某种方式尝试添加到 AWS Glue 作业检查此 account_id 购买是否已经存在并更新记录

  3. 从事实 table 中删除所有更新的记录,然后将它们与所有数据一起重新插入。

最简单的解决方案是使用 Glue 将数据放入暂存 tables(仅插入),然后使用 SQL/Stored 程序将该数据更新到目标 table s.

顺便说一句,您的事实 table 中的维度键永远不应为空。因此,如果客户尚未注册,那么事实 table 注册日期列应引用日期维度中的“未知日期”行