Привет, читатели!
В данной статье я хотел бы осветить новые подходы к разработке на ABAP, применительно к SAP HANA. Мы рассмотрим новые элементы языка ABAP, которые позволят эффективнее использовать возможности, предоставляемые SAP HANA.
Допустим, у нас есть отчет, написанный на языке ABAP, время работы которого нас не устраивает. Мы хотим оптимизировать работу этого отчета. Основная идея того, как мы будем менять логику работы отчета, заключается в том, что часть логики отчета, которая интенсивно использует данные из СУБД (в нашем случае это SAP HANA), будет делегирована на уровень СУБД.
Рис.1. Code to Data pushdown.
Для осуществления этого подхода могут быть использованы следующие конструкции:
- Расширенный Open SQL
- FOR ALL ENTRIES
- ABAP Managed Database Procedures
Расширенный Open SQL
Начиная с Application Server ABAP 7.4 SP5 были значительно расширены возможности встроенного в ABAP языка работы с базами данных -– Open SQL.
Рис.2. Расширенный Open SQL
Новые возможности Open SQL:
- Расширенный JOIN БД таблиц
- Арифметические выражения
- Строковые выражения
- CASE, COALESCE выражения
Дополнительную информацию по расширенному Open SQL вы можете найти в курсе от Open SAP под названием “ABAP Development for SAP HANA” (link).
FOR ALL ENTRIES
Новые возможности касаются, как правило, оперированием оперирования с таблицами на уровне СУБД.Но часто возникают ситуации, когда нужно совместно «манипулировать» как внутренними таблицами так и таблицами базы данных. Для этих целей можно использовать конструкцию SELECT … FOR ALL ENTRIES (FAE).
SELECT result FROM table FOR ALL ENTRIES IN itab WHERE… col op itab_comp…
Эта конструкция выражение не имеет соответствия в стандарте языка SQL, поэтому интерпретатор осуществляет преобразование к семантически эквивалентному SELECT выражению, которое может быть выполнено базой данных.
Управлять процессом преобразования можно с использованием ProfileParameters (задаются в тарнзакции RZ11):
- rsdb/prefer_in_itab_opt (преобразовать к IN)
- rsdb/prefer_join (преобразовать к JOIN)
- rsdb/prefer_union_all (преобразовать к UNION ALL)
- rsdb/max_blocking_factor (максимальное кол-во строк переданных из itab)
- rsdb/max_in_blocking_factor (максимальное кол-во строк переданных из itab в случае с IN)
Например, конструкция:
ABAP
SELECT col1, col2, ..., colM from TAB
FOR ALL ENTRIES IN itab
WHERE col1 op1 itab-a1
op col2 op2 itab-a2
…
op colM opM itab-aM
в зависимости от настроек может быть преобразована следующими способами:
UNION
SELECT col1, col2, ..., colM FROM TAB WHERE col1 op1 i11 op col2 op2 i12 op… op colM opM i1N
UNION ALL SELECT col1, col2, ..., colM FROM TAB WHERE col1 op1 i21 op col2 op2 i22 op… op colM opM i2N
…
UNION ALL SELECT col1, col2, ..., colM FROM TAB WHERE col1 op1 iM1 op col2 op2 iM2 op… op colM opM iMN
OR
SELECT col1,, col2, ..., colM FROM TAB WHERE col1 op1 i11 op col2 op2 i12 op… op colM opM i1N
OR col1 op1 i21 op col2 op2 i22 op… op colM opM i2N
…
OR col1 op1 iM1 op col2 op2 iM2 op… op colM opM iMN
IN
SELECT col1, col2, ..., colM FROM TAB WHERE (col1, ..., colM) IN ( (i11, ..., i1N),
(i21, ..., i2N),
…
(iM1, ..., iMN) )
JOIN
SELECT col1, col2, ..., colM FROM TAB, ABAP_ITAB AS T1 ( C_1 datatype, C_2 datatype, ..., C_M datatype )
WHERE TAB.col1 op1 T1.C_1 op
op TAB.col2 op2 T1.C_2
…
op TAB.colM opM T1.C_M
Profile parameters могут быть перегружены с использованием хинтов:
SELECT * FROM [..] FOR ALL ENTRIES IN [..] WHERE [..]
%_HINTS HDB '&prefer_join 1'.
Дополнительную информацию по FOR ALL ENTRIES вы найдете в SAP нотах 48230, 129385, 1622681.
ABAP Managed Database Procedures (AMDP)
Не всегда функциональности Open SQL бывает достаточно. Например, Open SQL выражение может получить на вход и вернуть только одну внутреннюю таблицу. Для реализации более сложной логики запроса к СУБД все в той же версии AS ABAP 7.4 SP5 появилась возможность создавать хранимые процедуры SAP HANA прямо в ABAP. Выглядит это так, как будто хранимая процедура «оборачивается» в метод класса.Для создания и редактирования AMDP потребуется ABAP Development Tools in Eclipse версии 2.19 или выше. Просматривать код AMDP можно и в SAP GUI (например, через транзакции SE24, SE80).
Рис.3. ABAP Managed Database Procedures
Возможности AMDP:
- Поддержка Lifecycle-Management
- Использование объектов ABAP словаря
- Вызов других AMDP
- Язык написания – SQL Script
- Вызывается как обычный ABAP метод
Дополнительную информацию по AMDP вы можете найти все в том же курсе от “ABAP Development for SAP HANA” (link) или в SCN(link).
Итоги
В этой статье мы хотели показать, что в ABAP имеется развитый инструментарий, который позволяет эффективно использовать возможности SAP HANA.
Полезные ссылки
- Open SAP
- SAP HANA Academy
- Технологии SAP для разработчиков
- HANA Cloud Platform для разработчиков
- Wiki
Автор: AyratK