SuperAPI AI 工具集

duckdb-en

数据与分析

查看项目

更新于 10-16 06:57

技能介绍

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 值
  • 安全模式一旦启用便无法在同一会话中关闭
  • 关于收费、价格与平台等信息,当前资料暂未提供。