.. _standard_loader_doc: Общее описание ^^^^^^^^^^^^^^ .. attention:: С версии 2.6.0 для хранения метаданных загрузчика требуется Prostore версии 7.6 и выше, хотя бы с одним ADP (для обеспечения высокой доступности персистентных данных модуля необходимо использование больше одного датасорса ADP). При использовании более ранней версии Prostore или отсутствии ADP невозможна работа загрузчика версии 2.6.0 и выше. Действия по выполнению миграции приведены в :numref:`stloder_migration`. Назначение ################## Стандартный загрузчик (Standard-loader) - модуль управления данными (загрузка и/или удаление) в Витрине данных, формирования количественных оценок качества данных Витрины в части соответствия источнику данных. Основные решаемые проблемы: - загрузка и удаление данных в Витрине (:numref:`stloader_load`); - сверка данных ИС Источника и Витрины, в том числе автоматическая корректировка данных в Витрине (:numref:`data_reconciliation`). .. _stloader_terms: Термины и определения ######################### В :numref:`tab_stloader_terms` приведено описание специфичных терминов стандартного загрузчика. .. _tab_stloader_terms: .. table:: Описание терминов стандартного загрузчика +--------------------------+------------------------+--------------------------------------------------------------------------------+ | **Термин** | **Сокращение** | **Определение** | +==========================+========================+================================================================================+ | Задание на загрузку | | Задание на загрузку данных из Источника в Витрину, в котором определяется | | | | каким запросом запрашивается информация, и в какие Витрины и таблицы | | | | загружаются данные. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Задание сверки | | Задание для сверки данных между Источником и Витриной, в котором определяется | | | | Источники данных, запросы на получение контрольных сумм записей (хэшей), | | | | запросы на получение данных для корректирующей загрузки. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Информационная система | ИС | Совокупность данных в базах, а также информационных технологий и технических | | | | средств, обеспечивающих их обработку и функционирование как единого целого для | | | | решения определенных задач. | | | | | | | | Отражается в метаданных Стандартного загрузчика, для группировки Источников | | | | данных. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Исключение из | | Набор первичных ключей данных, по которым были попытки корректировки, но при | | корректировки | | повторной сверке остались Расхождения. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Источник | | Конкретный источник данных для загрузки, в рамках ИС Источника. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Корректирующая загрузка | | Загрузка данных из Источника в Витрину для устранения устойчивых, в том числе | | | | добавления и удаления записей. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Модульный монолит | Модулит | Архитектурный подход, при котором приложение формируется из независимых | | | | компонентов, взаимодействующих между собой через определенные интерфейсы, а не | | | | напрямую. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Попытка корректировки | | Набор первичных ключей данных, для которых инициирована корректирующая | | | | загрузка: | | | | | | | | Устойчивые расхождения текущего Сеанса сверки за вычетом справочника | | | | исключений из корректировки | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Расписание загрузки | | Расписание, задающее периодичность создания Сеансов загрузки данных в режиме | | | | Pull. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Расписание сверки | | Расписание, задающее периодичность создания Сеансов сверки. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Результат сравнения | Расхождение | Первичные найденные расхождения между данными Источника и Витрины на основании | | | | единичного Сеанса сверки. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Сверка | | Совокупность действий по: | | | | | | | | - сравнению данных в Источнике и Витрине; | | | | | | | | - определению Устойчивых расхождений; | | | | | | | | - корректирующей загрузке; | | | | | | | | - формированию исключений из сверки; | | | | | | | | - информированию заинтересованных лиц о результатах сверки. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Сеанс загрузки | | Информация о факте и результатах загрузки данных. Может создаваться при: | | | | | | | | - срабатывании Расписания; | | | | | | | | - обращении ИС Источника к одному из Push Ридеров; | | | | | | | | - выполнении Сверки данных. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Сеанс сверки | | Информация о факте и результатах сверки данных. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Сервис Стандартного | Сервис | Обособленная функциональная часть Стандартного загрузчика, способная | | загрузчика | | запускаться и работать как на отдельной, так и вместе с другими компонентами | | | | на общей виртуальной машине Java | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Сервис чтения данных | Reader (Ридер) | Сервис Стандартного загрузчика, обеспечивающий чтение или прием данных из ИС | | | | Источника. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Событие | | Запись о факте выполнения важных действий одним из сервисов стандартного | | | | загрузчика. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Устойчивое расхождение | | Расхождения, сохраняющиеся длительное время и не спровоцированные изменениями | | | | данных в Источнике. | | | | | | | | Вычисляются на основании Расхождений двух идущих подряд Сеансов сверки. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Форматно-логический | ФЛК | Процесс проверки данных на соответствие заданным форматам и логическим | | контроль | | правилам. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Pull | | Режим работы при котором инициализация загрузки производится со стороны | | | | Reader. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ | Push | | Режим работы, при котором инициализация загрузки производится ИС Источника или | | | | Оператором. При этом производится обращение к интерфейсу одного из Reader. | | | | | | | | При этом производится обращение к интерфейсу одного из Reader. | +--------------------------+------------------------+--------------------------------------------------------------------------------+ Схема взаимодействия ######################### Приложение реализовано в виде модулита: - в рамках одной JVM могут запускаться как несколько, так и один сервис; - часть ридеров при необходимости можно вынести в отдельное независимое приложение и разместить на стороне ИС Источника (load-manager-reader). В этом случае для управления развертыванием удаленных ридеров используется специальный компонент - Deployer; Реализованные сервисы модулита: **Manager** - основной управляющий сервис, выполняющий функции: - конфигурирования удаленных ридеров; - создания Сеансов загрузки данных; - назначения сеансов для выполнения на других компонентах. **Deployer** - сервис, управляющий развертыванием Reader, в том числе удаленных, развернутых на отдельной JVM по конфигурации, полученной от Manager. **Comparator** - сервис, осуществляющий функцию Сверки. **Reader** - сервис, обеспечивающий чтение или прием из ИС Источника, преобразование к формату avro (при необходимости) и передачу данных в Buffer. В зависимости от своих настроек может подключаться к одному из видов Источников для чтения данных в рамках Сеанса загрузки (режим pull) или ждать обращения ИС Источника (режим push). Сервис Reader поддерживает следующие сочетания типов Источника и режимов работы: - JDBC: Pull; - REST: Pull, Push; - Folder: Pull. **FLK** - сервис осуществляющий форматно-логический контроль данных перед загрузкой. **Buffer** - сервис, отвечающий за запись, изменение и удаление данных во временном хранилище по запросам от других компонентов. **Uploader** - сервис загрузки готовых данных из временного хранилища в Витрину. Наиболее простой вариант размещения Загрузчика, ИС Источника и Витрины в одном ЦОД приведен на :numref:`stloader_deploy`, стрелками обозначено основное направление передачи данных. Данный вариант подходит для небольших Витрин данных, где важна простота настройки и экономия ресурсов. .. _stloader_deploy: .. figure:: /_static/img/modules/st_loader/stloader_deploy.png :align: center :alt: Вариант развертывания стандартного загрузчика в одном ЦОД Вариант развертывания стандартного загрузчика в одном ЦОД :numref:`stloader_deploy_gostech` отображает вариант с размещением Витрины и ИС Источников в разных ЦОД (стрелками обозначено основное направление передачи данных). В данном случае на стороне ИС Источника разворачивается дополнительный экземпляр Стандартного загрузчика для чтения данных. Данный вариант является основным для Витрин данных, развернутых на Гостех. .. _stloader_deploy_gostech: .. figure:: /_static/img/modules/st_loader/stloader_deploy_gostech.png :align: center :alt: Вариант развертывания стандартного загрузчика с дополнительным экземпляром Вариант развертывания стандартного загрузчика с дополнительным экземпляром .. _stloader_limits: Ограничения и особенности работы ##################################### 1. Поддерживается загрузка только плоских данных (нет вложенных объектов), без необходимости трансформации, т.е. структура данных, получаемая от Источника должна полностью соответствовать структуре данных в Витрине. .. note:: В случае JDBC-Источника доступна трансформация данных Источника к виду, требуемому для Витрины, SQL-запросом. 2. Связь между основной частью Стандартного загрузчика и вынесенными Компонентами для чтения данных может быть только односторонней: Reader → основной частью Стандартного загрузчика (для возможности использования приложения в Гостех). 3. Функционал сверки поддерживается только для загрузки данных из ИС Источника по протоколу JDBC, при наличии доступа к полному набору данных. 4. Удаленные ридеры могут работать в различных часовых поясах. Для согласованности времен, при записи данных в служебную БД, временные отметки приводятся к единому часовому поясу, который можно настроить через параметр конфигурации (:numref:`standard_loader_config`). 5. Аутентификация клиента на Компоненте чтения данных не реализована. При необходимости аутентификация должна выполняться внешними сервисами. 6. При переключении между загрузчиками рекомендуется удалять локальную БД CSV-Uploader для исключения недостижимых идентификаторов. .. note:: Начиная с версии 2.6.0 в поставку стандартного загрузчика входит драйвер Prostore. .. _stloader_meta: Метаданные стандартного загрузчика ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Начиная с версии 2.6.0 хранение данных персистентности модуля осуществляется в снапшот-таблицах Prostore. Пересоздание таблиц нужного типа и миграция данных выполняется автоматически при старте модуля. Миграции подлежат данные только таблиц, предназначенных для хранения статической информации: - information_system; - source; - pull_task; - schedule; - deployer; - reader; - config; - flk_conditions; - session_status_dictionary; - compare_task; - compare_schedule. Объекты конфигурации компонентов ################################## information_system """""""""""""""""""""""" Назначение: хранение данных об ИС Источников. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: information_system +---------+--------------+---------+--------------+----------------------------------------+-----------------+ | **РК** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+==============+=========+==============+========================================+=================+ | true | mnemonic | varchar | true | Мнемоника ИС Источника | EGD777 | +---------+--------------+---------+--------------+----------------------------------------+-----------------+ | | description | varchar | | Человекочитаемое название ИС Источника | ЭЖД региона 777 | +---------+--------------+---------+--------------+----------------------------------------+-----------------+ deployer """"""""""""" Назначение: хранение данных о сервисах Deployer, связанных с определенной Информационной системой. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: deployer +---------+--------+---------------+---------+--------------+----------------------------------------+-----------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===============+=========+==============+========================================+=================+ | true | | mnemonic | varchar | true | Мнемоника Deployer | deployer_egd | +---------+--------+---------------+---------+--------------+----------------------------------------+-----------------+ | | true | is_mnemonic | varchar | true | Ссылка на мнемонику ИС Источника | EGD777 | | | | | | | (Information_system), для которой | | | | | | | | разворачивается Deployer | | +---------+--------+---------------+---------+--------------+----------------------------------------+-----------------+ | | | enabled | boolean | true | Флаг активности Deployer. | true | | | | | | | | | | | | | | | При необходимости можно отключить | | | | | | | | целый Deployer без его удаления из БД. | | +---------+--------+---------------+---------+--------------+----------------------------------------+-----------------+ reader """"""""""" Назначение: хранение данных о Reader'ах, необходимых для запуска определенным Deployer. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: reader +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===================+=========+==============+==========================================+=================+ | true | | mnemonic | varchar | true | Мнемоника сервиса | reader_jdbc_1 | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | | true | deployer_mnemonic | varchar | true | Cсылка на мнемонику Deployer, | deployer_egd | | | | | | | который должен развернуть сервис | | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | | | data_flow_type | varchar | | Тип потока данных, с которым работает | pull | | | | | | | сервис | | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | | | source_type | varchar | | Тип источника, который поддерживает | jdbc | | | | | | | сервис. | | | | | | | | | | | | | | | | Заполняется только для Reader типа | | | | | | | | ``pull``, для остальных записей ``null`` | | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | | | enabled | boolean | true | Флаг активности Deployer. | true | | | | | | | | | | | | | | | При необходимости можно отключить | | | | | | | | целый Deployer без его удаления из БД. | | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ | | true | config_mnemonic | varchar | true | Ссылка на специфичную конфигурацию | reader_config | | | | | | | сервиса | | +---------+--------+-------------------+---------+--------------+------------------------------------------+-----------------+ config """"""""""" Назначение: хранение данных о конфигурации Reader'ов. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. _tab_stloader_config: .. table:: config +---------+--------+-------------------+---------+--------------+-------------------------------------------+-----------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===================+=========+==============+===========================================+=================+ | true | | mnemonic | varchar | true | Мнемоника конфигурации | reader_config | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-----------------+ | | | config | varchar | true | Конфигурация компонента в формате YAML | | | | | | | | | | | | | | | | (соответствуют секции readers.[].config | | | | | | | | общего файла настройки, без элемента | | | | | | | | config | | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-----------------+ Объекты загрузки ################## source """"""""" Назначение: хранение данных об Источниках данных. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: source +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===================+=========+==============+========================================+=====================================================================================================================+ | true | | mnemonic | varchar | true | Мнемоника Источника данных | DB_EGD | +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ | | | description | varchar | | Человекочитаемое название Источника | База данных ЭЖД | | | | | | | данных | | +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ | | true | is_mnemonic | varchar | true | Cсылка на мнемонику ИС Источника | EGD777 | +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ | | | type | varchar | true | Тип источника: ``jdbc``, ``rest``, | jdbc | | | | | | | ``folder`` | | +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ | | | source_connect | varchar | true | Параметры подключения к источнику в | .. code-block:: | | | | | | | формате JSON | | | | | | | | | { | | | | | | | | "connect_jdbc": { | | | | | | | | "url": "jdbc:postgresql://localhost:5432/postgres", | | | | | | | | "user": "postgres", | | | | | | | | "password": "postgres" | | | | | | | | } | | | | | | | | } | | | | | | | | | | | | | | | | или | | | | | | | | | | | | | | | | { | | | | | | | | | | | | | | | | "connect_jdbc": { | | | | | | | | "url": "jdbc:prostore://localhost:9090" | | | | | | | | } | | | | | | | | } | | | | | | | | | | | | | | | | или | | | | | | | | | | | | | | | | { | | | | | | | | "connect_rest": { | | | | | | | | "protocol": "http", | | | | | | | | "host": "localhost", | | | | | | | | "port": 9098, | | | | | | | | "baseUrl": "/api/v1", | | | | | | | | "auth": { | | | | | | | | "basic": { | | | | | | | | "user": "{USER.ENV}", | | | | | | | | "password": "{PASS.ENV}" | | | | | | | | } | | | | | | | | } | | | | | | | | } | | | | | | | | } | | | | | | | | | | | | | | | | или | | | | | | | | | | | | | | | | { | | | | | | | | "connect_folder": { | | | | | | | | "_comment_input_path": "директория с файлами для загрузки", | | | | | | | | "input_path": "/data/input", | | | | | | | | "_comment_process_path": "директория для загружаемых файлов", | | | | | | | | "process_path": "/data/process", | | | | | | | | "_comment_limit_files": "максимальное число файлов, загружаемых в одном сеансе", | | | | | | | | "limit_files": 10, | | | | | | | | "_comment_sort": "используемая сортировка, допустимые значения: name or created", | | | | | | | | "sort": "name", | | | | | | | | "_comment_when_complete": "действие при успешном чтении файла, допустимые значения: move_to or delete", | | | | | | | | "when_complete": { | | | | | | | | "move_to": { | | | | | | | | "path": "/data/readed_success" | | | | | | | | } | | | | | | | | }, | | | | | | | | "_comment_exceptionally": "действие при ошибке чтения файла, допустимые значения: move_to or delete", | | | | | | | | "exceptionally": { | | | | | | | | "move_to": { | | | | | | | | "path": "/data/readed_fail" | | | | | | | | } | | | | | | | | } | | | | | | | | } | | | | | | | | } | +---------+--------+-------------------+---------+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------+ pull_task """"""""" Назначение: хранение данных о Задания на загрузку данных в режиме ``Pull``. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: pull_task +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+========================+=========+==============+========================================+===================================+ | true | | mnemonic | varchar | true | Мнемоника Задания на загрузку | upload_students | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | action | varchar | true | Тип операции ``upsert``, ``delete``, | upsert | | | | | | | ``truncate``, ``modify`` | | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | true | source_mnemonic | varchar | true | Внешний ключ, ссылка на мнемонику | pgEGD777 | | | | | | | источника (Source) | | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | request | json | true | Запрос к источнику в формате JSON | .. code-block:: | | | | | | | | | | | | | | | | { request_sql: | | | | | | | | {query: "select * from a" } | | | | | | | | } | | | | | | | | | | | | | | | | или | | | | | | | | | | | | | | | | { request_rest: | | | | | | | | {method: "GET", | | | | | | | | path: "/student/:id", | | | | | | | | body: null, | | | | | | | | parameters: { id: "12345"} | | | | | | | | } | | | | | | | | } | | | | | | | | | | | | | | | | или | | | | | | | | | | | | | | | | пустая строка для folder reader | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | target_type | varchar | true | Тип целевой базы. Enum: | application-database | | | | | | | application-database (загрузка данных в| | | | | | | | Витрину, в т.ч. выравнивающая | | | | | | | | загрузка), service-database (загрузка | | | | | | | | хэшей в сервисную БД для Сверки) | | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | target_datamart | varchar | true | Целевая витрина данных | demo_dev | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | target_table | varchar | true | Целевая таблица | students | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ | | | description | varchar | | Человекочитаемое описание задачи | Выгрузка учеников | +---------+--------+------------------------+---------+--------------+----------------------------------------+-----------------------------------+ schedule """"""""""" Назначение: хранение данных о Расписаниях загрузки данных. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: schedule +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===================+=========+==============+===========================================+===============================+ | true | | mnemonic | varchar | true | Мнемоника расписания | upload_students_hourly | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | | description | varchar | | Описание расписания | Выгрузка студентов каждый час | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | | enabled | boolean | true | Флаг активности расписания | true | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | true | task_mnemonic | varchar | true | Cсылка на Задания на загрузку (PullTask) | upload_students | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | | cron | varchar | true | Выражение CRON для периодического запуска | 1 * * * * | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | | one_time | boolean | | Флаг для однократного выполнения | false | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ | | | overlap-mode | varchar | true | Режим обработки пересекающихся запусков | skip | | | | | | | | | | | | | | | - ``skip`` - создание Сеанса загрузки | | | | | | | | пропускается, если в данный момент | | | | | | | | выполняется другой, созданный по тому же| | | | | | | | Расписанию. | | | | | | | | | | | | | | | | - ``wait`` - создание следующего Сеанса | | | | | | | | загрузки откладывается, пока | | | | | | | | выполняется другой, созданный по тому же| | | | | | | | Расписанию. | | | | | | | | | | | | | | | | Для one_time расписаний применимо только | | | | | | | | ``skip``. | | +---------+--------+-------------------+---------+--------------+-------------------------------------------+-------------------------------+ session """"""""" Назначение: хранение информации о созданных Сеансах загрузки. Жизненный цикл: создается и очищается приложением через конфигурироемое время. .. table:: session +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=======================+===========+==============+========================================+======================================+ | true | | id | bigint | true | Уникальный идентификатор сессии. | 1025 | | | | | | | | | | | | | | | Формируется при создании записи, | | | | | | | | линейно нарастает, используется для | | | | | | | | обеспечиения FIFO в рамках таблицы | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | source_mnemonic | varchar | | Мнемоника источника | abs5 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | action | varchar | true | Выполняемое действие: ``upsert``, | upsert | | | | | | | ``delete``, ``truncate``, ``modify`` | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | flk_mode | varchar | true | Режим ФЛК для данного Сеанса. | warning | | | | | | | | | | | | | | | Заполняется менеджером при создании | | | | | | | | сеанса, используется чтобы передать в | | | | | | | | сервис FLK нужный режим | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | component_mnemonic | varchar | | Мнемоника сервиса, обрабатывающего | reader_jdbc_1 | | | | | | | Сеанс в данный момент времени | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | component_instance_id | varchar | | Идентификатор экземпляра сервиса | 019b0713-0ff5-7935-8578-37af8636e928 | | | | | (UUID) | | | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | target_datamart | varchar | true | Целевая витрина данных | demo_dev | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | target_table | varchar | true | Целевая таблица | students | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | source_connect | json | | Параметры подключения к источнику. | | | | | | | | | | | | | | | | При ``pull``, копируются из Источника ,| | | | | | | | для ``push`` - ``null``. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | schedule_mnemonic | varchar | | Ссылка на расписание, которое создало | upload_students_hourly | | | | | | | сеанс, при push-инициализации сеанса | | | | | | | | = null | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | file_sz | int | true | Размер файла в байтах | 1532 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | offset | bigint | | Смещение для чтения данных | 1 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | status_code | int | true | Текущий статус сессии | 300 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_code | integer | | Код ошибки в случае неудачи | 5001 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_message | text | | Текстовое описание ошибки | Ошибка | | | | | | | | подключения к | | | | | | | | источнику | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | create_ts | timestamp | true | Время создания сессии | 2025-08-27 | | | | | | | | 10:00:00 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | finish_ts | timestamp | | Время завершения сессии | 2025-08-27 | | | | | | | | 10:05:00 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | for_system_time | timestamp | true | Метка времени для удаления истории | 2019-12-23 | | | | | | | операций. | 15:15:14.736193 | | | | | | | | | | | | | | | Применимо только для action truncate. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | compare_session_id | bigint | | Cсылка на идентификатор Сеанса сверки | 12345 | | | | | | | (СompareSession), в рамках которого | | | | | | | | создан Сеанс загрузки | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | is_file_deleted | boolean | true | Признак удаления файла из буфера, | true | | | | | | | значение по умолчанию ``false`` | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | source_fields_metadata| varchar | | Информация о типах полей в источнике | .. code-block:: | | | | | | | данных в виде json (ключ - имя поля, | | | | | | | | значение - тип данных prostore). | { | | | | | | | | "name": "VARCHAR", | | | | | | | Данное поле не используется в REST API | "code": "BIGINT" | | | | | | | Данное поле не используется в REST API | } | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ event """"""""" Назначение: хранение информации о созданных Событиях загрузки. Жизненный цикл: создается и очищается приложением через конфигурироемое время. .. table:: event +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=======================+===========+==============+========================================+======================================+ | true | | id | bigint | true | Уникальный идентификатор события. | 50178 | | | | | | | | | | | | | | | Генерируется на БД поэтому в составе | | | | | | | | события не передается. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | code | int | true | Код события | 5001 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | true | session_id | bigint | | Cсылка на идентификатор Сеанса | upsert | | | | | | | (Session), в рамках которого произошло | | | | | | | | событие. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | true | component_mnemonic | varchar | true | Cсылка на сервис (Component), | reader_jdbc_1 | | | | | | | создавший событие. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | component_instance_id | varchar | true | Идентификатор экземпляра | 019b0713-0ff5-7935-8578-37af8636e928 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | event_ts | timestamp | true | Временная метка события | 2025-08-27 10:01:00 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | message | varchar | true | Сообщение события | "Компонент назначен" | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_code | integer | | Код ошибки в случае неудачи | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_message | varchar | | Дополнительные данные в формате JSON | | | | | | | | или YAML | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | status_code_from | int | | Статус, в котором был сеанс до события | 100 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | status_code_to | int | | Статус, в который перешел сеанс после | 101 | | | | | | | события | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | payload | varchar | | Прикладные данные для Менеджера | .. code-block:: | | | | | | | | | | | | | | | | {"action":"upsert", | | | | | | | | "datamart":"univer", | | | | | | | | "table":"students", | | | | | | | | "forSystemTime":null} | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ Объекты ФЛК ############## flk_conditions """"""""""""""" Назначение: хранение проверок для целевых датамартов и таблиц. Жизненный цикл: создается, изменяется и удаляется Пользователем через API ФЛК. .. table:: flk_conditions +---------+--------+-----------------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=======================+===========+==============+========================================+=================================================+ | true | | datamart | varchar | true | Датамарт, в рамках которого | demo_dev | | | | | | | применяются проверки. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | true | | table | varchar | true | Таблица, в рамках которой применяются | students | | | | | | | проверки. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | condidtions | varchar | true | YAML представление условий | .. code-block:: | | | | | | | | | | | | | | | | fields: | | | | | | | | birthday: | | | | | | | | uniq: true | | | | | | | | uniq-with: | | | | | | | | - "code" | | | | | | | | - "passport" | | | | | | | | match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})" | | | | | | | | code: | | | | | | | | in: | | | | | | | | - "1" | | | | | | | | - "2" | | | | | | | | - "3" | | | | | | | | - "4" | | | | | | | | - "5" | | | | | | | | - "6" | | | | | | | | - "7" | | | | | | | | - "8" | | | | | | | | - "9" | | | | | | | | - "10" | | | | | | | | uniq: true | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ validation_error """"""""""""""""" Назначение: хранение информации о найденных в ходе проведения ФЛК ошибках. Жизненный цикл: создается и очищается приложением через конфигурироемое время. .. table:: validation_error +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===============+===========+==============+========================================+=================================================+ | true | | id | bigint | true | Уникальный идентификатор ошибки | 1 | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | true | session_id | bigint | true | Ссылка на Сеанс, в рамках которого | 1025 | | | | | | | найдена ошибка | | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | line | integer | true | Номер строки в данных, где произошла | 154 | | | | | | | ошибка | | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | field | varchar | true | Имя поля с ошибкой | age | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | code | varchar | true | Код ошибки ФЛК | INVALID_FORMAT | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | value | text | | Значение, которое вызвало ошибку | "abc" | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ | | | message | text | true | Описание ошибки | Недопустимый формат числа | +---------+--------+---------------+-----------+--------------+----------------------------------------+-------------------------------------------------+ Объекты сверки ################# compare_task """"""""""""""" Назначение: хранение данных о Задания на сверку. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: compare_task +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+==========================+=========+==============+====================================================================+=====================================================================================================================================+ | true | | mnemonic | varchar | true | Мнемоника задачи | Compare1 | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | true | original_source_mnemonic | varchar | true | Мнемоника источника мастер данных | EGD777 | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | true | datamart_source_mnemonic | varchar | true | Мнемоника источника витрины данных | datamart_EGD777 | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | original_request | varchar | true | Запрос к источнику мастер данных в | .. code-block:: | | | | | | | формате JSON для получения | | | | | | | | хешей (контрольных сумм) | { request_sql: | | | | | | | | {query: "select id::VARCHAR as pk_cortege, ('x'||md5(row(name,age)::VARCHAR))::bit(64)::bigint as hash_value from foo.cat1" } | | | | | | | | } | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | datamart_request | varchar | true | Запрос к витрине данных в формате JSON, | .. code-block:: | | | | | | | запрос для получения хешей (контрольных | | | | | | | | сумм) | { request_sql: | | | | | | | | {query: "select id::VARCHAR as pk_cortege, ('x'||md5(row(name,age)::VARCHAR))::bit(64)::bigint as hash_value from foo.cat1" } | | | | | | | | } | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | сorrection_load_request | varchar | true | Запрос корректирующей загрузки для | .. code-block:: | | | | | | | обновления и добавления записей, | | | | | | | | задается если нужна корректирующая | { request_sql: | | | | | | | нужна | {query: "select a, b, c from aaa.fff where a in(: pk_keys) " } | | | | | | | | } | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | сorrection_delete_request| varchar | false | Запрос корректирующей загрузки для удаления записей, задается если | .. code-block:: | | | | | | | нужна корректирующая загрузка | | | | | | | | | { request_sql: | | | | | | | | {query: "select unnest(STRING_TO_ARRAY(:pk_keys,',')) pkfield " } | | | | | | | | } | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | target_datamart | varchar | true | Целевой датамарт для выравнивания | | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | target_table | varchar | true | Целевая таблица для выравнивания | | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ | | | description | varchar | true | Описание сверки заполняется опционально, позволяет указать кто | Сверка важных атрибутов, создал Петров Петр Петрович 1 октября 2025 года, чтобы спать спокойно | | | | | | | создал сверку и для каких целей | | +---------+--------+--------------------------+---------+--------------+--------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+ .. note:: Чтобы разложить наборы первичных ключей из склейки на ПГ можно пользоваться конструкцией: ``select split_part(unnest(STRING_TO_ARRAY('1_2,15_17',',')),'_',1) a, split_part(unnest(STRING_TO_ARRAY('1_2,15_17',',')),'_',2) b`` В Prostore данная функция отсутствует. compare_schedule """"""""""""""""" Назначение: хранение данных о Расписании сверки. Жизненный цикл: создается, изменяется и удаляется Пользователем через API управления метаданными. .. table:: compare_schedule +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=======================+=========+==============+===============================+===================+ | true | | mnemonic | varchar | true | Мнемоника расписания сверки | CompareScheduler1 | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | | true | compare_task_mnemonic | varchar | true | Мнемоника задачи сверки | Compare1 | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | | | cron | varchar | true | CRON-выражение для расписания | 0 0 1 * * ? | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | | | enabled | boolean | true | Признак активности расписания | true | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | | | one_time | boolean | true | Признак однократного запуска | false | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ | | | description | varchar | | Комментарий к расписанию | Ежедневная сверка | +---------+--------+-----------------------+---------+--------------+-------------------------------+-------------------+ compare_session """"""""""""""""" Назначение: хранение данных о Сеансах сверки. Жизненный цикл: создается и очищается приложением через конфигурируемое время. .. table:: compare_session +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+===========================+===========+==============+===============================+======================================+ | true | | id | bigint | true | Идентификатор сессии | 12345 | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | true | compare_schedule_mnemonic | varchar | true | Мнемоника расписания сверки | CompareScheduler1 | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | create_ts | timestamp | true | Дата и время начала сессии | 2025-09-30 15:00:05.000 | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | component_mnemonic | varchar | true | Мнемоника компаратора, | comparator | | | | | | | исполняющего сверку | | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | component_instance_id | varchar | true | Идентификатор компаратора | 019b0713-0ff5-7935-8578-37af8636e928 | | | | | | | исполняющего сверку | | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | finish_ts | timestamp | | Дата и время окончания сессии | 2025-09-30 15:55:00.000 | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | status_code | int | true | Статус сессии | 350 | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | error_code | integer | | Код ошибки в случае неудачи | | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ | | | error_message | text | | Текстовое описание ошибки | | +---------+--------+---------------------------+-----------+--------------+-------------------------------+--------------------------------------+ compare_event """"""""""""""" Назначение: хранение данных о Событиях сверки. Жизненный цикл: создается и очищается приложением через конфигурируемое время. .. table:: compare_event +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=======================+===========+==============+========================================+======================================+ | true | | id | bigint | true | Уникальный идентификатор события | 50178 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | code | int | true | Код события | 5001 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | true | compare_session_id | bigint | | Cсылка на идентификатор Сеанса | 1234 | | | | | | | сверки (СompareSession), в рамках | | | | | | | | которого произошло событие. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | true | component_mnemonic | varchar | true | Cсылка на сервис (Component), | reader_jdbc_1 | | | | | | | создавший событие. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | component_instance_id | varchar | true | Идентификатор экземпляра | 019b0713-0ff5-7935-8578-37af8636e928 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | event_ts | timestamp | true | Временная метка события | 2025-08-27 10:01:00 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | message | varchar | true | Сообщение события | "Компонент назначен" | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_code | integer | | Код ошибки в случае неудачи | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | error_message | varchar | | Дополнительные данные в формате JSON | | | | | | | | или YAML | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | status_code_from | int | | Статус, в котором был сеанс до события.| 200 | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | status_code_to | int | | Статус, в который перешел сеанс после | 201 | | | | | | | события. | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | payload | varchar | | Прикладные данные для Менеджера | | +---------+--------+-----------------------+-----------+--------------+----------------------------------------+--------------------------------------+ compare_result """"""""""""""""" Назначение: хранение данных о Результатах сверки. Жизненный цикл: создается и очищается приложением через конфигурируемое время. .. table:: compare_result +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+====================+===========+==============+============================================+======================================+ | | | id | bigint | true | Идентификатор записи | 1000 | +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | pk_cortege | varchar | true | Кортеж PK прикладной записи, | 019b0713-0ff5-7935-8578-37af8636e928 | | | | | | | сериализованный в строку через разделитель | | +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | compare_session_id | bigint | true | Идентификатор сессии сравнения | 12345 | +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | difference_type | int | true | Код различия, ENUM | 1 | | | | | | | | | | | | | | | 1 - различные хеш суммы; | | | | | | | | | | | | | | | | 2 - данных нет в витрине; | | | | | | | | | | | | | | | | 3 - данных нет в источнике. | | +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | hash_original | bigint | | хеш мастер-записи, null в случае если | 3e968837-add7-4a59-9e65-293c6325b32c | | | | | | | difference_type = 3 | | | | | | | | (данных нет в источнике) | | +---------+--------+--------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ stable_difference """"""""""""""""""""" Назначение: хранение данных об Устойчивых расхождениях. Жизненный цикл: создается и очищается приложением через конфигурируемое время. .. table:: stable_difference +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=========================+===========+==============+========================================+======================================+ | true | true | compare_session_id | bigint | true | Идентификатор сессии сверки | 300 | +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | true | true | compare_session_prev_id | bigint | true | Идентификатор предыдущей сессии сверки | 299 | +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | true | | pk_cortege | varchar | true | Кортеж первичных ключей | 019b0713-0ff5-7935-8578-37af8636e928 | +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | | difference_type | int | true | Код различия, ENUM | 1 | | | | | | | | | | | | | | | 1 - различные хеш суммы; | | | | | | | | | | | | | | | | 2 - данных нет в витрине; | | | | | | | | | | | | | | | | 3 - данных нет в источнике. | | +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ | | true | compare_task_mnemonic | varchar | true | Мнемоника задания сверки | Compare1 | +---------+--------+-------------------------+-----------+--------------+----------------------------------------+--------------------------------------+ correction_attempt """"""""""""""""""" Назначение: хранение данных о Попытках корректировки. Жизненный цикл: создается и очищается приложением через конфигурируемое время. .. table:: correction_attempt +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+=========================+===========+==============+============================================+======================================+ | | | id | bigint | true | Идентификатор попытки исправления | 12345 | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | compare_session_id | bigint | true | Идентификатор Сеанса сверки | 300 | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | pk_cortege | varchar | true | Кортеж первичных ключей | 019b0713-0ff5-7935-8578-37af8636e928 | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | create_ts | timestamp | true | Дата и время создания записи | 2025-09-30 15:00:05.000 | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | session_id | bigint | true | Идентификатор Сеанса загрузки, в рамках | 654 | | | | | | | которого корректировался кортеж первичных | | | | | | | | ключей | | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | difference_type | int | true | Тип различия | 1 | +---------+--------+-------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ correction_exception """"""""""""""""""""" Назначение: хранение данных об Исключениях из корректировки. Жизненный цикл: создается приложением, предназначены для ручного разбора и удаления Пользователем через API управления метаданными. .. table:: correction_exception +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | **РК** | **FK** | **Имя поля** | **Тип** | **Not null** | **Описание** | **Пример** | +=========+========+==========================+===========+==============+============================================+======================================+ | | | id | bigint | true | Идентификатор исключения | 4f968837-add7-4a59-9e65-293c6325b32d | +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | pk_cortege | varchar | true | Кортеж первичного ключа исключения | 019b0713-0ff5-7935-8578-37af8636e928 | +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | original_source_mnemonic | varchar | true | Мнемоника источника мастер данных | EGD777 | +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | | compare_session_id | bigint | true | Идентификатор сеанса сверки в рамках | 1001 | | | | | | | которого выявлено исключение | | +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ | | true | compare_task_mnemonic | varchar | true | Мнемоника задания сверки | Compare1 | +---------+--------+--------------------------+-----------+--------------+--------------------------------------------+--------------------------------------+ .. _stloader_functions: Функции стандартного загрузчика ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _stloader_load: Загрузка данных ################### В :numref:`tab_stloader_functions` приведен перечень операций, выполняемых стандартным загрузчиком с данными Витрины. .. _tab_stloader_functions: .. table:: Функции стандартного загрузчика +--------------+---------------------------------------+-----------------------------------------------------------------------------------+ | **Операция** | **Описание операций** | **Поддерживаемые режимы для типов таблиц** | | | +---------------------+-------------------+-------------------+---------------------+ | | | Логическая | proxy | standalone | spapshot | +==============+=======================================+=====================+===================+===================+=====================+ | upsert | Загрузка или обновление данных для | llw, stream | llw, stream | llw, stream | llw, stream | | | переданного набора первичных ключей | | | | | | без sys_op | | | | | | +--------------+---------------------------------------+---------------------+-------------------+-------------------+---------------------+ | delete | Удаление данных по переданному | llw, stream | llw | llw | llw, stream | | | набору первичных ключей | | | | | | без sys_op | | | | | | +--------------+---------------------------------------+---------------------+-------------------+-------------------+---------------------+ | truncate | Удаление данных, включая исторические | llw | llw | llw | llw | | | | | | | | | без sys_op | | [с for_system_time] | | | [с for_system_time] | +--------------+---------------------------------------+---------------------+-------------------+-------------------+---------------------+ | modify | Cовмещение загрузки и логического | stream | не поддерживается | не поддерживается | stream | | | удаления в одной операции. | | | | | | с sys_op | | | | | | +--------------+---------------------------------------+---------------------+-------------------+-------------------+---------------------+ .. note:: Для управления прикладными данными в снапшот-таблицах требуется обновление загрузчика до версии 2.6.0 и выше. Все изменения данных снапшот-таблиц выполняются в операциях записи, но вне механизма дельт. Т.е. при открытой дельте данные не изолируются (запишутся/удалятся сразу, не дожидаясь закрытия дельты) и не откатываются при выполнении rollback delta. Операции с данными могут быть инициализированы: - со стороны Витрины данных (``pull``): - однократно; - по расписанию. - ИС Источника (``push``). Для инициализации загрузки со стороны Стандартного загрузчика (режим ``pull``) пользователю необходимо с помощью REST-API Стандартного загрузчика (см. раздел с API) или с помощью прямых SQL-запросов к служебной БД (при наличии доступа) создать объекты: - Информационная система; - Источник нужного типа (source) с привязкой к нужной Информационной системе; - Задание на загрузку (pull_task) для созданного Источника; - Расписание (schedule) срабатывания для созданного Задания на загрузку. После создания данных объектов нужно развернуть Reader с типом потока данных ``pull``, того же Типа источника и связанный с той же Информационной системой. - Расписание (schedule) срабатывания для созданного Задания на загрузку. Пример настроек для ``pull`` режима загрузки данных: - REST .. code-block:: -- Создание информационной системы POST /api/v1/information-systems { "description": "Моя информационная система", "mnemonic": "my_information_system" } -- Создание Источника с типом folder. JSON-объект в поле source_connect должен передаваться в виде строки, -- для этого необходимо добавить escape символы POST /api/v1/sources { "description": "Мой Источник", "is_mnemonic": "my_information_system", "type": "folder", "source_connect": "\n{\n \"connect_folder\": {\n \"_comment_input_path\": \"директория с файлами для загрузки\",\n \"input_path\": \"/upload/input\",\n \"_comment_process_path\": \"директория для загружаемых файлов\",\n \"process_path\": \"/upload/process\",\n \"_comment_limit_files\": \"максимальное число файлов, загружаемых в одном сеансе\",\n \"limit_files\": 10,\n \"_comment_sort\": \"используемая сортировка, допустимые значения: name or created\",\n \"sort\": \"name\",\n \"_comment_when_complete\": \"действие при успешном чтении файла, допустимые значения: move_to or delete\",\n \"when_complete\": {\n \"move_to\": {\n \"path\": \"/upload/read_success\"\n }\n },\n \"_comment_exceptionally\": \"действие при ошибке чтения файла, допустимые значения: move_to or delete\",\n \"exceptionally\": {\n \"move_to\": {\n \"path\": \"/data/read_fail\"\n }\n }\n }\n}\n", "mnemonic": "my_source" } -- Создание Задания на загрузку POST /api/v1/pull-tasks { "action": "upsert", "source_mnemonic": "my_source", "request": "", "target_type": "application-database", "target_datamart": "foo", "target_table": "cat1", "description": "Мое задание на загрузку", "mnemonic": "my_task" } -- Создание Расписания POST /api/v1/schedules { "description": "Мое расписание", "enabled": true, "task_mnemonic": "my_task", "cron": "*/5 * * * * *", "one_time": true, "overlap_mode": "skip", "mnemonic": "my_schedule" } - SQL .. code-block:: -- Создание Задания на загрузку POST /api/v1/pull-tasks { "action": "upsert", "source_mnemonic": "my_source", "request": "", "target_type": "application-database", "target_datamart": "foo", "target_table": "cat1", "description": "Мое задание на загрузку", "mnemonic": "my_task" } -- Создание Расписания POST /api/v1/schedules { "description": "Мое расписание", "enabled": true, "task_mnemonic": "my_task", "cron": "*/5 * * * * *", "one_time": true, "overlap_mode": "skip", "mnemonic": "my_schedule" } -- Загрузка SQL -- -- Создание информационной системы insert into persistence.information_system (mnemonic, description) values ('my_information_system','Моя информационная система'); -- Создание Источника с типом folder insert into persistence."source" (mnemonic, description, is_mnemonic, type, source_connect) values('my_source','Мой Источник','my_information_system','folder', '{ "connect_folder": { "_comment_input_path": "директория с файлами для загрузки", "input_path": "/upload/input", "_comment_process_path": "директория для загружаемых файлов", "process_path": "/upload/process", "_comment_limit_files": "максимальное число файлов, загружаемых в одном сеансе", "limit_files": 10, "_comment_sort": "используемая сортировка, допустимые значения: name or created", "sort": "name", "_comment_when_complete": "действие при успешном чтении файла, допустимые значения: move_to or delete", "when_complete": { "move_to": { "path": "/upload/read_success" } }, "_comment_exceptionally": "действие при ошибке чтения файла, допустимые значения: move_to or delete", "exceptionally": { "move_to": { "path": "/data/read_fail" } } } }' ); Для инициализации загрузки со стороны Источника (``push``) необходимо: - развернуть Reader с типом потока данных push; - обратиться к одному из методов API данного сервиса. Описание объектов приведено в :numref:`stloader_meta`. Reader может быть развернут и сконфигурирован: - средствами конфигурационного файла - для связывания c Информационной системой необходимо добавить ее мнемонику в настройках Reader в общем конфигурационном файле приложения; Пример конфигурации: .. code-block:: yaml readers: - mnemonic: push-reader # Уникальный идентификатор в рамках manager enabled: true data-flow-type: push source-type: rest is-mnemonic: my_information_system config: file-size: restriction: ${SEND_FILE_SIZE_RESTRICTION:512MB} rest-timeout: ${REST_TIMEOUT:60s} # Таймаут обработки запроса. 0 - таймаут отключен stream: avro-codec: zstd # zstd/none validation: charset-check-enabled: true # признак выполнения проверки кодировки valid-charsets: [ UTF-8, US-ASCII, TIS-620 ] # допустимые кодировки для механизма автоопределения # Предельный размер отчета синхронной проверки, ограничение нужно чтобы не выйти за ограничение heap # при формировании отчета в памяти. При срабатывании предела в лог приложения выдается предупреждение. # Получив отчет лимитированной длины, клиент должен понимать что получил не весь отчет об ошибках. При увеличении # этого параметра необходимо внимательно следить за утилизацией памяти приложения. Размер отчета считается в числе # записей, значение <=0 означает неограниченный отчет, такая настройка опасна падением приложения по OutOfMemory. report-max-length: 10_000 csv-parser: # Символ разделителя значений separator: ${CSV_PARSER_SEPARATOR:;} # Символ кавычки quote-char: ${CSV_PARSER_QUOTE_CHAR:"} # Символ экранирования значений escape-char: ${CSV_PARSER_ESCAPE_CHAR:'} # Настройка интерпретации значений как null. Допустимые значения: # - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;; # - EMPTY_QUOTES - пустые кавычки, например ;""; # - BOTH - оба варианта # - NEITHER - никогда. Пустая строка всегда определяется как пустая строка field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS} - средствами служебной Базы данных - для связывания c Информационной системой необходимо создать согласованные между собой объекты метаданных Deployer (1), Config (2) и Reader (3). .. attention:: Порядок создания данных объектов важен! Пример создания с использованием REST-API .. code-block:: -- Создание Deployer POST /api/v1/deployers { "is_mnemonic": "my_information_system", "enabled": true, "mnemonic": "my_deployer" } -- Создание конфигурации Reader POST /api/v1/configs { "config": "\nfile-size:\n restriction: ${SEND_FILE_SIZE_RESTRICTION:512MB}\nrest-timeout: ${REST_TIMEOUT:60s} # Таймаут обработки запроса. 0 - таймаут отключен\nstream:\n avro-codec: zstd # zstd/none\nvalidation:\n charset-check-enabled: true # признак выполнения проверки кодировки\n valid-charsets: [ UTF-8, US-ASCII, TIS-620 ] # допустимые кодировки для механизма автоопределения\n# Предельный размер отчета синхронной проверки, ограничение нужно чтобы не выйти за ограничение heap\n# при формировании отчета в памяти. При срабатывании предела в лог приложения выдается предупреждение.\n# Получив отчет лимитированной длины, клиент должен понимать что получил не весь отчет об ошибках. При увеличении\n# этого параметра необходимо внимательно следить за утилизацией памяти приложения. Размер отчета считается в числе\n# записей, значение <=0 означает неограниченный отчет, такая настройка опасна падением приложения по OutOfMemory.\nreport-max-length: 10_000\ncsv-parser:\n separator: ${CSV_PARSER_SEPARATOR:;} # Символ разделителя значений\n quote-char: ${CSV_PARSER_QUOTE_CHAR:\"} # Символ кавычки\n escape-char: ${CSV_PARSER_ESCAPE_CHAR:'} # Символ экранирования значений\n # Настройка интерпретации значений как null. Допустимые значения:\n # - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;\n # - EMPTY_QUOTES - пустые кавычки, например ;\"\";\n # - BOTH - оба варианта\n # - NEITHER - никогда. Пустая строка всегда определяется как пустая строка\n field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}\n", "mnemonic": "reader_folder_pull" } -- Создание Reader POST /api/v1/readers { "deployer_mnemonic": "my_deployer", "data_flow_type": "pull", "source_type": "folder", "enabled": true, "config_mnemonic": "reader_folder_pull", "mnemonic": "reader_folder_pull" } Пример создания с использованием SQL .. code-block:: -- Создание Deployer insert into persistence.deployer (mnemonic, is_mnemonic, enabled) values('my_deployer', 'my_information_system', true); -- Создание конфигурации Reader insert into persistence.config (mnemonic, config) values('reader_folder_pull', ' file-size: restriction: \${SEND_FILE_SIZE_RESTRICTION:512MB} rest-timeout: \${REST_TIMEOUT:60s} # Таймаут обработки запроса. 0 - таймаут отключен stream: avro-codec: zstd # zstd/none validation: charset-check-enabled: true # признак выполнения проверки кодировки valid-charsets: [ UTF-8, US-ASCII, TIS-620 ] # допустимые кодировки для механизма автоопределения # Предельный размер отчета синхронной проверки, ограничение нужно чтобы не выйти за ограничение heap # при формировании отчета в памяти. При срабатывании предела в лог приложения выдается предупреждение. # Получив отчет лимитированной длины, клиент должен понимать что получил не весь отчет об ошибках. При увеличении # этого параметра необходимо внимательно следить за утилизацией памяти приложения. Размер отчета считается в числе # записей, значение <=0 означает неограниченный отчет, такая настройка опасна падением приложения по OutOfMemory. report-max-length: 10_000 csv-parser: separator: \${CSV_PARSER_SEPARATOR:;} # Символ разделителя значений quote-char: \${CSV_PARSER_QUOTE_CHAR:"} # Символ кавычки escape-char: \${CSV_PARSER_ESCAPE_CHAR:\'} # Символ экранирования значений # Настройка интерпретации значений как null. Допустимые значения: # - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;; # - EMPTY_QUOTES - пустые кавычки, например ;""; # - BOTH - оба варианта # - NEITHER - никогда. Пустая строка всегда определяется как пустая строка field-as-null: \${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS} '); -- Создание Reader insert into persistence.component (mnemonic, deployer_mnemonic, data_flow_type, source_type, enabled, config_mnemonic) values('reader_folder_pull', 'my_deployer', 'pull', 'folder', true, 'reader_folder_pull'); Варианты конфигурирования Reader описаны в :numref:`standard_loader_config`. В результате инициализации создается Сеанс загрузки. Жизненный цикл Сеанса загрузки представлен в разделе :ref:`stloader_status_model`. В процессе обработки Сеанса загрузки создаются События загрузки (Event), которые позволяют детально отследить этапы загрузки данных, возникающие ошибки и замедление. Описание событий представлено в разделе :ref:`stloader_events`. .. _stloader_algorytm: Алгоритм загрузки """"""""""""""""""""" :numref:`stloader_load_algorytm` содержит диаграмму последовательности загрузки данных. .. _stloader_load_algorytm: .. figure:: /_static/img/modules/st_loader/stloader_load_algorytm.png :align: center :alt: Диаграмма последовательности загрузки данных Диаграмма последовательности загрузки данных 1. Инициализация. а) По расписанию: 1) Manager создает сеанс загрузки согласно установленному Расписанию; 2) Manager делегирует сеанс загрузки в Reader; 3) Reader запрашивает данные в Источнике; б) По запросу: 4) Источник данных инициирует запрос на загрузку данных к Reader; 5) Reader перенаправляет запрос на создание Сеанса загрузки в Manager; 6) Manager создает сеанс загрузки; 7) Manager возвращает в Reader номер сеанса загрузки и другую служебную информацию; 8) Reader передает номер сеанса загрузки Источнику. 2. Получение и буферизация данных. а) Источник передает запрошенные данные в Reader; б) Reader конвертирует в avro и перенаправляет полученные данные в Buffer; в) Buffer сохраняет данные во временное хранилище. 3. ФЛК (опционально). а) Manager делегирует сеанс загрузки модулю ФЛК; б) Buffer передает данные модулю ФЛК; в) Модуль ФЛК выполняет проверку данных на соответствие установленным правилам (подробная информация о режимах ФЛК и правилах представлена в :numref:`stloder_flk`). 4. Загрузка данных. а) Manager делегирует Сеанс загрузки к Uploader; б) Buffer передает данные Сеанса загрузки в Uploader; в) Uploader выполняет передачу данных в Prostore; г) Prostore осуществляет требуемые действия с данными. .. _stloader_status_model: Статусная модель сеанса загрузки """"""""""""""""""""""""""""""""""" :numref:`stloader_status_model_img` содержит диаграмму статусной модели сеанса загрузки. .. _stloader_status_model_img: .. figure:: /_static/img/modules/st_loader/stloader_status_model_img.png :align: center :alt: Диаграмма статусной модели сеанса загрузки Диаграмма статусной модели сеанса загрузки Статусная модель сеанса загрузки приведена в :numref:`tab_stloader_status` .. _tab_stloader_status: .. table:: Статусная модель сеанса загрузки +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | **Код** | **code (Deprecated)** | **Название** | **Описание** | **Финальный статус** | **Действия при получении данного статуса** | | | | | | | | | | для совместимости | | | | | +=========+=======================+====================================+==============================================================+==================================+==================================================+ | 0 | 5 | Идентификатор запроса не обнаружен | Технический статус, например сеанс уже удалили или запросили | Да | Использовать действующий номер Сеанса | | | | | по ошибочному идентификатору | | | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 100 | 100 | Новый | Создан новый сеанс загрузки данных, ожидается назначение | Нет | Выполнить повторный запрос статуса с | | | | | сеанса для Reader, который будет выгружать данные | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 101 | 101 | Reader назначен | Сеанс загрузки данных назначен для Reader, ожидается | Нет | Выполнить повторный запрос статуса с | | | | | получение данных от Reader | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 102 | -1 | Буферизация | Reader получает данные от источника и начал передачу данных | Нет | Выполнить повторный запрос статуса с | | | | | в Buffer | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 105 | 105 | Ожидание контроля | Переход в этот статус выполняется после окончания | Нет | Выполнить повторный запрос статуса с | | | | | буферизации или трансформации, в случае, если ФЛК для | | некоторой задержкой. | | | | | данного сеанса включен. | | | | | | | | | Рекомендуемая задержка 30сек. | | | | | Ожидается назначение компонента ФЛК, который будет выполнять | | | | | | | проверки поступающих в витрину данных. | | | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 106 | 106 | Контроль (ФЛК) | Выполняется ФЛК | Нет | Выполнить повторный запрос статуса с | | | | | | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 107 | 0 | Ожидание загрузки | Ожидается назначение загружающего компонента Uploader | Нет | Выполнить повторный запрос статуса с | | | | | | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 108 | 2 | Загрузка | Uploader назначен, выполняется загрузка данных в витрину | Нет | Выполнить повторный запрос статуса с | | | | | | | некоторой задержкой. | | | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 300 | 3 | Успешно обработан | Конечный статус успешной обработки задания (в том числе если | Да | Если установлен режим ФЛК ``skip_string`` | | | | | были пропущены строки не соответствующие ФЛК) | | или ``skip_string_except_last``, то | | | | | | | необходимо запросить отчет ФЛК, обратившись | | | | | | | к standard-loader c компонентом ФЛК запросом | | | | | | | ``GET api/v3/requests/{session_id}/report/``. | | | | | | | | | | | | | | При наличии пропущенных при загрузке строк | | | | | | | проанализировать и устранить выявленные недочеты | | | | | | | в загружаемых данных или скорректировать проверки| | | | | | | ФЛК. | | | | | | | | | | | | | | В других случаях действия не требуются. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 301 | 4 | Ошибка обработки | Ошибка обработки сеанса, файл не загружен | Да | Необходимо: | | | | | | | | | | | | | | изучить содержимое вернувшегося поля | | | | | | | ``description``; | | | | | | | | | | | | | | - если суть проблемы не ясна из предыдущего | | | | | | | пункта, изучить События Сеанса загрузки; | | | | | | | | | | | | | | - если суть проблемы не ясна из предыдущего | | | | | | | пункта изучить содержимое логов standard-loader| | | | | | | и query-execution-core на предмет наличия | | | | | | | ошибок. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 302 | 7 | Ошибка контроля | Ошибки ФЛК, файл не загружен | Да | В процессе ФЛК выявлены ошибки, необходимо | | | | | | | запросить отчет ФЛК, обратившись к | | | | | | | standard-loader c компонентом ФЛК запросом | | | | | | | ``GET api/v3/requests/{session_id}/report/``. | | | | | | | | | | | | | | Далее проанализировать и устранить выявленные | | | | | | | недочеты в загружаемых данных или скорректировать| | | | | | | проверки ФЛК. | +---------+-----------------------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ .. _stloder_flk: Форматно-догический контроль """"""""""""""""""""""""""""""" Для включения ФЛК пользователю необходимо: - настроить режим ФЛК в конфигурации модуля (Раздел :numref:`standard_loader_application_yml`): - указать flk: enabled = true; - задать manager → flk → mode; - добавить правила ФЛК (FLKCondition) для целевой Витрины и таблицы при помощи API Стандартного загрузчика (Раздел :numref:`stloader_api`). Правила ФЛК задаются в разрезе целевой Витрины и таблицы, для которых можно задать следующие проверки: - проверка уникальности полей: - по сочетанию атрибутов (для комплексных ключей); - по заданному атрибуту; - сравнение значения с константой; - соответствие регулярному выражению. Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов. .. _flk_mode_settings: Режимы ФЛК ************************** Для настройки ``mode`` реализованы режимы: - ``skip_string`` - пропускаются строки не прошедшие ФЛК; - ``warning`` - строки не прошедшие ФЛК выводятся в лог приложения, а также добавляются в Журнал ФЛК; - ``skip_file`` - Сеанс загрузки отменяется если найдена хотя бы одна строка не прошедшая ФЛК, при этом ФЛК с формированием Журнала проводится для всего объема данных; - ``skip_on_first_error`` - Сеанс загрузки отменяется если найдена хотя бы одна строка не прошедшая ФЛК, при этом ФЛК с формированием Журнала завершаются на первой встреченной ошибке; - ``skip_string_except_last`` - пропускаются строки не прошедшие ФЛК по уникальности кроме последней. Проверка уникальности по одному или по сочетанию полей ********************************************************* Пример запроса для проверки уникальности по группе файлов: .. code-block:: fields: --проверка уникальности по одному полю snils: uniq: true --проверка по сочетанию полей id: uniq: true uniq-with: [type,region] Проверка сравнения значения с константой ***************************************** Проверка осуществляется для значений каждого поля в соответствии с заданным правилом, которое включает в себя проверку сравнения с константой (>, <, >=, <=, =, !=). .. code-block:: fields: # условие или type: in: ["1","2","3"] # условие больше и меньше age: ">": 6 "<": 19 # условие равенства subject: "=": "math" # условие не равно mark: '!=": null Проверка соответствия регулярному выражению ********************************************* Проверка соответствия регулярному выражению должна выполняется на основе Java Util Regexp (https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html) .. code-block:: fields: birthday: # ограничение на формат даты ГГГГ-ММ-ДД: 4 цифры года, 2 цифры месяца и 2 цифры дня match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})" .. _compatibility_mode: Режим совместимости """""""""""""""""""""""" В целях облегчения перевода процесса загрузки данных в Витрину с модуля Rest-uploader на Стандартный загрузчик реализован режим обратной совместимости. Данный режим может быть установлен для Reader с ``data-flow-type: push`` и ``source-type: rest`` в его настройках. Режим обратной совместимости позволяет: - возращать идентификаторы Сеансов загрузки в формате Rest-uploader (UUID) вместо integer: ``readers.[].config.use-deprecated-session-id: true``; - возращать коды статусов Сеансов загрузки в формате Rest-uploader (:numref:`tab_stloader_status`): настройка ``readers.[].config.use-deprecated-status-code: true``. .. attention:: Представленные настройки по умолчанию отсутствуют в конфигурационном файле, для включения режима совместимости их нужно явно добавить. .. _data_reconciliation: Сверка данных ############### Стандартный загрузчик позволяет выполнять сверку части или всех данных между Источником и Витриной с точностью до конкретной записи, без остановки текущей загрузки данных и возможностью автоматической корректировкой отличающихся данных. .. note:: Функция сверки доступна только для источников с типом JDBC Для инициализации сверки пользователю (с помощью API Стандартного загрузчика (:numref:`stloader_api`) или с помощью прямых запросов к служебной БД (при наличии доступа) необходимо создать следующие объекты: - Информационные системы: - Источника; - Витрины данных; - Источники (source) типа JDBC с привязкой к соответствующим Информационным системам: - для подключения к СУБД Источника; - для подключения к Витрине данных. - Задание на сверку (compare_task) со ссылками на созданные Источники. - Расписание (compare_schedule) срабатывания для созданного Задания на сверку. После создания объектов необходимо развернуть сервисы чтения данных по аналогии с загрузкой данных (:numref:`stloader_load`). Пример настроек для сверки данных: - REST .. code-block:: -- Создание информационных систем POST /api/v1/information-systems { "description": "Информационная система Источника", "mnemonic": "original_information_system" }, { "description": "Информационная система Витрины", "mnemonic": "datamart_information_system" } -- Создание Источников с типом jdbc. JSON-объект в поле source_connect должен передаваться в виде строки, -- для этого необходимо добавить escape символы POST /api/v1/sources { "description": "Мой источник", "is_mnemonic": "original_information_system", "type": "jdbc", "source_connect": "\n{\n \"connect_jdbc\": {\n \"url\": \"jdbc:postgresql://postgres:5432/test1\",\n \"user\": \"dtm\",\n \"password\": \"dtm\"\n }\n}\n", "mnemonic": "original_source" }, { "description": "Источник Витрина данных", "is_mnemonic": "datamart_information_system", "type": "jdbc", "source_connect": "\n{\n \"connect_jdbc\": {\n \"url\": \"jdbc:prostore://prostore:9090\"\n }\n}\n", "mnemonic": "datamart_source" } -- Создание Задания на сверку. JSON-объект в полях original_request, datamart_request, correction_delete_request, correction_load_request -- должен передаваться в виде строки, для этого необходимо добавить escape символы POST /api/v1/compare-tasks { "original_source_mnemonic": "original_source", "datamart_source_mnemonic": "datamart_source", "original_request": "\n{\n \"request_sql\": {\n \"query\": \"SELECT id::VARCHAR as pk_cortege, ('x'||md5(row(lastname,firstname,patronymic,birthdate)::VARCHAR))::bit(64)::bigint as hash_value FROM standard_loader.students_college_actual WHERE active = true\"\n }\n}\n", "datamart_request": "\n{\n \"request_sql\": {\n \"query\": \"SELECT CAST(id AS VARCHAR) as pk_cortege, CHECK_SUM_INT64(ROW(lastname, firstname, patronymic, CAST(birthdate AS VARCHAR))) as hash_value FROM receiver.students_college WHERE active = true\"\n }\n}\n", "target_datamart": "receiver", "target_table": "students_college", "correction_delete_request": "\n{\n \"request_sql\": {\n \"query\": \"SELECT id as pkfield FROM receiver.students_college WHERE id in(:pk_keys)\"\n }\n}\n", "correction_load_request": "\n{\n \"request_sql\": {\n \"query\": \"SELECT * FROM standard_loader.students_college_actual WHERE id in(:pk_keys)\"\n }\n}\n", "description": "Моя сверка", "mnemonic": "my_compare" } -- Создание Расписания сверки POST /api/v1/compare-schedules { "compare_task_mnemonic": "my_compare", "cron": "*/5 * * * * *", "description": "Мое расписание сверки", "enabled": true, "mnemonic": "my_compare_schedule", "one_time": false } - SQL .. code-block:: -- Создание информационных систем insert into persistence.information_system (mnemonic, description) values ('original_information_system','Информационная система Источника'), ('datamart_information_system','Информационная система Витрины'); -- Создание Источников с типом jdbc insert into persistence."source" (mnemonic, description, is_mnemonic, type, source_connect) values ('original_source', 'Мой источник', 'source_information_system', 'jdbc', ' { "connect_jdbc": { "url": "jdbc:postgresql://postgres:5432/test1", "user": "dtm", "password": "dtm" } } '), ('datamart_source', 'Источник Витрина данных', 'datamart_information_system', 'jdbc', ' { "jdbc": { "url": "jdbc:prostore://prostore:9090" } } '); -- Создание Задания на сверку insert into compare_task (mnemonic, original_source_mnemonic, datamart_source_mnemonic, original_request, datamart_request, correction_load_request, correction_delete_request, target_datamart, target_table, description) values('my_compare', 'original_source', 'datamart_source', ' { "sql": { "query": "SELECT id::VARCHAR as pk_cortege, ('x'||md5(row(lastname,firstname,patronymic,birthdate)::VARCHAR))::bit(64)::bigint as hash_value FROM standard_loader.students_college_actual WHERE active = true" } } ',' { "sql": { "query": "SELECT CAST(id AS VARCHAR) as pk_cortege, CHECK_SUM_INT64(ROW(lastname, firstname, patronymic, CAST(birthdate AS VARCHAR))) as hash_value FROM receiver.students_college WHERE active = true" } } ', ' { "sql": { "query": "SELECT * FROM standard_loader.students_college_actual WHERE id in(:pk_keys)" } } ', ' { "sql": { "query": "SELECT id FROM receiver.students_college WHERE id in(:pk_keys)" } } ', 'receiver', 'students_college', 'Моя сверка'); -- Создание Расписания сверки insert into compare_schedule (mnemonic, compare_task_mnemonic, cron, enabled, one_time, description) values('my_compare_schedule', 'my_compare', '*/5 * * * * *', true, false, 'Мое расписание сверки'); В результате инициализации по заданному расписанию создаются Сеансы сверки. Жизненный цикл Сеанса загрузки представлен в разделе :numref:`stloader_status_mode`. В процессе обработки каждого Сеанса сверки создаются: - события сверки (compare_event), которые позволяют детально отследить этапы выполнения сверки. Описание событий представлено в разделе :numref:`stloader_events`. - журнал Результатов сверки (compare_result), в котором содержатся все выявленные расхождения между данными Источника и Витрины; - журнал Устойчивых расхождений (stable_difference), в котором содержатся расхождения, сохраняющиеся на протяжении двух последовательных сеансов сверки, при условии неизменности оригинальных данных в Источнике. Также, в случае включения автоматической корректировки, создаются: - журнал Попыток корректировки (correction_attempt), в котором содержатся первичные ключи записей и ссылки на Сеансы корректирующей загрузки, в рамках которых данные записи корректировались; - журнал Исключений из корректировки (correction_exception), в котором содержатся первичные ключи записей, которые не удалось автоматически скорректировать. Данные записи предназначены для ручного разбора и будут исключены из дальнейшей автоматической корректировки. Описание объектов приведено в разделе :numref:`stloader_meta`. .. _reconciliation_algorythm: Алгоритм сверки """"""""""""""""" :numref:`img_reconciliation` содержит диаграмму последовательности обработки Сеанса сверки. .. _img_reconciliation: .. figure:: /_static/img/modules/st_loader/img_reconciliation.png :align: center :alt: Диаграмма последовательности обработки Сеанса сверки Диаграмма последовательности обработки Сеанса сверки 1. Инициализация и загрузка контрольных сумм: а) Comparator создает Сеанс сверки; б) Comparator делегирует Manager создание Сеансов загрузки контрольных сумм; в) Manager создает Сеансы загрузки из Источника и Витрины; г) Manager делигирует выполнение Сеансов загрузки подходящим Reader'ам; д) Reader'ы получают Сеансы загрузки и инициируют запросы к Источнику и Витрине данных для получения контрольных сумм; е) Источник и Витрина данных вычисляют и передают контрольные суммы Reader; ж) Reader загружает контрольные суммы в служебную базу данных (при этом используется штатный механизм загрузки). 2. Сравнение контрольных сумм: а) Comparator отправляет запрос к Служебной БД на сравнение контрольных сумм; б) Служебная БД выполняет сравнение и возвращает выявленные расхождения; в) Если расхождения не обнаружены, Comparator завершает процесс сверки; г) Если расхожнения обнаружены, Comparator формирует журнал Результатов сверки в Служебной БД и переходит к вычислению Устойчивых расхождений. 3. Вычисление устойчивых расхождений: а) Comparator проверяет наличие данных минимум двух смежных сверок; б) Если данных недостаточно, Comparator завершает процесс сверки; в) Если данных достаточно, Comparator выполняет вычисление устойчивых расхождений; г) Если Устойчивые расхождения не выявлены, Comparator завершает процесс сверки; д) Если Устойчивые расхождения выявлены, Comparator формирует журнал Устойчивых расхождений; е) Comparator проверяет необходимость корректировки. 4. Фаза корректировки данных: а) Если корректировка включена, Comparator обновляет журнал Исключений из корректировки; б) Comparator делегирует Manager создание Сеансов корректирующей загрузки для всех Устойчивых расхождений, за вычетом Исключений из корректировки; в) Comparator Формирует журнал Попыток корректировки; г) Manager создает Сеансы корректирующей загрузки; д) Manager делегирует сеансы корректирующей загрузки подходящему Reader'у; е) Ридер получает делегированные Сеансы корректирующей загрузки и запрашивает данные в Источнике; ж) Источник возвращает Reader'у запрошенные данные; з) Reader передает корректирующие данные в Витрину (при этом используется штатный механизм загрузки); и) Витрина загружает данные в целевую таблицу. .. _stloader_status_mode: Статусная модель Сеанса сверки """"""""""""""""""""""""""""""""" Сверка может включать лишь одну пару загрузок хешей и их сравнение, либо может так же включать дополнительные действия по выявлению устойчивых расхождений данных, или даже серию загрузок ключей и их сравнений. .. _img_stloader_status_mode: .. figure:: /_static/img/modules/st_loader/img_stloader_status_mode.png :align: center :alt: Статусная модель Сеанса сверки Статусная модель Сеанса сверки Статусная модель сеанса сверки приведена в :numref:`tab_stloader_status_reconciliation` .. _tab_stloader_status_reconciliation: .. table:: Статусная модель сеанса сверки +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | **Код** | **Название** | **Описание** | **Финальный статус** | **Действия при получении данного статуса** | +=========+====================================+==============================================================+==================================+==================================================+ | 200 | Новый | Создан новый сеанс Сверки, ожидается назначение Компаратору, | Нет | Выполнить повторный запрос статуса с некоторой | | | | который будет выгружать данные | | задержкой. | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 201 | Ожидание исполнение сеансов | Созданы сеансы загрузки контрольных сумм, ожидается их | Нет | Выполнить повторный запрос статуса с некоторой | | | загрузки хешей | исполнение | | задержкой. | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 202 | Сравнение хешей | Контрольные суммы данных Источника и Витрины загружены в | Нет | Выполнить повторный запрос статуса с некоторой | | | | служебную БД, выполняется их сравнение | | задержкой. | | | | | | | | | | | | Рекомендуемая задержка 30сек. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 210 | Выявление устойчивых расхождений | Выявлены расхождения между данными Источника и Витрины, | Нет | Выполнить повторный запрос статуса с некоторой | | | | выполняется сравнение расхождений с предыдущим Сеансом | | задержкой. | | | | Сверки для выявления устойчивых расхождений | | | | | | | | Рекомендуемая задержка 30сек. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 211 | Формирование справочника | Выявлены устойчивые расхождения, выполняется анализ | Нет | Выполнить повторный запрос статуса с некоторой | | | невыравниваемых записей | результатов прошлой корректирующей загрузки для выявления | | задержкой. | | | | записей не поддающихся автоматической корректировке | | | | | | | | Рекомендуемая задержка 30сек. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 230 | Выравнивающая загрузка | В Задании сверки настроена автоматическая корректировка, а | Нет | Выполнить повторный запрос статуса с некоторой | | | | так же найдены записи для которых она возможна. | | задержкой. | | | | | | | | | | Сеансы корректирующей загрузки созданы, ожидается их | | Рекомендуемая задержка 30сек. | | | | исполнение | | | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 350 | Сверка завершена | Конечный статус успешной обработки задания | Да | Необходимо изучить результаты проведенной Сверки:| | | | | | | | | | | | - Устойчивые расхождения: | | | | | | | | | | | | - метод ``GET /api/v1/stable-differences`` | | | | | | (:numref:`stloader_api`); | | | | | | | | | | | | - проанализировать динамику метрики | | | | | | ``stable_difference_count_total`` | | | | | | (:numref:`tab_get_counter`). | | | | | | | | | | | | При наличии Устойчивых расхождений и включенном | | | | | | механизме автоматической корректировки данных, | | | | | | изучить также: | | | | | | | | | | | | - попытки выравнивания: | | | | | | | | | | | | - метод ``GET /api/v1/correction-attempts`` | | | | | | (:numref:`stloader_api`); | | | | | | | | | | | | - справочник Некорректируемых записей: | | | | | | | | | | | | - метод ``GET /api/v1/correction-exceptions`` | | | | | | (:numref:`stloader_api`); | | | | | | | | | | | | - проанализировать динамику метрики | | | | | | ``correction_exception_count_total`` | | | | | | (:numref:`tab_get_counter`). | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ | 351 | Ошибка выполнения сверки | Ошибка обработки сеанса, сверка не произведена | Да | Необходимо | | | | | | | | | | | | - изучить содержимое вернувшегося поля | | | | | | ``description``; | | | | | | | | | | | | - если суть проблемы не ясна из предыдущего | | | | | | пункта, изучить События Сеанса сверки; | | | | | | | | | | | | - если суть проблемы не ясна из предыдущего | | | | | | пункта изучить содержимое логов приложений на | | | | | | предмет наличия ошибок: | | | | | | | | | | | | - standard-loader; | | | | | | | | | | | | - query-execution-core. | +---------+------------------------------------+--------------------------------------------------------------+----------------------------------+--------------------------------------------------+ .. _stloader_events: События модуля ^^^^^^^^^^^^^^^^^^^ .. _tab_stloader_events: .. table:: События модуля +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **Код события** | **Источник** | **Сообщение** | **Перевод из статуса** | **Перевод в статус** | **Прикладные данных** | **Примечание** | | | | | | | | | | | | | (status_from) | (status_to) | (payload) | | +=================+==================+==============================+============================+========================+=======================+============================================================+ | **События создания сеансов (таблица БД: event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1001 | Manager | Сеанс создан по расписанию | | 100 Новый | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1002 | Reader | Сеанс создан по запросу | | 100 Новый | session | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1003 | Reader | Данные запрошены | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1004 | Buffer | Поступила порция данных | 100 Новый | 102Буферизация | chunk_num | | | | | | | | | | | | | | 101 Reader назначен | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1006 | Buffer | Загрузка в буфер завершена | 102 Буферизация | 105 Ожидание контроля | file_sz | | | | | | | | | | | | | | | 107 Ожидание загрузки | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1007 | Manager | Неудачная попытка создания | | | | | | | | Сеанса. skip | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1008 | Manager | Неудачная попытка создания | | | | | | | | Сеанса. wait | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1020 | Reader | Обработка нового файла | | | file_name | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1021 | Reader | Пустой файл, прикладные | | | file_name | Применимо только для reader folder pull, сообщает о факте | | | | данные отсутствуют | | | | обработки пустого файла, но при этом в сеансе могут быть и | | | | | | | | другие файлы | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 1022 | Reader | Загружаемых данных нет | Reader назначен | 300 Успешно обработан | | Например по JDBC получили пустое множество | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **События ФЛК (таблица БД: event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2001 | FLK | ФЛК начат | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2002 | FLK | ФЛК завершен без ошибок | 106 Контроль | 107 Ожидание загрузки | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2003 | FLK | ФЛК завершен с ошибками | 106 Контроль | 107 Ожидание загрузки | | | | | | | | | | | | | | | | 302 Ошибка ФЛК | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2004 | Manager | Получен запрос на отчет ФЛК | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2005 | Manager | Отправлен отчет ФЛК | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2006 | Manager | Получен запрос длины | | | | | | | | очереди ФЛК | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 2007 | Manager | Отправлена длина очереди ФЛК | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **События загрузки (таблица БД: event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4001 | Uploader | Загрузка данных в Витрину | | | | | | | | началась | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4002 | Uploader | Загрузка данных в Витрину | 108 Загрузка | 300 Успешно обработан | | | | | | завершена | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4003 | Manager | Дельта открыта | | | user, | Успешно выполненная команда | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4004 | Manager | Дельта закрыта | | | user, | Успешно выполненная команда | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4005 | Manager | Откат дельты | | | user, | Успешно выполненная команда | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4006 | Manager | Получен запрос длины очереди | | | user, | | | | | загрузки | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4007 | Manager | Отправлена длина очереди | | | user, | | | | | загрузки | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4008 | Uploader | Загружаемые данные разделены | | | offset | | | | | по дубликату первичного | | | | | | | | ключа | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4009 | Uploader | Загружаемые данные разделены | | | offset | | | | | по лимиту операции Prostore | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 4010 | Uploader | Попытка подключения к | | | номер попытки | | | | | Prostore | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **Универсальные события (таблица БД: event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5001 | Manager | Компонент назначен | | В зависимости от | | | | | | | | текущего статуса | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5002 | Manager | Отправлен запрос на удаление | | | | | | | | данных из буфера | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5003 | Buffer | Данные удалены из буфера | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5004 | Manager | Получен запрос статуса Сеанса| | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5005 | Manager | Отправлен ответ на запрос | | | | | | | | статуса Сеанса | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5006 | Manager | Потеря сервиса | Текущий статус | Предыдущий статус, | | | | | | исполняющего Сеанс | | ожидающий назначение | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5007 | Manager | Регистрация сервиса | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5008 | Manager | Обрыв связи с сервисом | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5009 | Manager | Отправка сервисов для | | | | | | | | развертывания | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5010 | Deployer | Сервис запущен | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5011 | Deployer | Сервис остановлен | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5012 | Comparator | Потеря компаратора, | | | | | | | | исполняющего сеанс сверки | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5013 | Comparator | Попытка подключения к Буферу | | | номер попытки | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 5020 | Manager | Расширение пачки сеансов, | | | | | | | | отправляемых на загрузку | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **События ошибок загрузки (таблица БД: event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 6001 | Любой источник | Произвольная ошибка | | 301 Ошибка обработки | Стектрейс ошибки | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 6002 | Manager | Ошибка открытия дельты | | | user, | | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 6003 | Manager | Ошибка закрытия дельты | | | user, | | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 6004 | Manager | Ошибка отката дельты | | | user, | | | | | | | | инициировавший | | | | | | | | операцию | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 6005 | Reader | Недостаточно места на диске | | 301 Ошибка обработки | стектрейс ошибки | | | | | reader, рекомендуется | | | | | | | | отключение опции | | | | | | | | reader->save-read-data-> | | | | | | | | enabled | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **События сверок (таблица БД: compare_event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7001 | Comparator | Сеанс сверки создан по | | 200 Новый | | | | | | расписанию | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7002 | Comparator | Сеансы загрузки хэшей | 200 новый | 201 Ожидание исполнения| | | | | | созданы | | сеансов загрузки хешей | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7003 | Comparator | Сеансы загрузки хэшей успешно| 201 Ожидание исполнения | 202 Сравнение хешей | | | | | | обработаны | сеансов загрузки хешей | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7100 | Comparator | Сравнение хешей завершено, | 202 Сравнение хешей | 350 Сверка завершена | | | | | | расхождений не обнаружено | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7010 | Comparator | Сравнение хешей завершено, | 202 Сравнение хешей | 210 Выявление | | | | | | обнаружены расхождения | | устойчивых расхождений | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7110 | Comparator | Недостаточно данных для | 210 Выявление | 350 Сверка завершена | | | | | | выявления устойчивых | устойчивых расхождений | | | | | | | расхождений | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7120 | Comparator | Устойчивые расхождения не | 210 Выявление | 350 Сверка завершена | | | | | | выявлены | устойчивых расхождений | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7020 | Comparator | Выявлены устойчивые | 210 Выявление | 350 Сверка завершена | | | | | | расхождения | устойчивых расхождений | | | | | | | | | или | | | | | | | | | | | | | | | | 220 Формирование | | | | | | | | справочника | | | | | | | | невыравниваемых записей| | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7130 | Comparator | Справочник невыравниваемых | 220 Формирование | 350 Сверка завершена | | | | | | записей сформирован, нет | справочника | | | | | | | записей для выравнивания | невыравниваемых записей | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7030 | Comparator | Справочник невыравниваемых | 220 Формирование | 230 Выравнивающая | | | | | | записей сформирован, есть | справочника | загрузка | | | | | | записи для выравнивания | невыравниваемых записей | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7031 | Comparator | Сеансы выравнивающей | | | | | | | | загрузки созданы | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7140 | Comparator | Сеансы выравнивающей | 230 Выравнивающая загрузка | 350 Сверка завершена | | | | | | загрузки успешно обработаны | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 7005 | Comparator | Пропуск создания Сеанса | | | | | | | | сверки | | | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | **События ошибок сверки (таблица БД: compare_event)** | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+ | 8001 | Comparator | Произвольная ошибка | | 351 Ошибка выполнения | | | | | | | | сверки | | | +-----------------+------------------+------------------------------+----------------------------+------------------------+-----------------------+------------------------------------------------------------+