CLI-Diagramme mit YouPlot
DuckDB lässt sich mit CLI-Grafiktools verwenden, um Eingaben schnell nach stdout zu pipen und Ihre Daten in einer Zeile darzustellen.
YouPlot ist ein Ruby-basiertes CLI-Tool zum Zeichnen ansprechender Diagramme im Terminal. Es kann Eingaben anderer Programme entgegennehmen, indem Daten von stdin gepiped werden. Es nimmt tabulatorgetrennte Daten entgegen (oder mit einem Trennzeichen Ihrer Wahl) und kann leicht verschiedene Diagrammtypen erzeugen, darunter Balken-, Linien-, Histogramm- und Streudiagramme.
Mit DuckDB können Sie mit dem Befehl TO '/dev/stdout' auf die Konsole (stdout) schreiben. Und Sie können kommagetrennte Werte schreiben, indem Sie WITH (FORMAT csv, HEADER) verwenden.
YouPlot installieren
Installationsanweisungen für YouPlot finden Sie im YouPlot-Haupt-Repository. Unter macOS können Sie verwenden:
brew install youplotFühren Sie uplot --help aus, um sicherzustellen, dass die Installation erfolgreich war!
DuckDB-Abfragen nach stdout pipen
Indem Sie die Funktion COPY...TO mit einer CSV-Ausgabedatei kombinieren, können Sie Daten aus jedem von DuckDB unterstützten Format lesen und an YouPlot pipen. Folgen Sie diesen drei Schritten:
-
Lesen Sie zuerst alle Daten aus
input.json:Terminal window duckdb -s "SELECT * FROM read_json('input.json')" -
Um die Daten für YouPlot vorzubereiten, schreiben Sie eine einfache Aggregation:
Terminal window duckdb -s "SELECT date, sum(purchases) AS total_purchases FROM read_json('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10" -
Schließen Sie den
SELECTschließlich in die FunktionCOPY ... TOmit dem Ausgabeort/dev/stdoutein.Die Syntax sieht so aus:
COPY (⟨query⟩) TO '/dev/stdout' WITH (FORMAT csv, HEADER);Der folgende vollständige DuckDB-Befehl gibt die Abfrage im CSV-Format mit Kopfzeile aus:
Terminal window duckdb -s "COPY (SELECT date, sum(purchases) AS total_purchases FROM read_json('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT csv, HEADER)"
DuckDB mit YouPlot verbinden
Schließlich können die Daten nun an YouPlot gepiped werden! Angenommen, wir haben eine Datei input.json mit Datumsangaben und der Anzahl der Einkäufe, die jemand an diesem Datum getätigt hat. Mit der Abfrage oben pipen wir die Daten an den Befehl uplot, um ein Diagramm der Top-10-Einkaufsdaten zu zeichnen.
duckdb -s "COPY (SELECT date, sum(purchases) AS total_purchases FROM read_json('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT csv, HEADER)" \ | uplot bar -d, -H -t "Top 10 Purchase Dates"Damit wird uplot angewiesen, ein Balkendiagramm zu zeichnen, ein kommagetrenntes Trennzeichen zu verwenden (-d,), dass die Daten eine Kopfzeile haben (-H), und dem Diagramm einen Titel zu geben (-t).

Weiteres Beispiel: stdin + stdout
Möglicherweise pipen Sie Daten durch jq oder laden eine JSON-Datei von irgendwo herunter. Sie können DuckDB auch anweisen, Daten aus einem anderen Prozess zu lesen, indem Sie den Dateinamen auf /dev/stdin setzen.
Kombinieren wir das mit einem schnellen curl von GitHub, um zu sehen, was ein bestimmter Nutzer zuletzt gemacht hat.
curl -sL "https://api.github.com/users/dacort/events?per_page=100" \ | duckdb -s "COPY (SELECT type, count(*) AS event_count FROM read_json('/dev/stdin') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT csv, HEADER)" \ | uplot bar -d, -H -t "GitHub Events for @dacort"