Как вы упомянули, вы использовали исходное соединение OLEDB для доступа к SAP, если это означает, что вы обращаетесь к базовой базе данных SAP напрямую, вам следует приостановить выполнение этого по трем причинам, пока не получат явные одобрения ИТ:
- Вы пропустили защиту уровня приложений SAP.Может быть проблема соблюдения требований безопасности предприятия;
- Лицензия SAP вашей компании может не позволять вам это делать.Если ваша компания имеет только лицензию на непрямой доступ SAP, вам, возможно, придется остаться на уровне приложений;
- Вы не получите официальную поддержку SAP, получив прямой доступ к базовой базе данных.
Youиметь несколько опций для извлечения данных с использованием SSIS через прикладной уровень SAP:
- Использовать коммерческие пользовательские компоненты SSIS для этой работы (отказ от ответственности: AecorSoft является одним из ведущих поставщиков, предлагающих такие компоненты подключения);
- Изучите собственный интерфейс OData Gateway SAP для получения данных.
- Попросите группу 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, которая также поддерживает базу данных.
Надеюсь, это поможет!