ProgrammazioneData Engineer

Come organizzare un'importazione massiccia (bulk insert) di dati da un file in una tabella SQL per garantire le massime prestazioni e la correttezza dei dati? Quali strumenti utilizzare in diverse DBMS e quali sono i dettagli del controllo degli errori?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

Per l'importazione massiccia (bulk insert) di grandi volumi di dati si utilizzano comandi e utility specializzate: BULK INSERT, COPY, LOAD DATA INFILE, strumenti esterni come bcp (SQL Server), psql (PostgreSQL), oltre a strumenti ETL.

Punti chiave:

  • Utilizzare formati CSV/TXT senza conversioni non necessarie.
  • Disattivare i trigger e gli indici durante l'importazione, se i dati non richiedono controlli, per aumentare la velocità.
  • Eseguire controlli e validazione dell'integrità referenziale PRIMA e/o DOPO l'importazione.
  • Importare in una tabella temporanea, validare e poi eseguire un'inserzione massiccia nella tabella principale.
  • Tentare di suddividere i dati in batch, se supportato.
  • Controllare i codici di ritorno/log — il bulk insert può consentire di ignorare errori.

Esempio per PostgreSQL:

COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- Verifica dei dati, trasferimento nella tabella di produzione dopo validazione INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;

Domanda trabocchetto.

Domanda: Perché dopo un bulk insert in una grande tabella con indice può esserci un improvviso calo delle prestazioni nelle operazioni successive?

Risposta: Perché il bulk insert riempie la tabella direttamente, e gli indici vengono ricostruiti/aggiornati solo dopo l'importazione principale, il che può bloccare la tabella e consumare risorse. È consigliato disattivare gli indici secondari durante l'importazione e ricrearli al termine, oppure suddividere in batch.


Storia

Nel progetto di logistica sono stati caricati milioni di righe tramite BULK INSERT senza una tabella temporanea — i dati non validi "inchiodavano" gli indici con informazioni non valide, dopo il che, a causa di FK e vincoli di controllo, non è stato possibile semplicemente "annullare" parte delle righe errate. I dati sono stati puliti manualmente.


Storia

Nel servizio aziendale, il bulk insert ha aumentato il tempo di importazione di 10 volte, perché durante il caricamento non erano stati disattivati gli indici secondari e la loro struttura veniva ricalcolata a ogni passaggio.


Storia

Nel prodotto fintech, durante il caricamento di grandi file, il bulk insert ha permesso di caricare solo alcune righe a causa di errori silenziosi, poiché i codici di errore non erano stati gestiti correttamente — parte delle informazioni importanti è andata persa, e questo è stato scoperto solo dopo confronti con fonti esterne dopo alcuni giorni.