Dupletten suche

Fragen und Probleme rund um die Abfragespache SQL.
Antworten
infromi
Benutzer
Beiträge: 34
Registriert: Mo 28. Apr 2014, 11:23
Wohnort: Switzerland

Dupletten suche

Beitrag von infromi » Fr 24. Mär 2017, 12:02

Hallo
wir haben eine Tabelle


sagen wir mal personen
darin sind 100000 personen gespeichert
nun wollen wir die Tabelle auf duplikate durchsuchen und diese markieren

tabelle person (id bigint, vorname text , name text , geburtsjahr int, strasse text , ort text, quelle text, dublette_von_id bigint);

innerhalb der quelle sind gibt es keine duplikate aber da wir daten aus verschiedenen system importieren möchte ich jede quelle gegenüber den anderen quellen überprüfen

id vorname name jahr strasse ort datensatzquelle
1 Fritz Meier 1954 Radelstr. 2 Berlin quelle1
2 Hans Muster 1974 Teststr. 2 Hamburg quelle1
...

11 Fritz Meyer 1954 Werststrasse 2 Berlin quelle2
12 Fritz Meier 1954 Radelstrasse 2 Berlin quelle2 wäre somit von 1 ne duplette
...

20 Fritz Meier <null> Radelstr. 2 Berlin quelle3 wäre somit von 1 ne duplette
21 Hans Muster <null> Teststrasse 2 Hamburg quelle3 wäre somit von 2 ne dublette
22 Daniel Meier 1954 Radelstr. 2 Berlin quelle3
22 Ingrid Meier 1954 Radelstr. 2 Berlin quelle3

dabei gibt es Werte die müssen übereinstimmen wie name vorname geburtsjahr und ort und andere wie dei Strasse die nach ähnlichkeitssuche übereinstimmen sollen

ich möchte die Daten nun durchgehen und bei jedem Datensatz dann markieren wenn es eine Duplette von einer anderen row ist

ich habe nun mit dem pg_trgm und gin index kombiniert mit anderen btree versucht aber mich dünkt das ist extrem langsam
einerseits muss ich ja den gin index auf der tabelle schon kreiiert haben da sonst die duplettensuche langsam ist und andersseits ist dann aber das updaten bei gefundener duplette langsam da er den gin index nachführen muss

seht ihr da eine besser möglichkeit als über pg_trgm solche dupletten zu finden?

kurz gesagt alle Datensätze sind in der gleichen Tabelle
es gibt Hardfacts für die Duplettenfindung und Softe Kriterien

Die frage ist auch noch wenn zb bei einem Datensatz das Geburtsjahr nicht angegeben wurde aber alle anderen Kriterien würde übereinstimmen ob man das als Duplette kennzeichen kann --> weil Geburtsjahr ja eigentlich genau übereinstimmen sollte (ausser eventuell wenn es nicht angegeben wurde)

ich denke es kompliziert beschrieben aber
hat jemand von euch schon mal ähnliche Cases gehabt wo ihr auf Dupletten prüfen musstet wo die Rows aber nur ähnlich sind da entweder die Strasse abgekürzt wurde oder gewisse Felder null geliefert wurden

Oder kann man das sonst im pl/pgsql über gewisse functions besser lösen?

Besten Dank

Antworten