Tengo un CSV de diario de eventos no normalizado de un cliente que estoy tratando de cargar en una tabla MySQL para poder refactorizar en un formato correcto. Creé una tabla llamada 'CSVImport' que tiene un campo para cada columna del archivo CSV. El CSV contiene 99 columnas, por lo que esta fue una tarea bastante difícil en sí misma:
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 en la tabla, y todos los campos contienen valores VARCHAR (256), excepto las columnas que contienen recuentos (representados por INT), sí / no (representado por BIT), precios (representados por DECIMAL) y borrones de texto ( representado por TEXTO).
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 |
...
Toda la 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 nueva línea 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 comillas dobles.
ACTUALIZAR:
En caso de duda, lea el manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Agregué información a la LOAD DATA
declaración de que OpenOffice era lo suficientemente inteligente como para inferir, y ahora carga la cantidad correcta 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 muchos NULL
registros completos , y ninguno de los datos que se cargaron parece estar en el lugar correcto.