CodeGym /Corsi /SQL SELF /Preparazione delle tabelle per il caricamento dei dati da...

Preparazione delle tabelle per il caricamento dei dati da CSV

SQL SELF
Livello 23 , Lezione 2
Disponibile

Dai, finalmente ci occupiamo della preparazione delle tabelle per il caricamento massivo dei dati dai file CSV. Se pensi: "Ma perché dovrei preparare la tabella? Cosa c'è di difficile?", allora ti manca ancora un bel po' di esperienza col mondo reale. Nessun file è mai "perfetto". C'è sempre qualche rogna — duplicati, spazi inutili, errori nei tipi di dati o semplicemente una struttura che non combacia.

Vediamo come preparare bene il database, così il file CSV si carica senza drammi.

Prima di caricare un file CSV, decidi come i dati verranno salvati nel database. Questo significa che prima devi creare una tabella con la struttura giusta.

Esempio: caricamento dei dati degli studenti

Supponiamo di avere un file CSV students.csv con le info sugli studenti. Il suo contenuto è così:

id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics

Sulla base di questo creiamo una tabella:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,       -- Identificatore unico dello studente
    name VARCHAR(100) NOT NULL,  -- Nome dello studente (stringa fino a 100 caratteri)
    age INT CHECK (age > 0),     -- Età dello studente (deve essere maggiore di 0)
    email VARCHAR(100) UNIQUE,   -- Email unica
    major VARCHAR(100)           -- Specializzazione principale
);
  • id SERIAL PRIMARY KEY: Abbiamo aggiunto una chiave primaria per identificare in modo unico le righe. Se il tuo file CSV ha già identificatori unici, usa la colonna id dal file.
  • name VARCHAR(100) NOT NULL: Il nome dello studente deve essere presente e la lunghezza è limitata a 100 caratteri.
  • age INT CHECK (age > 0): L'età deve essere un numero e aggiungiamo un controllo per essere sicuri che sia sempre maggiore di 0.
  • email VARCHAR(100) UNIQUE: L'email deve essere unica, così evitiamo doppioni.
  • major VARCHAR(100): Indica la specializzazione principale dello studente. Qui non ci sono limiti particolari.

Le tue tabelle devono essere strutturate con criterio, così da adattarsi ai dati e allo stesso tempo proteggere da dati sbagliati. Questo riduce gli errori durante il caricamento.

Controllo dei dati prima del caricamento

I file CSV spesso riservano sorprese. Prima di caricare i dati, assicurati che rispettino la struttura della tabella.

Come controllare i dati?

  1. Corrispondenza delle colonne
    Assicurati che il numero di colonne nel CSV sia uguale a quello della tabella. Per esempio, se la tabella ha 5 colonne e il CSV ne ha 6, il caricamento fallirà.

  2. Tipi di dati
    Controlla che i dati in ogni colonna siano del tipo giusto. Ad esempio, nella colonna age ci devono essere solo numeri interi.

Strumenti per la validazione

Excel o Google Sheets. Apri il file in un editor di fogli di calcolo e assicurati che non ci siano righe vuote o celle con dati sbagliati.

Python. Usa la libreria pandas per controllare i tipi di dati:

import pandas as pd

# Leggiamo il CSV
df = pd.read_csv('students.csv')

# Controlliamo i dati
print(df.dtypes)  # Mostra i tipi di dati per ogni colonna
print(df.isnull().sum())  # Controlla i valori vuoti

Pulizia dei dati prima del caricamento

Quasi sempre i dati da fonti esterne hanno bisogno di una pulizia. Altrimenti rischi di trovarti errori durante il caricamento.

Problemi tipici con i file CSV

Righe o colonne vuote
Se manca un valore in una colonna obbligatoria (NOT NULL), avrai un errore.

Esempio di dati non validi:

id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics

Soluzione: Sostituisci i valori vuoti con qualcosa di valido. Ad esempio, sostituisci age vuoto con NULL.

Spazi inutili
Gli spazi all'inizio o alla fine delle stringhe possono creare problemi. Per esempio, "Alex" e "Alex " vengono visti come valori diversi.

Soluzione in Python: togli gli spazi inutili.

df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

Caratteri strani o codifica
Se il file contiene caratteri speciali non compatibili col database, il caricamento può fallire.

Esempio: Usa l'app iconv per cambiare la codifica:

iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv

Pulizia dei dati: esempio con Python

import pandas as pd

# Leggiamo il file
df = pd.read_csv('students.csv')

# Puliamo i dati
df['name'] = df['name'].str.strip()  # Togliamo gli spazi
df['email'] = df['email'].str.lower()  # Mettiamo l'email in minuscolo
df['age'] = df['age'].fillna(0)  # Riempiamo i valori vuoti per l'età
df['age'] = df['age'].astype(int)  # Convertiamo l'età in intero

# Salviamo le modifiche in un nuovo file
df.to_csv('cleaned_students.csv', index=False)

Controlla sempre i dati prima di caricarli. Ricorda: un bravo programmatore si risparmia tempo risolvendo i problemi in anticipo!

Checklist utile per preparare tabelle e dati

Prima di iniziare a lavorare con i CSV controlla:

  • La struttura della tabella corrisponde ai dati (colonne, tipi di dati, vincoli).
  • Il file CSV non contiene righe vuote, spazi inutili o caratteri strani.
  • La codifica del file è compatibile con PostgreSQL (meglio usare UTF-8).
  • Stai usando strumenti per analizzare e pulire i dati (tipo Python, Excel).

Ora sei pronto per caricare i dati dal CSV! Ma prima di farlo, assicurati che la tua tabella sia strutturata bene e i dati siano puliti. Nella prossima lezione continueremo a vedere come caricare i dati in PostgreSQL, inclusa la gestione degli errori e dei conflitti.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION