Меню

ABAP для SAP HANA

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

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

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

Рис.1. Code to Data pushdown

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

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

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

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

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

Новые возможности Open SQL:

  1. Расширенный JOIN БД таблиц
  2. Арифметические выражения
  3. Строковые выражения
  4. CASE, COALESCE выражения

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

2. FOR ALL ENTRIES

Новые возможности касаются, как правило, оперирования с таблицами на уровне СУБД. Но часто возникают ситуации, когда нужно совместно «манипулировать» как внутренними таблицами, так и таблицами базы данных. Для этих целей можно использовать конструкцию SELECT … FORALLENTRIES (FAE).

SELECT <result> FROM <table> FOR ALL ENTRIES IN <itab> WHERE ... <col><op><itab_comp> ...

Эта конструкция не имеет соответствия в стандарте языка SQL, поэтому интерпретатор осуществляет преобразование к семантически эквивалентному SELECT выражению, которое может быть выполнено базой данных.

Управлять процессом преобразования можно с использованием ProfileParameters:

profileparameter

description

defaultvaluefor HDB

rsdb/max_blocking_factor

Верхний предел для кол-ва строк из <itab>

50

rsdb/max_in_blocking_factor

Верхний предел для кол-ва строк из<itab> в случае с IN выражением

1024

rsdb/prefer_in_itab_opt

= 1 :преобразование с использованием IN

1

rsdb/prefer_join

= 1 :преобразование с использованием JOIN

0

rsdb/prefer_join_with_fda

= 1: тожесамое, что и JOIN, но itab будет передана на уровень SAP HANA с использованием FDA (fastdataaccess).

Доступно начиная с SAPNW 7.42и SAPHANARev. 70.

1

rsdb/prefer_union_all

Если rsdb/prefer_join = 0 
= 1 : UNION 
= 0 : OR

0

Таблица 1. Profile Parameters.

Эти параметры могут быть заданы с использованием транзакции RZ11.

Пример конструкции:

ABAP

SELECTcol1, 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

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти