Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Приложение ETL: различия между версиями

Материал из Платформа Эра. Документации
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
==== Общая информация ====
==== Общая информация ====
'''ETL''' ('''E'''xtract, '''T'''ransform, '''L'''oad) — это приложения для обработки данных, которое используется для извлечения, преобразования и загрузки данных от одного провайдера (домена) к другому провайдеру (домену). При этом домены могут принадлежать одному или разным экземплярам платформы.  
'''ETL''' ('''E'''xtract, '''T'''ransform, '''L'''oad) — это приложение для обработки данных, которое используется для извлечения, преобразования и загрузки данных от одного провайдера (домена) к другому провайдеру (домену). При этом домены могут принадлежать одному или разным экземплярам платформы.  


ETL поддерживает:
ETL поддерживает:
Строка 75: Строка 75:


====== Создание провайдера ======
====== Создание провайдера ======
Запустите приложение ETL (для пользователя должна присутствовать роль ''etl_admin'') и создайте два провайдера данных.
Запустите приложение ETL (для пользователя должна присутствовать роль ''etl_admin'' и создайте два провайдера данных.


# Домен A. Собственный экземпляр работы приложения ETL. Укажите адрес сервера, домен и токен.
# Домен A. Собственный экземпляр работы приложения ETL. Укажите адрес сервера, домен и токен.
# Домен B. Удаленный экземпляр платформы B. Укажите адрес сервера, домен и токен.
# Домен B. Удаленный экземпляр платформы B. Укажите адрес сервера, домен и токен.
Токен, необходимый для доступа к провайдеру, необходимо скопировать из приложения «Настройки», раздел «Каналы интеграции». Рекомендуем использовать токен product_layer. Скопируйте значение из поля «Локальный токен». Повторите действие для второго провайдера, указав токен удалённого Домена B.
Токен, необходимый для доступа к провайдеру, необходимо скопировать из приложения «Настройки», раздел «Каналы интеграции». Рекомендуем использовать токен ''product_layer.'' Скопируйте значение из поля «Локальный токен». Повторите действие для второго провайдера для которого укажите токен удалённого Домена B.


Сохраните значения. Провайдеры подключаются автоматически и перейдут в статус ''connected''.  
Сохраните значения. Провайдеры подключаются автоматически после сохранения настроек и переходят в статус ''connected''.  
[[Файл:Провайдер ETL.png|центр|безрамки|999x999пкс]]
[[Файл:Провайдер ETL.png|центр|безрамки|999x999пкс]]


Строка 87: Строка 87:
Создайте правило ETL. Укажите провайдеров источника и получателя, созданных выше. Выберите режим загрузки данных (В реальном времени).
Создайте правило ETL. Укажите провайдеров источника и получателя, созданных выше. Выберите режим загрузки данных (В реальном времени).
[[Файл:Правило ETL.png|центр|безрамки|999x999пкс]]
[[Файл:Правило ETL.png|центр|безрамки|999x999пкс]]
В данном примере мы синхронизируем в обе стороны данные трех классов приложения Smart, а именно smart/Contacts, smart/Accounts и smart/Requests. Укажите для каждого класса состав правила с двусторонним направлением синхронизации данных.  
В данном примере мы синхронизируем в обоих направлениях данные трёх классов приложения Smart, а именно smart/Contacts, smart/Accounts и smart/Requests. Укажите для каждого класса состав правила с двусторонним направлением синхронизации данных.  
[[Файл:Состав правила ETL.png|центр|безрамки|999x999пкс]]
[[Файл:Состав правила ETL.png|центр|безрамки|999x999пкс]]
Повторите для классов smart/Accounts и smart/Requests.
Повторите для классов smart/Accounts и smart/Requests.

Текущая версия от 06:37, 30 января 2026

Общая информация

ETL (Extract, Transform, Load) — это приложение для обработки данных, которое используется для извлечения, преобразования и загрузки данных от одного провайдера (домена) к другому провайдеру (домену). При этом домены могут принадлежать одному или разным экземплярам платформы.

ETL поддерживает:

  • Гибкие правила синхронизации с маппингом полей;
  • Различные режимы работы: ручной, по таймеру, в реальном времени;
  • Двунаправленную синхронизацию;
  • Фильтрацию данных на уровне источника и назначения;
  • Обработку ошибок и контроль состояния.

Общий принцип работы приложения ETL внутри Платформы с Доменом A, которое взаимодействует с другим экземпляров платформы с Доменом B.

Для работы ETL используются провайдеры и правила.

Провайдер:

{
  "domain": "domainA.era.company.ru",
  "enabled": true,
  "id": "aced949b6a7bc80e7f6c6449188dd78a",
  "kind": "erawebsocket",
  "name": "DomainA@era.company.ru",
  "serverAddress": "https://era.company.ru",
  "state": "connected",
  "statusText": "29.01.2026 20:02:21",
  "token": "72ffb7137841adb3fc04a41017ac8194"
}

Правило:

{
  "destinationProvider_id": "86420117-2abb-4f92-9013-a5f832644df9",
  "id": "c12248cf-46ee-4c66-8e51-87ebeb013fae",
  "interval": null,
  "items": [
    {
      "cancelDestinationChanges": false,
      "destination": {
        "className": "smart/Contacts"
      },
      "direction": "duplex",
      "name": "Контакты",
      "source": {
        "className": "smart/Contacts"
      }
    },
    {
      "cancelDestinationChanges": false,
      "destination": {
        "className": "smart/Accounts"
      },
      "direction": "duplex",
      "name": "Контрагенты",
      "source": {
        "className": "smart/Accounts"
      }
    },
    {
      "cancelDestinationChanges": false,
      "destination": {
        "className": "smart/Requests"
      },
      "direction": "duplex",
      "name": "Тикеты",
      "source": {
        "className": "smart/Requests"
      }
    }
  ],
  "mode": "realtime",
  "name": "Двусторонняя связь",
  "sourceProvider_id": "a7a6fca5-db25-44d8-8f1e-26c2ebf5905e"
}

Порядок настройки

Создание провайдера

Запустите приложение ETL (для пользователя должна присутствовать роль etl_admin и создайте два провайдера данных.

  1. Домен A. Собственный экземпляр работы приложения ETL. Укажите адрес сервера, домен и токен.
  2. Домен B. Удаленный экземпляр платформы B. Укажите адрес сервера, домен и токен.

Токен, необходимый для доступа к провайдеру, необходимо скопировать из приложения «Настройки», раздел «Каналы интеграции». Рекомендуем использовать токен product_layer. Скопируйте значение из поля «Локальный токен». Повторите действие для второго провайдера для которого укажите токен удалённого Домена B.

Сохраните значения. Провайдеры подключаются автоматически после сохранения настроек и переходят в статус connected.

Создание правил

Создайте правило ETL. Укажите провайдеров источника и получателя, созданных выше. Выберите режим загрузки данных (В реальном времени).

В данном примере мы синхронизируем в обоих направлениях данные трёх классов приложения Smart, а именно smart/Contacts, smart/Accounts и smart/Requests. Укажите для каждого класса состав правила с двусторонним направлением синхронизации данных.

Повторите для классов smart/Accounts и smart/Requests.

Мониторинг работы

Добавьте запись на любом из экземпляров платформы в приложении Smart. В разделе «Мониторинг правил» проконтролируйте выполнения синхронизации в режиме реального времени при помощи WebSocket-протокола. Убедитесь, что запись была создана также в домене B.

Возможно использовать более сложные правила для переноса данных из различных классов, будь то системные, продуктовые или пользовательские классы платформы.

Важно

Обратите внимание, что некоторые классы невозможно использовать в ETL-приложении. Например, те, которые содержат зашифрованные пароли или хэш-данные . Также некоторые системные классы имеют запрет на изменение данных.

Дополнительные параметры

Интервалы (interval)
{
	"interval": "hour" // Последний час
}

{
	"interval": "day" // Последний день
}

{
	"interval": ["2024-01-01","2024-12-31"] // Конкретный период
}
Фильтры (filter)

Фильтры используют префиксную нотацию (польская запись).

["operator", ["property", "fieldName"], ["const", "value"]]

Операторы Сравнение

// Равенство
["==", ["property", "status"], ["const", "active"]]

// Не равно
["!=", ["property", "type"], ["const", "deleted"]]

// Больше / меньше
[">",  ["property", "amount"],   ["const", 100]]
["<",  ["property", "age"],      ["const", 65]]
[">=", ["property", "score"],    ["const", 50]]
["<=", ["property", "priority"], ["const", 10]]

Логические операции

// И (AND)
["and",
  ["==", ["property", "status"], ["const", "active"]],
  [">",  ["property", "amount"], ["const", 0]]
]

// Или (OR)
["or",
  ["==", ["property", "type"], ["const", "A"]],
  ["==", ["property", "type"], ["const", "B"]]
]

// Не (NOT)
["not",
  ["==", ["property", "deleted"], ["const", true]]
]

Проверка на NULL

// Поле пустое
["isNull", ["property", "deletedAt"]]

// Поле не пустое
["not", ["isNull", ["property", "createdAt"]]]

Использование значений провайдера в фильтре

{
  "filter": [
    "==",
    ["property", "domainName"],
    ["sourceProvider", "domain"]
  ]
}
Значения (values)

Используются для маппинга и определяет как поля источника сопоставляются с полями назначения.

Прямое копирование поля

{
  "values": {
    "targetField": "sourceField"
  }
}

Константа

{
  "values": {
    "status": ["const", "active"]
  }
}

Значения из провайдера

{
  "values": {
    "domain": ["sourceProvider", "domain"],
    "targetDomain": ["destinationProvider", "domain"]
  }
}

JavaScript-выражение

{
  "values": {
    "fullName": {
      "code": "'[firstName]' + ' ' + '[lastName]'",
      "expressionKind": "expression"
    },
    "formattedPhone": {
      "code": "'5'.concat('[phone]')",
      "expressionKind": "expression"
    },
    "parsedData": {
      "code": "JSON.parse('[jsonField]').propertyName",
      "expressionKind": "expression"
    }
  }
}

Автоматический маппинг Используйте "*" для автоматического сопоставления полей с одинаковыми именами

{
  "values": {
    "*": "*"
  }
}

или

{
  "values": null
}
Игнорирование параметров (ignoreProperties)
{
   "ignoreProperties":[
      "internalId",
      "systemField",
      "temporaryData"
   ]
}