Helps with data analysis, SQL queries and file conversion via DuckDB CLI.
bash
# CSV
duckdb -c "SELECT * FROM 'data.csv' LIMIT 10"
# Parquet
duckdb -c "SELECT * FROM 'data.parquet'"
# Multiple files with glob
duckdb -c "SELECT * FROM read_parquet('logs/*.parquet')"
# JSON
duckdb -c "SELECT * FROM read_json_auto('data.json')"
bash
# Create/open database
duckdb my_database.duckdb
# Read-only mode
duckdb -readonly existing.duckdb
FlagFormat-csvComma-separated-jsonJSON array-tableASCII table-markdownMarkdown table-htmlHTML table-lineOne value per line
ArgumentDescription-c COMMANDRun SQL and exit-f FILENAMERun script from file-init FILEUse alternative to ~/.duckdbrc-readonlyOpen in read-only mode-echoShow commands before execution-bailStop on first error-header / -noheaderShow/hide column headers-nullvalue TEXTText for NULL values-separator SEPColumn separator
bash
duckdb -c "COPY (SELECT * FROM 'input.csv') TO 'output.parquet' (FORMAT PARQUET)"
bash
duckdb -c "COPY (SELECT * FROM 'input.parquet') TO 'output.csv' (HEADER, DELIMITER ',')"
bash
duckdb -c "COPY (SELECT * FROM read_json_auto('input.json')) TO 'output.parquet' (FORMAT PARQUET)"
bash
duckdb -c "COPY (SELECT * FROM 'data.csv' WHERE amount > 1000) TO 'filtered.parquet' (FORMAT PARQUET)"
CommandDescription.tables [pattern]Show tables (with LIKE pattern).schema [table]Show CREATE statements.databasesShow attached databases
CommandDescription.mode FORMATChange output format.output fileSend output to file.once fileNext output to file.headers on/offShow/hide column headers.separator COL ROWSet separators
CommandDescription.timer on/offShow execution time.echo on/offShow commands before execution.bail on/offStop on error.read file.sqlRun SQL from file
CommandDescription.edit or \eOpen query in external editor.help [pattern]Show help
ShortcutActionHome / EndStart/end of lineCtrl+Left/RightJump wordCtrl+A / Ctrl+EStart/end of buffer
ShortcutActionCtrl+P / Ctrl+NPrevious/next commandCtrl+RSearch historyAlt+< / Alt+>First/last in history
ShortcutActionCtrl+WDelete word backwardAlt+DDelete word forwardAlt+U / Alt+LUppercase/lowercase wordCtrl+KDelete to end of line
ShortcutActionTabAutocomplete / next suggestionShift+TabPrevious suggestionEsc+EscUndo autocomplete
Context-aware autocomplete activated with Tab:
sql
CREATE TABLE sales AS SELECT * FROM 'sales_2024.csv';
sql
INSERT INTO sales SELECT * FROM 'sales_2025.csv';
sql
COPY sales TO 'backup.parquet' (FORMAT PARQUET);
sql
SELECT
COUNT(*) as count,
AVG(amount) as average,
SUM(amount) as total
FROM 'transactions.csv';
sql
SELECT
category,
COUNT(*) as count,
SUM(amount) as total
FROM 'data.csv'
GROUP BY category
ORDER BY total DESC;
sql
SELECT a.*, b.name
FROM 'orders.csv' a
JOIN 'customers.parquet' b ON a.customer_id = b.id;
sql
DESCRIBE SELECT * FROM 'data.csv';
bash
# Read from stdin
cat data.csv | duckdb -c "SELECT * FROM read_csv('/dev/stdin')"
# Pipe to another command
duckdb -csv -c "SELECT * FROM 'data.parquet'" | head -20
# Write to stdout
duckdb -c "COPY (SELECT * FROM 'data.csv') TO '/dev/stdout' (FORMAT CSV)"
Save common settings in ~/.duckdbrc:
sql
.timer on
.mode duckbox
.maxrows 50
.highlight on
sql
.keyword green
.constant yellow
.comment brightblack
.error red
Open complex queries in your editor:
sql
.edit
Editor is chosen from: DUCKDB_EDITOR → EDITOR → VISUAL → vi
Secure mode that restricts file access. When enabled:
.read, .output, .import, .sh etc.LIMIT on large files for quick previewread_csv_auto and read_json_auto guess column typesmemory_limit values on some Ubuntu versions