способы обнаружения избыточности данных между таблицами с разными структурами

#python #mysql #database #duplicate-data #redundancy

#python #mysql #База данных #дублировать-данные #избыточность

Вопрос:

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

Например. У меня есть две таблицы, первая таблица, 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

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

РЕДАКТИРОВАТЬ: Для простоты я могу переместить все экземпляры базы данных на один экземпляр сервера.

Комментарии:

1. спасибо за редактирование Ocaso Protal, в следующий раз я не забуду отформатировать свои вопросы намного лучше.

Ответ №1:

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