我有一個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. SMTP客戶端多主機
- 20. 獲取客戶主數據
- 21. 客戶端主機 - JavaMail的
- 22. 複合主鍵查詢
- 23. REFERENCE ON複合主鍵
- 24. 複合主鍵的MySQL
- 25. NHibernate的複合主鍵
- 26. JPA複合主鍵生成
- 27. DataGridView組合框和主鍵
- 28. Yesod中的複合主鍵
- 29. Yii複合主鍵與isNewRecord
- 30. 休眠複合主鍵
感謝您的好投入,我覺得你的做法是真的好。我從一開始就提出了一系列不同的查詢,從業務角度從不同角度加入客戶。我將查詢結果標記爲1到5的驗證級別分數。分數取決於聯接的強度。如果我在多個查詢中找到相同的客戶關係。分數會更新,然後我會繼續與非分數或低分數的客戶合作。 – Beesure