OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  duckdb-en:DuckDB 命令行专家,支持 SQL 分析与高效数据处理

duckdb-en:DuckDB 命令行专家,支持 SQL 分析与高效数据处理

 
  omniai ·  2026-02-25 05:23:00 · 2 次点击  · 0 条评论  

名称: duckdb-zh
描述: DuckDB CLI 专家,专注于 SQL 分析、数据处理和文件转换。适用于 SQL 查询、CSV/Parquet/JSON 分析、数据库查询或数据转换。触发词:"duckdb"、"sql"、"query"、"data analysis"、"parquet"、"convert data"。


DuckDB CLI 专家

通过 DuckDB CLI 协助进行数据分析、SQL 查询和文件转换。

快速开始

直接使用 SQL 读取数据文件

# CSV
duckdb -c "SELECT * FROM 'data.csv' LIMIT 10"

# Parquet
duckdb -c "SELECT * FROM 'data.parquet'"

# 使用通配符读取多个文件
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 JSON 数组
-table ASCII 表格
-markdown Markdown 表格
-html HTML 表格
-line 每行一个值

执行参数

参数 描述
-c COMMAND 运行 SQL 命令并退出
-f FILENAME 从文件运行脚本
-init FILE 使用替代 ~/.duckdbrc 的初始化文件
-readonly 以只读模式打开
-echo 执行前显示命令
-bail 遇到第一个错误时停止
-header / -noheader 显示/隐藏列标题
-nullvalue TEXT NULL 值的替代文本
-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)"

点命令

模式检查

命令 描述
.tables [pattern] 显示表(可使用 LIKE 模式)
.schema [table] 显示 CREATE 语句
.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 从文件运行 SQL

编辑

命令 描述
.edit\e 在外部编辑器中打开查询
.help [pattern] 显示帮助

输出格式(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+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 键激活:
- 关键字 - 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';

管道和标准输入

# 从标准输入读取
cat data.csv | duckdb -c "SELECT * FROM read_csv('/dev/stdin')"

# 管道到另一个命令
duckdb -csv -c "SELECT * FROM 'data.parquet'" | head -20

# 写入标准输出
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_EDITOREDITORVISUALvi

安全模式

限制文件访问的安全模式。启用时:
- 无法访问外部文件
- 禁用 .read.output.import.sh 等命令
- 无法在同一会话中禁用

提示

  • 对大文件使用 LIMIT 进行快速预览
  • 对于重复查询,Parquet 比 CSV 更快
  • read_csv_autoread_json_auto 会自动推断列类型
  • 参数按顺序处理(类似于 SQLite CLI)
  • 在某些 Ubuntu 版本上,WSL2 可能显示不正确的 memory_limit
2 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor