2013-09-17 5 views
3

У меня проблема с импортом данных из csv в таблицу MySQL. Я пытаюсь использовать «Load Data входной_файл», но каждый раз, когда я пытаюсь запустить свой код, я получаюMySQL Load Data Infile - Nulls, вызывающий ошибку 1265: Data Truncated

"Error Code: 1265. Data Truncated for column 'DIP20' at row 237" 

Проблемы связана с тем, что колонна DIP20 в строке 237 является первым входом нуля в файле CSV, но мои исследования показывают, что нулевые записи должны быть прочитаны как 0s MySQL. Это останавливает запуск всего импорта, и никакие данные не попадают в мою таблицу. Я пытался найти способ обучить MySQL принимать Nulls, но не смог ничего найти.

Другие темы, которые я заметил в этой области, предложили перенести исходные данные, чтобы поместить «\ N» в каждый нуль, но это действительно нецелесообразно по нескольким причинам. Сначала у меня есть несколько Terrabytes данных для обработки, и, во-вторых, я должен покинуть эту базу данных с другими людьми, когда я закончу ее разработку, и ни у кого из них не будет времени, способности или желания редактировать данные, когда больше получено в будущее.

Если бы кто-нибудь мог предложить способ запустить этот импорт без падения на нуль, я был бы очень благодарен.

код Я пытаюсь запустить это:

LOAD DATA INFILE '\\\\server\\path\\morepath\\file.csv' 
INTO TABLE deidata.tbl_HHDataImport 
FIELDS TERMINATED BY ',' ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n' STARTING BY '' 
IGNORE 1 LINES 

Структура таблицы выглядит следующим образом:

table tbl_HHDataImport 
(
CNF_ID VARCHAR(10) PRIMARY KEY, 
Read_date Datetime, 
DIP1 float, 
DIP2 float, 
//...{48 DIP columns here}... 
DIP47 float, 
DIP48 float 
) 

(Это indended быть инсценировка таблица, из которой я трансформирует данные в соответствующую реляционную структуру. Это формат данных, которые я получаю, и которые я не могу изменить.)

Я привык к разработке БД в MS SQL Server, но в настоящее время я работаю g для некомпетентной некоммерческой организации с ограниченными возможностями, поэтому меня попросили работать с MySQL. Я думал, что с ним все наладилось, пока не ударил эту проблему. Я использую MySQL 5.6.13 и MySQL workbench 6.0.

Заранее спасибо

Том

+0

Эта ошибка обычно возникает, когда ввод длиннее, чем поле может принимать, убедитесь, что что-то еще входит в таблицу. – johnny

ответ

2

Я большой поклонник загрузка данных первого в промежуточные таблицы, а затем делать преобразование типов в базе данных.

То есть, создайте промежуточную таблицу, которая имеет все те же поля, но определена как varchar(255) или nvarchar(255) (в зависимости от содержимого файла csv).

Это должно загружаться правильно, без ошибок преобразования типа.

Затем сделать что-то вроде:

insert into tbl_HHDataImport(Read_Date, DIP1, . . .) 
    select now(), cast(DIP1 as float), . . . 
    from tbl_HHDataImport_staging; 

Если у вас есть проблемы преобразования, вы легко сможете определить его. Я предполагаю, что код должен быть таким:

insert into tbl_HHDataImport(Read_Date, DIP1, . . .) 
    select now(), 
      (case when DIP1 <> 'NULL' then cast(DIP1 as float) end), . . . 
    from tbl_HHDataImport_staging; 
+0

Это отсортировано, спасибо. Я сделал все поля в промежуточном столе в varchars, и импорт прошел нормально. Конверсии типов теперь должны быть cinch! Кажется, MySQL не хочет импортировать нули в виде числового типа. –