제정신 형식으로 리팩터링 할 수 있도록 MySQL 테이블에로드하려고하는 클라이언트의 표준화되지 않은 이벤트 일기 CSV가 있습니다. CSV 파일의 모든 열에 대해 하나의 필드가있는 'CSVImport'라는 테이블을 만들었습니다. CSV에는 99 개의 열이 포함되어 있으므로 그 자체로는 어려운 작업이었습니다.
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);
테이블에 제한 조건이 없으며 모든 필드는 카운트 (INT로 표시됨), 예 / 아니오 (BIT로 표시됨), 가격 (DECIMAL로 표시됨) 및 텍스트 흐림 ( TEXT로 표시).
파일에 데이터를로드하려고했습니다.
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 |
...
전체 테이블이로 채워집니다 NULL
.
문제는 텍스트 흐림 효과에 두 줄 이상이 포함되어 있으며 MySQL은 각 새 줄이 하나의 databazse 행에 해당하는 것처럼 파일을 구문 분석하는 것입니다. 문제없이 파일을 OpenOffice에로드 할 수 있습니다.
clientdata.csv 파일은 2593 행과 570 개의 레코드를 포함합니다. 첫 번째 줄에는 열 이름이 있습니다. 쉼표로 구분되고 텍스트는 큰 따옴표로 구분됩니다.
최신 정보:
확실하지 않은 경우 다음 설명서를 읽으십시오. http://dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA
OpenOffice가 유추하기에 충분히 똑똑하다는 진술 에 몇 가지 정보를 추가 했으며 이제 올바른 수의 레코드를로드합니다.
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;
그러나 여전히 완전한 NULL
레코드 가 많이 있으며 로드 된 데이터가 올바른 위치에없는 것 같습니다.