代码之家  ›  专栏  ›  技术社区  ›  Baktaawar David Maust

如何在数据管道中跟踪数据差异

  •  0
  • Baktaawar David Maust  · 技术社区  · 3 年前

    我们每周都会收到一组用户数据。以百万计。它由按时间戳排列的用户属性(访问量、类别、产品等)组成。

    现在,每周都会有10万条记录被更改——更新、删除、添加等。这意味着上周有某条记录的同一用户可能在某些属性等中更改了一些值。或者新用户可能已经完全添加

    然而,我们目前仍然在整个11MM+用户上运行管道,该管道每周为下游任务提供这些数据。

    这会消耗计算资源,从而消耗云成本。

    有没有一种方法/工具可以帮助我们只弄清楚哪些用户记录是从上次运行中更新的,这样我们就只能对这10万条左右的记录进行下游处理,而不是每周对整个数据集运行它?

    与代码版本控制类似的是git-diff等,它有助于了解文件的增量补丁/更改。

    对于数据eng ETL过程,什么是正确的工具/方法?

    谢谢

    0 回复  |  直到 3 年前
        1
  •  1
  •   Register Sole    3 年前

    我知道的几个策略。

    1. 首先, last_updated_timestamp 。只需在以下位置查找记录 上次更新时间戳 大于上一批的 max(last_updated_timestamp) .如果你没有 上次更新时间戳 ,我建议开始实施它。这可能是最便宜的方法。

    2. 其次,如果确实还需要进一步筛选,可以使用所有字段的串联散列。实例 MD5(field1 || field 2 || ...) 。只有当第一种方法不可靠时,这才是值得的,因为即使你有哈希,比较它们(本质上是将你的现有记录与新的批次连接起来)也不是一个廉价的操作。这里的不可靠是指由于外部因素,例如用户行为。如果它因为没有正确实现而不可靠,那么修复它仍然是一条路要走。