2011-02-09 3 views
1

큰 (500 MB) * .csv 파일을 MySQL 데이터베이스로 가져 오려고합니다.LOAD DATA INFILE (* .csv) - 빈 셀을 무시하십시오.

그뿐만까지 해요 :

LOAD DATA INFILE '<file>' 
    REPLACE 
    INTO TABLE <table-name> 
    FIELDS 
     TERMINATED BY ';' 
     OPTIONALLY ENCLOSED BY '"' 
    IGNORE 1 LINES (#Header 
     <column-name1>, 
     <column-name2>, 
     ... 
    ); 

내가 (그것의 데이터 타입이 INT 인)이 coluns 중 하나에 문제가있을 수 - 내가 오류 메시지가 얻을 :

오류 코드 : 1366 잘못된 정수 값 : 행의 열에 '' '

이 줄은 * .csv 파일에서 보았습니다. 오류의 원인이되는 셀에는 공백이 있습니다 (예 : ... ;; ...).

이 열의 공백을 무시하도록 SQL에 알리는 방법은 무엇입니까?

* .csv 파일이 크기가 커서 나중에 더 큰 파일을 가져와야하므로 * .csv 파일을 편집하지 않는 것이 좋습니다. SQL 솔루션을 찾고 있습니다.

감사합니다.

[편집] 의 해결책이 :

LOAD DATA INFILE '<file>' 
    REPLACE 
    INTO TABLE <table-name> 
    FIELDS 
     TERMINATED BY ';' 
     OPTIONALLY ENCLOSED BY '"' 
    IGNORE 1 LINES (#Header 
     <column-name1>, 
     <column-name2>, 
     @var1 #the variable that causes the problem 
     ... 
    ) 
    SET <column-name-of-problematic-column> = CASE 
     WHEN @var1 = ' ' THEN NULL 
     ELSE @var1 
    END 
; 

답변

3

그래서 같은 SET 열을 추가 :

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, @var1) 
    SET column2 = @var1/100; 

당신은 '공간을 처리하는 식으로 @의 VAR1/(100)를 교체해야 '로 변환하고 -Infinity 또는 0 또는 42로 변환하십시오. 확실하지 않음 ...

+0

감사합니다! 작동했습니다! 설명서에서이 부분을 보았지만 설명대로 올바르게 할 수있었습니다. – speendo