我们有一个ETL服务提供商,它每3小时从我们的CRM将数据加载到我们的Redshift实例中。我们希望了解每次同步所发生的变化,或者至少每周都会发生变化。
我的第一直觉是每天触发一个lambda,将整个表复制到一个档案中,
例如CREATE TABLE crm.leads_YYYY_MM_DD FROM (SELECT * FROM crm.leads)
以及围绕表之间的字段级差异构建一些报告。我想知道是否有更明智的方法。这似乎很难从中创建历史,而且可能会不必要地存储大量未更改的数据。什么是更好的策略?
避免"大量未改变的数据";将只存储";旧的";数据当";新的";数据被更改。这将使ETL过程复杂化,因为它需要在ETL过程添加/更新数据之前有效地提取数据。
这个过程通常是:
- 使用来自服务提供商的"新"数据加载临时表
- 对于"新"数据中的每个唯一标识符,将"旧"数据与时间戳一起复制到历史表中
- 将"新"数据插入主数据表
这将导致历史记录表中包含任何已更改内容的"旧"数据。然而,这无助于识别";新的";数据为此,您需要在主表中添加一个时间戳,以确定行是何时添加的。
你应该从思考你想要从整个过程中得到什么结果开始。例如:
- 思考您希望看到的添加的数据(新值(
- 思考您希望看到的更改的数据(旧值+新值(