Skip to Content

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

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

/wp-content/uploads/2014/12/codepushdown_377306.png

Для осуществления этого подхода могут быть использованы следующие конструкции:

  1. Расширенный Open SQL
  2. FOR ALL ENTRIES
  3. ABAP Managed Database Procedures

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

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

/wp-content/uploads/2014/12/osql_369473.png

Новые возможности 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 colMopM 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).


/wp-content/uploads/2014/12/amdp_simple_example_378121.png


Возможности 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.

Полезные ссылки

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

Leave a Reply