Skip to main content

sql

Run ad-hoc DuckDB SQL queries over data files (CSV, JSONL, Parquet, and other DuckDB-readable formats). A single input file can be referenced as the view data; every file is also registered as a view named after its file stem.

# Aggregate a CSV
undatum sql "SELECT city, COUNT(*) AS n FROM data GROUP BY city" cities.csv

# Join two files (views named after file stems: orders, users)
undatum sql "SELECT * FROM orders JOIN users USING (user_id)" orders.csv users.parquet

# Save the result as Parquet
undatum sql "SELECT * FROM data WHERE amount > 100" sales.jsonl --output big.parquet --format-out parquet

Output formats: jsonl (default), csv, parquet (requires --output). DuckDB resources can be tuned with --duckdb-threads and --duckdb-memory. This is the ad-hoc query command for files; undatum db query runs SQL against a database URI.

Reference​

Reads: formats DuckDB reads (CSV, TSV, JSON, JSON Lines, Parquet, ...) · Writes: query results (see --format-out) · Memory: DuckDB (spills to disk) · Engines: python

undatum sql [OPTIONS] QUERY INPUT_FILES...
ArgumentDescription
QUERYDuckDB SQL query to execute. (required)
INPUT_FILES...Input file(s). Each file is available as a view named after its file stem; a single file is also available as 'data'. (required)
OptionDescriptionDefault
-o, --output TEXTOutput file path. Prints to stdout if omitted.
-O, --format-out TEXTOutput format: 'jsonl' (default), 'csv', or 'parquet'.jsonl
--duckdb-threads INTEGERNumber of DuckDB threads.
--duckdb-memory TEXTDuckDB memory limit (e.g., '4GB', '512MB').
--verbose / --no-verboseEnable verbose logging output.--no-verbose

Deprecated spellings (removed in 2.0): --format → --format-out.

See also shared options.