Bulk Inserimento di dati con duplicati o inserimento riga per riga senza

1

Sto caricando una grande quantità di dati (2000 file con circa 30.000 righe, 30 colonne) da utilizzare in un'applicazione Django.

I file sono basati su 40 modelli diversi. I nomi delle colonne sono coerenti all'interno dei modelli ma non tra i modelli. Abbiamo mappato manualmente le colonne ai nomi canonici per i campi attualmente in uso e stiamo pianificando di archiviare il resto, non mappato in json per un potenziale utilizzo futuro. Ad esempio, in un modello, il prezzo dell'articolo può essere chiamato price_per_unit e in un altro, si chiamerebbe the_unit_price e dovremmo mappare entrambi a unit_price .

Il nostro attuale processo è caricare i file Excel nel campo json di Postgres (inserimento di massa con Django) e da lì in Panda per normalizzare le colonne e poi in un paio di tabelle di database di Posgres (una tabella ha la data e item_id, l'altra la tabella descrive l'articolo).

Uso l'inserto di massa di Django ma, poiché lo sto utilizzando, creo elementi duplicati che dovrò tornare indietro e rimuovere. Non utilizzare l'inserimento di massa e l'inserimento riga per riga (per garantire che non crei duplicati mentre procedo) richiede troppo tempo in Django (oltre 5 minuti per file).

Devo continuare a ripulire i duplicati in seguito? Sono preoccupato che si ridimensionerà in base alla dimensione complessiva del nostro database, quindi funziona per ora ma potrebbe non funzionare più tardi.

    
posta Zev 06.11.2018 - 22:56
fonte

1 risposta

2

La solita strategia consiste nell'inserire in blocco una tabella diversa (una tabella di "staging") e quindi unire la destinazione. Un ulteriore vantaggio è che non si memorizzano i dati colonnari come blob JSON, ma come voci nelle tabelle di staging.

Sarei tentato di disporre di una tabella di gestione temporanea per ogni modello e di stored procedure per eseguire la mappatura.

    
risposta data 07.11.2018 - 11:02
fonte

Leggi altre domande sui tag