Caricare dati da fonti esterne è un po' come invitare dei complici per un colpo. Vuoi essere sicuro che tutti arrivino con il mood giusto — o, nel nostro caso, nel formato giusto. Anche un piccolo errore nel file che carichi può portare a ore di debug, risultati sbagliati nelle query o semplicemente rovinare i dati nella tabella.
A volte nel file possono infilarsi righe vuote, spazi inutili, duplicati o, che ne so, testo dove dovrebbe esserci un numero. E se pure la codifica non è quella giusta, la tabella potrebbe proprio rifiutarsi di accettare il file.
Per evitare tutto ciò, è importante imparare a controllare i dati in anticipo — prima del caricamento o subito dopo. Ora vediamo come si fa.
Verifica della struttura dei dati
- Confronto della struttura della tabella con i dati caricati
Il primissimo step è assicurarsi che i dati siano caricati secondo la struttura della tua tabella. Per esempio, hai creato la tabella students per salvare info sugli studenti:
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
birth_date DATE,
email VARCHAR(100) UNIQUE
);
Se hai caricato i dati in questa tabella, per cominciare dai solo un'occhiata a cosa c'è dentro:
SELECT * FROM students;
Le righe restituite ti mostreranno tutti i record nella tabella. Se la struttura dei dati nel file CSV non corrisponde a quella della tabella, vedrai errori già in fase di caricamento. Però anche se non ci sono errori, non vuol dire che i dati siano perfetti.
- Verifica dei tipi di dati
Usa le funzioni di PostgreSQL per controllare il contenuto delle colonne. Per esempio:
Controllo dei valori vuoti (NULL):
Se nella tua tabella ci sono campi obbligatori NOT NULL, devi assicurarti che siano davvero compilati. Tipo così:
SELECT * FROM students WHERE first_name IS NULL OR last_name IS NULL;
Controllo dei formati dei dati:
A volte i dati possono essere caricati come stringhe, anche se dovrebbero essere date o numeri. Per controllare, usa le funzioni giuste di PostgreSQL, tipo:
SELECT * FROM students WHERE birth_date::DATE IS NULL;
Questa query ti mostra le righe dove il campo birth_date non si può convertire in DATE.
Verifica della presenza di errori
- Ricerca di duplicati
I record duplicati sono uno dei problemi più comuni. Supponiamo che i tuoi dati debbano essere unici per indirizzo email (email). Per controllare la presenza di duplicati, usa questa query:
SELECT email, COUNT(*)
FROM students
GROUP BY email
HAVING COUNT(*) > 1;
Questa query ti mostra tutte le email ripetute e quante volte compaiono. Se la tua colonna email è impostata come UNIQUE, caricare dati così causerà un errore.
- Verifica di dati non validi
Se ti aspetti che il campo birth_date contenga solo date di nascita, devi assicurarti che tutti i valori siano in un intervallo valido. Tipo così:
SELECT * FROM students
WHERE birth_date < '1900-01-01' OR birth_date > CURRENT_DATE;
Questa query mostra le righe dove la data di nascita è troppo lontana dalla realtà.
Lavorare con dati non validi
Dopo che hai trovato i problemi, bisogna sistemarli. Vediamo come si fa.
- Eliminazione di dati non validi
Se scopri che nella tabella ci sono righe con nomi vuoti, puoi cancellarle:
DELETE FROM students
WHERE first_name IS NULL OR last_name IS NULL;
Ma occhio a cancellare i dati! Magari sono importanti, quindi forse è meglio aggiornarli invece di eliminarli.
- Aggiornamento dei dati
Se trovi righe con dati mancanti, puoi aggiornarle usando altre fonti o facendo delle ipotesi. Esempio:
UPDATE students
SET email = 'unknown@example.com'
WHERE email IS NULL;
Visualizzazione dei dati per l'analisi
- Uso delle funzioni di aggregazione
A volte per controllare i dati è utile calcolare degli aggregati. Per esempio, per sapere quanti studenti sono nati ogni anno, fai così:
SELECT EXTRACT(YEAR FROM birth_date) AS year, COUNT(*)
FROM students
GROUP BY year
ORDER BY year;
Questa query ti mostra la distribuzione per anno e può segnalare anomalie (tipo se in un anno c'è un gruppo di studenti insolitamente grande).
- Verifica dei dati tramite vincoli
Assicurati che i dati rispettino i vincoli definiti nella tabella, per esempio così:
Controllo dell'unicità:
SELECT DISTINCT email
FROM students;
Se il numero di valori unici è minore del numero totale di righe — hai dei duplicati.
Controllo dei range di valori:
SELECT * FROM students
WHERE LENGTH(first_name) > 50 OR LENGTH(last_name) > 50;
Questo ti aiuta a controllare che i nomi degli studenti non superino il limite di 50 caratteri.
Cosa fare se va tutto storto?
A volte i dati sono talmente messi male che conviene ricaricarli da zero.
Cancella tutte le righe dalla tabella:
TRUNCATE TABLE students;Sistema il file CSV originale con Python, Excel o qualsiasi altro tool.
- Ricarica i dati usando il comando
COPY.
Applicazione pratica
Le skill di validazione dei dati ti serviranno ogni volta che lavori con fonti esterne. Ai colloqui, per esempio, potrebbero chiederti di scrivere una query SQL per controllare la qualità dei dati in ingresso — è una cosa normalissima. Nei progetti veri la situazione non è più semplice: i dati dal cliente o da altri reparti arrivano quasi sempre con errori, e sarai proprio tu quello che li nota per primo e può sistemare tutto prima che diventi un bug.
Controllare regolarmente i dati aiuta a tenere il database in ordine — e non è solo una formalità, ma un vero risparmio di tempo, nervi e fatica per tutto il team. Quindi se sai capire al volo se i dati sono ok, sei già un passo più vicino a diventare un master di PostgreSQL.
GO TO FULL VERSION