У меня есть файл, который может содержать от 3 до 4 столбцов числовых значений, разделенных запятой. Пустые поля определяются за исключением того, что они находятся в конце строки:
1,2,3,4,5
1,2,3,,5
1,2,3
Следующая таблица была создана в MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Поле | Тип | Null | Ключ | По умолчанию | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | один | int (1) | ДА | | NULL | | | два | int (1) | ДА | | NULL | | | три | int (1) | ДА | | NULL | | | четыре | int (1) | ДА | | NULL | | | пять | int (1) | ДА | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Я пытаюсь загрузить данные с помощью команды MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Полученная таблица:
+ ------ + ------ + ------- + ------ + ------ + | один | два | три | четыре | пять | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Проблема заключается в том, что когда поле в необработанных данных пусто и не определено, MySQL по какой-то причине не использует значение по умолчанию для столбцов (которое равно NULL) и использует ноль. NULL используется правильно, когда поле полностью отсутствует.
К сожалению, я должен уметь различать NULL и 0 на этом этапе, поэтому любая помощь будет оценена.
Спасибо С.
редактировать
Вывод ШОУ ПРЕДУПРЕЖДЕНИЙ:
+ --------- + ------ + -------------------------------- ------------------------ + | Уровень | Код | Сообщение | + --------- + ------ + -------------------------------- ------------------------ + | Предупреждение 1366 | Неверное целочисленное значение: '' для столбца 'четыре' в строке 2 | | Предупреждение 1261 | Строка 3 не содержит данных для всех столбцов | | Предупреждение 1261 | Строка 3 не содержит данных для всех столбцов | + --------- + ------ + -------------------------------- ------------------------ +
mysql
csv
load-data-infile
Спирос
источник
источник
LOAD DATA
. Смотрите раздел примеров d6tstack SQL об изменениях схемы данных.Ответы:
Это будет делать то, что вы хотите. Он считывает четвертое поле в локальную переменную, а затем устанавливает фактическое значение поля в NULL, если локальная переменная заканчивается пустой строкой:
Если они все, возможно, пустые, то вы бы прочитали их все в переменные и имели бы несколько операторов SET, например:
источник
''
когда они загружают CSV (используяIFNULL(Col,'')
вSELECT INTO OUTFILE
запросе) для Excel, но затем загрузки принимают их как ноль против необходимости иметь дело\N
в CSV. Спасибо!0
которые должны быть преобразованы вNULL
(поскольку невозможно получить нулевое значение для рассматриваемых данных), а также пустые строки. Как убедиться, что и нули, и пустые строки преобразованы вNULL
?nullif(@vone, 0)
.Руководство MySQL гласит:
Таким образом, вам нужно заменить заготовки на \ N, как это:
источник
Fields enclosed by: "
то , что"\N"
из"name",\N,"stuff"
\N
не принимается как обозначающийNULL
. Вместо этого используйтеNULL
, как в этом примере:"name","age",NULL,"other","stuff"
Поведение отличается в зависимости от конфигурации базы данных. В строгом режиме это выдаст ошибку, иначе предупреждение. Следующий запрос может быть использован для определения конфигурации базы данных.
источник
Предварительно обработайте введенный CSV, чтобы заменить пустые записи на \ N.
Попытка в регулярном выражении: s / ,, /, \ n, / g и s /, $ /, \ N / g
Удачи.
источник
(variable1, @ variable2, ..) SET variable2 = nullif (@ variable2, '' или '') >> вы можете поставить любое условие
источник
показать переменные
Show variables like "`secure_file_priv`";
Примечание. Храните CSV-файл в месте, указанном вышеупомянутой командой.
Примечание: здесь
date
столбец ' ' имеет некоторые пустые значения в файле csv.источник