Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
100 Milionen Datensätze aufräumen
zurück: win64bit,accessfrontend,oraclebackend weiter: Access Datenbank von SharePoint trennen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
steffen0815
VBA-Programmierer


Verfasst am:
18. Jul 2012, 19:02
Rufname:

100 Milionen Datensätze aufräumen - 100 Milionen Datensätze aufräumen

Nach oben
       Version: Office 2010

Hallo Wissende,
ich habe ein ganz einfaches Problem und brauche nix geringeres als die perfekte Lösung Wink.

Ich habe eine ganz einfache Tabelle auf einem DBServer:
Code:
Rw     Hw       Hoe
 1      1        2
 2      1        3
 3      2        4
 1      1        2
 1      1        2
Wie man sieht sind der erste und die beiden letzten Datensätze identisch.

Von diesen 3 Datensätzen möchte ich zwei löschen.

Ich könnte mir jede Menge Lösungen vorstellen, aber keine die mit 100.000.000 Datensätzen praktikabel ist.

Gibt es für so ein Problem einen effektiven SQL-Code?

Randbemerkungen:
Die Daten stammen aus einem Import mit ca. 3GByte Textdateien.
Die Mehrfachdatensätze stehen in unterschiedlichen Dateien.

Es sind keine Indizes in der Tabelle gesetzt, da diese den Import wesentlich verlangsamen.
Den Index zu und abzuschalten, scheint auch nicht zielführend zu sein, da bereits bei 20 Millionen DS dies mehrere Minuten dauert.

Die doppelten Daten über die Anfügeabfrage zu verhindern waren mein erster Ansatz, der sich aber als nicht praktikabel erwies, da der Zeitaufwand exponentiell mit den bereits importierten Datensätzen steigt.

Einen eindeutigen Index über die 3 (bzw. die 2 Felder)zu setzen und die Daten "blind" zu importieren habe ich per ADO nicht geschafft, sobald ein doppelter DS auftritt, wird der gesamte Import abgebrochen. Hier ist aber evtl. auch noch ein Ansatzpunkt.
BE ist PostgreSQL, welches ich im Moment über Access und ODBC/ADO ansteuere.

_________________
Gruß Steffen
Nouba
nicht ganz unwissend :)


Verfasst am:
19. Jul 2012, 06:11
Rufname:
Wohnort: Berlin


AW: 100 Milionen Datensätze aufräumen - AW: 100 Milionen Datensätze aufräumen

Nach oben
       Version: Office 2010

Hallo Steffen,

ich würde dafür die Aufteilung der Tabelle (siehe Partitioning) in Erwägung ziehen - also eine leere Tabelle anlegen und ausreichend vererbte Tabellen dafür anlegen, Constraints festlegen und eine Trigger-Funktion für das Schreiben in die Haupttabelle erstellen. Ggf. für das Eliminieren der Dubletten auch versuchen, die Variable temp_buffers zu erhöhen - kann auch nur für eine Session geltend gemacht werden - siehe Resource Consumption.

_________________
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
steffen0815
VBA-Programmierer


Verfasst am:
19. Jul 2012, 08:58
Rufname:

AW: 100 Milionen Datensätze aufräumen - AW: 100 Milionen Datensätze aufräumen

Nach oben
       Version: Office 2010

Hallo,
vielen Dank für deine Antwort. Leider überschreitet das im Moment etwas meinen Horizont.
Es ist aber vermutlich auch nicht der optimale Weg was ich mir da ausgedacht habe.

Ich denke einfacher und effektiver wäre es, wenn ich einen UNIQUE Index setze, um den Import doppelter DS zu verhindern. Damit wird zwar der Import (vermutlich) einiges langsamer, aber ich brauch dann nicht aufzuräumen.

Ich habe allerdings das Problem, dass ADO das Einfügen abbricht. Habe mir
Code:
    With CreateObject("ADODB.Command")
        .ActiveConnection = GibConn
        .Properties("Jet OLEDB:Inconsistent") = True
        .CommandType = 1
        .CommandText = "Insert ..."
        .Execute
    End With
rausgesucht, aber die Eigenschaft ("Jet OLEDB:Inconsistent") passt so wohl nicht, denn die schein es nur für Recordset zu geben Confused .

Weiß jemand wie ich per ADO eine Anfügeabfrage durchführen kann, die den verletzten Index ignoriert und den Rest importiert?

Ich vermute allerdings, dass ich da am Server was einstellen muss? Weiß nur leider nicht was Confused

_________________
Gruß Steffen
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
25. Jul 2012, 01:59
Rufname:

AW: 100 Milionen Datensätze aufräumen - AW: 100 Milionen Datensätze aufräumen

Nach oben
       Version: Office 2010

Hallo Steffen

ohne es jetzt getestet zu haben: Wenn in ADO ein Fehler auftritt, bekommt man ein ADO-Fehlerobjekt zurück und das kann man mit den üblichen On Error-Befehlen abfangen und damit auch übergehen.

Aber Du machst doch jetzt nicht wirklich für 100 Mio. Datensätze je ein INSERT? Dann würde es mich nicht wundern, warum es ewig dauert.

Ohne PostgreSQL zu kennen, gibt es auch da einen BULK INSERT-Befehl namens COPY. Damit kannst Du die Massendaten erst mal in eine Standardtabelle übernehmen (die auch einen Index haben kann, der wird ja schon beim Einfügen gepflegt, sobald vorhanden). Danach kannst Du direkt auf dem Server die Daten in einer SP in die echte Tabelle transferieren, ganz ohne ADO, was dann ebenfalls sehr viel schneller gehen dürfte.

Hier ein paar Links, die vielleicht auch weiterhelfen:
Whats the fastest way to do a bulk insert into Postgres?
skip duplicate key error during inserts

Gruß

Christian
steffen0815
VBA-Programmierer


Verfasst am:
25. Jul 2012, 18:33
Rufname:


AW: 100 Milionen Datensätze aufräumen - AW: 100 Milionen Datensätze aufräumen

Nach oben
       Version: Office 2010

Hallo Christian,
Dank für die Antwort.

Nun wäre in Access der einfachste Weg einen eindeutigen Index zu setzen und die Fehler zu ignorieren.
Über ADO ging das nicht und ich nahm an es liegt an falschen Einstellungen.

Letztendlich hat sich jetzt ergeben, dass PosgreSQL selbst so etwas nicht kann.

_________________
Gruß Steffen
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Microsoft Access und andere Datenbank-Server: Anzeigen Anzahl Datensätze im Bericht 1 s1lviii 1364 03. Jul 2012, 07:49
Willi Wipp Anzeigen Anzahl Datensätze im Bericht
Keine neuen Beiträge Microsoft Access und MySQL: formular -> dropdown-auswahlmenü -> datensätze in tabe 2 tobitobson 3679 28. Dez 2011, 11:46
hausfraa formular -> dropdown-auswahlmenü -> datensätze in tabe
Keine neuen Beiträge Microsoft Access und MS SQL Server: Abfrage findet keine Datensätze mit Unicodezeichen 5 jcl 914 28. Jun 2011, 19:10
jcl Abfrage findet keine Datensätze mit Unicodezeichen
Keine neuen Beiträge Microsoft Access und MS SQL Server: Datensätze nicht editier- oder löschbar 3 Ingman 1660 24. März 2011, 18:03
Bitsqueezer Datensätze nicht editier- oder löschbar
Keine neuen Beiträge Microsoft Access und andere Datenbank-Server: Löschen doppelter datensätze 1 McCoy 2961 07. Sep 2009, 20:48
F_E_O_S Löschen doppelter datensätze
Keine neuen Beiträge Microsoft Access und MS SQL Server: Datensätze aktualisieren!? 3 daisyking 1401 18. Jun 2009, 15:27
Z.Mart Datensätze aktualisieren!?
Keine neuen Beiträge Microsoft Access und MySQL: Datensätze in einem Bericht mit Hilfe eines Formulars anz. 0 Tamara 1299 12. Jun 2009, 14:42
Tamara Datensätze in einem Bericht mit Hilfe eines Formulars anz.
Keine neuen Beiträge Microsoft Access und MS SQL Server: MS SQL - Datensätze in schleife auslesen.. 0 HobbySQLer 3603 05. Mai 2009, 15:44
HobbySQLer MS SQL - Datensätze in schleife auslesen..
Keine neuen Beiträge Microsoft Access und andere Datenbank-Server: Anzeigen Anzahl Datensätze im Bericht 1 Volkholz 4500 17. Okt 2008, 14:40
Volkholz Anzeigen Anzahl Datensätze im Bericht
Keine neuen Beiträge Microsoft Access und MS SQL Server: Mehrere Datensätze mit max. Wert 0 Someguy 1199 10. Jun 2008, 10:18
Someguy Mehrere Datensätze mit max. Wert
Keine neuen Beiträge Microsoft Access und MySQL: Datensätze über Access bearbeiten 1 mokona.s 1074 16. Apr 2008, 14:50
mokona.s Datensätze über Access bearbeiten
Keine neuen Beiträge Microsoft Access und MySQL: Datensätze anfügen in Haupt- und Unterformular 0 tulpe 1274 17. Nov 2007, 20:00
tulpe Datensätze anfügen in Haupt- und Unterformular
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme