Извлечение данных из SAP в SQL Server - PullRequest
3 голосов
/ 15 мая 2019

Я использую пакеты служб SSIS для извлечения данных из таблиц базы данных SAP в таблицы SQL Server.Я использую соединения источника / назначения OLEDB для достижения этой цели.

Проблема в том, что в таблице в SAP содержится 5 миллионов записей, и на извлечение этих данных в мою таблицу SQL Server уходит около 2 часов.Я использовал метод trunc-dump (урезание таблицы на сервере SQL и выгрузка данных в нее из таблицы SAP), а также попытался использовать ключ Multiple Hash для ввода обновленных / новых записей.

Проблема с ключом Hash заключается в том, что ему все равно приходится сканировать всю таблицу, чтобы найти измененные / новые записи, и, следовательно, он занимает почти то же время, что и метод trunc-dump.

Я ищу новый способ или изменяю существующий способ, чтобы сократить время, необходимое для завершения этого извлечения.

1 Ответ

1 голос
/ 19 июня 2019

Как вы упомянули, вы использовали исходное соединение OLEDB для доступа к SAP, если это означает, что вы обращаетесь к базовой базе данных SAP напрямую, вам следует приостановить выполнение этого по трем причинам, пока не получат явные одобрения ИТ:

  1. Вы пропустили защиту уровня приложений SAP.Может быть проблема соблюдения требований безопасности предприятия;
  2. Лицензия SAP вашей компании может не позволять вам это делать.Если ваша компания имеет только лицензию на непрямой доступ SAP, вам, возможно, придется остаться на уровне приложений;
  3. Вы не получите официальную поддержку SAP, получив прямой доступ к базовой базе данных.

Youиметь несколько опций для извлечения данных с использованием SSIS через прикладной уровень SAP:

  1. Использовать коммерческие пользовательские компоненты SSIS для этой работы (отказ от ответственности: AecorSoft является одним из ведущих поставщиков, предлагающих такие компоненты подключения);
  2. Изучите собственный интерфейс OData Gateway SAP для получения данных.
  3. Попросите группу SAP ABAP написать собственные программы ABAP для выгрузки данных SAP в файлы CSV, а затем использовать SSIS для их извлечения.

Давайте теперь посмотрим на производительность:

Производительность SAP ETL зависит от многих факторов, но в целом даже для транзакционных таблиц SAP с более 100 столбцами считается очень медленным извлекать 5 миллионов строкза пару часов.Например, мы наблюдали случаи извлечения стандартной таблицы заголовков BKPF из Главной книги SAP (почти 100 столбцов) с постоянной производительностью 1М строк каждые 1-2 минуты.Конечно, такая производительность достигается за счет коммерческого компонента и служб SSIS, но вы должны ожидать, по крайней мере, 1 МБ за 10 минут даже для варианта № 3, описанного выше, при переходе к промежуточному файлу CSV.На уровне приложения на уровне приложений SAP все 3 варианта будут использовать SAP Open SQL (в отличие от «собственного SQL», который предлагает базовая база данных) для доступа к таблицам SAP, поэтому, если у вас возникнут проблемы с производительностью уровня приложения, вы можетепроанализируйте сторону Open SQL.

Как вы уже упоминали о сценарии обновления / новых записей, это типичная проблема с дельта-извлечением.Обычно в транзакционных таблицах SAP есть поля «Дата создания» и «Дата изменения», которые могут помочь вам захватить дельту.В этом случае, чтобы избежать полного сканирования таблицы, примените индексы через прикладной уровень SAP к этим «дельта-полям».Например, если вам нужно извлечь таблицу VBAK заголовка торгового документа, вы можете выполнить фильтрацию по ERDAT (Создано) и AEDAT (Изменено).Дельта - сложный предмет в SAP.Нет простого утверждения, чтобы описать дельта-решение, так как модели данных SAP являются сложными и сильно различаются по функциональным модулям.Дельта-анализ всегда в каждом конкретном случае.Некоторые люди также могут просто рекомендовать использовать «дельта-экстракторы», но не рассматривайте это как серебряную пулю, потому что у экстрактора есть свои проблемы.Короче говоря, если вы посмотрите на извлечение на основе таблиц, сфокусируйтесь на этом и попытайтесь поработать с функциональной командой SAP, чтобы определить подходящие дельта-поля.Старайтесь избегать полного сканирования таблицы и хэширования.Инкрементальная загрузка с некоторым дополнительным перекрытием предыдущего извлечения (например, загрузка сегодняшних и вчерашних записей) и выполнение MERGE для поглощения изменений.

Есть несколько случаев, когда вы не можете найти какое-либо дельта-поле, и нецелесообразно делать полную загрузку все время.Отличным примером является таблица основных данных адресов ADRC.В этом случае, если вам необходимо выполнить дельта-загрузку для такой таблицы, вы должны попросить функциональную группу SAP определить для вас дельту (то есть они вводят пользовательскую логику в каждое место, где можно создать, обновить или изменить мастер адресов).удален), или вам нужно запросить команду SAP Basis создать триггер БД для базовой таблицы базы данных и открыть таблицу триггеров на прикладном уровне.Таким образом, вы можете создать представление прикладного уровня на главной таблице и триггерной таблице, чтобы выполнить дельта.Тем не менее, нет прямого доступа к базе данных через ваше решение.Триггер уровня БД полностью управляется и контролируется вашей командой SAP Basis, которая также поддерживает базу данных.

Надеюсь, это поможет!

...