2010-04-30 19 views
9

En MySQL he usado LOAD DATA LOCAL INFILE que funciona bien. Al final aparece un mensaje como:MYSQL: Mostrar registros omitidos después de CARGAR DATOS INFILE?

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

¿Cómo puedo ver el número de línea de los registros que se saltaron? SHOW warnings no funciona:

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

En mi caso, las filas faltantes se debían a una declaración de clave primaria errónea (tenía filas duplicadas), así como falta el calificador 'nulo' para algunos campos de la tabla (que a veces estaban vacíos en mi importación). La reparación del esquema de la mesa resolvió mi problema de registro faltante. – patricksurry

Respuesta

4

Se puede crear una tabla temporal retirar los elementos clave principal para que permita duplicaciones, y luego insertar los datos.

construir una instrucción SQL como

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

Esto le mostrará las filas con redundancias. Otra forma es simplemente volcar las filas que realmente se insertaron en la tabla, y ejecutar un comando de diferencia de archivos contra el original para ver cuáles no se incluyeron.

3

Para cualquiera tropezar con esto:

Otra opción sería hacer un SELECT INTO y Diff los dos archivos. Por ejemplo:

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; 

luego ejecutar FileMerge (en Mac OS X) datos.txt data_rows.txt para ver las diferencias. Si obtiene un error de acceso denegado al hacer el SELECT INTO asegúrese de que:

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

Como usuario root en el cliente mysql.

+1

No estoy seguro de por qué el voto hacia abajo. Este es solo un enfoque alternativo que me ayudó. –

7

Si no hubo advertencias, pero se omitieron algunas filas, puede significar que la clave principal se duplicó para las filas omitidas.

La manera más fácil de encontrar duplicados es abrir el archivo local en Excel y realizar una eliminación duplicada en la columna de clave principal para ver si hay alguno.

1

Se omitirán los registros cuando no se cumpla ninguna restricción de la base de datos. Compruebe si las comunes como

  • duplicación de llaves primaria
  • única condición clave
  • condición de reparto
1

utilizo fiesta de línea de comandos para encontrar la fila duplicada en el archivo csv:

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

cuando las dos primeras columnas son la clave principal.

Cuestiones relacionadas