Marcel Moré ergänzte seine Präsentation zu DuckDB vom vorigen FileMaker Stammtisch mit Einblicken in ein Projekt aus der Praxis.

Zunächst wurden noch einmal die grundlegenden Schritte erläutert, wie sich DuckDB in einer FileMaker Lösung per REST API integrieren lässt. Eine ausführliche Schritt-für-Schritt Anleitung ist inzwischen online abrufbar:
https://blog.marcel-more.de/2024/07/11/building-a-rest-api-for-duckdb/

Marcel berichtete von einem Projekt, das ohne den Einsatz von DuckDB kaum lösbar gewesen wäre. Zu erstellen war eine komplexe Auswertung eines umfangreichen Datenbestands mit mehr als 10 Jahren Transaktionsdaten, die in einer FileMaker Datenbank vorliegen. Ein erster Lösungsansatz mit Hilfe von FileMaker war zwar in der Lage, einen Teil der Auswertung zu berechnen, benötigte dafür allerdings knapp 10 Stunden. Anschließend mussten die Zwischenergebnisse aufwändig in Excel aufbereitet werden.

Mit Hilfe von DuckDB als ultraschnelle In-Memory-Datenbank konnte die Auswertung schließlich auf eine Ausführungszeit von wenigen Sekunden reduziert werden. So war es möglich, nicht nur das gewünschte Endergebnis direkt zu erzeugen, sondern auch fein granulierte Zeitreihen aus den Daten zu berechnen, mit dessen Hilfe sich die Zusammenhänge in den Daten wesentlich anschaulicher aufbereiten ließen.

Der komplette Prozess der Datenanalyse und Aufbereitung der Ergebnisse ließ sich durch die Integration von DuckDB sinnvoll automatisieren. Die dazu erforderlichen Schritte für die Vorbereitung der Daten, das Ausführen der Queries und die anschließende Weiterverarbeitung der Ergebnisse wurden exemplarisch vorgestellt. Ein interessanter Zusatz war die Anbindung von Google Looker Studio, um die Ergebnisse als interaktives Dashboard bereit zu stellen.

Ein ausführlicher Projekt-Bericht ist an dieser Stelle nachlesbar:
https://blog.marcel-more.de/2024/06/15/filemaker-and-duckdb-whats-special-about-this-liaison/

Funktionale Programmierung in SQL

Während der Umsetzung des Projekts stieß Marcel auf eine Reihe von Optimierungs-Ansätzen, mit deren Hilfe sich die SQL-Queries für DuckDB weiter verfeinern ließen. Dadurch war es möglich, ganze Abläufe inklusive zu berechnender Zwischenergebnisse in Form von Funktions-Aufrufen in SQL umzusetzen. Bei den dabei verwendeten Methoden handelt es sich um CTEs (Common Table Expressions) sowie Tabellen Makros. Nach der Überarbeitung der ursprünglichen SQL Templates mit diesen Methoden konnte die Gesamtauswertung quasi wie eine CustomFunction inkl. Parameter-Übergabe in die FileMaker Lösung integriert werden. Übergeben wird beispielsweise ein zu berechnender Zeitraum, als Ergebnis kommt eine fertige Pivot-Tabelle in Excel heraus.

DuckDB: WITH Clause
https://duckdb.org/docs/sql/query_syntax/with

DuckDB: CREATE MACRO Statement
https://duckdb.org/docs/sql/statements/create_macro

Noch weiter in diese Richtung geht PRQL (Pipelined Relational Query Language), welche ebenfalls als Modul innerhalb von DuckDB verwendbar ist:

PRQL
https://prql-lang.org

DuckDB PRQL Extension:
https://community-extensions.duckdb.org/extensions/prql.html
https://github.com/ywelsch/duckdb-prql

Um sich die komplexen Möglichkeiten dieser Werkzeuge zu erschließen macht es Sinn, sich sowohl mit der Dokumentation zu beschäftigen als auch immer wieder Beispiel-Code von ChatGPT erzeugen und überarbeiten zu lassen. So kommt man Schritt für Schritt zu einem gut optimierten SQL-Code für eigene Fragestellungen.