W ostatnich latach SAP wprowadził jedną z najważniejszych innowacji – system SAP HANA. HANA to nowoczesna platforma służąca do przechowywania danych, charakteryzująca się przetwarzaniem ich w czasie rzeczywistym. Główną cechą odróżniającą system od innych rozwiązań oferowanych przez konkurencję, jest przetwarzanie danych w pamięci RAM i przechowywanie ich w postaci kolumnowej bazy danych. Dzięki zastosowaniu modelu kolumnowego, możliwe stało się wykorzystanie skuteczniejszych algorytmów kompresji. Prowadzi to do wyraźnego zmniejszenia zapotrzebowania na pamięć, dzięki czemu czas dostępu do danych skraca się wielokrotnie. Co więcej, dzięki elastyczności platformy HANA,  można realizować różne rozwiązania, w tym OLTP i OLAP[i]. Aby móc w pełni korzystać z nowości oferowanych przez SAP HANA w programach ABAP, konieczne stało się wprowadzenie pewnych zmian w kodzie, jak również zastosowanie nowego podejścia  w kwestii budowania aplikacji.

 

EWOLUCJA

W ostatnich latach wśród modyfikacji platformy SAP NetWeaver zaczęły się pojawiać zmiany mające pomóc w pełnym wykorzystaniu możliwości oferowanych przez SAP HANA. Możliwość korzystania z baz HANA, jako podstawowej bazy danych w aplikacjach ABAP, została wprowadzona w 2013 roku przy okazji wprowadzenia na rynek SAP NetWeaver w wersji 7.4. Ponadto,  ta wersja NetWeavera, jako pierwsza postawiła na optymalizację działania aplikacji pod kątem współpracy z bazami danych HANA.  Umożliwiła także wykorzystanie baz HANA w aplikacjach mobilnych, jak i również przetwarzanie w chmurze wszystkich danych z HANA.. Jednak jedną z najistotniejszych wprowadzonych zmian okazał się AMDP (ABAP Managed Database Procedures, czyli framework pozwalający na tworzenie na serwerze ABAP procedur baz danych, tzw. Database Procedures.
 

JAK ZACZĄĆ?

Bazy danych systemu HANA można użytkować na wiele sposobów. Mogą one być wykorzystane, jako podstawowe bazy danych - w tym celu niezbędne jest użycie tzw. procedur baz danych, które zdefiniować można przy pomocy programu HANA Studio. Niniejszy artykuł skupia się na innym podejściu - podpięciu się pod bazę HANA z klasycznego środowiska ABAP. Można tego  dokonać na kilka sposobów.

Najłatwiejszym do zaimplementowania sposobem jest podłączenie bazy HANA do aplikacji ABAP, przy użyciu zapytania Open SQL zawierającego słowo kluczowe CONNECTION:
 

SELECT * FROM tabela CONNECTION ( 'baza_hana' ) INTO ...
 

Zasadniczą przeszkodą w stosowaniu tego rozwiązania jest konieczność umieszczenia w słowniku ABAP lokalnej kopii tabeli bazodanowej z HANA. Co więcej, uniemożliwia to stosowanie bardziej zaawansowanych funkcji oferowanych przez HANA.

Powyższe problemy można wyeliminować wykorzystując inne podejście – koncepcję ADBC (ABAP DataBase Connectivity), czyli zestaw klas mających umożliwić prostą pracę na zewnętrznych bazach danych. Poniższy kod przedstawia praktyczne wykorzystanie ADBC do nawiązania połączenia z bazą HANA i wykonania na niej zapytania SQL:
 

DATA: obiekt TYPE REF TO cl_sql_statement.
wynik TYPE REF TO cl_sql_result_set.
CREATE OBJECT obiekt
EXPORTING con_ref = cl_sql_connection=>get_connection( 'baza_hana' ).
TRY.
wynik = obiekt->execute_query( statement = *kod zapytania SQL*).
ENDTRY.

 

Należy zaznaczyć, że powyższe wykorzystanie ADBC jest rekomendowaną przez SAP metodą łączenia się z zewnętrznymi bazami danych.
 

Dobre praktyki

Ze względu na zupełnie inną konstrukcję baz danych, programy ABAP, które działały na tradycyjnych bazach danych, mogą przy połączeniu z SAP HANA funkcjonować nieprawidłowo. Aby uniknąć tego rodzaju problemów, należy przestrzegać kilku reguł.

W pierwszej kolejności należy skupić się na kodzie programu. Jeżeli kod opiera się na posortowanym zestawie danych, uzyskanym dzięki zapytaniu SELECT (np. na uzyskanych danych użyte jest BINARY SEARCH), to  zapytanie musi zawierać klauzulę porządkującą ORDER BY. Operacja porządkowania często jest pomijana, ze względu na przekonanie, że domyślnie klauzula SELECT zwraca zapytania posortowane według domyślnego indeksu tabeli. To zdarza się często, jednakże przez działanie optymalizatora SQL możliwe jest, zwłaszcza w przypadku obszerniejszych baz danych, zwrócenie wyników zapytania w innej kolejności.
 

Po drugie, należy unikać stosowania klauzuli SELECT SINGLE w przypadkach gdy pojawia się wiele rekordów, które spełniających warunek ograniczający zapytanie. W tym wypadku powinno stosować się zwykłą klauzulę SELECT z dodanym warunkiem UP TO 1 ROWS. Ponadto, należy pamiętać o odpowiednich warunkach sortujących dane. 
 

Po trzecie, jako że zapytania pisane w języku Native SQL często zawierają elementy specyficzne dla konkretnej bazy danych, należy unikać ich stosowania. Zamiast tego powinno się stosować albo HANA Native SQL, albo Open SQL.
 

Po czwarte, tabele typu Pool Tables i Cluster Tables są w HANA transformowane do tabel typu Transparent Tables. Należy zwrócić na to uwagę przy pisaniu programów – przykładowo, użycie klauzuli DELETE FROM na przetransformowanej tabeli może wywołać błąd składni.Najłatwiejszym sposobem na wyeliminowanie tych problemów jest unikanie stosowania Pool Tables i Cluster Tables.  

W przypadku, gdy chcemy przystosować gotowy już program do współpracy z SAP HANA lub chcemy  upewnić się, czy nowy program mający działać na danych z SAP HANA na pewno spełnia wyżej opisane założenia, możemy skorzystać z pomocy Inspektora Kodu (ang. Code Inspector). Inspektor Kodu to narzędzie dostępne w systemie SAP, które automatycznie znajduje wszystkie miejsca programu, w których należy wprowadzić zmiany. Aby Inspektor Kodu sprawdzał kod pod kątem zgodności z HANA, należy w opcji Check Variant wybrać „STD_SQL_FOR_HANA”.
 

AMDP, procedury baz danych i SQL Script – nowe możliwości

HANA oferuje dostęp do szeregu nowych możliwości w zakresie projektowania logiki aplikacji na poziomie baz danych. Mowa o procedurach baz danych, pisanych w języku SQL Script, które jako parametry wejścia i wyjścia mogą mieć zarówno skalary, jak i tabele.

Pierwotnie, procedury można było tworzyć tylko w warstwie bazodanowej, jednak od wdrożenia SAP NetWeaver w wersji 7.4, można je tworzyć także na serwerze aplikacji ABAP. Aby to zrobić, konieczne jest stworzenie klasy implementującej interfejs if_amdp_marker_hdb, która musi zawierać metodę:
 

METHOD nazwa_metody BY DATABASE PROCEDURE
                FOR HDB
                LANGUAGE SQLSCRIPT
                [OPTIONS READ-ONLY]
                [USING db_entities].
[kod w SQLSCRIPT].
ENDMETHOD.

 

Wspomniany wyżej język SQL Script to rozszerzona wersja języka SQL na potrzeby SAP HANA. Głównym powodem powstania SQL Script była idea przeprowadzania większej ilości kalkulacji w warstwie bazodanowej, tak aby nie obciążać zanadto warstwy aplikacji, a także aby ograniczyć liczbę danych przesyłanych między warstwą baz danych a warstwą aplikacji.

Do najistotniejszych zmian wprowadzonych w SQL Script należą między innymi:
- możliwość umieszczenia wewnątrz zapytań warunków logicznych, wyjątków i pętli,
- możliwość przypisania wyniku zapytania do lokalnej zmiennej (struktury bądź tabeli),
- możliwość zwrócenia przez zapytanie więcej niż jednego rezultatu (dzięki słowu kluczowemu OUTPUT).

Przykładowo, poniższy kod przypisuje wynik zapytania do wewnętrznej tabeli itab, a ponadto przedstawia sposób wykorzystania warunków logicznych w zapytaniu:
 

Itab = SELECT kolumna_1 kolumna_2

CASE

WHEN warunek THEN polecenie_1

WHEN warunek THEN polecenie_2

ELSE polecenie_3

END

FROM tabela
 

JEDNYM SŁOWEM...

HANA została stworzona przede wszystkim dla efektywniejszego analizowania Big Data, czyli dużych ilości nieustrukturyzowanych danych. Ponadto możliwość bardzo szybkiego przetwarzania informacji może okazać się atrakcyjna również przy przetwarzaniu mniejszych zbiorów danych. Ze względu na coraz niższe ceny pamięci RAM i coraz większe ilości danych, które mają podlegać analizie, można pokusić się o stwierdzenie, że rozwiązania proponowane w SAP HANA stanowią kolejny krok ewolucji systemów zarządzania bazami danych.

 



[i] OLTP (Online Transaction Processing) – metodyka działania systemów dostarczających dane transakcyjne do hurtowni danych, wykorzystywana np. w SAP FI, SAP HR.
OLAP (Online Analytical Processing) – metodyka działania systemów pomagających w analizie informacji z hurtowni danych, wykorzystywana np. w SAP Business Warehouse.