我有一个dwh收集4个系统,现在它已加入不同的客户主键。 一个实际客户可能出现在所有4个系统中,或者只有其中一个。 作为进行业务逻辑查找的最佳解决方案,您会看到什么? 链接是星期,因此常规联接仅适用于一小部分客户。 有没有一个很好的工作流程我可以使用,或者你会怎么做?结合客户主键
结合客户主键
回答
我为一家大型健康保险公司工作,我们最近不得不做一个有点类似的项目。我们有来自不同业务部门的包含会员信息的多个源系统。我们有一个大的成员人口,成员可能在多个系统中。系统中的数据质量如此之高:每个系统可能有也可能没有有效的SSN,Medicare ID,当前和/或拼写正确的地址信息,有效的出生日期等。我们的目标是创建一个唯一标识符我们可以与源系统PK配对,以便我们可以在多个系统中唯一标识一个成员。
结果不仅仅是一段代码或SSIS任务的过程。我们的流程会跟踪每一位来自我们系统的成员,以及我们识别他们的主要领域(姓名,地址,SSN,Medicare ID等)的快照。在每个版本中,我们添加新的成员,以前还没有进入我们的系统,并更新历史记录表。然后我们通过比较,并试图找出哪些成员匹配。我们尽可能地尝试完全匹配(firstname = firstname,lastname = lastname,ssn = ssn),但如果这些匹配失败,我们必须使用部分匹配系统。我们通常所做的是尝试将标识符(如SSN或Medicare ID)与部分名称和地址进行匹配。如果我们没有有效的SSN或Medicare ID,我们最终会在我们可用的所有字段中使用部分匹配。
该过程有点反复试验。在我们第一次发布之后,用户发现了同一个成员具有不同ID的所有类型的实例(我们的匹配逻辑错过了有效匹配),或者显然不相同的成员具有相同的唯一标识符(我们的匹配逻辑产生了不匹配的匹配)。每次发布后,我们通常会根据发现的错误编写代码,并且通常会修复几乎所有错误。我们现在到了一个能够匹配我们可靠的一切的地步。
就你而言,我猜你没有任何政府发行的ID或SSN可供你使用。我可能会尝试直接JOIN
您的信息(名称,送货地址,帐单地址,电子邮件,信用卡号码等)。之后,转到部分匹配。如果我们不能直接穿过JOIN
,我们使用所有字段的左4个字符。之后,根据数据的质量,您可能只需要做一些工作就可以减少其余的逻辑。我会试着去看看你找不到任何匹配的所有客户,看看他们中的任何一个是否有相同的电子邮件,或类似的地址或类似的名字。如果是这样,比较这些成员,看看是什么导致匹配不起作用。
编辑:如果此数据持续更新,请记住,您还必须将新记录与先前识别的客户进行比较,以确定它们是否与您系统中已有的客户匹配。
祝你好运。我们的项目有点令人头疼,仍然没有完全完成,但它的状态良好,我们每次运行都会继续改进。
对于数据仓库 - 有很好的文章金博尔组最佳实践来处理这类数据:
http://www.kimballgroup.com/2012/07/design-tip-147-durable-super-natural-keys/
- 1. FireBird:结合上部和主键约束
- 2. 结合值来定义主键?
- 3. 复合主键
- 4. 复合主键
- 5. 复合主键,
- 6. 组合主键
- 7. 如何结合于客户机侧
- 8. 外键复合主键
- 9. 复合主键+外键
- 10. 复合主键或外键
- 11. Mysql复合主键
- 12. PostgreSQL复合主键
- 13. JPA主键集合
- 14. JPA复合主键
- 15. mysql合并主键
- 16. 合并magento客户
- 17. 结合Wordpress主题
- 18. 将主键更改为复合键(主键已存在)
- 19. 获取客户主数据
- 20. SMTP客户端多主机
- 21. 客户端主机 - JavaMail的
- 22. 如何获取Aerospike Node.js客户端的主键
- 23. 将数据库主键暴露给客户端
- 24. 引用复合主键
- 25. EFCodeFirst ctp 5复合主键
- 26. 组合多个主键
- 27. 可互换,复合主键
- 28. 复合主键查询
- 29. JPA复合主键生成
- 30. 复合主键级联
感谢您的好投入,我觉得你的做法是真的好。我从一开始就提出了一系列不同的查询,从业务角度从不同角度加入客户。我将查询结果标记为1到5的验证级别分数。分数取决于联接的强度。如果我在多个查询中找到相同的客户关系。分数会更新,然后我会继续与非分数或低分数的客户合作。 – Beesure