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

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

Материал из Платформа Эра. Документации
Нет описания правки
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
ETL (Extract, Transform, Load) — это приложения для обработки данных, которое используется для извлечения, преобразования и загрузки данных от одного провайдера (домена) к другому провайдеру (домену). При этом домены могут принадлежать одному или разным экземплярам платформы.
==== Общая информация ====
'''ETL''' ('''E'''xtract, '''T'''ransform, '''L'''oad) — это приложения для обработки данных, которое используется для извлечения, преобразования и загрузки данных от одного провайдера (домена) к другому провайдеру (домену). При этом домены могут принадлежать одному или разным экземплярам платформы.
 
ETL поддерживает:
 
* Гибкие правила синхронизации с маппингом полей;
* Различные режимы работы: ручной, по таймеру, в реальном времени;
* Двунаправленную синхронизацию;
* Фильтрацию данных на уровне источника и назначения;
* Обработку ошибок и контроль состояния.


Общий принцип работы приложения ETL внутри Платформы с Доменом A, которое взаимодействует с другим экземпляров платформы с Доменом B.
Общий принцип работы приложения ETL внутри Платформы с Доменом A, которое взаимодействует с другим экземпляров платформы с Доменом B.
[[Файл:ETL схема.png|центр|600x600пкс|мини]]
Для работы ETL используются провайдеры и правила.
Провайдер:<syntaxhighlight lang="json">
{
  "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"
}
</syntaxhighlight>Правило:<syntaxhighlight lang="json">
{
  "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"
}
</syntaxhighlight>
==== Порядок настройки ====


[[Файл:Настройка взаимодействия.png|мини|Настройка взаимодействия]]
====== Создание провайдера ======
Запустите приложение ETL (для пользователя должна присутствовать роль ''etl_admin'') и создайте два провайдера данных.
Запустите приложение ETL (для пользователя должна присутствовать роль ''etl_admin'') и создайте два провайдера данных.


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


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


Создайте правило извлечения, трансформации и загрузки данных. В данном примере мы синхронизируем в обе стороны данные справочника приложения smart/Accounts.
====== Создание правил ======
Создайте правило ETL. Укажите провайдеров источника и получателя, созданных выше. Выберите режим загрузки данных (В реальном времени).
[[Файл:Правило ETL.png|центр|безрамки|999x999пкс]]
В данном примере мы синхронизируем в обе стороны данные трех классов приложения Smart, а именно smart/Contacts, smart/Accounts и smart/Requests. Укажите для каждого класса состав правила с двусторонним направлением синхронизации данных.
[[Файл:Состав правила ETL.png|центр|безрамки|999x999пкс]]
Повторите для классов smart/Accounts и smart/Requests.
 
====== Мониторинг работы ======
Добавьте запись на любом из экземпляров платформы в приложении Smart. В разделе «Мониторинг правил» проконтролируйте выполнения синхронизации в режиме реального времени при помощи WebSocket-протокола. Убедитесь, что запись была создана также в домене B.  


Добавьте запись на любом из экземпляров платформы. В разделе «Мониторинг правил» проконтролируйте выполнения синхронизации в режиме реального времени при помощи WebSocket-протокола.
[[Файл:Провайдеры.png|мини|Провайдеры]]
[[Файл:Мониторинг.png|мини|Мониторинг]]
Возможно использовать более сложные правила для переноса данных из различных классов, будь то системные, продуктовые или пользовательские классы платформы.  
Возможно использовать более сложные правила для переноса данных из различных классов, будь то системные, продуктовые или пользовательские классы платформы.  
[[Файл:Мониторинг ETL.png|центр|безрамки|999x999пкс]]
====== Важно ======
Обратите внимание, что некоторые классы невозможно использовать в ETL-приложении. Например, те, которые содержат зашифрованные пароли или хэш-данные . Также некоторые системные классы имеют запрет на изменение данных. 
==== Дополнительные параметры ====
====== Интервалы (interval) ======
<syntaxhighlight lang="json">
{
"interval": "hour" // Последний час
}
{
"interval": "day" // Последний день
}
{
"interval": ["2024-01-01","2024-12-31"] // Конкретный период
}
</syntaxhighlight>
[[Категория:Приложения]]
[[Категория:Приложения]]
====== Фильтры (filter) ======
Фильтры используют префиксную нотацию (польская запись).<syntaxhighlight lang="json">
["operator", ["property", "fieldName"], ["const", "value"]]
</syntaxhighlight>Операторы
Сравнение<syntaxhighlight lang="json">
// Равенство
["==", ["property", "status"], ["const", "active"]]
// Не равно
["!=", ["property", "type"], ["const", "deleted"]]
// Больше / меньше
[">",  ["property", "amount"],  ["const", 100]]
["<",  ["property", "age"],      ["const", 65]]
[">=", ["property", "score"],    ["const", 50]]
["<=", ["property", "priority"], ["const", 10]]
</syntaxhighlight>Логические операции<syntaxhighlight lang="json">
// И (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]]
]
</syntaxhighlight>Проверка на NULL<syntaxhighlight lang="json">
// Поле пустое
["isNull", ["property", "deletedAt"]]
// Поле не пустое
["not", ["isNull", ["property", "createdAt"]]]
</syntaxhighlight>Использование значений провайдера в фильтре<syntaxhighlight lang="json">
{
  "filter": [
    "==",
    ["property", "domainName"],
    ["sourceProvider", "domain"]
  ]
}
</syntaxhighlight>
====== Значения (values) ======
Используются для маппинга и определяет как поля источника сопоставляются с полями назначения.
Прямое копирование поля<syntaxhighlight lang="json">
{
  "values": {
    "targetField": "sourceField"
  }
}
</syntaxhighlight>Константа<syntaxhighlight lang="json">
{
  "values": {
    "status": ["const", "active"]
  }
}
</syntaxhighlight>Значения из провайдера <syntaxhighlight lang="json">
{
  "values": {
    "domain": ["sourceProvider", "domain"],
    "targetDomain": ["destinationProvider", "domain"]
  }
}
</syntaxhighlight>JavaScript-выражение<syntaxhighlight lang="json">
{
  "values": {
    "fullName": {
      "code": "'[firstName]' + ' ' + '[lastName]'",
      "expressionKind": "expression"
    },
    "formattedPhone": {
      "code": "'5'.concat('[phone]')",
      "expressionKind": "expression"
    },
    "parsedData": {
      "code": "JSON.parse('[jsonField]').propertyName",
      "expressionKind": "expression"
    }
  }
}
</syntaxhighlight>Автоматический маппинг
Используйте "*" для автоматического сопоставления полей с одинаковыми именами<syntaxhighlight lang="json">
{
  "values": {
    "*": "*"
  }
}
</syntaxhighlight>или <syntaxhighlight lang="json">
{
  "values": null
}
</syntaxhighlight>
====== Игнорирование параметров (ignoreProperties) ======
<syntaxhighlight lang="json">
{
  "ignoreProperties":[
      "internalId",
      "systemField",
      "temporaryData"
  ]
}
</syntaxhighlight>

Текущая версия от 21:55, 29 января 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"
   ]
}