способы обнаружения избыточности данных между таблицами с различными структурами - PullRequest
2 голосов
/ 03 мая 2011

Я работаю над проблемой, которая включает в себя несколько экземпляров базы данных, каждый с различными структурами таблиц. Проблема в том, что между этими таблицами есть много-много дубликатов, и мне нужен способ, чтобы эффективно находить их, сообщать о них и, возможно, устранять их.

Например. У меня есть две таблицы, первая таблица, CustomerData с полями:

_countId, customerFID, customerName, customerAddress, _someRandomFlags

и у меня есть другая таблица, CustomerData2 (построена позже) с полями:

_countId, customerFID, customerFirstName, customerLocation, _someOtherRandomFlags.

Между двумя таблицами выше я точно знаю, что customerName и customerFirstName использовались для хранения одних и тех же данных, и аналогично customerLocation и customerAddress также использовались для хранения тех же данных.

Допустим, некоторые сотрудники отдела продаж использовали customerData, а другие - customerData2. Я хотел бы иметь масштабируемый способ обнаружения избыточности между таблицами и сообщать о них. С некоторой долей уверенности можно предположить, что customerFID в обеих таблицах согласованы и относятся к одному и тому же клиенту.

Одним из решений, которое я мог придумать, было создание класса customerData в python, сопоставление записей в двух таблицах с этим классом и вычисление хеша / подписи для требуемых объектов в пределах класса (customerName, customerLocation/Address) и сохраните их в таблице подписей, в которой есть столбцы:

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

и затем для каждого entityType я ищу дубликаты подписей для каждого customerFID

На самом деле, я работаю с огромными наборами биомедицинских данных, с множеством столбцов. Они были созданы у разных людей (и, к сожалению, без стандартной номенклатуры или структуры), и в них были дублированные данные

EDIT: Для простоты я могу переместить все экземпляры базы данных в один экземпляр сервера.

1 Ответ

0 голосов
/ 03 мая 2011

Если бы я не заботился о производительности, я бы использовал практический подход высокого уровня.Используйте Django (или SQLAlchemy или ...) для построения желаемых моделей (ваших таблиц) и получения данных для сравнения.Затем используйте алгоритм для эффективной идентификации дубликатов (... из списков или диктов, это зависит от того, «как» вы храните ваши данные).Чтобы повысить производительность, вы можете попытаться «улучшить» свое приложение с помощью многопроцессорного модуля или рассмотреть решение для сокращения карт.

...