首页 > 解决方案 > 我将如何根据数百条规则合并 apache beam / dataflow 中的相关记录?

问题描述

我有必须在记录级别加入的数据。例如,有关用户的数据来自不同的源系统,但没有共同的主键或用户标识符

示例数据

Source System 1:
{userid = 123, first_name="John", last_name="Smith", many other columns...}

Source System 2:
{userid = EFCBA-09DA0, fname="J.", lname="Smith", many other columns...}

Apache Beam / 数据流实现

您可能知道数据流中有什么方法可以有效地处理此类问题吗?

其他想法

或者也许有一种更标准的方法来解决这类问题。

标签: google-cloud-platformgoogle-cloud-dataflowapache-beamdataflow

解决方案


到目前为止,很难说哪种解决方案最适合您。我会尝试进一步分解问题并尝试分别解决不同的方面。

据我了解,目标是将代表不同来源中相同事物的匹配记录组合在一起:

  • 记录来自多个来源:
    • 它在逻辑上是相同的数据,但格式不同;
  • 有规则可以判断记录是否代表同一实体:
    • 规则的集合是静态的;

所以,逻辑大概是这样的:

  • 阅读记录;
  • 尝试查找现有的匹配记录;
  • 如果找到匹配记录:
    • 用新数据更新它;
  • 否则保存记录以备将来匹配;
  • 重复;

对我来说,这看起来非常高级,在这个细节级别上可能没有单一的“正确”解决方案。

我可能会尝试通过首先更详细地理解它来解决这个问题(也许你已经这样做了),很少有想法:

  • 数据的属性是什么?
    • 有图案吗?例如,当一个系统发布某些内容时,您是否期望其他系统发布其他内容?
  • 一般有什么要求?
    • 延迟、一致性、可用性等;
  • 如何从源中读取数据?
    • 所有系统都可以在文件中批量发布记录,将它们提交到 PubSub,您的解决方案是否需要轮询它们等?
    • 可以并行读取数据还是单个流?
  • 那么在不同的假设和要求下,如何有效匹配记录的主要问题也可能会有所不同。例如,我会考虑:
    • 你能把所有数据都放在内存里吗?
    • 你的规则是动态的。他们有没有改变,当他们改变时会发生什么;
    • 你能把数据分成可以单独存储和有效匹配的类别吗?例如,如果你知道你可以尝试通过 id 字段匹配一些东西,通过某些东西的哈希等来匹配其他一些东西;
    • 您是否需要匹配所有历史/现有数据?
    • 你能有一些快速排除逻辑来不做昂贵的检查吗?
  • 解决方案的输出是什么?对输出有什么要求?

推荐阅读