Conversione da CSV a SQL (generazione di istruzioni INSERT)
Converte un file CSV in istruzioni SQL di inserimento e creazione della tabella. Sono previsti i tre dialetti di MySQL, PostgreSQL e SQLite e il tipo delle colonne — intero, decimale o testo — è riconosciuto automaticamente. La conversione avviene interamente nel navigatore e i dati non sono trasmessi ad alcun servente.
| Carattere separatore |
|
|---|---|
| Considera la prima riga come intestazione | |
| Nome della tabella | |
| Dialetto SQL |
|
| Genera anche l'istruzione di creazione della tabella | |
| Tratta i valori vuoti come NULL | |
| Riunisci più righe in un'unica istruzione di inserimento |
Inserite un file CSV per vedere qui le istruzioni SQL.
Corrispondenza fra le righe del CSV e le istruzioni di inserimento
| Una riga del CSV | name,age,city |
|---|---|
| Istruzione di inserimento risultante | INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo'); |
Usando la prima riga come intestazione, ciascuna riga successiva diventa un'istruzione di inserimento con i nomi delle colonne dell'intestazione. Le colonne riconosciute come intere o decimali sono scritte come numeri senza virgolette, le altre come testo racchiuso fra apici semplici.
Che cos'è la conversione da CSV a SQL
Quando si ha un file CSV pronto e occorre riversarlo in una base di dati, scrivere a mano un'istruzione di inserimento per ogni riga è un lavoro lungo e soggetto a errori di battitura, specialmente se le righe sono centinaia o migliaia. Questo strumento legge il CSV incollato e trasforma automaticamente ogni riga in un'istruzione INSERT pronta all'uso. Il tipo di ciascuna colonna — intero, decimale o testo — non viene indovinato dalla sola prima riga, ma dedotto esaminando tutti i valori presenti in quella colonna: solo così il risultato è affidabile anche quando l'ultima riga del file contiene un valore diverso dalle prime. Grazie a questa analisi lo strumento può generare, se richiesto, anche l'istruzione CREATE TABLE corrispondente, con nomi e tipi di colonna già coerenti con i dati.
MySQL, PostgreSQL e SQLite hanno convenzioni proprie per delimitare i nomi di tabelle e colonne e per denominare i tipi di dato: scegliendo il dialetto desiderato, lo strumento adegua automaticamente questi dettagli, così l'istruzione generata è già pronta per essere eseguita sul motore scelto senza doverla correggere a mano. Gli apici semplici presenti nei valori — ad esempio nei nomi propri o nei testi liberi — vengono raddoppiati seguendo la convenzione standard di SQL, evitando che l'istruzione risulti sintatticamente errata. L'intera elaborazione avviene nel navigatore: il file CSV caricato non lascia mai il dispositivo e non viene trasmesso ad alcun servente, il che rende lo strumento adatto anche a dati sensibili o riservati.
Come generare istruzioni di inserimento da un CSV
- Incollare il CSV Incollate il contenuto del file nel campo di input. Se i valori sono separati da tabulazioni anziché da virgole, cambiate di conseguenza il carattere separatore.
- Indicare nome della tabella e dialetto Digitate il nome della tabella di destinazione e scegliete il dialetto della base di dati che userete: il carattere che delimita gli identificatori si adegua automaticamente.
- Scegliere le opzioni di output Decidete se generare anche l'istruzione di creazione della tabella, se trattare i campi vuoti come NULL e se riunire più righe in un'unica istruzione di inserimento.
- Copiare ed eseguire Copiate l'SQL prodotto e incollatelo nel vostro client per basi di dati. Con un numero molto elevato di righe, conviene suddividere l'esecuzione in più passaggi.
Consigli per sfruttarlo al meglio
- Il tipo di una colonna — intero, decimale o testo — è dedotto esaminando i valori di tutte le righe di dati di quella colonna. Basta un solo valore non numerico perché l'intera colonna sia trattata come testo.
- Attivando l'opzione che riunisce più righe in un'unica istruzione si ottiene una sola istruzione nella forma `INSERT INTO ... VALUES (...), (...), (...);`, riducendo il numero di esecuzioni necessarie per immettere molti dati.
- MySQL racchiude nomi di tabelle e colonne fra apici inversi, PostgreSQL e SQLite fra virgolette doppie: scegliendo il dialetto, il carattere di delimitazione cambia da sé.
- Disattivando il trattamento dei valori vuoti come NULL, una stringa vuota è scritta come letterale vuoto fra apici nelle colonne di testo e come NULL in quelle numeriche.
Quando torna utile la conversione da CSV a SQL
Preparare dati di prova per i test
I dati di verifica creati in un foglio di calcolo possono essere trasformati direttamente in istruzioni di inserimento, senza dover scrivere un seeder del proprio framework: ideale per controlli rapidi e di piccola scala prima di investire tempo in uno strumento più strutturato.
Migrare dati anagrafici o di riferimento
Un file CSV esportato da un sistema esistente può essere trasformato nella forma pronta per essere caricata in una nuova base di dati, ottenendo allo stesso tempo anche l'istruzione di creazione della tabella se questa non esiste ancora.
Verificare il tipo assegnato alle colonne
Osservare il tipo dedotto automaticamente aiuta a scoprire valori inattesi nascosti in una colonna: se una colonna che dovrebbe contenere solo numeri risulta di tipo testo, è un segnale che tra i dati si è infiltrato un valore non numerico.
Confrontare la sintassi dei diversi dialetti
Convertendo lo stesso file CSV cambiando soltanto il dialetto selezionato, si possono osservare fianco a fianco le differenze reali fra MySQL, PostgreSQL e SQLite nella delimitazione degli identificatori e nei nomi dei tipi.
Termini utili per l'inserimento dei dati in SQL
- Istruzione INSERT
- L'istruzione SQL che aggiunge una riga a una tabella, facendo corrispondere a ciascun nome di colonna il relativo valore.
- Istruzione CREATE TABLE
- L'istruzione SQL che crea una nuova tabella, definendo il nome e il tipo di ciascuna colonna. Serve quando la tabella di destinazione non esiste ancora.
- Dialetto SQL
- L'insieme delle differenze sintattiche fra i vari motori di basi di dati, per esempio il carattere usato per delimitare gli identificatori o il modo di scrivere i nomi dei tipi.
- NULL
- Un valore speciale che indica l'assenza di un dato. Va tenuto distinto dalla stringa vuota, per cui è necessario decidere in anticipo come trattare i campi non compilati.
- Escape (protezione dei caratteri)
- La procedura che fa trattare come semplice testo un carattere che avrebbe altrimenti un significato sintattico, come l'apice semplice presente all'interno di un valore.
- Inserimento in blocco
- La tecnica che raggruppa più righe in un'unica istruzione di inserimento, riducendo il numero di analisi sintattiche e di transazioni da completare e velocizzando così l'esecuzione.
Domande frequenti
A proposito — perché si dice che le istruzioni di inserimento siano lente
L'istruzione unica che riunisce più righe, generabile con questo strumento nella forma `INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`, può risultare assai più rapida dell'emissione di un'istruzione separata per ogni riga. Riunendole si riducono infatti sia il costo dell'analisi sintattica e della trasformazione in piano di esecuzione, sia quello del consolidamento della transazione, che altrimenti si ripeterebbe per ciascuna istruzione.
MySQL ha però un limite sulla dimensione dei pacchetti ammessi e PostgreSQL un limite analogo sui propri respingenti di comunicazione: stipando troppe righe in un'unica istruzione si può superare quella soglia e ottenere un errore. Nella pratica è consueto suddividere le istruzioni ogni qualche centinaio o qualche migliaio di righe.
Immettere il contenuto di un file CSV in una base di dati di prova è un'operazione che nello sviluppo si chiama preparazione dei dati iniziali ed è tanto frequente che molte intelaiature per il web offrono meccanismi appositi. Uno strumento di conversione come questo torna comodo per le verifiche di piccola scala e per le migrazioni di dati, dove ricorrere a quei meccanismi sarebbe eccessivo.