duckdb -c "COPY (SELECT * FROM 'input.csv') TO 'output.parquet' (FORMAT PARQUET)"
Parquet to CSV
bash
duckdb -c "COPY (SELECT * FROM 'input.parquet') TO 'output.csv' (HEADER, DELIMITER ',')"
JSON to Parquet
bash
duckdb -c "COPY (SELECT * FROM read_json_auto('input.json')) TO 'output.parquet' (FORMAT PARQUET)"
Convert with filtering
bash
duckdb -c "COPY (SELECT * FROM 'data.csv' WHERE amount > 1000) TO 'filtered.parquet' (FORMAT PARQUET)"
Dot Commands
Schema inspection
Command
Description
.tables [pattern]
Show tables (with LIKE pattern)
.schema [table]
Show CREATE statements
.databases
Show attached databases
Output control
Command
Description
.mode FORMAT
Change output format
.output file
Send output to file
.once file
Next output to file
.headers on/off
Show/hide column headers
.separator COL ROW
Set separators
Queries
Command
Description
.timer on/off
Show execution time
.echo on/off
Show commands before execution
.bail on/off
Stop on error
.read file.sql
Run SQL from file
Editing
Command
Description
.edit or \e
Open query in external editor
.help [pattern]
Show help
Output Formats (18 available)
Data export
csv - Comma-separated for spreadsheets
tabs - Tab-separated
json - JSON array
jsonlines - Newline-delimited JSON (streaming)
Readable formats
duckbox (default) - Pretty ASCII with unicode box-drawing
table - Simple ASCII table
markdown - For documentation
html - HTML table
latex - For academic papers
Specialized
insert TABLE - SQL INSERT statements
column - Columns with adjustable width
line - One value per line
list - Pipe-separated
trash - Discard output
Keyboard Shortcuts (macOS/Linux)
Navigation
Shortcut
Action
Home / End
Start/end of line
Ctrl+Left/Right
Jump word
Ctrl+A / Ctrl+E
Start/end of buffer
History
Shortcut
Action
Ctrl+P / Ctrl+N
Previous/next command
Ctrl+R
Search history
Alt+< / Alt+>
First/last in history
Editing
Shortcut
Action
Ctrl+W
Delete word backward
Alt+D
Delete word forward
Alt+U / Alt+L
Uppercase/lowercase word
Ctrl+K
Delete to end of line
Autocomplete
Shortcut
Action
Tab
Autocomplete / next suggestion
Shift+Tab
Previous suggestion
Esc+Esc
Undo autocomplete
Autocomplete
Context-aware autocomplete activated with Tab:
Keywords - SQL commands
Table names - Database objects
Column names - Fields and functions
File names - Path completion
Database Operations
Create table from file
sql
CREATE TABLE sales AS SELECT * FROM 'sales_2024.csv';
Insert data
sql
INSERT INTO sales SELECT * FROM 'sales_2025.csv';
Export table
sql
COPY sales TO 'backup.parquet' (FORMAT PARQUET);
Analysis Examples
Quick statistics
sql
SELECT
COUNT(*) as count,
AVG(amount) as average,
SUM(amount) as total
FROM 'transactions.csv';
Grouping
sql
SELECT
category,
COUNT(*) as count,
SUM(amount) as total
FROM 'data.csv'
GROUP BY category
ORDER BY total DESC;
Join on files
sql
SELECT a.*, b.name
FROM 'orders.csv' a
JOIN 'customers.parquet' b ON a.customer_id = b.id;
Describe data
sql
DESCRIBE SELECT * FROM 'data.csv';
Pipe and stdin
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)"
Configuration
Save common settings in ~/.duckdbrc:
sql
.timer on
.mode duckbox
.maxrows 50
.highlight on
Syntax highlighting colors
sql
.keyword green
.constant yellow
.comment brightblack
.error red
External Editor
Open complex queries in your editor:
sql
.edit
Editor is chosen from: DUCKDB_EDITOR → EDITOR → VISUAL → vi
Safe Mode
Secure mode that restricts file access. When enabled:
No external file access
Disables .read, .output, .import, .sh etc.
Cannot be disabled in the same session
Tips
Use LIMIT on large files for quick preview
Parquet is faster than CSV for repeated queries
read_csv_auto and read_json_auto guess column types
Arguments are processed in order (like SQLite CLI)
WSL2 may show incorrect memory_limit values on some Ubuntu versions