Задача:
Допустим, у меня есть четыре 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: Прошу прощения, если я неправильно сформулировал некоторые вещи, не нужно быть разборчивым - если вы видите что-то неправильное, пожалуйста, дайте мне знать, и я исправлю формат вопроса.