Хочу рассказать о своём опыте использования SAP Connector в нескольких постах. Сразу скажу, что на практике этот продукт оказался очень полезен.
Использовать Connector было решено по двум причинам:
- Нелицензионность загрузки данных из баз Oracle.
- Потенциально большие возможности коннектора.
Установка
На стороне QlikView проблем с установкой практически не было. Больше работы было на стороне сотрудников SAP. По порядку:
- Установить дистрибутив коннектора в папку с таким путем: \QlikView SAP Connector\QlikViewSAP_x64Setup (инструкция по нему расположена там же: QlikView Connector Manual)
- Проверить, чтобы 2 транспорта были установлены в системе SAP. Они появляются по адресу C:\Program Files\Common Files\QlikTech\Custom Data\QvSAPConnector\Transports сразу после установки SAP коннектора. При установке очень важно следовать инструкции, особенно обратите внимание на соответствие версии базиса SAP и версии транспортов коннектора.
- Создать пользователя с определенными правами в SAP. В руководстве по Коннектору представлена подробная информация по самому пользователю и его правам, c помощью которой специалисты SAP нам быстро помогли.
Создание строк коннекта
После установки в списке доступных коннектов появилось сразу 7 новых вариантов:
В итоге активно используем мы только 3 из них:
- QvSAPConnector – обращения к таблицам,
- QvSAPBAPIConnector – работа с FM модулями SAP,
- QvSAPReportConnector – обращение к отчётам напрямую.
Остальные либо не неприменимы для нашей системы SAP, либо для нас не актуальны.
Процедура коннекта одинакова для всех типов подключения и достаточно проста:
Необходимо указать:
- ip-адрес
- мандант
- system number, по умолчанию 00
- логин и пароль пользователя, который был создан во время установки.
Всю эту информацию нам предоставили сотрудники SAP:
Строка коннекта у всех подключений практически одинакова:
CUSTOM CONNECT TO “Provider=QvSAPBAPIConnector.dll;ASHOST=XXXX;SYSNR=XXXX;CLIENT=XXXX;XUserID=XXXXXXXXXX;XPassword=XXXXX;»;
Дополнительные параметры коннекта
Также у всех подключений есть дополнительные параметры. Подробно прочитать о них можно в руководстве. Здесь расскажу лишь о тех дополнительных параметрах, которые активно использовал на практике.
Полезные для себя параметры я нашёл только у QvSAPConnector:
- JobStatus=C (по умолчанию С, можно поставить А или В) – приоритет статуса
- BufferPercentage = 10 (по умолчанию 10, можно поставить побольше) – процент буфера (export-import buffer, который использует коннектор у SAP.
На практике при выгрузке небольших запросов (до 20 минут) параметры JobStatus и BufferPercentage помогают, если одновременно запустить два запроса. В этом случае скорость раза в полтора увеличивается. А вот при выгрузке в несколько часов разница становится минимальной.
Скорость зависит от текущей загрузки сервера, а также от поступающих в очередь задач. Изначально SAP коннектору по умолчанию выделяется 10% свободной буферной памяти (Export\Import Buffer), в зависимости от этого объема памяти запрос разделяется на определенное количество записей, когда данные полностью передаются в QlikView, буфер на стороне SAP очищается.
Если во время загрузки размер буфера уменьшается (из-за более приоритетных задач), то в количество передаваемых строк в каждом пакете уменьшается, производительность ухудшается.
Есть возможность поставить значение параметра равным 999, в этом случае будет использоваться 10% от размера общего буфера, от наиболее старой части буфера.
- NullDate = 1 (по умолчанию 0, передаёт дату вида 00000000 как значение Null).
- KeepChasing=1, позволяет оставить строчные символы строчными при выгрузке данных.
- TimeOutFetch=1200 (по умолчанию 1200, количество секунд, через которое коннектор отключается не получив ни одной строки от SAP, для некоторых запросов этого времени может оказаться недостаточно). Есть и другие настройки с таймерами, но этот пригождался в работе.
В итоге для себя я создал несколько строк коннекта для QvSAPConnector (с различными параметрами), и по строке коннекта для QvSAPBAPIConnector и QvSAPReportConnector.
Строки коннекта для удобства убрал в отдельный файл, для возможности оперативной замены строки во всех приложениях одновременно.
Пример текстового файла:
В QlikView использую коннектор в таком виде:
$(include=E:\QVCompany\QVReload\QVScripts\ConnectSAPConnector.txt);
SAP Connector: радости и трудности
Начнём с радостей:
- широкий функционал: QvSAPConnector реализует подключения ко всем таблицам, остальные же коннекторы существенно расширяют возможности.
- Лицензионность данного способа подключения к SAP.
- Простой синтаксис, отсутствие необходимости конвертировать формат данных, формат дат, прописывать во всех выгрузках мандант.
- Доступ к кластерным таблицам, к которым не было бы доступа напрямую. Читал об этом на примере таблицы BSEG.
- Метод загрузки данных 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’ );
Ну и куда же без трудностей:
- Судя по отзывам — более медленная работа по сравнению с прямым коннектом к базе данных Oracle.
Скорость загрузки при помощи SAP Коннектор – понятие не стабильное (об этом выше при описании параметра BufferPercentage). На одних таблицах скорость неизменна при любом способе загрузки, а на других – увеличивается, при этом в таких таблицах один и тот же запрос может отрабатывать разное время из-за разной загрузки сервера SAP, например:
- Коннекты для других мандантов. Так как при подключении обязательно указывать мандант, то, если есть необходимость загружать данные из нескольких компаний, находящихся на одном сервере SAP, придётся создавать несколько коннектов и дублировать нужную выгрузку.
- Если уже имеется код напрямую к Oracle, то при переходе на коннектор будет необходимо переписать скрипты приложений, и в некоторых случаях придётся дорабатывать логику скрипта (судя по отзывам). Есть отзывы, что на некоторых таблицах мистическим образом не срабатывает JOIN, хотя при коннекте к Oracle всё работает. Или в случае с несколькими мандантами в скрипте также нужно будет добавлять новые блоки в код.
- В процессе работы иногда появляются ошибки, которых и не ожидаешь увидеть:
a) Join на некоторых таблицах не работает (BSIS и BKPF). Решается с помощью Subselect (об этом отдельно).
b) Формат данных: для QV «2», «2.», «2.0» — это одно и то же, а вот при выгрузке из SAP ещё и «2Ю» добавилось в этот список.
c) Report –преобразование типов строк.
d) Появление «помех» среди данных.
e) Некоторые запросы могут вылетать по тайм-ауту.
- Время отклика, при загрузке данных в SAP (об этом в следующем посте), когда данные уже находятся в SAP (физически видны в таблицах), коннектор долгое время (иногда десятки минут) возвращает отклик, пытались разобраться в этом со специалистами SAP, ответа на этот вопрос не нашли, предполагаем, что это внутренние механизмы SAP.
Спасибо за внимание! Следующий пост напишу о SAP Report Connector и своем опыте работы с ним.
Свежие комментарии