DuckDB CLI skills技能使用说明
2026-03-28
新闻来源:网淘吧
围观:14
电脑广告
手机广告
DuckDB CLI 专家
通过 DuckDB CLI 帮助进行数据分析、SQL 查询和文件转换。
快速开始
直接用 SQL 读取数据文件
# 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')"
打开持久化数据库
# Create/open database
duckdb my_database.duckdb
# Read-only mode
duckdb -readonly existing.duckdb
命令行参数
输出格式(作为标志)
| 标志 | 格式 |
|---|---|
-csv | 逗号分隔 |
-json | JSON 数组 |
-table | ASCII 表格 |
-markdown | Markdown 表格 |
-html | HTML 表格 |
-line | 每行一个值 |
执行参数
| 参数 | 描述 |
|---|---|
-c 命令 | 执行SQL并退出 |
-f 文件名 | 从文件运行脚本 |
-init 文件 | 使用替代 ~/.duckdbrc 的配置文件 |
-readonly | 以只读模式打开 |
-echo | 执行前显示命令 |
-bail | 遇到第一个错误时停止 |
-header/-noheader | 显示/隐藏列标题 |
-nullvalue 文本 | NULL值的显示文本 |
-separator 分隔符 | 列分隔符 |
数据转换
CSV 转 Parquet
duckdb -c "COPY (SELECT * FROM 'input.csv') TO 'output.parquet' (FORMAT PARQUET)"
Parquet 转 CSV
duckdb -c "COPY (SELECT * FROM 'input.parquet') TO 'output.csv' (HEADER, DELIMITER ',')"
JSON 转 Parquet
duckdb -c "COPY (SELECT * FROM read_json_auto('input.json')) TO 'output.parquet' (FORMAT PARQUET)"
带筛选条件的转换
duckdb -c "COPY (SELECT * FROM 'data.csv' WHERE amount > 1000) TO 'filtered.parquet' (FORMAT PARQUET)"
点命令
模式检查
| 命令 | 描述 |
|---|---|
.tables [模式] | 显示表(可使用LIKE模式匹配) |
.schema [表名] | 显示创建语句 |
.databases | 显示已附加的数据库 |
输出控制
| 命令 | 描述 |
|---|---|
.mode 格式 | 更改输出格式 |
.output 文件 | 将输出发送到文件 |
.once 文件 | 下一次输出到文件 |
.headers 开/关 | 显示/隐藏列标题 |
.separator 列分隔符 行分隔符 | 设置分隔符 |
查询
| 命令 | 描述 |
|---|---|
.timer 开/关 | 显示执行时间 |
.echo 开/关 | 在执行前显示命令 |
.bail 开/关 | 出错时停止 |
.read 文件.sql | 从文件运行 SQL |
编辑
| 命令 | 描述 |
|---|---|
.edit或\e | 在外部编辑器中打开查询 |
.help [模式] | 显示帮助 |
输出格式(18种可用)
数据导出
- csv- 逗号分隔,适用于电子表格
- tabs- 制表符分隔
- json- JSON 数组
- jsonlines- 换行符分隔的JSON(流式)
可读格式
- duckbox(默认)- 使用Unicode制表符绘制的美观ASCII格式
- table- 简单的ASCII表格
- markdown- 用于文档编写
- html- HTML表格
- latex- 用于学术论文
专用格式
- insert TABLE- SQL INSERT语句
- column- 宽度可调的列
- line- 每行一个值
- list- 竖线分隔
- trash- 丢弃输出
键盘快捷键(macOS/Linux)
导航
| 快捷键 | 操作 |
|---|---|
Home键/End键 | 行首/行尾 |
Ctrl+左箭头/右箭头 | 跳转单词 |
Ctrl+A/Ctrl+E | 缓冲区起始/末尾 |
历史记录
| 快捷键 | 操作 |
|---|---|
Ctrl+P/Ctrl+N | 上一条/下一条命令 |
Ctrl+R | 搜索历史记录 |
Alt+</Alt+> | 历史记录中的第一条/最后一条 |
编辑
| 快捷键 | 操作 |
|---|---|
Ctrl+W | 向后删除单词 |
Alt+D | 向前删除单词 |
Alt+U/Alt+L | 单词大小写切换 |
Ctrl+K | 删除至行尾 |
自动补全
| 快捷键 | 操作 |
|---|---|
Tab键 | 自动补全 / 下一个建议 |
Shift+Tab | 上一个建议 |
Esc+Esc | 撤销自动补全 |
自动补全
上下文感知自动补全通过以下方式激活Tab键:
- 关键词- SQL命令
- 表名- 数据库对象
- 列名- 字段与函数
- 文件名- 路径补全
数据库操作
从文件创建表
CREATE TABLE sales AS SELECT * FROM 'sales_2024.csv';
插入数据
INSERT INTO sales SELECT * FROM 'sales_2025.csv';
导出表
COPY sales TO 'backup.parquet' (FORMAT PARQUET);
分析示例
快速统计
SELECT
COUNT(*) as count,
AVG(amount) as average,
SUM(amount) as total
FROM 'transactions.csv';
分组
SELECT
category,
COUNT(*) as count,
SUM(amount) as total
FROM 'data.csv'
GROUP BY category
ORDER BY total DESC;
文件连接
SELECT a.*, b.name
FROM 'orders.csv' a
JOIN 'customers.parquet' b ON a.customer_id = b.id;
描述数据
DESCRIBE SELECT * FROM 'data.csv';
管道与标准输入
# 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)"
配置
保存常用设置至~/.duckdbrc:
.timer on
.mode duckbox
.maxrows 50
.highlight on
语法高亮颜色
.keyword green
.constant yellow
.comment brightblack
.error red
外部编辑器
在您的编辑器中打开复杂查询:
.edit
编辑器选自:DUCKDB_EDITOR→编辑器→可视化→vi
安全模式
一种限制文件访问的安全模式。启用时:
- 无外部文件访问
- 禁用
.read、.output、.import、.sh等命令。 - 无法在同一会话中禁用
提示
- 使用
LIMIT对大型文件进行快速预览 - 对于重复查询,Parquet 格式比 CSV 更快
read_csv_auto和自动读取JSON猜测列类型- 参数按顺序处理(类似于SQLite CLI)
- WSL2在某些Ubuntu版本上可能显示不正确的
内存限制数值
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~