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...
| Argument | Description |
|---|---|
QUERY | DuckDB 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) |
| Option | Description | Default |
|---|---|---|
-o, --output TEXT | Output file path. Prints to stdout if omitted. | |
-O, --format-out TEXT | Output format: 'jsonl' (default), 'csv', or 'parquet'. | jsonl |
--duckdb-threads INTEGER | Number of DuckDB threads. | |
--duckdb-memory TEXT | DuckDB memory limit (e.g., '4GB', '512MB'). | |
--verbose / --no-verbose | Enable verbose logging output. | --no-verbose |
Deprecated spellings (removed in 2.0): --format → --format-out.
See also shared options.