.. _csv_uploader_config: Конфигурация CSV-uploader (application.yml) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл ``application.yml`` – основной конфигурационный файл модуля CSV-uploader, в котором задана логика и порядок работы загрузчика, а также другие настройки необходимые для корректной работы адаптера. .. _csv_uploader_application.yml: Пример файла application.yml ############################### .. code-block:: yaml # Настройки авторизации auth: # Режим аутентификации # DISABLED - аутентификация отключена # JWT - (ранее upload.jwt-auth) включает окно запроса JWT на странице "Загрузка" для аутентификации в rest-uploader # STUDIO - включает аутентификацию по логину и паролю в Datamart Platform Studio mode: ${AUTH_MODE:DISABLED} # Настройки аутентификации в режиме STUDIO studio: # Запрос логина и пароля на странице "Загрузка", (отдельно для каждого datamart). # При false используются реквизиты в блоке datamarts: ui-prompt: true datamarts: # Реквизиты для авторизации используемые на странице "Загрузка" если ui-prompt: false, а также при загрузке по расписанию. - datamart_mnemonic: datamart25 username: user password: passwd organization_ogrn: ogrn http-server: # Порт для старта веб сервера port: ${HTTP_PORT:8080} # Включить веб-сервер enabled: ${HTTP_ENABLED:true} file-size: # Ограничение на размер отправляемого файла (в мегабайтах) restriction: ${SEND_FILE_SIZE_RESTRICTION:1024} environment: # Папка для ошибочных файлов error-folder: ${ENVIRONMENT_ERROR_FOLDER:error} prostore-rest-client: enabled: true # true / false # выключение доступа к Простору persistence-datamart: ${PERSISTENCE_DATAMART:persistence} # датамарт, в котором будут располагаться таблицы с данными сервиса datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора # таблица журнала загрузок table-upload-journal: ${PERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_upload_journal} # таблица журнала загрузок по расписанию table-scheduled-upload-journal: ${PERSISTENCE_SCHEDULED_UPLOAD_JOURNAL_TABLE:csv_uploader_scheduled_upload_journal} table-settings: ${PERSISTENCE_SETTINGS_TABLE:csv_uploader_settings} # таблица хранения настроек сервиса storage-duration: 14d # продолжительность хранения данных в журналах cleanup-interval: 10m # периодичность очистки данных из таблиц журналов host: ${PS_HOST:localhost} port: ${PS_PORT:9195} http: max-pool-size: ${PS_MAX_POOL_SIZE:8} metadata: # задействовано только если prostore-rest-client.enabled: false free-input: false # true / false разрешить свобоный ввод строки датамарта и таблицы # datamarts: # определяет варианты к выбору датамартов и таблиц, список доступных таблиц определяется для каждого датамарта отдельно # marketing: # tables: [sales] # region36: # tables: [tickets,passengers,cars] # способ хранения пользовательской конфигурации persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, preferences validation: enabled: ${VALIDATION_ENABLE:true} rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081} upload: mandatoryFlk: ${UPLOAD_MANDATORY_FLK:false} # Настройки парсера csv файлов 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} metrics: port: ${METRICS_PORT:9837} backup: mode: ${BACKUP_MODE:rest} # kafka | rest rest: uri: ${BACKUP_URI:/backup} backupTopic: ${BACKUP_TOPIC:adapter.backup} statusTopic: ${STATUS_TOPIC:adapter.status} kafka: consumer: property: bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost} group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command} auto.offset.reset: latest producer: property: bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost} .. _csv_uploader_config_params: Параметры конфигурации ^^^^^^^^^^^^^^^^^^^^^^ Настройка конфигурации CSV-uploader осуществляется путем редактирования параметров настроек в файле ``application.yml``. В файле конфигурации CSV-uploader могут быть настроены следующие секции: - ``auth`` - настройки авторизации; - ``http-server`` - настройки порта подключения; - ``file-size`` - ограничение на размер отправляемого файла (мегабайты); - ``environment`` - определяет папку для ошибочных файлов; - ``prostore-rest-client`` - блок параметров конфигурирования взаимодействия с Prostore; - ``metadata`` - добавление поля ввода наименования датамарта и таблицы; - ``persistence-mode`` - настройка хранения пользовательской конфигурации; - ``validation`` - адрес подключения модуля REST-Uploader; - ``upload`` - требование токена для аутентификации в модуле REST-Uploader; - ``csv-parser`` - настройка парсинга CSV; - ``metrics`` - настройка получения метрик; - ``backup`` - настройка бэкапирования модуля. Секция auth ######################### Секция ``auth`` содержит настройки авторизации. Например: .. code-block:: yaml auth: mode: ${AUTH_MODE:DISABLED} studio: ui-prompt: true datamarts: - datamart_mnemonic: datamart25 username: user password: passwd organization_ogrn: ogrn **Параметры конфигурации** - ``mode`` - режим аутентификации, например ``AUTH_MODE:DISABLED``, доступные следующие варианты: - ``DISABLED`` - аутентификация отключена; - ``JWT`` - включает окно запроса JWT на странице "Загрузка" для аутентификации в REST-Uploader (ранее upload.jwt-auth); - ``STUDIO`` - включает аутентификацию по логину и паролю в Datamart Platform Studio; - ``studio`` - настройки аутентификации в режиме STUDIO; - ``ui-prompt`` - если выбран ``true`` запрос логина и пароля на странице "Загрузка", (отдельно для каждого datamart), если выбран ``false``, то используются реквизиты из блока "datamarts"; - ``datamarts`` - Реквизиты для авторизации используемые на странице "Загрузка" если выбран ``ui-prompt: false``, а также при загрузке по расписанию; - ``datamart_mnemonic`` - мнемоника датамарта, например: ``datamart_mnemonic: datamart25``; - ``username`` - имя пользователя, например ``username: user``; - ``password`` - пароль авторизации, например ``password: passwd``; - ``organization_ogrn`` - ОГРН организации, например ``organization_ogrn: ogrn``. Секция http-server ######################### Секция ``http-server`` предназначена для настройки порта и протокола передачи данных (одно из значений **HTTP** или **HTTPS**). Например: .. code-block:: yaml http: port: ${HTTP_PORT:8080} enabled: ${HTTP_ENABLED:true} **Параметры конфигурации** - ``port`` - порт для старта веб-сервера, например ``HTTP_PORT:8080``; - ``enabled`` - статус включения/отключения веб-сервера, например ``HTTP_ENABLED:true``. Секция file-size ################### Секция ``file-size`` отвечает за ограничение на размер отправляемого файла (указывется в мегабайтах). .. code-block:: yaml file-size: restriction: ${SEND_FILE_SIZE_RESTRICTION:1024} **Параметры конфигурации** - ``restriction`` - ограничение на размер отправляемого файла, например ``SEND_FILE_SIZE_RESTRICTION:1024``. Секция environment ################## В секции ``environment`` указывается папка для ошибочных файлов. Например: .. code-block:: yaml environment: error-folder: ${ENVIRONMENT_ERROR_FOLDER:error} **Параметры конфигурации** - ``error-folder`` - папка для ошибочных файлов, например ``ENVIRONMENT_ERROR_FOLDER:error``. Секция prostore-rest-client ########################### В секции ``prostore-rest-client`` реализован блок параметров конфигурирования взаимодействия с Prostore. Например: .. code-block:: yaml prostore-rest-client: enabled: true persistence-datamart: ${PERSISTENCE_DATAMART:persistence} datasource: ${PERSISTENCE_DATASOURCE:} table-upload-journal: ${PERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_data_upload_journal} table-scheduled-upload-journal: ${PERSISTENCE_SCHEDULED_UPLOAD_JOURNAL_TABLE:csv_uploader_scheduled_upload_journal} table-settings: ${PERSISTENCE_SETTINGS_TABLE:csv_uploader_settings} storage-duration: 14d cleanup-interval: 10m host: ${PS_HOST:localhost} port: ${PS_PORT:9090} http: max-pool-size: ${PS_MAX_POOL_SIZE:8} **Параметры настроек** - ``enabled`` - включение/ выключение доступа к Prostore - ``persistence-datamart`` - датамарт, в котором будут располагаться таблицы с данными сервиса, например ``PERSISTENCE_DATAMART:persistence``; - ``datasource`` - по умолчанию пусто, берется единственный датасорс из настроек Prostore; - ``table-upload-journal`` - таблица журнала загрузок, например ``PERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_upload_journal``; - ``table-scheduled-upload-journal`` - таблица журнала загрузок по расписанию, например ``PERSISTENCE_SCHEDULED_UPLOAD_JOURNAL_TABLE:csv_uploader_scheduled_upload_journal``; - ``table-settings`` - таблица хранения настроек сервиса, например ``PERSISTENCE_SETTINGS_TABLE:csv_uploader_settings``; - ``storage-duration`` - продолжительность хранения данных в журналах, например ``14d``, указывается в днях; - ``cleanup-interval`` - периодичность очистки данных из таблиц журналов, например ``10m``, указывается в минутах; - ``host`` - адрес Prostore, например ``PS_HOST:localhost``; - ``port`` - порт Prostore, например ``PS_PORT:9195``; - ``max-pool-size`` - максимальное число подключений к Prostore, например ``PS_MAX_POOL_SIZE:8``. Секция metadata ################## Настройки секции ``metadata`` позволяют отображать поле ручного ввода названия датамарта и таблиц. Задействовано, только если в секции ``prostore-rest-client`` указано ``enabled: false``. Например: .. code-block:: yaml metadata: free-input: false # datamarts: # marketing: # tables: [sales] # region36: # tables: [tickets,passengers,cars] **Параметры конфигурации** - ``free-input`` - разрешить свободный ввод строки датамарта и таблицы, например ``free-input: false``; - ``datamarts`` - определяет варианты к выбору датамартов и таблиц, список доступных таблиц определяется для каждого датамарта отдельно. Секция persistence-mode ############################# В секции ``persistence-mode`` указывается способ хранения пользовательской конфигурации. Например: .. code-block:: yaml persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, preferences Секция validation ################## В секции ``validation`` реализован механизм настройки валидации ФЛК. Например: .. code-block:: yaml validation: enabled: ${VALIDATION_ENABLE:true} rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081} **Параметры конфигурации** - ``enabled`` - подключение к сервису REST-Uploader для выполнения валидации, например ``VALIDATION_ENABLE:true``; - ``rest-uploader-url`` - URL к сервису REST-Uploader для выполнения валидации, например ``{REST_UPLOADER_URL:http://localhost:8081}``. Секция upload ############## В секции ``upload`` реализовано включение/ отключение обязательности проверки ФЛК. Например: .. code-block:: yaml upload: mandatoryFlk: ${UPLOAD_MANDATORY_FLK:false} **Параметры конфигурации** - ``jmandatoryFlk`` - включение/ выключение обязательности ФЛК: - ``true`` - проверка ФЛК выполняется всегда, изменение переключателя ФЛК веб-интерфейсе заблокировано; - ``false`` - необходимость проверки ФЛК задается пользователем в веб-интерфейсе. Секция csv-parser ################# .. note:: При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser должны быть синхронизированы с соответствующими настройками `csvparser Prostore `_. Так же настройки секции csv-parser должны быть одинаковыми в модулях CSV-Uploader (если используется его UI), REST-Uploader и DATA-Uploader. Секция ``csv-parser`` - настройка парсинга CSV. Например: .. code-block:: yaml # Настройки парсера csv файлов 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} **Параметры конфигурации** - ``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`` - способ определения null поля, например ``CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS``. **Дополнительное описание параметров** 1. Параметр ``CSV_PARSER_ESCAPE_CHAR`` работает следующим образом: если символ экранирования и символ кавычки равны ``"``, то будет использован **RFC4180Parser**, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например ``"поле, ""содержащее двойную кавычку"""`` будет считано как ``поле, "содержащее двойную кавычку"``). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения "непечатаемых символов". 2. Параметр ``CSV_PARSER_FIELD_AS_NULL`` может принимать следующие значения: - ``EMPTY_SEPARATORS`` - два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения ["aaa", null, "bbb"], а строка [aaa,"",ccc] содержит значения ["aaa", "", "bbb"]. - ``EMPTY_QUOTES`` - два "ограничителя строки" (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,"",ccc] содержит значения ["aaa", null, "bbb"], а строка [aaa,,ccc] содержит значения ["aaa", "", "bbb"]. - ``BOTH`` - оба варианта (см. ``EMPTY_SEPARATORS`` и ``EMPTY_QUOTES``) считаются null. Например: обе строки [aaa,"",ccc] и [aaa,,bbb] содержат одинаковое значение ["aaa", null, "bbb"]. - ``NEITHER`` - ни один из вариантов (см. ``EMPTY_SEPARATORS`` и ``EMPTY_QUOTES``) не считается null. Например: обе строки [aaa,"",ccc] и [aaa,,bbb] содержат одинаковое значение ["aaa", "", "bbb"]. Секция metrics ############## Секция ``metrics`` предназначена для настройки параметров метрик. Например: .. code-block:: yaml metrics: port: ${METRICS_PORT:9837} **Параметры конфигурации** - ``port`` - Порт для метрик, например ``METRICS_PORT:9837``. Секция backup ############## Секция ``backup`` предназначена для настроек бекапирования модуля. Например: .. code-block:: yaml backup: mode: ${BACKUP_MODE:rest} # kafka | rest rest: uri: ${BACKUP_URI:/backup} backupTopic: ${BACKUP_TOPIC:adapter.backup} statusTopic: ${STATUS_TOPIC:adapter.status} kafka: consumer: property: bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost} group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command} auto.offset.reset: latest producer: property: bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost} **Параметры настроек** - ``mode`` - режим бекапирования, например ``BACKUP_MODE:rest``; - ``uri`` - путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования; - ``backupTopic`` - топик для отправки сохраненных данных, например: ``{BACKUP_TOPIC:adapter.backup}``; - ``statusTopic`` - топик для отправки статусов бэкапирования, например: ``{STATUS_TOPIC:adapter.status}``. .. Секция jet-connector .. ############################ .. Секция ``jet-connector`` предназначена для оптимизации задержек записи данных. .. Например: .. .. code-block:: yaml .. jet-connector: .. use: ${JET_CONNECTOR_USE:false} .. **Параметры настроек** .. - ``use`` - флаг активации jet-connector, например ``{JET_CONNECTOR_USE:false}``; .. .. table:: Область применения .. +------------+---------------+-----------+------------+-----------+ | Режим/СУБД | ADB | ADP | ADQM | ADG | +============+===============+===========+============+===========+ | Чтение | Нет | Нет | Нет | Нет | +------------+---------------+-----------+------------+-----------+ | Запись | В перспективе | Да | Нет | Нет | +------------+---------------+-----------+------------+-----------+ .. Чтобы воспользоваться **Jet-коннектор** требуется вместо ``upload external table`` создавать ``readable external table``, указывающую на топик, .. как отражено в `документации Prostore `_ .. В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, .. синтаксис Простора един для всех поддерживаемых СУБД. Конкретная СУБД указывается в настройках Простора. .. Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается. .. При формировании запросов с табличными параметрами, в том числе при регистрации РЗ, необходимо явно перечислять поля таблиц, по которым будет выполняться фильтрация записей или объединение таблиц. .. Переключение с **jet-connector** на **kafka postgres writer** и наоборот допускается при завершенных операциях загрузки данных. .. .. warning:: **Jet-коннектор** в настоящее время применим для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании **Jet-коннектор** с другими базами должна появиться ошибка.