DuckDB CLI Specialist 是一项围绕 DuckDB 命令行工具(CLI)使用的专家技能,主要用于数据分析和 SQL 查询以及文件转换。它帮助用户通过 DuckDB CLI 直接对数据文件执行 SQL,无需先导入数据库。
主要能力
直接读取数据文件
可以通过 SQL 直接查询多种格式的文件:
- CSV:
duckdb -c "SELECT * FROM 'data.csv' LIMIT 10" - Parquet:
duckdb -c "SELECT * FROM 'data.parquet'" - 使用 glob 匹配多个文件:
duckdb -c "SELECT * FROM read_parquet('logs/*.parquet')" - JSON:
duckdb -c "SELECT * FROM read_json_auto('data.json')"
持久化数据库
可以创建或打开数据库文件,并以只读模式访问:
duckdb my_database.duckdb
duckdb -readonly existing.duckdb
命令行参数
- 输出格式标志:
-csv、-json、-table、-markdown、-html、-line - 执行参数:
-c COMMAND(运行 SQL 后退出)、-f FILENAME(运行脚本文件)、-init FILE(替代 ~/.duckdbrc)、-readonly(只读模式)、-echo(执行前显示命令)、-bail(遇首个错误停止)、-header/-noheader、-nullvalue TEXT、-separator SEP
数据转换
支持文件格式之间的转换,并可附带过滤:
- 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)"
点命令
- Schema 检查:
.tables [pattern]、.schema [table]、.databases - 输出控制:
.mode FORMAT、.output file、.once file、.headers on/off、.separator COL ROW - 查询控制:
.timer on/off、.echo on/off、.bail on/off、.read file.sql - 编辑:
.edit或\e(在外部编辑器中打开查询)、.help [pattern]
输出格式(共 18 种)
- 数据导出:csv、tabs、json、jsonlines
- 可读格式:duckbox(默认,带 Unicode 框线的美化 ASCII)、table、markdown、html、latex
- 专用格式:insert TABLE(生成 SQL INSERT 语句)、column(可调宽度的列)、line(每行一个值)、list(竖线分隔)、trash(丢弃输出)
键盘快捷键(macOS/Linux)
- 导航:Home/End、Ctrl+Left/Right、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 激活上下文感知自动补全,涵盖关键字、表名、列名和文件名路径补全。
数据库操作
支持从文件建表、插入数据和导出表:
CREATE TABLE sales AS SELECT * FROM 'sales_2024.csv';
INSERT INTO sales SELECT * FROM 'sales_2025.csv';
COPY sales TO 'backup.parquet' (FORMAT PARQUET);
分析示例
- 快速统计:COUNT、AVG、SUM
- 分组:GROUP BY 与 ORDER BY
- 跨文件连接:
SELECT a.*, b.name FROM 'orders.csv' a JOIN 'customers.parquet' b ON a.customer_id = b.id; - 描述数据:
DESCRIBE SELECT * FROM 'data.csv';
管道与标准输入输出
- 从 stdin 读取:
cat data.csv | duckdb -c "SELECT * FROM read_csv('/dev/stdin')" - 管道输出:
duckdb -csv -c "SELECT * FROM 'data.parquet'" | head -20 - 写入 stdout:
duckdb -c "COPY (SELECT * FROM 'data.csv') TO '/dev/stdout' (FORMAT CSV)"
配置文件
可在 ~/.duckdbrc 中保存常用设置,例如 .timer on、.mode duckbox、.maxrows 50、.highlight on,并可配置语法高亮颜色(.keyword、.constant、.comment、.error)。
外部编辑器
使用 .edit 在外部编辑器中打开复杂查询,编辑器按 DUCKDB_EDITOR → EDITOR → VISUAL → vi 的顺序选择。
安全模式
启用后限制文件访问:禁止外部文件访问,禁用 .read、.output、.import、.sh 等命令,且无法在同一会话中关闭。
适用场景
- 快速探查与预览 CSV、Parquet、JSON 数据
- 执行 SQL 查询、统计汇总、分组与连接分析
- 在 CSV、Parquet、JSON 等格式之间转换数据
- 将查询结果导出为 csv、json、markdown、html、latex 等格式
限制与提示
- 在大文件上建议使用 LIMIT 进行快速预览;Parquet 在重复查询时比 CSV 更快
- read_csv_auto 和 read_json_auto 会猜测列类型
- 参数按顺序处理(类似 SQLite CLI)
- 部分 Ubuntu 版本上的 WSL2 可能显示不正确的 memory_limit 值
- 安全模式一旦启用便无法在同一会话中关闭
- 关于收费、价格与平台等信息,当前资料暂未提供。