0

我们有一个 ETL 服务提供商,它每 3 小时从我们的 CRM 将数据加载到我们的 Redshift 实例中。我们希望深入了解每次同步或至少每周同步所做的更改。

我的第一直觉是每天触发一个 lambda,将整个表复制到一个存档中,

例如CREATE TABLE crm.leads_YYYY_MM_DD FROM (SELECT * FROM crm.leads)

并围绕表之间的字段级差异构建一些报告。我想知道是否有更智能的方法。这似乎很难从中创建历史记录,并且可能会不必要地存储大量未更改的数据。什么是更好的策略?

4

1 回答 1

1

避免“大量未更改数据”的唯一方法是仅在“新”数据发生更改时存储“旧”数据。这将使 ETL 过程复杂化,因为它需要在 ETL 过程添加/更新数据之前有效地提取数据。

该过程通常是:

  • 使用来自服务提供商的“新”数据加载临时表
  • 对于“新”数据中的每个唯一标识符,将“旧”数据连同时间戳一起复制到历史表中
  • 将“新”数据插入主数据表

这将导致历史表包含任何已更改的“旧”数据。但是,它无助于识别“新”数据。为此,您需要在主表上添加时间戳以识别添加行的时间。

您应该首先考虑您希望从整个过程中获得什么输出。例如:

  • 考虑一下您希望看到的添加数据(新值)的内容
  • 考虑一下您希望看到的更改数据(旧值 + 新值)
于 2020-07-16T01:03:26.103 回答