Diese Seite beschreibt Calíope 1.5, die Version, die wir gerade bauen. Die 1.4 ist im App Store für iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro, und auf dem Mac liefert der Store heute 1.3, während die 1.4 in der App-Review ist. Das Changelog sagt, in welcher Version jede Funktion kam.

Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.

DuckDB-Editor

DuckDB-Editor

Öffne und befrage lokale dateibasierte DuckDB-Datenbanken, ohne Server.

Wo es zu finden ist: Workspace › Werkzeuge › DuckDB-Editor

Der DuckDB-Editor ist ein eigenständiges Werkzeug für lokale .duckdb-Dateien, mit demselben Aufbau wie der SQLite-Editor: Struktur, Daten, SQL ausführen und Einstellungen, und er funktioniert ohne Verbindung zu einem Server.

Er kann auch eine Datenbank im Arbeitsspeicher öffnen — ohne Datei — über Datendatei abfragen…, um mit einer CSV-, JSON- oder Parquet-Datei zu arbeiten, ohne etwas auf der Festplatte anzulegen.

Was Calíope mit DuckDB nicht tut. Es lädt keine Erweiterungen herunter — INSTALL, LOAD und UPDATE EXTENSIONS werden abgelehnt, bevor sie die Engine erreichen —, nur die vier mitgelieferten sind vorhanden. Aus demselben Grund gibt es keine Secrets für Fernzugriff (CREATE SECRET), und ein ATTACH einer SQLite- oder Postgres-Datei ist nicht möglich, da dafür eine nicht eingebundene Erweiterung nötig wäre. Die Konfiguration der Engine wird beim Öffnen festgeschrieben: Kein SET außer threads/memory_limit aus den Einstellungen funktioniert, und selbst diese nicht per direktem SQL. Und IMPORT DATABASE sowie COPY FROM DATABASE funktionieren ebenfalls nicht: Sie ändern intern eine Konfigurationsoption, die aus demselben Grund gesperrt ist.

Stichwörter: duckdb, datei, lokal, datenbank, analytik

Datenbank öffnen oder erstellen

Öffne eine vorhandene .duckdb-Datei oder erstelle eine neue.

Wo es zu finden ist: Archivo

Verwende Öffnen…, um eine vorhandene .duckdb-Datei auszuwählen, oder Neue Datenbank…, um eine leere zu erstellen. Zuletzt verwendete Dateien erscheinen auf dem Startbildschirm. Ein Schreibgeschützt-Zeichen erscheint, wenn eine Datei nicht geändert werden kann.

Liegt die Datei außerhalb des eigenen Ordners von Calíope, wird beim ersten Öffnen um Zugriff auf ihren Ordner gebeten: DuckDB muss eine .wal-Datei neben der .duckdb-Datei anlegen, und die Sandbox der App erlaubt das nur innerhalb eines vom Nutzer gewählten Ordners. Beim nächsten Öffnen einer Datei aus demselben Ordner wird das gemerkt. Keine DuckDB-Datei zur Hand? Im leeren Zustand öffnet Beispieldatenbank laden die Seite der Website mit dem öffentlichen Beispiel — ein kleiner Shop mit 50.000 Bestellungen, mit Calíope erstellt. Die App lädt nichts herunter: Sie öffnet die Seite, entscheiden tust du.

Stichwörter: öffnen, erstellen, neu, zuletzt verwendet, datei, ordner, wal

Struktur erkunden und entwerfen

Durchsuche Tabellen, Sichten und Indizes und erstelle sie.

Der Bereich Struktur zeigt den Schemabaum mit den Spalten und dem DDL jedes Objekts. DuckDB hat keine Trigger, daher zeigt der Baum Tabellen, Sichten, Indizes, Sequenzen, Typen, Makros und Tabellenmakros. Sequenzen, Typen und Makros werden über SQL ausführen angelegt —CREATE SEQUENCE, CREATE TYPE, CREATE MACRO, CREATE MACRO … AS TABLE—; hier siehst und löschst du sie. Hat die Datei mehrere Schemas, steht vor jeder Gruppe der Name ihres Schemas, und der Kommentar eines Objekts (COMMENT ON) erscheint beim Darüberfahren. Verwende Neu, um Tabellen, Indizes oder Sichten zu erstellen, Spalte hinzufügen oder Tabelle umbenennen für die ausgewählte Tabelle, und Löschen, um ein Objekt zu entfernen.

Von Datendatei abfragen… erstellte Sichten tragen ein anderes Symbol — eine Büroklammer — und ihr Tooltip zeigt den Pfad der Quelldatei.

Datenbank anhängen… öffnet eine weitere DuckDB-Datenbank neben der aktuellen; ihr Inhalt erscheint im Baum mit dem Datenbanknamen davor und wird als datenbank.schema.tabelle abgefragt. Sie wird immer nur lesend angehängt —Schreiben hieße, ihre .wal-Datei daneben anzulegen, was die Sandbox nicht erlaubt— und Trennen entfernt sie. Eine SQLite-Datei lässt sich hier nicht anhängen: Das sind zwei verschiedene Engines, und dafür gibt es den SQLite-Editor.

Stichwörter: struktur, tabelle, index, sicht, erstellen, ddl, schema

Daten durchsuchen und bearbeiten

Zeilen anzeigen, filtern, sortieren und bearbeiten.

Der Bereich Daten zeigt die Zeilen einer Tabelle seitenweise, mit der Anzahl und den Pfeilen rechts in der Leiste. Wie viele Zeilen auf eine Seite passen, wird unter Einstellungen › Texteditor › Ergebnisse › Zeilen pro Seite festgelegt — Einstellungen, auf dem iPad. Sortiere durch Antippen einer Spaltenüberschrift, grenze spaltenweise mit Filtern ein, oder tippe in das Suchfeld, um alle auf einmal zu durchsuchen.

Eine Zelle bearbeiten

macOS: Doppelklick darauf. iPad: ein einzelnes Tippen. Eingabe bestätigt; Esc bricht ab.

Zeilen hinzufügen und löschen

Zeile hinzufügen öffnet ein Formular mit einer Zeile pro Spalte. Anders als SQLite weist DuckDB den Primärschlüssel nicht automatisch zu: Jede Pflichtspalte braucht ihren eigenen Wert, auch der Schlüssel. Zum Löschen die Zeile über ihre Nummer auswählen und Zeile löschen verwenden.

Nichts davon ändert die Datei, bis du Änderungen speichern drückst: Bearbeitungen bleiben in einer ausstehenden Transaktion, die Änderungen verwerfen vollständig rückgängig macht.

Stichwörter: daten, zeilen, bearbeiten, filtern, sortieren, suchen, zelle, einfügen, neue zeile, löschen

SQL schreiben und ausführen

Syntaxhervorhebung und Autovervollständigung, mit Zeilenlimit und Stopp-Taste.

Der Bereich SQL ausführen verwendet dasselbe Textfeld und dasselbe Ergebnisraster wie der SQL-Editor für Server, über der geöffneten Datei und ohne jede Verbindung.

Der Text wird hervorgehoben. Drücke Ausführen oder ⌘↩, um das ganze Skript auszuführen; gezeichnet wird das Ergebnis der letzten Anweisung, die Zeilen zurückgab. Ein großes SELECT wird nicht vollständig geladen: Es wird bei Einstellungen › Texteditor › Ergebnisse › Zeilenlimit abgeschnitten — demselben Limit, das der SQL-Editor verwendet —, und das Raster zeigt, wie viele von wie vielen geladen wurden.

Während eine Abfrage läuft, unterbricht eine Stopp-Taste sie wirklich: Die Engine bricht mittendrin ab, statt auf das Ende zu warten.

INSTALL und LOAD werden abgelehnt: Calíope lädt keine DuckDB-Erweiterungen herunter, also läuft eine Abfrage, die eine braucht, nicht — mit dem Grund in der Meldung.

Was du in die Datei schreibst, bleibt ausstehend, genau wie eine Bearbeitung in Daten: Es ändert die Datei erst bei Änderungen speichern.

Stichwörter: ausführen, sql, hervorhebung, autovervollständigung, raster, ergebnisse, limit, zeilen, stopp, unterbrechen

Änderungen speichern und verwerfen

Änderungen bleiben ausstehend, bis du sie speicherst.

Bearbeitungen werden zu einer ausstehenden Transaktion zusammengefasst, genau wie im SQLite-Editor. Ein bernsteinfarbener Punkt zeigt ungespeicherte Änderungen an. Verwende Änderungen speichern, um sie zu übernehmen, oder Änderungen verwerfen, um sie zu verwerfen. Beim Schließen mit ausstehenden Änderungen wird eine Bestätigung verlangt.

DuckDB schreibt zuerst in eine .wal-Datei neben der .duckdb-Datei; das Übertragen in die Hauptdatei (CHECKPOINT) geschieht asynchron, sodass die .wal-Datei nach dem Speichern und Schließen noch einige Sekunden bestehen bleiben kann — die Daten sind bereits sicher, auch wenn diese Nebendatei noch einen Moment da ist.

Stichwörter: speichern, verwerfen, übernehmen, transaktion, änderungen, wal, checkpoint

Importieren und exportieren

CSV importieren und als CSV, JSON oder SQL exportieren.

Über Importieren / Exportieren kannst du eine CSV-Datei in eine neue Tabelle mit Textspalten importieren, eine Tabelle als CSV oder JSON exportieren, oder die gesamte Datenbank als SQL-Dump (Schema und Daten) exportieren.

Das unterscheidet sich von Datendatei abfragen…: Hier wird die CSV-Datei als neue Tabelle in die .duckdb-Datei kopiert; dort bleibt die Datei, wo sie ist, und wird nur über eine Sicht abgefragt.

Bei DuckDB liest die Engine die CSV selbst (COPY … AUTO_DETECT), jede Spalte kommt also mit ihrem Typ an und nicht als Text. Und Ganze Datenbank schreibt die komplette Datenbank in einen Ordner deiner Wahl —als CSV oder Parquet, mit dem Schema daneben— oder liest in die offene Datenbank, was ein anderer Export hinterlassen hat. Liegt die Datenbank im Arbeitsspeicher, schreibt Sichern unter… sie ganz in eine .duckdb-Datei und arbeitet dann damit weiter.

Alle drei verlangen, dass nichts ungesichert ist: Die Engine führt sie in einer offenen Transaktion nicht aus.

Stichwörter: importieren, exportieren, csv, json, sql, dump

Datendatei abfragen…

Befrage eine CSV-, JSON- oder Parquet-Datei wie eine Tabelle, ohne sie zu kopieren.

Die Taste Datendatei abfragen… erstellt für jede gewählte Datei eine Sicht darauf — je nach Endung read_csv_auto, read_json_auto oder read_parquet: Die Datei bleibt, wo sie ist, und wird bei jeder Abfrage der Sicht neu eingelesen, ohne ihre Daten in die Datenbank zu kopieren.

Der Name der Sicht stammt vom Dateinamen ohne Endung; würden zwei Dateien denselben Namen ergeben, erhält die zweite _2, die dritte _3 und so weiter. In Struktur tragen diese Sichten ein anderes Symbol — eine Büroklammer — und ihr Tooltip zeigt den Pfad der Quelldatei.

Ist keine Datenbank geöffnet, öffnet die Taste zuerst eine Datenbank im Arbeitsspeicher: Es gibt keine .duckdb-Datei auf der Festplatte, daher ist Speichern unter… — das noch nichts tut — der einzige Weg, die Arbeit beim Schließen nicht zu verlieren. Diese Datenbank im Arbeitsspeicher muss nicht verloren gehen: Sichern unter… schreibt sie ganz in eine .duckdb-Datei, und der Editor arbeitet damit weiter.

Stichwörter: csv, json, parquet, abfragen, sicht, anhängen, arbeitsspeicher