Seit mehr als 20 Jahren ist die Analytics Database Exasol bereits auf dem Markt. Mit ihrer In-Memory- und MPP-Technologie (Massiv Parallel Processing) ist die relationale Datenbank die schnellste Analytics Database weltweit (Quelle: Exasol). Mithilfe eines virtuellen Schemas können REST-APIs an die Exasol-Datenbank angebunden werden. Die Daten können dann mit einfachen SQL-Statements selektiert werden.
Der vorliegende Blogartikel orientiert sich an dem openweather-virtual-schema GitHub-Repository von Exasol. Hier ist ein virtuelles Schema zur Anbindung der Openweather-API an die Exasol-Datenbank zu finden. Wie die vorliegenden Skripte auf andere APIs angepasst werden können, wird im Folgenden vorgestellt.
Funktionsweise
Zur Anbindung der REST-API an die Exasol-Datenbank mit einem virtuellen Schema, werden eine API, ein virtueller Schema-Adapter und ein API-Handler benötigt.
Wird ein SQL-Statement vom Anwender abgesetzt, wird dieses von der Datenbank an den virtuellen Schema-Adapter weitergeleitet. Der virtuelle Schema-Adapter verändert das SQL-Statement so, dass die Abfrage durch den API-Handler verarbeitet werden kann. Das umgestellte SQL-Statement wird dann von der Datenbank an den API-Handler weitergegeben. Dieser erstellt mithilfe des SQL-Statements eine GET-Anfrage, welche an die API gesendet wird. Die API gibt dann ein JSON-Objekt an den API-Handler zurück. Das JSON-Objekt wird nun in eine Tabelle umgewandelt, welche von der Datenbank zum Client geleitet und dem Anwender ausgegeben wird.
Aufbau des virtuellen Schemas
Das virtuelle Schema zur Anbindung der REST-API besteht aus vier Dateien: openweather-virtual-schema.sql, openweather_adapter.py, api_handler.py und plain_text_tcp_handler.py.
Die SQL-Datei openweather-virtual-schema.sql bildet das Gerüst für die Erstellung und Anwendung des virtuellen Schemas. Hier befinden sich alle Statements, welche benötigt werden, um das virtuelle Schema zu erstellen. In der SQL-Datei werden der virtuelle Schema-Adapter und der API-Handler in der Exasol-Datenbank angelegt, indem die dazugehörigen Python-Dateien importiert werden. Zudem wird das virtuelle Schema erstellt. Auch SQL-Statements zum Test der Datenabfrage sind hier zu finden.
Die Python-Datei openweather_adapter.py stellt den virtuellen Schema-Adapter dar. Dieser dient der Umwandlung des abgesetzten SQL-Statements, sodass dieses vom API-Handler weiterverarbeitet werden kann. Hierfür werden die Schemata der Tabellen in der Datei angegeben, sowie Filter für die WHERE-Klausel der SQL-Statements definiert. Zudem sind hier die Funktionen zur Generierung der SQL-Statements zu finden.
Die Python-Datei api_handler.py bildet den API-Handler. Hier sind alle Funktionen zur Erstellung der get-Anfrage an die API zu finden.
Mithilfe der Python-Datei plain_text_tcp_handler.py wird das Logging umgesetzt. Bei der Erstellung des virtuellen Schemas müssen dafür ein Log-Listener und ein Log-Listener-Port angegeben werden. Über einen TCP-Listener kann der Log-Strom eingesehen werden.
Virtuelles Schema erstellen
Um das virtuelle Schema zu erstellen, müssen zunächst der virtuelle Schema-Adapter und der API-Handler als Exasol-UDFs (User Defined Function) erstellt werden. Hierfür können die openweather-virtual-schema Dateien als Vorlage verwendet werden und auf die individuelle API angepasst werden. Dabei kann die plain_text_tcp_handler.py Python-Datei ohne Anpassungen übernommen werden. Auch die SQL-Datei openweather-virtual-schema.sql bedarf nicht vieler Anpassungen. Hier müssen lediglich die GitHub-Links zum Download der Dateien und die SQL-Statements zum Test der Abfrage modifiziert werden.
Die beiden Python-Dateien openweather_adapter.py und api_handler.py hingegen müssen an die individuellen Eigenschaften der genutzten API angepasst werden. Hierfür müssen alle API-spezifischen Angaben in den Dateien ersetzt werden. Gibt die API ein JSON-Objekt zurück, sind keine weiteren Anpassungen notwendig. In der openweather_adapter.py Datei befinden sich auch die „capabilities“. Mithilfe derer kann implementiert werden, was von der API verarbeitet und was von Exasol verarbeitet werden soll. So können hier beispielsweise Filter implementiert werden, welche dann von der API als WHERE-Klausel des SQL-Statements verarbeitet werden.
Wurden alle Anpassungen vorgenommen, kann das virtuelle Schema erstellt werden. Hierfür müssen die Statements der openweather-virtual-schema.sql Datei der Reihe nach ausgeführt werden. Nach der erfolgreichen Ausführung der Statements ist das virtuelle Schema erstellt und die Daten der API können abgefragt werden.
Anwendung
Um Daten der API abzufragen, können einfache SQL-Statements verwendet werden. Dabei unterscheidet sich das SELECT-Statement nicht vom Statement zur Abfrage einer herkömmlichen Exasol-Tabelle.
Soll das virtuelle Schema gelöscht werden, muss folgender Befehl verwendet werden:
DROP FORCE VIRTUAL SCHEMA virtual_schema CASCADE;
Weitere Informationen sind im Exasol Community-Forum und im dazugehörigen GitHub Repository zu finden.
Fazit
Exasol bietet dem Endnutzer mit der nativen Unterstützung bei der Anbindung einer REST-API die komfortable Möglichkeit, eine Schnittstelle mit einfachem SQL anzusprechen. Dabei gestaltet sich die technische Anbindung nicht zu komplex (entsprechende Kenntnisse in einer Programmiersprache vorausgesetzt). Die REST-API muss allerdings auch an Exasol angepasst werden. Somit ist die Anbindung einer beliebigen Schnittstelle nicht ohne Weiteres möglich. Es sollte noch einmal explizit erwähnt werden, dass es sich hierbei um eine nicht-standardisierte Lösung handelt, womit ein zukünftiger Datenbankwechsel erschwert würde (Stichwort: Vendor lock-in).
Seminarempfehlungen
PYTHON PROGRAMMIERUNG GRUNDLAGEN P-PYTH-01
Zum SeminarRESTFUL APIS ENTWERFEN RESTFUL-1A
Zum Seminar