检测不同结构表之间数据冗余的方法
我正在处理一个涉及多个数据库实例的问题,每个实例的表结构都不一样。问题是,这些表之间有很多重复的数据,我需要一种有效的方法来找到这些重复项,报告它们,并可能将其消除。
举个例子,我有两个表,第一个表叫做 CustomerData
,它的字段是:
_countId, customerFID, customerName, customerAddress, _someRandomFlags
还有另一个表 CustomerData2
(稍后建立),它的字段是:
_countId, customerFID, customerFirstName, customerLocation, _someOtherRandomFlags.
在这两个表之间,我知道 customerName
和 customerFirstName
用来存储相同的数据,类似地,customerLocation
和 customerAddress
也存储了相同的数据。
假设销售团队中的一些人使用 customerData
,而其他人使用 customerData2
。我想要一种可扩展的方法来检测这两个表之间的冗余数据并进行报告。可以假设 customerFID
在两个表中是一致的,指向同一个客户。
我想到的一个解决方案是,在 Python 中创建一个 customerData
类,将两个表中的记录映射到这个类中,并为类中需要的对象(customerName, customerLocation/Address
)计算一个哈希值或签名,然后将它们存储到一个签名表中,这个表的列是:
sourceTableName, entityType (customerData), identifyingKey (customerFID), signature
然后,对于每个 entityType
,我会查找每个 customerFID
的重复签名。
实际上,我正在处理大量的生物医学数据,列数非常多。这些数据是由不同的人创建的(而且很遗憾的是没有标准的命名法或结构),并且其中存储了重复的数据。
编辑:为了简单起见,我可以将所有数据库实例移动到一个单一的服务器实例上。
1 个回答
如果我不太在意性能的话,我会选择一种简单实用的方法。可以使用Django(或者SQLAlchemy等)来建立你想要的模型(也就是你的数据表),然后获取数据进行比较。接着,可以用一种算法来高效地找出重复的数据(这取决于你是用列表还是字典来存储数据)。如果想提高性能,可以尝试用多进程模块来“增强”你的应用,或者考虑使用一种叫做“映射-归约”的解决方案。