Seit dem SQL Server 2005 existieren innerhalb der Integration Services zwei Datenfluss-Tasks zum erkennen von doppelten Datensätzen (Dubletten). Dies ist zum einen der Fuzzy Lookup Task, der – einfach gesagt – eine unscharfe Suche in einem entfernten Dataset ermöglicht und zum anderen der Fuzzy Search Task, der es ermöglicht doppelte Datensätze innerhalb des aktuellen Datenflusses zu finden.
Einige gute Artikel zu den Fuzzy Komponenten von Microsoft sind hier zu finden:
- Fuzzy Grouping Transformation
- Fuzzy Lookup Transformation
- Fuzzy Lookup and Fuzzy Grouping in SQL Server Integration Services 2005
- Data Quality Solutions
- Fuzzy Lookups and Groupings Provide Powerful Data Cleansing Capabilities
- Adventures with Fuzzy Matching
In meinem vorherigen Blog-Eintrag “Fuzzy Search Teil 1- Doppelte Datensätze suchen, finden und nicht finden (wollen)” bin ich darauf eingegangen, welche Gedanken man sich machen sollte, bevor man eine Duplikatssuche verwendet. Am Ende des Artikels habe ich ein bisschen die Nachteile bei der Konfiguration des Microsoft Fuzzy Grouping Tasks beschrieben.
In diesem Artikel beschreibe ich nun einmal die Konfigurationsmöglichkeiten unserer Komponente datenfabrik.dedupe zur Suche von Duplikaten.
Grundlegende Konfiguration
Im Bereich “Configuration” kann eine Name und eine Beschreibung für die Konfiguration der Komponente definiert werden. Die Konfiguration der Komponente kann zentral gespeichert werden und in anderen Komponenten wieder geladen werden. Somit kann eine einheitliche paketübergreifende Suche nach Duplikaten im Unternehmen aufgebaut werden. So trivial dieser Schritt auch klingen mag, eine vernünftige Definition von Duplikaten ist nur erfolgreich, wenn diese auch einheitlich verwendet wird.
Für die Verarbeitung der Daten verwendet datenfabrik.dedupe eine temporäre SQL Server Datenbank, die über einen Connection Manger der Integration Services definiert werden kann.
Über die Konfiguration “Partial Duplicate Search”, kann die Suche nach Duplikaten innerhalb der Eingabedaten so konfiguriert werden, dass z.B. nur Daten mit dem Filter-Value = 1 gegeneinander und gegen Daten mit einem Filter-Value != 1 geprüft werden; Daten mit einem Filter-Value != 1 werden nicht gegeneinander geprüft. Dies ermöglicht es, Daten die z.B. bereits auf Duplikate geprüft und bereinigt wurden, nicht noch einmal auf interne Duplikate zu prüfen.
Parametersets
Die Parametersets ermöglichen es verschiedene Arten von Duplikaten – wie in meinem Artikel “Fuzzy Search Teil 1 – Doppelte Datensätze suchen, finden und nicht finden (wollen)” – zu definieren. Über den Konfigurationsdialog für Parametersets können unterschiedlichsten Einstellungen vorgenommen werden.
Für jede einzelne Spalte kann ein eigener Schwellenwert definiert werden. Neben den Schwellenwerten für die einzelnen Spalten, kann auch ein Schwellenwert definiert werden, der über alle Spalten berechnet wird.
Zusätzliche Konfiguration für die Eingabespalten sind eine Kreuzprüfung von Spalten (Column Cross Checking) für z.B. vertauschte Vor- und Nachnamen, eine spalteninterne Kreuzprüfung (cross checking) für z.B. verdrehte Doppelnamen (Müller-Schmidt und Schmidt-Müller) und eine Teilprüfung (Partial Compare) der Spaltenwerte um Daten wie Müller und Müller-Schmidt vergleichen zu können.
Eine weitere zu konfigurierende Einstellung ist der “Filter”, über den bestimmte Wortbestandteile für die Duplikatssuche vereinheitlich werden können. So können z.B. in allen Eingabedaten “Strasse” und “Straße” in “Str.” überführt werden. Häufig unterschiedlich auftretende Schreibweisen werden so vor der Prüfung normalisiert und beeinflussen somit nicht die Gewichtung der eigentlichen Suche; die Daten werden ausschließlich für die Suche geändert. Die Normalisierungsfilter können aus einer XML Datei oder einer SQL Server Tabelle geladen werden und sind somit frei editierbar.
Parameterdefinition
Im folgenden sind die Ergebnisse einer kleineren Duplikatsuche mit 4 verschiedenen Parametersets zu sehen. Die letzte Spalte d_group fasst die in den einzelnen Parametersets d_group0 bis d_group3 gefundenen Duplikate zusammen. Die einzelnen Duplikatgruppen werden mit eindeutigen Schlüsseln versehen; in der ersten Gruppe d_group0 sind z.B. die zwei unterschiedliche Duplikatgruppen 1 und 2 erkannt worden.
Für den Parameterset d_group0 wurde ein Normalisierungsfilter für die Spalte Street angewendet, wodurch hier die Duplikatgruppe 2 gefunden wurde (Thomas-Mann-Str. 45 <-> Thomas Mann Strasse 45).
Im Parameterset d_group2 wurde die Einstellung “Column Cross Checking” angewendet, wodurch die Datensätze “Tillmann | Eitelberg” und “Eitelberg | Tillmann” als Duplikat erkannt wurden.
Für den Parameterset d_group3 wurde definiert, dass ein Duplikat besteht, wenn der Vorname, Nachname, Ort und das Geburtsdatum zu 99% übereinstimmen. Diese Einstellung eignet sich nicht zwangsläufig für eine automatisierte Verarbeitung der Daten, entsprechende Duplikate könnten aber in einem Prozess zur manuellen Nachbearbeitung vorgelegt werden.
Weitere Informationen
Die Komponente datenfabrik.dedupe steht für die SQL Server Versionen 2005/2008/2008 R2 auf x86 und x64 System zur Verfügung und kann in allen SQL Server Editionen (Ausnahme Express Edition) eingesetzt werden. In einem Projekt bei einem großen deutschen Versandhändler verarbeiten wir mit der Komponente ca. 16 Millionen Datensätze pro Stunde. Durch die granularen Einstellungsmöglichkeiten, liefert unsere Komponente auch für internationale Adressdaten sehr gute Treffer:
Deutsch: Pressmitteilung engelbert straus
Englisch: Press Release engelbert straus
Eine Trial-Version steht jedem Interessierten unter
http://www.datenfabrik.com/Download/Trial-Versios.aspx
zur Verfügung.