9. Проверка форматно-логического контроля
Проверка форматно-логического контроля включает в себя:
обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме;
необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.
Наименование проверки |
Код ошибки |
Кирилическое описание |
|---|---|---|
Проверка уникальности |
|
Дубликат файла/группы |
Проверка парсинга файла |
|
Ошибка парсинга: текст ошибки |
Проверка кодирования |
|
Кодировка файла не соответствует кодировке UTF-8 |
Проверка превышения предельного размера файла (больше 512 Мб) |
|
Слишком большой файл |
Проверка наличия данных в файле |
|
Пустой файл |
Проверка соответствия заголовков инфосхеме |
|
Структура файла не соответствует схеме |
Проверка соответствия числа столбцов в строке |
|
Некорректное число столбцов в строке |
Проверка соответствия типам полей |
|
Значение не соответствует типу требуемый тип |
Проверка уникальности полей |
|
Значение не отвечает требованиям уникальности |
Проверка регулярных выражений |
|
Значение не соответствует регулярному выражению регулярное выражение |
Проверка соответствия условию |
|
Значение не соответствует условию условие |
Таймаут валидации |
|
Истек таймаут валидации файла |
9.1. Синхронная проверка ФЛК
Примечание
синхронные проверки выполняются вне зависимости от настроек модуля REST-Uploader;
синхронные проверки являются блокирующими;
ошибки синхронных проверок возвращаются в теле ответа по REST-API.
К синхронным проверкам относятся:
проверка соответствия инфосхеме:
проверка соответствия имен и количества полей в заголовках;
проверка типа данных;
проверка экранирования данных: проверка соответствия числа столбцов по каждой строке;
проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM при загрузке удаляются начальные байты
efbbbf);проверка размера файла и наличия данных:
проверка предельного размера загружаемого файла 512Мб;
проверка наличия данных в файле.
9.2. Асинхронная проверка
Примечание
асинхронные проверки выполняются в зависимости от настроек модуля;
проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля);
список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла.
К асинхронным проверкам относятся:
проверка уникальности полей:
по сочетанию атрибутов (для комплексных ключей);
по заданному атрибуту;
сравнение значения с константой;
соответствие регулярному выражению.
Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов.
9.2.1. Проверка уникальности по одному или по сочетанию полей
Проверка уникальности проводится:
в рамках группы файлов, если заданы headers - для проверки в рамках группы обязательно заполнения всех полей:
group_id;group_file_num;group_file_count.
при проверке в рамках группы значения ключей для проверки уникальности в рамках группы хранится в Redis:
по всем файлам в рамках группы при наличии групповых атрибутов
по одному файлу, при отсутствии групповых атрибутов
Пример запроса для проверки уникальности по группе файлов:
--проверка по сочетанию полей
fields:
id:
uniq: true
uniq-with: [type,region]
--проверка уникальности по одному полю
snils:
match: "/^[-\s\d]{11}$/"
uniq: true
9.2.2. Проверка соответствия заданному значению
проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id;
проверка осуществляется для значений каждого поля в соответствии с заданным правилом;
проверка соответствия заданному значению включает в себя:
проверку сравнения с константой (
>,<,>=,<=,=,!=);проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html )
9.2.3. Поведение в случае таймаута валидации
Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию
составляет 60 минут.
В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с
обогащением отчета о найденных ошибках ошибкой validationTimeout.
В случае возникновения подобной ошибки рекомендуется:
проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;
увеличить значение
validation-timeoutи повторить загрузку данных.
9.3. Статусная модель
Статус |
Наименование |
Описание статусов |
|---|---|---|
-1 |
Загрузка данных в буффер |
Получение данных от клиента и загрузка их на сервер |
0 |
Запрос буфферизирован |
Загружаемые данные, получены сервером и находятся в очереди на обработку |
1 |
Ожидает открытия дельты |
Загружаемые данные находятся на сервере и ожидают открытия дельты в сервисе Prostore |
2 |
В обработке (модулем DATA-Uploader) |
Выполняется загрузка данных в Prostore модулями Витрины |
3 |
Успешно обработан |
Данные успешно загружены |
4 |
Ошибка обработки запроса |
В процессе загрузки данных возникла ошибка |
5 |
Идентификатор запроса не обнаружен |
Запрошен статус по неизвестному идентификатору запроса |
6 |
Форматно-логический контроль |
Выполняется форматно-логический контроль загружаемых данных |
7 |
Ошибки ФЛК |
В процессе выполнения форматно-логического контроля загружаемых данных возникли ошибки. При возникновении ошибки можно выполнить GET запрос |