Tengo un CSV de diario de eventos no normalizado de un cliente que estoy tratando de cargar en una tabla MySQL para que pueda refactorizar a un formato sano. Creé una tabla llamada 'CSVImport' que tiene un campo para cada columna del archivo CSV. El CSV contiene 99 columnas, por lo que esta era una tarea bastante difícil en sí mismo:Cómo importar archivos CSV a la tabla MySQL
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
No hay restricciones están sobre la mesa, y todos los campos de bodega (256) valores VARCHAR, excepto las columnas que contienen los recuentos (representado por INT), sí/no (representado por BIT), precios (representados por DECIMAL) y borrones de texto (representados por TEXT).
traté de cargar datos en el archivo:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
El conjunto de mesa está llena de NULL
.
Creo que el problema es que los borrones de texto contienen más de una línea, y MySQL está analizando el archivo como si cada línea nueva correspondiera a una fila de databazse. Puedo cargar el archivo en OpenOffice sin ningún problema.
El archivo clientdata.csv contiene 2593 líneas y 570 registros. La primera línea contiene nombres de columna. Creo que está delimitado por comas, y el texto aparentemente está delimitado con una doble cita.
ACTUALIZACIÓN:
En caso de duda, consulte el manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
he añadido algo de información para la declaración LOAD DATA
que OpenOffice era lo suficientemente inteligente como para inferir, y ahora se carga el número correcto de registros:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Pero todavía hay un montón de registros completamente NULL
, y ninguno de los datos que quedó cargado parece estar en el lugar correcto.
Y si está en OSX [Sequel Pro] (http://www.sequelpro.com/) tiene una herramienta de importación impresionante y es ** GRATIS ** ;-) – Merrick
Me sorprende que el póster original respondió su propia pregunta mejor que nadie ... No sé por qué tanta gente está tan dispuesta a dar recomendaciones de software cuando hay un comando SQL existente, que puede ser * programático * en lugar de basado en la interfaz de usuario. No sé de nadie más, pero programático significa para mí que puedo tener secuencias de comandos configuradas para importar automáticamente archivos en marcas de tiempo, mientras que la basada en la interfaz de usuario es puramente manual. –
@ChrisCirefice: Creo que la respuesta aceptada lo explica bien. Necesitaba ayuda para crear manualmente el comando 'cargar datos', que un programa gráfico puede ayudar. Una vez que el programa gráfico había creado el comando 'cargar datos', podía reutilizarlo programáticamente. – AlexC