Zum Inhalt springen

marimo-Notebooks

marimo ist ein Open-Source-reaktives Notebook für Python und SQL, das eng mit dem Python-Client von DuckDB integriert ist und es Ihnen ermöglicht, Python und SQL in einem einzigen, git-versionierbaren Notebook zu mischen. Anders als bei klassischen Notebooks führt marimo beim Ausführen einer Zelle oder bei der Interaktion mit einem UI-Element betroffene Zellen automatisch (oder verzögert) erneut aus und hält so Code und Ausgaben konsistent. Die Integration mit DuckDB eignet sich gut für die interaktive Arbeit mit Daten, und die Darstellung als Python-Datei macht es einfach, Notebooks als Skripte auszuführen.

Installation

Installieren Sie marimo und DuckDB zunächst in Ihrem Terminal:

Terminal window
pip install "marimo[sql]" # or uv add "marimo[sql]"

Unterstützende Bibliotheken installieren:

Terminal window
pip install "polars[pyarrow]" # or uv add "polars[pyarrow]"

Ein Tutorial starten:

Terminal window
marimo tutorial sql

SQL in marimo

Erstellen Sie ein Notebook in Ihrem Terminal mit marimo edit notebook.py. SQL-Zellen können Sie auf eine von drei Arten anlegen:

  1. Rechtsklick auf die Schaltfläche + und SQL cell wählen
  2. Jede leere Zelle über das Zellenmenü in SQL umwandeln
  3. Die SQL-Schaltfläche am unteren Rand des Notebooks anklicken

In marimo wirken SQL-Zellen wie reines SQL, werden aber als gewöhnlicher Python-Code mit der Funktion mo.sql() serialisiert. So bleibt Ihr Notebook reiner Python-Code, ohne spezielle Syntax oder Magic-Befehle.

df = mo.sql(f"SELECT 'Off and flying!' AS a_duckdb_column")

Das liegt daran, dass marimo Notebooks als reines Python speichert, aus mehreren Gründen, etwa git-freundliche Diffs und das Ausführen von Notebooks als Python-Skripte.

Die SQL-Anweisung selbst ist ein f-String, sodass Sie Python-Werte mit {} in die Abfrage einsetzen können (siehe weiter unten). Insbesondere können Ihre SQL-Abfragen von den Werten von UI-Elementen oder anderen Python-Werten abhängen – alles Teil des Datenflussgraphen von marimo.

Warnung Achtung! Wenn benutzergenerierte Inhalte in die SQL-Abfragen gelangen, müssen Sie Ihre Eingaben bereinigen, um SQL-Injection zu verhindern.

Eine eigene DuckDB-Verbindung herstellen

Um statt der globalen Standardverbindung eine eigene DuckDB-Verbindung zu verwenden, legen Sie eine Zelle an und erzeugen Sie eine DuckDB-Verbindung als Python-Variable:

import duckdb
# Create a DuckDB connection
conn = duckdb.connect("path/to/my/duckdb.db")

marimo erkennt die Verbindung automatisch und lässt Sie sie im Verbindungs-Dropdown der SQL-Zelle auswählen.

Eigene Verbindung

Automatische Erkennung von Datenbank, Schema und Tabelle

marimo untersucht Verbindungen und zeigt Datenbank, Schemas, Tabellen und Spalten im Bereich Data Sources an. In diesem Bereich können Sie Ihre Schemas schnell durchsuchen und Tabellen sowie Spalten in Ihre SQL-Abfragen übernehmen.

Bereich Data Sources

Ein lokales DataFrame referenzieren

Referenzieren Sie ein lokales DataFrame in Ihrer SQL-Zelle über den Namen der Python-Variable, die das DataFrame enthält. Wenn Ihre Datenbankverbindung eine Tabelle gleichen Namens hat, wird stattdessen die Datenbanktabelle verwendet.

import polars as pl
df = pl.DataFrame({"column": [1, 2, 3]})
SELECT * FROM df WHERE column > 2

Die Ausgabe einer SQL-Zelle referenzieren

Wenn Sie in der SQL-Zelle eine nicht-private (nicht unterstrichene) Ausgabevariable definieren, können Sie das resultierende DataFrame in anderen Python- und SQL-Zellen referenzieren.

SQL-Ergebnis in Python referenzieren

Reaktive SQL-Zellen

marimo ermöglicht reaktive SQL-Zellen, die sich automatisch aktualisieren, wenn sich ihre Abhängigkeiten ändern. Arbeiten Sie mit teuren Abfragen oder großen Datensätzen? Sie können die Laufzeit von marimo auf „lazy“ stellen. Dann werden abhängige Zellen nur als veraltet markiert, und Sie entscheiden, wann sie erneut ausgeführt werden.

digits = mo.ui.slider(label="Digits", start=100, stop=10000, step=200)
digits
CREATE TABLE random_data AS
SELECT i AS id, random() AS random_value,
FROM range({digits.value}) AS t(i);
SELECT * FROM random_data;

Die Interaktion mit UI-Elementen wie einem Schieberegler macht Ihre Daten greifbarer.

DuckDB-gestützte OLAP-Analysen in marimo

marimo bietet mehrere Funktionen, die gut mit DuckDB in analytischen Workflows zusammenarbeiten:

  • Nahtlose Integration zwischen Python und SQL
  • Reaktive Ausführung, die abhängige Zellen automatisch aktualisiert, wenn sich Abfragen ändern
  • Interaktive UI-Elemente, mit denen sich SQL-Abfragen parametrisieren lassen
  • Möglichkeit, Notebooks als eigenständige Anwendungen oder Python-Skripte zu exportieren oder sogar vollständig im Browser mit WebAssembly auszuführen.

Nächste Schritte

  • Lesen Sie die marimo-Dokumentation.
  • Probieren Sie das SQL-Tutorial: marimo tutorial sql{:.language-sql .highlight}.
  • Der Code zu diesem Leitfaden ist auf GitHub verfügbar. Führen Sie ihn mit marimo edit ⟨github_url⟩{:.language-sql .highlight} aus.