2010-04-30 12 views
9

In MySQL ho usato LOAD DATA LOCAL INFILE che funziona bene. Alla fine viene visualizzato un messaggio del tipo:MYSQL: Visualizza i record saltati dopo LOAD DATA INFILE?

Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0 

Come visualizzare il numero di riga dei record che sono stati saltati? SHOW warnings non funziona:

mysql> show warnings; 
Empty set (0.00 sec) 
+0

Nel mio caso le righe mancanti erano dovute a una dichiarazione di chiave primaria errata (avevo righe duplicate), così come mancava il qualificatore "null" per alcuni campi nella tabella (che a volte erano vuoti nella mia importazione). La correzione dello schema della tabella ha risolto il problema del record mancante. – patricksurry

risposta

4

è possibile creare una tabella temporanea rimozione degli elementi chiave primaria in modo da permettere duplicazioni, e quindi inserire i dati.

costruire un'istruzione SQL come

select count(column_with_duplicates) AS num_duplicates,column_with_duplicates 
from table 
group by column_with_duplicates 
having num_duplicates > 1; 

Questo vi mostrerà le righe con esuberi. Un altro modo è quello di scaricare semplicemente le righe che sono state effettivamente inserite nella tabella ed eseguire un comando di differenza file rispetto all'originale per vedere quali non sono stati inclusi.

3

Per chiunque inciampare su questo:

Un'altra opzione sarebbe quella di fare un SELECT INTO e diff i due file. Per esempio:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES (title, desc, is_viewable); 

SELECT title, desc, is_viewable INTO OUTFILE 'data_rows.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r' FROM my_table; 

quindi eseguire FileMerge (su Mac OS X) data.txt data_rows.txt per vedere le differenze. Se hai trovato un errore di accesso negato quando si fa il SELECT INTO assicurarsi di:

GRANT FILE ON *.* TO 'mysql_user'@'localhost'; 
flush privileges; 

Come utente root nel client mysql.

+1

Non so perché il voto negativo. Questo è solo un approccio alternativo che mi ha aiutato. –

7

Se non sono presenti avvisi, ma alcune righe sono state saltate, potrebbe significare che la chiave primaria è stata duplicata per le righe saltate.

Il modo più semplice per scoprire i duplicati è aprire il file locale in excel ed eseguire una rimozione duplicata sulla colonna della chiave primaria per vedere se ce ne sono.

1

I record dovrebbero essere saltati, quando non viene rispettato alcun vincolo di database. Controllare per i più comuni, come

  • duplicazione chiave primaria
  • condizione Chiave univoca
  • condizione di ripartizione
1

Io uso bash-riga di comando per trovare la riga duplicata nel file CSV:

awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1" 

quando le prime due colonne sono la chiave primaria.

Problemi correlati