2011-02-09 2 views
1

Я собираюсь импортировать большой (500 МБ) *. 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>, 
     ... 
    ); 

У меня есть проблема с одним из coluns (это тип данных INT) - я получаю сообщение об ошибке: Код

Ошибка : 1366 Неправильное целочисленное значение: '' для столбца в строке

Я просмотрел эту строку в * .csv-файле. Ячейка, вызывающая ошибку, имеет только пробел внутри (например: ...;; ...).

Как я могу сказать SQL игнорировать пробелы в этом столбце?

Поскольку файл * .csv очень большой, и мне нужно импортировать еще большие, я бы хотел избежать редактирования * .csv-файла; Я ищу SQL-решение.

Спасибо!

[EDIT] решение:

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 COLUMN следующим образом:

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

Вам необходимо заменить @ var1/100 с выражением, которое обрабатывает «пространство 'и конвертировать в -Infinity или 0 или 42 ... не уверены.

+0

спасибо! это сработало! Я видел эту часть в руководстве, но я просто мог понять это с вашим объяснением – speendo