Read the book: «Schnelleinstieg in SQLScript für SAP HANA»

Font:

Jörg Böke

Schnelleinstieg in SQLScript für SAP HANA®


Jörg Böke

Schnelleinstieg in SQLScript für SAP HANA®

ISBN:978-3-96012-003-2 (E-Book)

Lektorat:Anna Regner, Anja Achilles

Korrektorat: Bernhard Edlmann Verlagsdienstleistungen

Coverdesign: Philip Esch

Coverfoto: © BBuilder | ID 1144585906 – istockphoto.com

Satz & Layout: Satzteam Espresso Tutorials

1. Auflage 2021

© Espresso Tutorials GmbH, Gleichen 2021

URL: www.espresso-tutorials.de

Das vorliegende Werk ist in allen seinen Teilen urheberrechtlich geschützt. Alle Rechte sind vorbehalten, insbesondere das Recht der Übersetzung, des Vortrags, der Reproduktion und der Vervielfältigung. Espresso Tutorials GmbH, Bahnhofstr. 2, 37130 Gleichen, Deutschland.

Ungeachtet der Sorgfalt, die auf die Erstellung von Text und Abbildungen verwendet wurde, können weder der Verlag noch die Autoren oder Herausgeber für mögliche Fehler und deren Folgen eine juristische Verantwortung oder Haftung übernehmen.

Feedback: Wir freuen uns über Fragen und Anmerkungen jeglicher Art. Bitte senden Sie diese an: info@espresso-tutorials.com.

Inhaltsverzeichnis

Cover

Titelseite

Copyright/Impressum

Vorwort

1 Einführung in SAP HANA SQL und SQLScript

1.1 Geschichte von SQL

1.2 Definition von SQL

1.3 Definition von SQLScript

1.4 SAP ABAP oder SQLScript

1.5 SQL/SQLScript – Basiswissen

1.6 SQL-Objekttypen

1.7 HANA-Schema

1.8 HANA-Unload-Priorität

1.9 HANA Delta Merge

1.10 Namenskonventionen SQLScript

1.11 Erste Tabellen

1.12 Erste Daten

1.13 Testdatentool der SAP

1.14 SQLScript-Kommandos

2 Anwendungsbeispiele in HANA

2.1 HANA-SQLScript-Funktionen

2.2 HANA-SQLScript-Prozeduren (Procedures)

2.3 HANA Calculation Views und Table Functions

2.4 Core Data Services in HANA und ABAP

3 Debugging von SQLScript

3.1 Anlegen einer Demoprozedur für einen Debug-Test

3.2 Aufruf und Einstellung des Debugging

3.3 Debug-Prozess in Eclipse

4 Monitoring

4.1 System Views und Systemtabellen in SAP HANA

5 Performanceaspekte von SQLScript

5.1 Analyse von SQLScript mithilfe von PlanViz

5.2 Parallel Execution

5.3 Abfragen einschränken

5.4 Vermeidung von Schleifen

5.5 Dynamisches SQL

6 Fazit

A Der Autor

B Disclaimer

Weitere Bücher von Espresso Tutorials

Willkommen bei Espresso Tutorials!

Unser Ziel ist es, SAP-Wissen wie einen Espresso zu servieren: Auf das Wesentliche verdichtete Informationen anstelle langatmiger Kompendien – für ein effektives Lernen an konkreten Fallbeispielen. Viele unserer Bücher enthalten zusätzlich Videos, mit denen Sie Schritt für Schritt die vermittelten Inhalte nachvollziehen können. Besuchen Sie unseren YouTube-Kanal mit einer umfangreichen Auswahl frei zugänglicher Videos: https://www.youtube.com/user/EspressoTutorials.

Kennen Sie schon unser Forum? Hier erhalten Sie stets aktuelle Informationen zu Entwicklungen der SAP-Software, Hilfe zu Ihren Fragen und die Gelegenheit, mit anderen Anwendern zu diskutieren: http://www.fico-forum.de.

Eine Auswahl weiterer Bücher von Espresso Tutorials:

 Christoph Lordieck:Praxishandbuch BOPF – das Business Object Processing Framework

 Sebastian Abshoff:Mobile Apps mit den SAP® Cloud Platform Mobile Services

 Dr. Boris Rubarth:Schnittstellenprogrammierung in SAP® ABAP

 Johannes Gerbershagen:Qualitätsmanagement in der ABAP-Entwicklung unter SAP®

 Johannes Gerbershagen:SAP®-Praxishandbuch ABAP Core Data Services (CDS)

 Tobias Steckenborn:Schnelleinstieg in SAP® Cloud Platform Workflow


Vorwort

Schön, dass Sie dieses Buch in den Händen halten und sich, wie ich, für die Sprache HANA SQLScript interessieren!

Ich kam 1990 das erste Mal mit SQL in Berührung und habe seither viele Studienaufgaben damit gelöst. Im Laufe meines Berufslebens habe ich SQL manchmal verflucht und war froh, dass im Bereich SAP BW, in dem ich seit Ende der Neunzigerjahre zu Hause bin, am Anfang verhältnismäßig selten SQL benötigt wurde. Das hat sich während der letzten 20 Jahre gewandelt, da die Anforderungen an die Unternehmensdaten immer weiter gewachsen und besonders unter SAP HANA nur durch SQL effizient umsetzbar sind.

Insbesondere aus Gründen der Performance kam es bei dem Einsatz von SQL eigentlich immer auf den optimalen Code an, um möglichst zeitnah eine Antwort von der Datenbank zu erhalten. Im Zeitalter von HANA sieht das etwas anders aus, da Performance kein begrenzender Faktor mehr ist. Dennoch möchte ich Sie dazu anhalten, mehr und effektiver mit SQLScript zu programmieren. Während meiner Beratungstätigkeit habe ich schon eine Vielzahl suboptimaler Implementierungen gesehen, in denen SQLScript leider gar nicht oder schlecht eingesetzt wurde, was aufwendige Nacharbeiten nach sich zog. Damit Ihnen das erspart bleibt, möchte ich mit dem vorliegenden Buch aufzeigen, wo und wann man diese Sprache optimal nutzen kann.

Denn der Einsatz von SQLScript hat zwei positive Effekte: Sie sparen Geld, indem Sie weniger Speicherplatz in der HANA-Datenbank benötigen (Infoprovider können zum Teil entfallen), und verkürzen die Laufzeit für Ihr zu installierendes Projekt.

Zielgruppe

Dieses Buch richtet sich an Projektleiter, die gerne in groben Zügen verstehen möchten, was genau in den implementierten Prozessen geschieht oder wie man diese verbessern kann. Entwickler wiederum lernen hier die SQLScript-Funktionalitäten kennen, mit denen sie eine effiziente HANA-Entwicklung betreiben können.

Das erwartet Sie im Buch

Dieses Buch beschreibt, wie man SQLScript im Alltag einsetzen kann, um z.B. BW-Transformationen zu beschleunigen, eine Migration von ABAP-basierten auf AMDP-basierte Routinen zu ermöglichen oder komplett neue Wege zu beschreiten, beispielsweise mit virtuellem Staging von SAP-BW-Daten durch HANA Table Functions. SQLScript hilft Ihnen aber nicht nur im BW- oder BW/4HANA-Umfeld. Fast alle Scriptbeispiele in diesem Buch sind auch im ECC und insbesondere unter SAP S/4HANA nutzbar.

Ich werde Sie durch die Syntax von HANA SQLScript führen: von einfachen bis zu fortgeschrittenen Anweisungen. Dabei werden Sie lernen, wie Sie mit SQLScript Prozesse beschleunigen, vereinfachen (etwa in SAP BW) oder Szenarien implementieren, die vor der Einführung von HANA aufgrund von zu hohen Laufzeiten in früheren Datenbanken unmöglich waren.

Auch wenn nicht jedes Detail berücksichtigt werden kann – dafür verweise ich auf die SAP-Referenzdokumentation (siehe Kapitel 2) – werden Sie von einfachen Beispielen bis zu den Usecases eine Vielzahl von Anwendungsmöglichkeiten kennenlernen. Zusätzlich erhalten Sie zahlreiche Beispielcodes, die Sie auf Ihrem System einsetzen und testen können.

Quellcode-Beispiele

Dieses Buch enthält viele Quellcode-Beispiele. Um die Lesbarkeit in Ihrem E-Book-Lesegerät zu verbessern und den Zeilenumbruch korrekt darzustellen, empfehlen wir, den Quellcode im Querformat zu betrachten oder die Schriftgröße kleiner zu zoomen.

Alle Listings auch zum Download

Zur einfacheren Nutzung der im Buch aufgeführten Code-Beispiele biete ich Ihnen ein öffentliches Git-Repository auf GitHub, zu dem Sie über folgenden Link gelangen:

https://github.com/thebianalyst/Schnelleinstieg-in-SQLScript-fuer-SAP-HANA.

Warum sollte man Daten immer in Infoprovidern ablegen, wenn man das Ganze mithilfe von Calculation Views und SQLScript dynamisch und virtuell durchführen kann? Hierzu werde ich Ihnen in Kapitel 2 anhand einiger Beispiele aufzeigen, wie Sie sehr einfach komplexe Aufgabenstellungen lösen können.

Im vierten Kapitel des Buches werde ich auf einige Lösungsansätze eingehen, wie SQLScript Sie bei der Überwachung Ihres HANA-Systems unterstützen kann. Es arbeitet dabei Hand in Hand mit einer Vielzahl von technischen Tabellen, die von der SAP mit HANA ausgeliefert werden, um ein komfortables Überwachen Ihres HANA-Systems in Bezug auf Performance, Speicherplatz (DB) und Berechtigungen zu ermöglichen.

Eclipse Studio

Alle Codes und Screenshots in diesem Buch wurden mit Eclipse Studio erstellt und getestet, sind jedoch identisch zur HANA-Studio-Installation der SAP.

Auf die Installation von HANA Studio oder Eclipse wird in diesem Buch nicht eingegangen, Grundkenntnisse in beiden Tools setze ich für die Scriptbeispiele voraus.

Widmung

Ich widme dieses Buch meiner Lebensgefährtin, die mir die Zeit und Geduld gegeben hat, meine Erfahrung und Ideen zu Papier bzw. »in ein E-Book« zu bringen.

In den Text sind Kästen eingefügt, um wichtige Informationen besonders hervorzuheben. Jeder Kasten ist zusätzlich mit einem Piktogramm versehen, das diesen genauer klassifiziert:

Hinweis

Hinweise bieten praktische Tipps zum Umgang mit dem jeweiligen Thema.

Beispiel

Beispiele dienen dazu, ein Thema besser zu illustrieren.

Achtung

Warnungen weisen auf mögliche Fehlerquellen oder Stolpersteine im Zusammenhang mit einem Thema hin.

Die Form der Anrede

Um den Lesefluss nicht zu beeinträchtigen, verwenden wir im vorliegenden Buch bei personenbezogenen Substantiven und Pronomen zwar nur die gewohnte männliche Sprachform, meinen aber gleichermaßen Personen weiblichen und diversen Geschlechts.

Hinweis zum Urheberrecht

Zum Abschluss des Vorwortes noch ein Hinweis zum Urheberrecht: Sämtliche in diesem Buch abgedruckten Screenshots unterliegen dem Copyright der SAP SE. Alle Rechte an den Screenshots hält die SAP SE. Der Einfachheit halber haben wir im Rest des Buches darauf verzichtet, dies unter jedem Screenshot gesondert auszuweisen.

1 Einführung in SAP HANA SQL und SQLScript

Im ersten Kapitel dieses Buches möchte ich Sie in die Grundlagen von SQL einführen. Hier geht es um die Basisterminologie, die in HANA SQLScript verwendet wird. Zusätzlich werden die ersten Schritte angesprochen, wie das Anlegen von Tabellen, die wir im weiteren Verlauf des Buches nutzen werden. SQLScript ist keine von SQL unabhängige Sprache, sondern ermöglicht es dem Anwender, eine Vielzahl von Befehlen zu kombinieren und automatisiert auszugeben.

Seit der Einführung der HANA Database (im Folgenden nur noch DB genannt) und deren Verwendung z.B. unter SAP BW (Business Warehouse) oder SAP ECC (ERP Central Component) wurde der Einsatz von SQL immer interessanter.

1.1 Geschichte von SQL

SQL wurde 1970 erfunden und seit dieser Zeit immer mehr erweitert. Es handelt sich dabei zwar um eine Standardprogrammiersprache, aber wie bei allen Sprachen (etwa Englisch oder Deutsch) existieren zu SQL auch Dialekte, die datenbankabhängig sind (etwa Oracle, IBM, Microsoft).

SQL-Syntax in diesem Buch

Wir werden uns in diesem Buch ausschließlich mit SQL der HANA DB beschäftigen.

Alle SQL-Aspekte beruhen auf einem relationalen Datenmodell, das die Tabellen des relationalen Modells in Beziehung setzen kann. Hier spricht man auch von Datenbank-Views. Ich werde Ihnen im Buch aufzeigen, wie man Tabellen anhand dieser Views mittels SQLScript verknüpft.

1.2 Definition von SQL

Die Structured Query Language, kurz SQL, ist eine standardisierte Programmierungssprache zur Definition von Objekten (wie z.B. Tabellen) in einer Datenbank. Diese Objektdefinition bzw. deren Abfrage kann je nach Anforderung einfach oder komplex sein. Außerdem lassen sich mittels SQL Daten abfragen oder andere Objekte wie Views oder Prozeduren anlegen. SQL kann zusätzlich zu den Datenabfragen Objekte direkt definieren und die Abfragen anhand von SQLScript komplex erweitern.

Wenn Sie SQL in einem HANA-basierten SAP-System aufrufen, finden Sie in der Regel bereits eine Vielzahl an Tabellen vor, die durch die SAP definiert und ausgeliefert wurden.

Manchmal ist es trotz der enormen Leistungsfähigkeit von HANA durchaus sinnvoll, neue Tabellen anzulegen, um bestimmte Daten mittels SQL, wenn auch nur temporär, zwischenzuspeichern. Dies kann dazu dienen, die Performance zu erhöhen und bestimmte Prozeduren lesbarer zu halten. Daher sollte Ihnen das Anlegen und Löschen von Tabellen ebenfalls bekannt sein. Dieses Buch wird Sie dabei Schritt für Schritt unterstützen.

1.3 Definition von SQLScript

Abbildung 1.1 zeigt eine vereinfachte Darstellung der Definition von HANA SQLScript. Wie Sie erkennen können, erweitert SQLScript die Sprache SQL sowohl um die von Ihnen erstellten funktionalen Ergänzungen, wie eigene Prozeduren oder Funktionen, als auch um die Verwendung von Schleifen oder komplexen Logiken zur Steuerung des Ablaufs (IF … THEN … etc.).


Abbildung 1.1: Funktionalität von HANA SQLScript

Ein wesentlicher Unterschied zwischen reinem SQL, bei dem ein Datumsfeld nach Selektion im zweiten Schritt mittels SELECT DATE FROM TABLE XYZ umgerechnet werden muss, und SQLScript ist, dass Letzteres diese Vereinfachungen der Syntax sowie eine gewisse Funktionalität bereits beinhaltet.

So kann z.B. über SELECT CURRENT_UTCDATE FROM DUMMY die automatische Rückgabe des UTC-Datums (Greenwich Mean Time) abgefragt oder alternativ mit Offsets wie +1, wodurch eine Stunde auf das Datum addiert wird, gearbeitet werden.

Die DB kann automatisch auf die gesetzten Vorgaben reagieren und so beispielsweise bei der Ermittlung eines Datums die Verschiebung der Zeitzonen berücksichtigen. Dabei werden alle notwendigen Additionen und Subtraktionen sowie die Verschiebung des Datums von der Datenbank übernommen. Eine Abfrage an die Datenbank, um eine bestimmte Funktionalität wie die Anonymisierung von Daten zu nutzen, müssen Sie nicht »von Hand« programmieren, sondern können diese mit SQLScript direkt aufrufen (ähnlich dem Aufruf von Funktionen/Prozeduren, die später noch erläutert werden).

SQLScript soll Sie in die Lage versetzen, auch komplexe DB-Funktionalitäten mit wenigen Zeilen Code aufzurufen und auszuführen.

Ein weiterer Unterschied zum klassischen SQL ist, dass SQLScript Parameter für Filterungen und Einschränkungen der Daten unterstützt.

Außerdem lassen sich Geschäftslogiken wie eine Währungsumrechnung oder Datumskonvertierung zu einem Stichtag durch SQLScript realisieren. Hierzu finden Sie ein Beispiel in Abschnitt 1.14.9.

SQLScript sollte immer dann eingesetzt werden, wenn die Funktionalität von z.B. grafischen Calculation Views zur Datenermittlung nicht ausreicht.

Scripted Calculation Views

Bitte verwenden Sie keine »Scripted« Calculation Views mehr. Deren Nachfolger sind die sogenannten Table Functions.

Ich werde auf Table Functions im Abschnitt 2.3 näher eingehen.

Im Gegensatz zur Entwicklung in SAP ABAP, bei der die Daten aus einer Tabelle in Schleifen von der Datenback in den Applikationsserver geladen werden, wird SQLScript-Code direkt in der Datenbank ausgeführt. Dadurch ist für den Endanwender nur das fertige Ergebnis auf dem Applikationsserver aufrufbar.

Der Sinn von SQLScript ist, möglichst viel der programmierten Logik direkt innerhalb der Datenbank auszuführen, um das Netzwerk zu entlasten. Es dient in allen Bereichen wie AMDP, Calculation Views, Core Data Services oder native HANA-Entwicklung dazu, eine höchstmögliche Parallelität für Aufgaben in der Datenbank zu realisieren. Der SQL Optimizer versucht bei jeder Ausführung einen optimalen Zugriff zu ermöglichen.

Als kleines Beispiel dazu soll Ihnen eine klassische SAP BW Query dienen, in der eine Ausnahmeaggregation durchgeführt wird.

SAP-BW-Abfrage

Stellen Sie sich vor, dass eine BW Query den Umsatz eines Produktes je Land liefert. Sie möchten jedoch zusätzlich den durchschnittlichen Umsatz pro Kunde angezeigt bekommen.

Annahme:

 Ihr Infoprovider, z.B. Advanced Data Store Object (ADSO), oder Ihre Tabelle beinhaltet eine Million Datensätze auf Kundenebene für ein selektiertes Geschäftsjahr.

 Die Anzahl der Kunden im selektierten Geschäftsjahr beträgt 20.

Im klassischen BW werden alle Daten, eine Million in diesem Beispiel, für das selektierte Geschäftsjahr auf den Applikationsserver übertragen. Dort wird im Online Analytical Processing (OLAP) für die 20 Kunden der Durchschnittswert ermittelt. Es bleiben also 20 Datensätze übrig, wobei der Rest verworfen wird, da diese nicht benötigt werden.

Nun nehmen Sie für das klassische BW an, dass eine Million Datensätze über das Netzwerk 12 Sekunden benötigen, dass die Aufbereitung in der DB 3 Sekunden und die OLAP Engine von SAP BW weitere 3 Sekunden Laufzeit in Anspruch nehmen.

Bei SQLScript findet die Berechnung direkt in der DB statt, und nur die erwünschten 20 Datensätze werden übertragen. Neben der guten Grundperformance der Datenbank wird dadurch Netzwerklaufzeit und Zeit beim OLAP-Prozess auf dem Applikationsserver gespart. Zudem werden CPU und Memory des Applikationsservers geschont.

Die Rechnung für SQLScript fällt deutlich vereinfacht aus: Das Netzwerk benötigt unter einer Sekunde für 20 Datensätze, OLAP fällt gänzlich aus und die DB-Berechnung dauert je nach Auslastung der CPUs ebenfalls maximal eine Sekunde.

Wir haben somit im Vergleich zwischen dem klassischen BW (18 Sekunden) und SQLScript (2 Sekunden) einen Laufzeitunterschied von 16 Sekunden, der aber zulasten des BW durchaus auch höher ausfallen kann.

Abbildung 1.2 zeigt eine angenommene Ausführung mit den exemplarischen Laufzeiten von Queries. Eine Query bezieht sich im Beispiel auf eine in SAP BW mit dem Business Explorer (BEx) durch den Query Designer erstellte Abfrage.


Abbildung 1.2: BW OLAP versus SQLScript

1.4 SAP ABAP oder SQLScript

Kann man SQLScript aufgrund der Performance auch in ABAP nutzen?

Ja, in einer HANA-Umgebung wie SAP BW, BW/4HANA oder SAP S/4HANA sollte versucht werden, die Datenlast in der DB zu halten. Hierzu hat die SAP im BW-Umfeld die ABAP Managed Database Procedures (AMDP), z.B. für Transformationen und Core Data Services (CDS) Views, eingeführt, die den Code kapseln sollen.

AMDP sind spezielle ABAP-Prozeduren, die Sie mit SQLScript programmieren, aber analog zu normalen ABAP-Prozeduren aufrufen können.

CDS-Views sind durch SQLScript programmierbare Sichten auf Daten, wie BW-Tabellen oder Abfragen in S/4HANA an die Tabelle ACDOCA, die wie Tabellen in SQL Queries (sowohl ABAP als auch SQLScript) eingebunden werden können. Der große Vorteil ist, dass durch Annotationen in den CDS-Views bestimmt werden kann, ob es sich um eine Tabelle oder einen Endanwenderreport handelt. Beispiele hierzu finden Sie im Abschnitt 2.4.

1.5 SQL/SQLScript – Basiswissen

Wie bereits am Anfang beschrieben, dreht sich bei SQL und SQLScript alles darum, Daten aus der Datenbank zu lesen, neue Daten zu erfassen oder diese zu verändern. Oftmals werden für die verschiedenen Funktionen Kürzel verwendet, die ich Ihnen nun erläutern möchte.

1.5.1 Definitionstypen

Seit dem Erscheinen dieser Datenbanksprache hat man SQL nach und nach in vier Bereiche unterteilt:

 Data Definition Language (DDL): Definition von Objekten (z.B. Tabellen)

 Data Manipulation Language (DML): Einfügen von Daten in Tabellen, Löschen oder Modifizierung von Daten

 Data Control Language (DCL): Erstellung von Usern und deren Zugriffsrechten auf Tabellen, Funktionen etc.

 Data Query Language (DQL): Definition von Abfragen auf Daten, um spezifische Werte zu sehen (Filter, Aggregationen, Kennzahlenberechnung)

Wie in Abbildung 1.3 ersichtlich, greifen alle vier genannten Funktionen auf die zentrale Instanz Database Management System (DBMS) der Datenbank zu. Das DBMS verwaltet die Anfragen und stellt sicher, dass der Zugriff eines Users auf bestimmte Tabellen (mit DQL) erlaubt oder verhindert wird, je nach Definition der Berechtigung über DCL.


Abbildung 1.3: Darstellung der DBMS und SQL-Funktionalität

Wenn eine HANA DB neu installiert wird, stehen eventuell, bis auf die durch HANA generierten internen Tabellen, noch keinerlei kundeneigene Tabellen zur Verfügung. Die Funktionalität der verschiedenen SQL-Bereiche ist dennoch ab dem Moment der Installation gegeben.