MYSQL: отображение пропущенных записей после LOAD DATA INFILE?
В MySQL я использовал LOAD DATA LOCAL INFILE
, который отлично работает. В конце я получаю сообщение вроде:
Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0
Как просмотреть номер строки пропущенных записей? SHOW warnings
не работает:
mysql> show warnings;
Empty set (0.00 sec)
Ответы
Ответ 1
Если не было никаких предупреждений, но некоторые строки были пропущены, это может означать, что первичный ключ был дублирован для пропущенных строк.
Самый простой способ найти дубликаты - открыть локальный файл в excel и выполнить дублирующее удаление в столбце первичного ключа, чтобы узнать, есть ли какие-либо файлы.
Ответ 2
Вы можете создать временную таблицу, удаляющую элементы первичного ключа, чтобы она позволяла дублирование, а затем вставлять данные.
Создайте инструкцию SQL, например
select count(column_with_duplicates) AS num_duplicates,column_with_duplicates
from table
group by column_with_duplicates
having num_duplicates > 1;
Это покажет вам строки с избыточностью. Другой способ состоит в том, чтобы просто выгрузить строки, которые были фактически вставлены в таблицу, и запустить команду отличия файлов от оригинала, чтобы увидеть, какие из них не были включены.
Ответ 3
Для тех, кто наткнулся на это:
Другой вариант - сделать SELECT INTO и разделить два файла. Например:
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES (title, desc, is_viewable);
SELECT title, desc, is_viewable INTO OUTFILE 'data_rows.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r' FROM my_table;
Затем выполните файл FileMerge (в Mac OS X) data.txt data_rows.txt, чтобы увидеть различия. Если вы получаете ошибку отказа в доступе при выполнении SELECT INTO, убедитесь, что вы:
GRANT FILE ON *.* TO 'mysql_user'@'localhost';
flush privileges;
Как пользователь root в клиенте mysql.
Ответ 4
Записи будут пропущены, когда любое ограничение базы данных не будет выполнено. Проверьте общие, такие как
- Дублирование первичного ключа
- Уникальное ключевое условие
- Условие раздела
Ответ 5
Я использую bash для командной строки, чтобы найти дублируемую строку в файле csv:
awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1"
когда два первых столбца являются первичным ключом.
Ответ 6
В качестве дополнения к исходному вопросу, в NodeJS я хочу записать пропущенный счетчик в переменную снизу: message: Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0
Как я могу получить этот пропущенный счет (например, как у нас warningCount в MySQL NPM)