检测具有不同结构的表之间的数据冗余的方法

时间:2011-05-03 06:16:36

标签: python mysql database duplicate-data redundancy

我正在处理涉及多个数据库实例的问题,每个数据库实例都有不同的表结构。问题是,在这些表之间,有很多很多重复,我需要一种方法来有效地找到它们,报告它们,并可能消除它们。

EG。我有两个表,第一个表CustomerData,其中包含字段:

_countId, customerFID, customerName, customerAddress, _someRandomFlags

我还有另一个表CustomerData2(稍后构建),其中包含以下字段:

_countId, customerFID, customerFirstName, customerLocation, _someOtherRandomFlags.

在上面的两个表格之间,我知道customerNamecustomerFirstName用于存储相同的数据,同样也使用了customerLocationcustomerAddress存储相同的数据。

可以说,部分销售团队一直使用customerData,其他人一直在使用customerData2。我希望有一种可扩展的方法来检测表之间的冗余并报告它们。可以假设两个表中的customerFID是一致的,并且引用同一客户。

我能想到的一个解决方案是,在python中创建一个customerData类,将两个表中的记录映射到此类,并计算类中所需对象的哈希/签名( customerName, customerLocation/Address)并将它们存储到签名表中,该表包含以下列:

sourceTableName, entityType (customerData), identifyingKey (customerFID), signature 

然后对于每个entityType,我会为每个customerFID

寻找重复的签名

实际上,我正在处理大量的生物医学数据,包含大量的专栏。它们是在不同的人身上创建的(遗憾的是没有标准的术语或结构)并且存储了重复的数据

修改 为简单起见,我可以将所有数据库实例移动到单个服务器实例。

1 个答案:

答案 0 :(得分:0)

如果我不关心性能,我会采用高级实用的方法。使用Django(或SQLAlchemy或...)构建所需的模型(您的表)并获取要比较的数据。然后使用算法有效地识别重复项(...来自列表或词典,它取决于“如何”保存数据)。为了提高性能,您可以尝试使用多处理模块“增强”您的应用程序,或者考虑使用map-reduce解决方案。