Apache Calcite Calcite – das Framework zum Erstellen von Datenbanken

Autor / Redakteur: Thomas Joos / Nico Litzel

Apache Calcite ist ein Open-Source-Framework auf Java-Basis für die dynamische Verwaltung von Daten. Das Framework unterstützt Anwendungen bei der Verwendung von verschiedenen Datenquellen. Calcite selbst speichert keine Daten.

Firmen zum Thema

Erster Start von Apache Calcite
Erster Start von Apache Calcite
(Bild: T. Joos)

Bei Apache Calcite handelt es sich um ein Open Source Framework zum Erstellen von Datenbanken und Datenverwaltungssystemen. Das System selbst speichert aber keine Daten. Algorithmen zur Datenverarbeitung und ein Repository zur Speicherung von Metadaten sind für Apache Calcite nicht vorgesehen. Calcite hat die Aufgabe, Abfragen schnell auf Quell-Systemen durchzuführen aber nicht die Aufgabe, diese Daten selbst zu speichern.

Das sind die Funktionen von Apache Calcite

Calcite ist ein Vermittler zwischen Anwendungen und einem oder mehreren Datenspeichern und Datenverarbeitungsengines. Im Paket sind SQL-Parser, Abfrageoptimierer, eine API zum Erstellen von Ausdrücken, SQL-Validator und eine Abfrageplanungs-Engine integriert. Apache Calcite kann mit Windows, Linux und macOS genutzt werden.

Apache Calcite arbeitet mit verschiedenen anderen Apache-Projekten für die optimale Verarbeitung von Daten zusammen. Dazu gehören unter anderem Hive, Flink, Drill, Strom und Samza. Zahlreiche Projekte nutzen Apache Calcite für SQL-Parsing, Abfrageoptimierung und zur Datenvirtualisierung. Eine Liste der Lösungen, die auf Calcite setzen, ist auf der Projektseite von Calcite zu finden. Um von Anwendungen aus mit Calcite eine Verbindung aufzubauen, kann auf den JDBC-Treiber des Projektes gesetzt werden.

Zusammenarbeit mit zahlreichen Systemen im Hadoop-Umfeld

Der Vorteil der Entwicklung mit Java besteht bei Calcite auch darin, dass viele Datenverarbeitungs-Engines mit Calcite zusammenarbeiten können. Nutzen die Engines ebenfalls Java, ist eine Zusammenarbeit einfacher umsetzbar. Calcite selbst ist im Hadoop-Umfeld ideal. Da die Lösung nicht selbst Daten speichert, kann sie zwischen verschiedenen Speichersystemen und Anwendungen optimal orchestrieren. Wenn mehrere Anwendungen im System zum Einsatz kommen, die auch noch Daten auf verschiedenen Speichersystemen ablegen, kann Calcite die Verarbeitung und Optimierung von Abfragen durchführen und steuern.

Calcite spielt seine Stärken vor allem dann aus, wenn mehrere Abfragesysteme und unterschiedliche Backends zum Einsatz kommen. Das Framework kann zentral die Abfragen optimieren und ausführen. Viele Lösungen setzen dabei auf SQL. Calcite unterstützt zahlreiche SQL-Dialekte und Erweiterungen für die Abfragen. Hier stehen in Calcite bekannte SQL-Funktionen zur Verfügung. Dazu gehören SELECT FROM mit JOIN-Syntax genauso wie WHERE, GROUP BY mit GROUPING SETS. Aggregatfunktionen wie COUNT, DISTINCT, FILTER, HAVING, ORDER BY mit NULLS FIRST/LAST. Auch Mengenoperationen wie UNION, INTERSECT, MINUS, Unterabfragen, Aggregate, LIMIT und viele weitere Funktionen sind in Calcite verfügbar. Die Syntax und deren richtige Verwendung ist in der Dokumentation von Calcite zu finden.

Besonders häufig kommt Calcite zum Einsatz, wenn Spark, Hive, Flink oder Drill zum Einsatz kommen. Auch in Kombination dieser Lösungen, bietet das Open Source-Framework Abfragemöglichkeiten und zentrale Optimierungen für SQL-Abfragen.

Vorgehensweise bei der Verwendung von Calcite

Bei der Erstellung von Abfragen mit Calcite werden dem Abfrageplaner auch das Schema und die Tabellen mitgegeben, die Calcite für die Abfrage nutzen soll. Durch die Modellanalyse mit dem ModelHandler von Calcite erhalten Anwender ein Verbindungsobjekt und ein Schemaobjekt. Das wird wiederum mit dem Abfrageplaner verwendet.

Der SQL Query Parser und Validator übersetzt die Abfrage. Die Definition des Tabellenschemas und die Anbindung an externe Data-Engines erfolgt über Adapter. Hier stehen verschiedene Adapter zur Verfügung, die sich in eine Umgebung einbinden lassen. Schemaadapter ermöglichen es Calcite, bestimmte Daten zu lesen. Die Daten werden als Tabellen im Schema dargestellt. Die verschiedenen Adapter sind auf der Projekt-Seite zu finden. Beispiele sind Adapter für CSV, InnoDB, Cassandra, Druid, Elasticsearch, File-Adapter, JDBC, Spark und Apache Kafka.

Calcite kann die Abfrage optimieren, unabhängig davon, ob das Quell-System über eine eigene Optimierungsengine verfügt oder nicht. Bei der Optimierung der Abfrage steuert Calcite auch die Reihenfolge der Verknüpfungen. Diese hat eine große Auswirkung auf die Geschwindigkeit der Abfrage.

Apache Calcite testen

Für die Installation von Calcite auf Ubuntu/Debian sind Java und Git notwendig. Danach kann die Installation mit den folgenden Befehlen erfolgen:

git clone https://github.com/apache/calcite.gitcd calcite/example/csv./sqlline

Mit dem Befehl ist auch eine Installation in Windows möglich. Der Start von Calcite erfolgt mit „sqlline.bat. Dabei handelt es sich um eine SQL-Shell, die Bestandteil von Calcite ist. Für den Start von Sqlline ist Java auf dem System notwendig. Auch das Setzen der Pfadvariable zur Java-Installation ist notwendig. Erst dann kann Calcite gestartet werden. In Windows kann das in der Befehlszeile/PowerShell mit erhöhten Rechten passieren:

setx -m JAVA_HOME „C:\Program Files\Java\jdk-16.0.2“

Hier muss natürlich das richtige Java-Installationsverzeichnis integriert werden. Eine Verbindung wird mit folgendem Befehl hergestellt:

!connect jdbc:calcite:model=src/test/resources/model.json admin

Für den Befehl ist der Start von Sqlline notwendig. Beim ersten Aufrufen von Sqlline installiert der Befehl die SQL-Shell. Nach der erfolgreichen Verbindung lassen sich die ersten Tabellen mit „!tables“ anzeigen. Wer sich tiefgehender mit dem Thema auseinandersetzen will, findet auf der Tutorial-Seite von Sqlline ausführliche Informationen.

(ID:47608855)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist