Pull to refresh
0
SAP
Лидер рынка корпоративных приложений

Разработка на ABAP для SAP HANA

Reading time 3 min
Views 25K
Привет, хабрасообщество!

В данной статье я хотел бы осветить новые подходы к разработке на ABAP, применительно к SAP HANA. Мы рассмотрим новые элементы языка ABAP, которые позволят эффективнее использовать возможности, предоставляемые SAP HANA.

Допустим, у нас есть отчет, написанный на языке ABAP, время работы которого нас не устраивает. Мы хотим оптимизировать работу этого отчета. Основная идея изменения логики работы отчета, заключается в том, что часть логики отчета, которая интенсивно использует данные из СУБД (в нашем случае это SAP HANA), будет делегирована на уровень СУБД.

image
Рис.1. Code to Data pushdown.

Для осуществления этого подхода могут быть использованы следующие конструкции:
  1. Расширенный Open SQL
  2. FOR ALL ENTRIES
  3. ABAP Managed Database Procedures


Расширенный Open SQL


Начиная с Application Server ABAP 7.4 SP5 были значительно расширены возможности встроенного в ABAP языка работы с базами данных -– Open SQL.

image
Рис.2. Расширенный Open SQL

Новые возможности Open SQL:
  1. Расширенный JOIN БД таблиц
  2. Арифметические выражения
  3. Строковые выражения
  4. 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).

image
Рис.3. ABAP Managed Database Procedures

Возможности AMDP:
  1. Поддержка Lifecycle-Management
  2. Использование объектов ABAP словаря
  3. Вызов других AMDP
  4. Язык написания – SQL Script
  5. Вызывается как обычный ABAP метод

Дополнительную информацию по AMDP вы можете найти все в том же курсе от “ABAP Development for SAP HANA” (link) или в SCN(link).

Итоги

В этой статье мы хотели показать, что в ABAP имеется развитый инструментарий, который позволяет эффективно использовать возможности SAP HANA.

Полезные ссылки
Tags:
Hubs:
+4
Comments 12
Comments Comments 12

Articles

Information

Website
sap.com
Registered
Founded
Employees
5,001–10,000 employees
Location
Германия