Как перехватить неверные файлы при загрузке большого файла .tsv в базу данных с помощью LOAD DATA INFILE LOCAL - PullRequest
0 голосов
/ 25 апреля 2019

Задача:

Допустим, у меня есть четыре tsv файла, которые позже загружаются в отдельные таблицы MySQL с использованием JAVA PreparedStatement:

Формат файлов: Table name - number of columns

  • Category - 2 columns
  • Keyword - 2 columns
  • Url - 3 columns
  • Relation - 3 columns

Схемы таблиц схожи с добавлением 2 столбцов на таблицу timestamp - CURRENT_TIMESTAMP и domain - что всегда одинаково для всех четырех файлов.

Эти файлы связаны между собой, поэтому я решил использовать Aurora MySQL из-за реляционного дизайна, который делает сопоставление для меня бесплатно.

Текущий подход:

Так что в основном я получаю архивный файл с этими 4 файлами, затем мне нужно загрузить их в БД отдельно. Чтобы повысить производительность и улучшить журналы, я разделяю файлы на 60000 строк каждый и загружаю их отдельно, используя LOAD DATA INFILE LOCAL. Это делается только в том случае, если файл содержит более 100 тыс. Строк.

Пример LOAD DATA INFILE LOCAL запрос - один и тот же запрос для всех 4 файлов, просто заменив имя таблицы и путь к файлу :

  • LOAD DATA LOCAL INFILE '/Users/CATEGORY.www.example.com.tab' INTO TABLE CATEGORY FIELDS TERMINATED BY '\t' ESCAPED BY '\b' LINES TERMINATED BY '\r\n' SET domain = 'www.example.com';

Проблемы:

Предупреждение SQL - 1261:

Предположим, файл Category содержит только одну строку и два столбца,

Пример одной строки в файле категории: *1 Book - два столбца, разделенных табуляцией.

Проблема в том, что я получаю предупреждение о том, что Row 1 doesn't contain data for all columns это потому, что в схеме есть два дополнительных столбца, которых нет в файле? или может потому что я использовал set domain=www.example.com?

Проверка данных, часть.1:

  • Я бы хотел убедиться, что в файле не более 2/3 столбцов при загрузке, есть ли способ ограничить количество столбцов при использовании LOAD DATA INFILE LOCAL, например, если имеется более двух столбцов, просто не удается загрузить файл вообще - но нужно дать мне некоторое предупреждение, чтобы я мог действовать по нему. БЕЗ ЧТЕНИЯ ВСЕГО ФАЙЛА

Проверка данных, часть.2

  • Допустим, foreign key constraint нарушается при загрузке одной части файла Relation, есть ли способ остановить импорт файла и выдать мне warning / exception, чтобы я мог действовать на Это?

У вас есть предложения?

Лучший, Спасибо

PS: Прошу прощения, если я неправильно сформулировал некоторые вещи, не нужно быть разборчивым - если вы видите что-то неправильное, пожалуйста, дайте мне знать, и я исправлю формат вопроса.

...