2012-04-16 5 views
6

Sto cercando un modo per confrontare in modo efficiente un contenuto di file CSV con un database MySQL (oltre 1 milione di righe da confrontare), I Ho fatto qualcosa di simile prima di mettere tutte le righe in un array ma che funzionerà per un piccolo numero di righe a causa dell'overloading della memoria.Verificare se un file CSV di grandi dimensioni (1m righe) ha gli stessi dati di una tabella MySQL

La mia domanda è, c'è un modo raccomandabile per farlo? Qualsiasi biblioteca o qualcosa che potrebbe aiutare?

Vorrei appropiare le vostre risposte.

+2

Con "confrontare" stai testando tutti i campi o solo campi particolari? Si tratta di un'attività in background o di un utente in attesa mentre accade? Se potessi fornire maggiori dettagli su ciò che stai effettivamente cercando di fare (ad esempio, il motivo del confronto) qualcuno potrebbe essere in grado di suggerire un modo diverso di affrontare il problema. – gregmac

+0

Se si hanno così tante righe, che ne dici di caricare il CSV in una tabella temporanea e fare il confronto con quello? – F21

+0

Sto solo cercando di assicurarmi che i dati nel mio database (precedentemente importati) corrispondano con i dati del file CSV e stampino (per me) il numero di righe corrispondenti e il numero di righe che non incontro. –

risposta

10

Supponendo che si tratti di un controllo di integrità e si desideri ottenere 0 differenze, come scaricare il database come file CSV dello stesso formato e quindi utilizzare gli strumenti della riga di comando (diff o cmp) per verificare che corrispondano ?

Dovresti assicurarti che il tuo dump CSV sia ordinato con il formato & uguale al file originale.

+0

+1 bella risposta. – dqhendricks

+0

In realtà questa è una buona opzione –

+0

Il problema è che non saprò dove si trova l'errore, qual è la differenza o in quale file è il problema. –

2

Oltre all'eccellente risposta di therefromhere, è possibile anche calcolare un hash, sia in MySQL che nel file originale e quindi confrontare i due.

+0

Anche la risposta è buona, ma non è possibile individuare facilmente l'errore se c'è un numero –

+0

, a meno che non si esegua un hash per riga. –

0

Non l'ho mai provato, ma MySQL ha un tipo di tabella CSV. È possibile che MySQL legga il file direttamente come se fosse solo un'altra tabella di database. Probabilmente dovresti prima creare una tabella vuota che corrisponda al file CSV che hai, solo che il file .frm sia stato creato nella directory dei dati. Quindi puoi sostituire il file .csv vuoto nella directory dei dati con il tuo file CSV. Potrebbe essere necessario eseguire una tabella di riparazione poiché non è stata eseguita un'importazione.

http://dev.mysql.com/doc/refman/5.1/en/csv-storage-engine.html

Problemi correlati