ProgrammierungData Engineer

Wie organisiert man den Massendatenimport (Bulk Insert) aus einer Datei in eine SQL-Tabelle, um maximale Leistung zu gewährleisten und die Datenintegrität zu garantieren? Welche Werkzeuge sollten in verschiedenen DBMS genutzt werden und welche Feinheiten der Fehlerkontrolle gibt es?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Für den Massendatenimport (Bulk Insert) großer Datenmengen werden spezialisierte Befehle und Werkzeuge verwendet: BULK INSERT, COPY, LOAD DATA INFILE, externe Werkzeuge wie bcp (SQL Server), psql (PostgreSQL) sowie ETL-Tools.

Wichtige Punkte:

  • Verwenden Sie die Formate CSV/TXT ohne unnötige Transformationen.
  • Deaktivieren Sie Trigger und Indizes während des Imports, wenn die Daten keine Überprüfung erfordern — das erhöht die Geschwindigkeit.
  • Führen Sie Überprüfungen und Validierungen der referenziellen Integrität VOR und/oder NACH dem Import durch.
  • Importieren Sie in eine temporäre Tabelle, validieren Sie die Daten und führen Sie dann die Bulk-Einfügung in die Haupttabelle durch.
  • Versuchen Sie, die Daten in Batches zu unterteilen, wenn dies unterstützt wird.
  • Überprüfen Sie Rückgabecodes/Protokolle — Bulk Insert kann es erlauben, Fehler zu überspringen.

Beispiel für PostgreSQL:

COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- Daten überprüfen, nach Validierung in die Produktions-Tabelle übertragen INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;

Fangfrage.

Frage: Warum kann es nach einem Bulk Insert in eine große Tabelle mit Index zu einem plötzlichen Leistungsabfall bei nachfolgenden Operationen kommen?

Antwort: Weil Bulk Insert die Tabelle direkt auffüllt, und die Indizes erst nach dem Hauptimport neu erstellt/aktualisiert werden, was die Tabelle blockieren und Ressourcen verbrauchen kann. Es wird empfohlen, sekundäre Indizes während des Imports zu deaktivieren und sie nach Abschluss neu zu erstellen, oder die Daten in Batches zu unterteilen.


Geschichte

Im Logistikprojekt wurden Millionen von Zeilen über BULK INSERT ohne temporäre Tabelle geladen — ungültige Daten „verstopften“ die Indizes mit ungültigen Informationen, wodurch die problematischen Zeilen wegen FK- und Check-Constraints nicht einfach „rückgängig gemacht“ werden konnten. Die Daten mussten manuell bereinigt werden.


Geschichte

Im Unternehmensdienst erhöhte der Bulk Insert die Importzeit um das 10-fache, weil während des Ladens die sekundären Indizes nicht deaktiviert waren und ihre Struktur bei jedem Schritt neu berechnet wurde.


Geschichte

Im Fintech-Produkt erlaubte der Bulk Insert beim Laden großer Dateien nicht das Laden aller Zeilen aufgrund von Silent-Fehlern, da die Fehlercodes nicht korrekt behandelt wurden — ein Teil wichtiger Informationen ging verloren und wurde erst nach Abgleich mit externen Quellen nach mehreren Tagen festgestellt.