CLI Tool Quick Start
Get started with the sqlstream command-line tool in 5 minutes!
Step 1: Install SQLStream
# Using uv (recommended)
uv tool install "sqlstream[all]"
# Or using pip
pip install "sqlstream[all]"
Verify installation:
Step 2: Create Sample Data
cat > employees.csv << EOF
id,name,department,salary,hire_date
1,Alice,Engineering,95000,2020-01-15
2,Bob,Sales,75000,2019-06-01
3,Charlie,Engineering,105000,2018-03-20
4,Diana,Marketing,68000,2021-02-14
5,Eve,Sales,82000,2020-09-10
EOF
Step 3: Your First Query
Basic SELECT
Output:
┌────┬─────────┬─────────────┬────────┬────────────┐
│ id │ name │ department │ salary │ hire_date │
├────┼─────────┼─────────────┼────────┼────────────┤
│ 1 │ Alice │ Engineering │ 95000 │ 2020-01-15 │
│ 2 │ Bob │ Sales │ 75000 │ 2019-06-01 │
│ 3 │ Charlie │ Engineering │ 105000 │ 2018-03-20 │
│ 4 │ Diana │ Marketing │ 68000 │ 2021-02-14 │
│ 5 │ Eve │ Sales │ 82000 │ 2020-09-10 │
└────┴─────────┴─────────────┴────────┴────────────┘
Filter with WHERE
$ sqlstream query employees.csv "SELECT name, salary FROM employees WHERE department = 'Engineering'"
Inline File Paths
You can omit the source file if it's in the SQL:
Step 4: Output Formats
JSON Output
[
{
"id": 1,
"name": "Alice",
"department": "Engineering",
"salary": 95000,
"hire_date": "2020-01-15"
},
{
"id": 2,
"name": "Bob",
"department": "Sales",
"salary": 75000,
"hire_date": "2019-06-01"
}
]
CSV Output
Markdown Output
| id | name | department | salary | hire_date |
|----|-------|-------------|--------|------------|
| 1 | Alice | Engineering | 95000 | 2020-01-15 |
| 2 | Bob | Sales | 75000 | 2019-06-01 |
Step 5: Aggregations
# Count by department
$ sqlstream query employees.csv "
SELECT department, COUNT(*) as count, AVG(salary) as avg_salary
FROM employees
GROUP BY department
ORDER BY avg_salary DESC
"
Output:
┌─────────────┬───────┬────────────┐
│ department │ count │ avg_salary │
├─────────────┼───────┼────────────┤
│ Engineering │ 2 │ 100000.0 │
│ Sales │ 2 │ 78500.0 │
│ Marketing │ 1 │ 68000.0 │
└─────────────┴───────┴────────────┘
Step 6: JOIN Multiple Files
Create an orders file:
Join the files:
$ sqlstream query "
SELECT e.name, SUM(o.amount) as total_sales
FROM 'employees.csv' e
JOIN 'orders.csv' o ON e.id = o.employee_id
GROUP BY e.name
ORDER BY total_sales DESC
"
Step 7: Performance Options
Use Pandas Backend
For large files (>100K rows):
Use DuckDB Backend
For complex SQL (window functions, CTEs):
$ sqlstream query "
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM 'employees.csv'
)
SELECT * FROM ranked WHERE rank = 1
" --backend duckdb
Show Execution Time
Step 8: Query Different Formats
JSON Files
HTML Tables
Markdown Tables
Parquet Files
S3 Files
Common Command-Line Patterns
Pipe to Other Tools
# Pipe to jq for JSON processing
$ sqlstream query employees.csv "SELECT * FROM employees" --format json | jq '.[] | select(.salary > 80000)'
# Pipe to grep
$ sqlstream query employees.csv "SELECT * FROM employees" --format csv | grep Engineering
# Pipe to wc for counting
$ sqlstream query employees.csv "SELECT * FROM employees" --format csv | wc -l
Save Results to File
# Save as CSV
$ sqlstream query employees.csv "SELECT * FROM employees WHERE salary > 80000" --format csv > high_earners.csv
# Save as JSON
$ sqlstream query employees.csv "SELECT * FROM employees" --format json > employees.json
Use in Scripts
#!/bin/bash
# Query and process results
RESULT=$(sqlstream query employees.csv "SELECT COUNT(*) as count FROM employees WHERE department = 'Engineering'" --format json)
COUNT=$(echo "$RESULT" | jq -r '.[0].count')
if [ "$COUNT" -gt 5 ]; then
echo "Engineering team is large: $COUNT members"
else
echo "Engineering team is small: $COUNT members"
fi
Exit Codes
# Check if query succeeded
if sqlstream query employees.csv "SELECT * FROM employees" > /dev/null 2>&1; then
echo "Query succeeded"
else
echo "Query failed"
exit 1
fi
What's Next?
- Query Command Reference - All command-line options
- Scripting Patterns - Automation, CI/CD, error handling
- Output Formats - Complete format guide
- Examples - Real-world CLI examples