Pipeline dati
Caricare
I dati puliti entrano in un database MySQL su Aiven, condiviso da tutto il team. Con Python, nell'ordine giusto e a blocchi.
In breve
- Un database per tuttiMySQL in cloud su Aiven: ogni membro del team lavora sulle stesse tabelle, senza copie locali da sincronizzare.
- Prima i padri, poi i figliLe tabelle indipendenti entrano per prime. Le chiavi esterne rifiutano un record che punta a qualcosa che non esiste ancora.
- A blocchi, non riga per riga
executemany()invia 100 record per volta, 5.000 per i rifornimenti. Meno viaggi verso il cloud.
L'ordine di caricamento
Da sinistra a destra, come in inserimento_dati.py. Sotto ogni tabella, le tabelle da cui dipende.
-
Tabelle indipendenti
Nessuna chiave esterna
- drivers
- customers
- routes
- trucks
- trailers
- facilities
-
Il carico
Serve sapere cliente e tratta
- loadscustomers, routes
-
Il viaggio
Il carico, chi guida e con cosa
- tripsloads, drivers, trucks, trailers
-
Eventi e metriche
Si agganciano a viaggi e mezzi
- maintenance_recordstrucks
- truck_utilization_metricstrucks
- fuel_purchasestrips, trucks, drivers
- delivery_eventsloads, trips, facilities
- safety_incidentstrips, trucks, drivers
- driver_monthly_metricsdrivers
Riga per riga o a blocchi
Ogni invio a un database in cloud è un andata e ritorno in rete. Con 1.000 record la differenza si vede subito.
INSERT per recordexecutemany() per bloccobatch_size = 100
for i in range(0, len(data), batch_size):
batch = data[i:i + batch_size]
cursor.executemany(query, batch)
conn.commit()
Il ciclo divide i record in gruppi e ne invia uno per volta. Il commit() finale conferma tutto nel database.
Perché due misure di blocco.
Per quasi tutte le tabelle bastano 100 record per invio. fuel_purchases contiene molte più righe: con blocchi da 5.000 il caricamento resta rapido.
Il risultato è un processo automatico, ordinato e ripetibile, che regge anche quando i dati crescono.