Skip to main content

Duck Plot CLI

PyPI Changelog Tests License

A command-line tool for visualizing SQL query results using DuckDB and Altair charts.

Installation

Install this tool using pip:

pip install duck-plot

or run the cli with uvx in a temporary virtual environment:

uvx duck-plot ...

Features

  • Execute SQL queries against DuckDB databases or in-memory data
  • Create line or bar charts from query results
  • Display query results in a rich formatted table
  • Support for piped input and command-line arguments
  • Interactive visualizations in the browser

Usage

Basic Query Visualization

Create a line chart from query results:

duck-plot "SELECT date, sales FROM 'sales.csv'" -x date -y sales

Create a bar chart:

duck-plot "SELECT category, count(*) as total FROM 'sales.csv' GROUP BY 1" -x category -y total --type bar

Using a DuckDB Database

Query an existing DuckDB database:

duck-plot "SELECT * FROM monthly_sales" -x month -y revenue --db sales.duckdb

Piping Queries

Use heredoc for complex queries:

cat << EOF | duck-plot -x month -y total_sales --type bar
SELECT 
    date_trunc('month', date) as month,
    sum(sales) as total_sales 
FROM sales 
GROUP BY 1 
ORDER BY 1
EOF

Query-Only Mode

You have the option to only display results without creating a chart:

duck-plot "SELECT * FROM sales LIMIT 5" --query-only

or use a pipe:

echo "SELECT * FROM 'sales.parquet'" | duck-plot --query-only --db sales.duckdb

Options

Arguments:
  query                  SQL query to execute [optional if piping input]

Options:
  -x, --x TEXT          Column name for X-axis
  -y, --y TEXT          Column name for Y-axis
  -t, --type TEXT       Type of chart (line or bar) [default: line]
  -d, --db TEXT         Path to DuckDB database file [optional]
  -q, --query-only      Output query results to stdout and skip chart creation
  --help                Show this message and exit

Examples

Analyzing Time Series Data

duck-plot "
SELECT 
    date,
    moving_average(price, 7) as price_ma
FROM 'stock_prices.csv'
WHERE symbol = 'AAPL'
ORDER BY date
" -x date -y price_ma

Comparing Categories

duck-plot "
SELECT 
    category,
    sum(revenue) as total_revenue
FROM 'sales.csv'
GROUP BY category
ORDER BY total_revenue DESC
LIMIT 10
" -x category -y total_revenue --type bar

Interactive Data Exploration

# First view the available columns
duck-plot "FROM dataset LIMIT 1" --query-only

# Then create visualizations based on the columns
duck-plot "FROM dataset" -x timestamp -y temperature

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development

To contribute to this tool, first checkout the code. Then create a new virtual environment:

cd duck-plot
python -m venv venv
source venv/bin/activate

Now install the dependencies and test dependencies:

pip install -e '.[test]'

To run the tests:

python -m pytest

Metadata

Release files for duck-plot 0.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duck-plot 0.12
File Size Uploaded
duck_plot-0.12.tar.gz 9.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duck-plot 0.12
File Interpreter ABI Platform
duck_plot-0.12-py3-none-any.whl Python 3 none any Details

Total release size: 18.7 kB

Release files / duck_plot-0.12.tar.gz

Download URL duck_plot-0.12.tar.gz
Size 9.4 kB
Tags Source
SHA-256 checksum
How to use checksums
9e88c489dff22d1af27a93b1cf152a3308eeee5e7dd869922da1e232acd59df8
BLAKE2b-256 checksum
How to use checksums
56cc1ef4f01e0fea884361aad4b852d360d51306a5734313293638e99b823c67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2025.

Transparency log

Release files / duck_plot-0.12-py3-none-any.whl

Download URL duck_plot-0.12-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c57e21f3a54b051abefcebca410bd732bafdc53d83faf0b192470bb243433e92
BLAKE2b-256 checksum
How to use checksums
e0903cc4fc926ff8a04e50fb3add69da6b7c7a8859e4b47effbc95e782fcd514
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 15, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.12 This release

2 release files

0.11

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page