Mit der Einführung der HANA-Datenbank hat SAP das „Code Pushdown“-Konzept eingeführt, wobei zeitintensive Berechnungen mit vielen Daten auf die Ebene der Datenbank delegiert werden. Anstatt die Daten von der Datenbank zum ABAP-Server zu laden, um die Kalkulationen dort durchzuführen („Data to Code“), wird die Berechnung direkt in der SAP HANA-Datenbank, also „Code to Data“, durchgeführt.
Zur Umsetzung dieses Konzepts wurden sogenannte ABAP Managed Database Procedure (AMDP) eingeführt. Mit dieser neuen Funktion können ABAP-Entwickler Datenbankprozeduren im ABAP-Framework erstellen und verwalten. Diese können auch in datenintensiven Transformationen eingesetzt werden, um die Ladeprozesse zu beschleunigen. AMDP bietet über SQLScript nativen Zugriff auf die HANA-Datenbank und vermeidet unnötige Datenübertragungen zwischen Datenbank und Anwendungsserver. So kann die Performance der ETL-Prozesse (Extrahieren, Transformieren und Laden) in BW signifikant verbessert werden.
Die kundeneigenen Transformationsregeln sind normalerweise in ABAP-Routinen untergebracht. Diese werden allerdings auf dem Applikationsserver verarbeitet, was die Datenübertragung zwischen der HANA-Datenbank und dem Applikationsserver erfordert. Gerade bei großen Datenmengen wirkt sich das negativ auf die Performance aus.
Bevor Sie jedoch ein Projekt aufsetzen, um alle Routinen von ABAP auf AMDP und SQLScript zu transformieren, sollte Ihnen klar sein, dass es vorrangig um Performance geht. Daher ist es wenig sinnvoll, alle Routinen anzupassen. Vielmehr sollten Sie folgende Aspekte bei Ihrer Entscheidung berücksichtigen.
Fragen Sie sich, ob die Transformationen business- oder zeitkritisch sind. Dabei sollten Sie sich zuerst die Transformationen anschauen, die die SLAs (service level agreements) überschreiten oder knapp davor sind. Neben der Gesamtlaufzeit sollten Sie auch beachten, wie oft die Transformationen ausgeführt werden. So kann es durchaus sinnvoll sein, einige Minuten bei einer Transformation einzusparen, die stündlich ausgeführt wird. Ein nächtlicher Ladeprozess ist dagegen weniger kritisch.
Darüber hinaus sollten Sie die wahre Ursache der langen Ladezeiten herausfinden. Gute Kandidaten sind Transformationen, bei denen die ABAP-Verarbeitung oder der Transfer der Daten vom Datenbank- zum Applikationsserver viel Zeit in Anspruch nehmen. Wenn dagegen die Datenbankzugriffe ineffizient gestaltet sind, ist es sinnvoller die ABAP SELECT Statements zu tunen.
Evaluieren Sie die Komplexität der anzupassenden ABAP-Routinen. Manche Logiken sind unglaublich komplex und es würde viel Zeit (und Geld) in Anspruch nehmen, um diese in SQLScript umzusetzen. Dadurch würde sich der Zeitgewinn bei der Ausführung der Transformation relativieren. Führen Sie immer eine Kosten-Nutzen-Analyse durch.
AMDPs und SQLScript erfordern andere Fähigkeiten als ABAP. Entwickler, die an Arbeit mit Datensätzen und Schleifen gewohnt sind, müssen umdenken. Fragen Sie sich, ob das benötigte SQLScript-Wissen Inhouse verfügbar ist. Ohne Zweifel wollen Sie die implementierten Transformationen anpassen, sobald die Berater mit der Arbeit fertig und außer Haus sind. Stellen Sie daher sicher, dass Sie es auch können.
Meiner Meinung nach lohnt sich die Umstellung bestehender Transformation auf SQLScript auf jeden Fall, sofern man die aufgelisteten Entscheidungskriterien beachtet. SQLScript sollte grundsätzlich bei datenintensiven Logiken verwendet werden, um zusätzliche Datenübertragungen zwischen Applikations- und Datenbankservern zu vermeiden. Dabei deckt SQLScript viele häufige Szenarien ab, wie Stammdaten-Lookup, Einheitenumrechnung, Währungsumrechnung, Ableitung der Werte aus einer benutzerdefinierten Tabelle und vieles mehr.
Die Wahl des AMDP-Ansatzes mit SQLScript statt der ABAP-Routine kann in einigen Fällen zu erheblichen Leistungssteigerungen führen. In der Praxis haben wir Fälle mit mehr als 15-fach besserer Laufzeit beobachtet. Der Kunde kann sich nun auf Datenanalysen und das Erreichen von Ergebnissen konzentrieren, anstatt auf die Verarbeitung der Daten zu warten.
Bildquelle: Pexels, CC0 License