.. _rest_uploader_format: Проверка форматно-логического контроля ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Поверка форматно-логического контроля включают в себя обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме и необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме. .. table:: Список реализованных проверок +---------------------------+-------------------+---------------------------------+ | Наименование проверки | Код ошибки | Кирилическое описание | +===========================+===================+=================================+ | проверка уникальности | dublicate | дубликат файла/группы | +---------------------------+-------------------+---------------------------------+ | Проверка парсинга файла | parsingErr | ошибка парсинга: *текст ошибки* | +---------------------------+-------------------+---------------------------------+ | проверка кодирования | encodingErr | кодировка файла не | | | | соответствует кодировке | | | | UTF-8 | +---------------------------+-------------------+---------------------------------+ | Проверка превышения | tooLargeFile | слишком большой файл | | предельного размера файла | | | | (больше 512 Мб)| | | | +---------------------------+-------------------+---------------------------------+ | Проверка наличия данных | emptyFile | пустой файл | | в файле | | | +---------------------------+-------------------+---------------------------------+ | проверка соответствия | wrongMetadata | структура файла не | | заголовков инфосхеме | | соответствует схеме | +---------------------------+-------------------+---------------------------------+ | проверка соответствия | wrongFieldsCount | некорректное число | | числа столбцов в строке | | столбцов в строке | +---------------------------+-------------------+---------------------------------+ | проверка соответствия | wrongFieldType | значение не соответствует | | типам полей | | типу *требуемый тип* | +---------------------------+-------------------+---------------------------------+ | проверка уникальности | nonUniq | значение не отвечает | | полей | | требованиям уникальности | +---------------------------+-------------------+---------------------------------+ | проверка регулярных | nonMatchRegex | значение не соответствует | | выражений | | регулярному выражению | | | | *регулярное выражение* | +---------------------------+-------------------+---------------------------------+ | проверка соответствия | nonMatchConstant | значение не соответствует | | условию | | условию *условие* | +---------------------------+-------------------+---------------------------------+ | Таймаут валидации | validationTimeout | истек таймаут валидации файла | +---------------------------+-------------------+---------------------------------+ Синхронная проверка ФЛК ####################### .. note:: - выполняются вне зависимости от настроек модуля REST-Uploader; - являются блокирующими; - ошибки синхронных проверок возвращаются в теле ответа по REST-API. К синхронным проверкам относятся: - проверка соответствия инфосхеме: - проверка соответствия имен и количества полей в заголовках; - проверка типа данных; - проверка экранирования данных: проверка соответствия числа столбцов по каждой строке; - проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM отрезаем при загрузке начальные байты ``ef`` ``bb`` ``bf``); - проверка размера файла и наличия данных: - проверка предельного размера загружаемого файла 512Мб; - проверка наличия данных в файле. Асинхронная проверка ##################### .. note:: - выполняются в зависимости от настроек модуля; - проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля); - список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла. К асинхронным проверкам относятся: - проверка уникальности полей: - по сочетанию атрибутов (для комплексных ключей); - по заданному атрибуту; - сравнение значения с константой; - соответствие регулярному выражению. Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов. Проверка уникальности по одному или по сочетанию полей """""""""""""""""""""""""""""""""""""""""""""""""""""" Проверка уникальности проводится: - в рамках группы файлов, если заданы **headers** - для проверки в рамках группы обязательно заполнения всех полей: - ``group_id``; - ``group_file_num``; - ``group_file_count``. - при проверке в рамках группы значения ключей для проверки уникальности в рамках группы хранится в Redis - по всем файлам в рамках группы при наличии групповых атрибутов - по одному файлу, при отсутствии групповых атрибутов Пример запроса для проверки уникальности по группе файлов: .. code-block:: yaml --проверка по сочетанию полей fields: id: uniq: true uniq-with: [type,region] --проверка уникальности по одному полю snils: match: "/^[-\s\d]{11}$/" uniq: true Проверка соответствия заданному значению """"""""""""""""""""""""""""""""""""""""" - Проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id - Проверка осуществляется для значений каждого поля в соответствии с заданным правилом - Проверка соответствия заданному значению включает в себя: - проверку сравнения с константой ('>', '<', ‘> =', '<=', '=', '!=' ); - проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html ) Поведение в случае таймаута валидации """""""""""""""""""""""""""""""""""""" Период выполнения асинхронных проверок определяется конфигурационным параметром ``validation-timeout`` и по умолчанию составляет 60 минут. В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с обогащением отчета о найденных ошибках ошибкой ``validationTimeout``. В случае возникновения подобной ошибки рекомендуется: - проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки; - увеличить значение ``validation-timeout`` и повторить загрузку данных. Статусная модель ################ .. table:: Статусная модель +--------+-------------------------------------+ | Статус | Описание | +========+=====================================+ +--------+-------------------------------------+ | -1 | Загрузка данных в буффер | +--------+-------------------------------------+ | 0 | Запрос буфферизирован | +--------+-------------------------------------+ | 1 | Ожидает открытия дельты | +--------+-------------------------------------+ | 2 | В обработке (модулем DATA-Uploader) | +--------+-------------------------------------+ | 3 | Успешно обработан | +--------+-------------------------------------+ | 4 | Ошибка обработки запроса | +--------+-------------------------------------+ | 5 | Идентификатор запроса не обнаружен | +--------+-------------------------------------+ | 6 | Форматно-логический контроль | +--------+-------------------------------------+ | 7 | Ошибки ФЛК | +--------+-------------------------------------+