Ho un CSV diario di eventi non normalizzato da un client che sto cercando di caricare in una tabella MySQL in modo da poter eseguire il refactoring in un formato sano. Ho creato una tabella chiamata "CSVImport" che ha un campo per ogni colonna del file CSV. Il CSV contiene 99 colonne, quindi questo è stato un compito abbastanza difficile in sé:
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);
Nessun vincolo è presente nella tabella e tutti i campi contengono valori VARCHAR (256), ad eccezione delle colonne che contengono conteggi (rappresentati da INT), sì / no (rappresentato da BIT), prezzi (rappresentati da DECIMAL) e sfocatura del testo ( rappresentato da TEXT).
Ho provato a caricare i dati nel file:
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 |
...
L'intero tavolo è pieno NULL
.
Penso che il problema sia che le sfocature del testo contengono più di una riga e MySQL sta analizzando il file come se ogni nuova riga corrispondesse a una riga del database. Posso caricare il file in OpenOffice senza problemi.
Il file clientdata.csv contiene 2593 righe e 570 record. La prima riga contiene i nomi delle colonne. Penso che sia delimitato da virgole e il testo apparentemente delimitato da una doppia virgoletta.
AGGIORNARE:
In caso di dubbi, leggere il manuale: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Ho aggiunto alcune informazioni LOAD DATA
all'affermazione che OpenOffice era abbastanza intelligente da inferire, e ora carica il numero corretto di record:
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;
Ma ci sono ancora molti NULL
record completi e nessuno dei dati caricati sembra essere nel posto giusto.