Нужно ли предварительно обрабатывать текстовый файл перед использованием LOAD DATA INFILE? И если да, то какой будет лучший способ предварительной обработки?
Вы должны сделать это во время импорта. Примерно так:
LOAD DATA INFILE 'c:/path to file/file.txt'
INTO TABLE table_name
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
-- the fields which values are set directly,
-- and intermediate variables for values which must be processed,
-- positioned according to CSV structure
(field1, field2, @variable3, field4, ...)
-- process the values in the variables and set fields values
SET field3 = CASE WHEN @variable3 = '' THEN 0 ELSE @variable3 END;
(field1, field2, @variable3, field4, ...)
- это место назначения полей данных, проанализированных из каждой строки исходного файла CSV.
Т.е. первое проанализированное значение из исходной строки, которая обрабатывается в данный момент, будет присвоено непосредственно полю field1
таблицы назначения. То же самое со вторым значением и field2
.
Третье проанализированное значение будет присвоено пользовательской локальной переменной @variable3
.
Четвертое проанализированное значение снова будет назначено таблице поле. И так далее, если присутствует больше данных и кода.
После того, как вся строка проанализирована в соответствии со спецификацией, описанной выше, выполняется следующая директива обработки: SET field3 = CASE WHEN @variable3 = '' THEN 0 ELSE @variable3 END
.
Это просто. Если значение переменной @variable3
было присвоено пустой строке, то значение 0
присваивается полю field3
анализируемой записи, в противном случае значение, проанализированное из текущей строки исходного файла, присваивается этому полю без модификация.
После того, как обе строки обработали всю запись (все поля, которым было присвоено некоторое значение), сохраняются в одну новую запись в таблице назначения обычным способом (присваивая значения по умолчанию для не перечисленных полей, проверок, триггеров ...).
После сохранения записи следующая строка из CSV читается, анализируется, обрабатывается, сохраняется, затем следующая строка ... и т. Д. До конца файла или какой-либо ошибки.