Хочу рассказать о своём опыте использования SAP Connector в нескольких постах. Сразу скажу, что на практике этот продукт оказался очень полезен.

Использовать Connector было решено по двум причинам:

  1. Нелицензионность загрузки данных из баз Oracle.
  2. Потенциально большие возможности коннектора.

Установка

На стороне QlikView проблем с установкой практически не было. Больше работы было на стороне сотрудников SAP. По порядку:

  1. Установить дистрибутив коннектора в папку с таким путем: \QlikView SAP Connector\QlikViewSAP_x64Setup (инструкция по нему расположена там же: QlikView Connector Manual)
  2. Проверить, чтобы 2 транспорта были установлены в системе SAP. Они появляются по адресу C:\Program Files\Common Files\QlikTech\Custom Data\QvSAPConnector\Transports сразу после установки SAP коннектора. При установке очень важно следовать инструкции, особенно обратите внимание на соответствие версии базиса SAP и версии транспортов коннектора.
  3. Создать пользователя с определенными правами в SAP. В руководстве по Коннектору представлена подробная информация по самому пользователю и его правам, c помощью которой специалисты SAP нам быстро помогли.

Создание строк коннекта

После установки в списке доступных коннектов появилось сразу 7 новых вариантов:

Sap Report Connector

В итоге активно используем мы только 3 из них:

  • QvSAPConnector – обращения к таблицам,
  • QvSAPBAPIConnector – работа с FM модулями SAP,
  • QvSAPReportConnector – обращение к отчётам напрямую.

Остальные либо не неприменимы для нашей системы SAP, либо для нас не актуальны.

Процедура коннекта одинакова для всех типов подключения и достаточно проста:

Необходимо указать:

  1. ip-адрес
  2. мандант
  3. system number, по умолчанию 00
  4. логин и пароль пользователя, который был создан во время установки.

Всю эту информацию нам предоставили сотрудники SAP:

Sap Report ConnectorSap Report Connector

Строка коннекта у всех подключений практически одинакова:

CUSTOM CONNECT TO “Provider=QvSAPBAPIConnector.dll;ASHOST=XXXX;SYSNR=XXXX;CLIENT=XXXX;XUserID=XXXXXXXXXX;XPassword=XXXXX;»;

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

Также у всех подключений есть дополнительные параметры. Подробно прочитать о них можно в руководстве. Здесь расскажу лишь о тех дополнительных параметрах, которые активно использовал на практике.

Полезные для себя параметры я нашёл только у  QvSAPConnector:

  1. JobStatus=C (по умолчанию С, можно поставить А или В) – приоритет статуса
  2. BufferPercentage = 10 (по умолчанию 10, можно поставить побольше) – процент буфера (export-import buffer, который использует коннектор у SAP.

На практике при выгрузке небольших запросов (до 20 минут)  параметры JobStatus и BufferPercentage помогают, если одновременно запустить два запроса. В этом случае скорость раза в полтора увеличивается. А вот при выгрузке в несколько часов разница становится минимальной.

Скорость зависит от текущей загрузки сервера, а также от поступающих в очередь задач.  Изначально SAP коннектору по умолчанию выделяется 10% свободной буферной памяти (Export\Import Buffer), в зависимости от этого объема памяти запрос разделяется на определенное количество записей, когда данные полностью передаются в QlikView, буфер на стороне SAP очищается.

Если во время загрузки размер буфера уменьшается (из-за более приоритетных задач), то в количество передаваемых строк в каждом пакете уменьшается, производительность ухудшается.

Есть возможность поставить значение параметра равным 999, в этом случае будет использоваться 10% от размера общего буфера, от наиболее старой части буфера.

  1. NullDate = 1 (по умолчанию 0, передаёт дату вида 00000000 как значение Null).
  2. KeepChasing=1, позволяет оставить строчные символы строчными при выгрузке данных.
  3. TimeOutFetch=1200 (по умолчанию 1200, количество секунд, через которое коннектор отключается не получив ни одной строки от SAP, для некоторых запросов этого времени может оказаться недостаточно). Есть и другие настройки с таймерами, но этот пригождался в работе.

В итоге для себя я создал несколько строк коннекта для QvSAPConnector (с различными параметрами), и по строке коннекта для QvSAPBAPIConnector и QvSAPReportConnector.

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

Sap Report Connector

Пример текстового файла:

В QlikView использую коннектор в таком виде:

$(include=E:\QVCompany\QVReload\QVScripts\ConnectSAPConnector.txt);

SAP Connector: радости и трудности

Начнём с радостей:

  1. широкий функционал: QvSAPConnector реализует подключения ко всем таблицам, остальные же коннекторы существенно расширяют возможности.
  2. Лицензионность данного способа подключения к SAP.
  3. Простой синтаксис, отсутствие необходимости конвертировать формат данных, формат дат, прописывать во всех выгрузках мандант.
  4. Доступ к кластерным таблицам, к которым не было бы доступа напрямую. Читал об этом на примере таблицы BSEG.
  5. Метод загрузки данных SUBSELECT, изначально и делался для кластерных таблиц (когда условия по наличию данных из других таблиц), но может использоваться и на обычных прозрачных таблицах.

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

Пример, на котором проверял работоспособность метода:

SQL SUBSELECT BUKRS BELNR GJAHR BUZEI BUZID AUGDT FROM BSEG WHERE BUKRS BELNR GJAHR IN (SELECT BUKRS BELNR GJAHR FROM BKPF ROWS WHERE BLDAT GE ‘20151001’ );

Ну и куда же без трудностей:

  1. Судя по отзывам — более медленная работа по сравнению с прямым коннектом к базе данных Oracle.

Скорость загрузки при помощи SAP Коннектор – понятие не стабильное (об этом выше при описании параметра BufferPercentage). На одних таблицах скорость неизменна при любом способе загрузки, а на других – увеличивается, при этом в таких таблицах один и тот же запрос может отрабатывать разное время из-за разной загрузки сервера SAP, например:Sap Report Connector

  1. Коннекты для других мандантов. Так как при подключении обязательно указывать мандант, то, если есть необходимость загружать данные из нескольких компаний, находящихся на одном сервере SAP, придётся создавать несколько коннектов и дублировать нужную выгрузку.
  2. Если уже имеется код напрямую к Oracle, то при переходе на коннектор будет необходимо переписать скрипты приложений, и в некоторых случаях придётся дорабатывать логику скрипта (судя по отзывам). Есть отзывы, что на некоторых таблицах мистическим образом не срабатывает JOIN, хотя при коннекте к Oracle всё работает. Или в случае с несколькими мандантами в скрипте также нужно будет добавлять новые блоки в код.
  3. В процессе работы иногда появляются ошибки, которых и не ожидаешь увидеть:

a) Join на некоторых таблицах не работает (BSIS и BKPF). Решается с помощью Subselect (об этом отдельно).

b) Формат данных: для QV «2», «2.», «2.0» — это одно и то же, а вот при выгрузке из SAP ещё и «2Ю» добавилось в этот список.

c) Report –преобразование типов строк.

d) Появление «помех» среди данных.

e) Некоторые запросы могут вылетать по тайм-ауту.

  1. Время отклика, при загрузке данных в SAP (об этом в следующем посте), когда данные уже находятся в SAP (физически видны в таблицах), коннектор долгое время (иногда десятки минут) возвращает отклик, пытались разобраться в этом со специалистами SAP, ответа на этот вопрос не нашли, предполагаем, что это внутренние механизмы SAP.

Спасибо за внимание! Следующий пост напишу о SAP Report Connector и своем опыте работы с ним.