SuperAPI AI 工具集

duckdb-en

数据与分析

查看项目

更新于 10-15 10:22

技能介绍

用途

DuckDB CLI 专家技能,帮助用户通过 DuckDB 命令行界面完成数据分析、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 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_EDITOR → EDITOR → VISUAL → vi

安全模式

限制文件访问的安全模式。启用后:

  • 无外部文件访问
  • 禁用 .read、.output、.import、.sh 等
  • 同一会话中无法禁用

使用方式

通过命令行调用 duckdb,使用 -c 直接执行 SQL,或进入交互式界面使用点命令与快捷键。可结合管道与标准输入输出与其他命令协作。

适用场景

  • 对 CSV、Parquet、JSON 文件进行快速 SQL 查询与分析
  • 数据文件格式转换(CSV/Parquet/JSON 互转)
  • 打开与查询持久化 DuckDB 数据库
  • 跨文件连接、分组统计、数据描述
  • 将查询结果导出为多种格式

限制

  • 安全模式启用后无法在同一会话中禁用
  • WSL2 在某些 Ubuntu 版本上可能显示不正确的 memory_limit 值
  • 其余限制暂未提供