Привет! Меня зовут Дмитрий Канатников. Я работаю архитектором информационных систем в компании Sapiens Solutions с 2013 года и занимаюсь внедрением хранилищ данных на базе SAP и open source-систем с 2007 года. В этой статье расскажу о том, как мы решали проблему медленной выгрузки данных из SAP.
Предпосылки
В современных условиях возрастает актуальность выгрузки данных из SAP ERP в хранилища данных DWH или Data Lakehouse сторонних вендоров. Интеграция с системами, не входящими в экосистему SAP, зачастую сопровождается сложностями: поставщики программного обеспечения, как правило, не поддерживают использование конкурентных продуктов. Нативный механизм выгрузки данных в SAP BW (Business Warehouse) не может быть применен к системам, не принадлежащим к экосистеме SAP.
На нашем проекте внедрения хранилища данных на основе Arenadata DB для одного из крупных банков мы столкнулись со сложностями при интеграции с SAP S/4HANA. Стандартные инструменты для экстракции данных от SAP по тем или иным причинам оказались непригодны для быстрой и надежной выгрузки больших объемов данных. Рассмотрим существующие варианты интеграции.
SAP RFC
SAP RFC (Remote Function Call) позволяет подключаться к серверу приложений и запускать ФМ (функциональные модули) по нативному протоколу SAP, что в теории может дать высокую скорость работы и переиспользование бизнес-логики, реализованной на ABAP. Однако, есть и существенные минусы. При большом объеме выгрузки нет возможности разделить данные на пакеты, а также нет инкрементальной загрузки. Кроме того, для работы клиентского приложения требуется установка SAP RFC SDK с версией, соответствующей SAP ERP и в некоторых случаях дополнительные модули, например, PyRFC для python (уже не поддерживается).
ODBC/JDBC к SAP HANA (Oracle)
Прямое соединение с СУБД минуя сервер приложений – простое решение с хорошей скоростью получения данных, но и здесь могут возникнуть сложности. Невозможность использования бизнес-логики, реализованной на сервере приложений, а также отсутствие дельта-экстракции для стандартных объектов (например, движения материалов) может стать серьезной проблемой при миграции существующего функционала из SAP BW. С точки зрения информационной безопасности не во всех компаниях разрешены интеграции с прямым подключением к СУБД. Также существуют лицензионные ограничения: в большинстве случаев прямое подключение к СУБД запрещено.
SAP OData
OData (Open Data Protocol) - это открытый веб-протокол для получения и обновления данных, основанный на HTTP и REST. В SAP есть возможность создавать OData-сервисы на различных типах объектов и бизнес-сущностей и не только выгружать данные, но и вносить изменения. В контексте экстракции данных наилучшим вариантом является тип источника ODP (Operational Data Provisioning) – фреймворк для экстракции данных, который пришел на смену SAPI и также используется при выгрузке в SAP BW. Он поддерживает пакетирование, дельта-очереди, различные типы источников данных (BW Datasource, ABAP CDS, HANA View и др.) и является идеальным вариантом для целей получения больших объемов данных из SAP. Однако, в связке с SAP OData возникают определенные проблемы. Используемые форматы, такие как XML и JSON, не являются оптимальными с точки зрения размера при выгрузке больших объемов данных. Дополнительно в пакеты данных включается большое количество дублируемых метаданных, что является стандартом в OData. Но самая большая проблема этого метода – очень низкая скорость. Она ниже скорости загрузки данных в SAP BW в несколько раз. Не стоит забывать, что есть и менее очевидные минусы. Для каждого источника данных (бизнес-сущности) требуется сгенерировать отдельный OData-сервис, который включает в себя несколько ABAP-классов и другие объекты. То есть для среднего хранилища данных нужно создать сотни, а то и тысячи новых объектов. С точки зрения полномочий тоже есть сложности: для включения полномочий в роли нельзя просто указать имена сервисов по маске, нужно перечислить их id.
Таким, образом известные механизмы экстракции из SAP ERP обладают теми или иными недостатками, и требуется новое решение.
Наш выбор — кастомный HTTP-сервис
OData-сервисы являются хорошим способом интеграции, если устранить их врожденные недостатки: низкую скорость и большой объем пересылаемых данных. Поэтому логично разработать схожий функционал: выбросить ненужную функциональность, упростить архитектуру и оптимизировать ее непосредственно под экстракцию.
HTTP-сервис реализован на ABAP. Так как основную работу проделывает ODP, реализация сервиса достаточна простая. Он получает запрос от клиентского приложения по HTTP(S), запускает процесс экстракции в ODP, используя соответствующие ФМ и классы, получает данные, конвертирует, сжимает и передает клиенту. Соответственно, функциональность сервиса определяется в основном ODP, а именно: типы источников данных BW Datasource, ABAP CDS, HANA View и др., пакетирование данных, дельта-очереди, повтор дельты, мониторинг экстракции в транзакции ODQMON. В ODQMON и системных таблицах ODP можно посмотреть статус процесса экстракции, сформированные пакеты и выгруженные пакеты.
На рисунке представлена схема экстракции в Arenadata DB с подходящим этой СУБД форматом для передачи данных (CSV+GZIP). Однако, с сервисом по HTTP/REST могут работать и другие фреймворки или ETL-инструменты. Так, с помощью Apache Spark или Apache Airflow и соответствующих библиотек, данные передаются в Data Lakehouse.

В отличие от OData-сервисов для простоты ODP-сервис можно реализовать напрямую в транзакции SICF:

Обработчик выполнен в виде ABAP-класса:

Класс реализует интерфейс обработки HTTP-запросов. В нем находится вся логика работы сервиса.

При получении запроса от клиентского приложения сервис регистрируется в ODP как OData-сервис и запускает экстракцию. Получение данных осуществляется последующими запросами к сервису в асинхронном режиме: как только в ODP формируется пакет данных, клиентское приложение может его получить. Есть возможность задавать размер пакета несжатых данных.

При такой архитектуре удается решить главную проблему OData – низкую скорость работы. Параллельная экстракция и передача пакетов данных, собственная реализация конвертации и компрессия данных позволяет получить скорость выгрузки, сравнимую с выгрузкой в SAP BW.
Результаты замеров:
Экстрактор |
Количество полей |
Количество записей |
Время загрузки (сек) |
Время загрузки OData (сек) |
Время загрузки BW (сек) |
Выигрыш по скорости в сравнении с OData, раз |
0FI_GL_14 |
208 |
1 345 234 |
387 |
1 568 |
332 |
4,05 |
0CO_OM_CCA_40 |
82 |
2 482 448 |
293 |
1 178 |
219 |
4,02 |
Таким образом, предлагаемая реализация сервиса выгрузки из SAP обладает целым рядом преимуществ:
Скорость загрузки: близкая к обычной скорости SAP BW
Простота и удобство: не требуется создания дополнительных объектов, кроме реализации сервиса
Универсальные открытые протоколы и форматы для интеграции: HTTP/REST/CSV/GZIP
Возможность выгрузки в классический DWH или в Data Lakehouse.
Возможность доработки сервиса для кастомизации форматов выгружаемых данных под конкретное хранилище данных и ETL-инструменты
Возможность переиспользования BW-экстракторов и других объектов с бизнес-логикой, что актуально при миграции
Использование стандартного SAP ODP-фреймворка
Пакетирование выгружаемых данных
Дельта-загрузки (инкремент)
Повтор дельта-загрузки в случае сбоев
Мониторинг процесса экстракции данных в исходной системе SAP
Эта разработка использовалась при реализации проекта миграции с SAP BW для крупного банка, о котором мы делали вебинар.
maxxxsudb
Дим, привет. Вендор в Россию возвращается?
dmkan Автор
Привет!. Вендор уехал, внедрения остались) Если бы вернулся, может быть и статья бы не была нужна. Все бы в BW остались.