2012-04-16 22 views
6

Estoy tratando de encontrar una forma de comparar eficientemente un archivo CSV con una base de datos MySQL (Más de 1 millón de filas para comparar), I He hecho algo similar antes de simplemente colocar todas las filas en una matriz, pero eso funcionará para un pequeño número de filas debido a la sobrecarga de memoria.Comprobando si un archivo CSV grande (1m filas) tiene los mismos datos que una tabla MySQL

Mi pregunta es, ¿hay una forma recomendable de hacerlo? ¿Alguna biblioteca o algo que pueda ayudar?

Agradecería sus respuestas.

+2

Por "comparar" estás probando todos los campos o sólo determinados campos? ¿Es esta una tarea de fondo o es un usuario esperando mientras sucede? Si pudiera proporcionar más detalles sobre lo que realmente está tratando de hacer (p. Ej., El motivo de la comparación), es posible que alguien pueda sugerir una forma diferente de abordar el problema. – gregmac

+0

Si tiene tantas filas, ¿qué le parece cargar el archivo CSV en una tabla temporal y compararlo? – F21

+0

Solo estoy tratando de asegurarme de que los datos en mi base de datos (previamente importados) coincidan con los datos que tiene el archivo CSV e imprima (para mí) el número de filas que coinciden y el número de filas que no coincide partido. –

Respuesta

10

Suponiendo que se trata de una comprobación de cordura y pretende tener 0 diferencias, ¿qué tal desechar la base de datos como un archivo CSV del mismo formato y luego usar herramientas de línea de comando (diff o cmp) para comprobar que coincidan? ?

Debería asegurarse de que su volcado CSV está ordenado & con el mismo formato que el archivo original, por supuesto.

+0

+1 nice answer. – dqhendricks

+0

En realidad esa es una buena opción –

+0

El problema con eso es que no sabré dónde está el error, cuál es la diferencia o en qué filas está el problema. –

2

Además de @ hay una excelente respuesta, también puede calcular un hash, tanto en MySQL como en el archivo original y luego comparar los dos.

+0

Buena respuesta también, pero no puede encontrar fácilmente el error si hay uno –

+0

No, a menos que haga un hash por fila. –

0

Nunca lo intenté yo mismo, pero MySQL tiene un tipo de tabla CSV. Es posible que MySQL lea el archivo directamente como si fuera simplemente otra tabla de base de datos. Probablemente necesites crear primero una tabla vacía que coincida con el archivo CSV que tienes, solo para que el archivo .frm se cree en el directorio de datos. Luego puede reemplazar el archivo .csv vacío en el directorio de datos con su archivo CSV. Es posible que deba ejecutar una tabla de reparación ya que no realizó una importación.

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

Cuestiones relacionadas