在 Mac 上直接用 SQL 查你的文件。

拖入 CSV、Parquet、JSON 或 Excel 文件,在原地用 DuckDB 查询。不用启动服务器,不用上传,也不用注册账号。

免费开源。需要 macOS 12 及以上、Apple 芯片。

从文件到答案

不用先配置连接,也不用先写 schema。

  1. 拖入文件

    把文件或整个文件夹拖到窗口上,或者从文件对话框里选,或者在命令行里写出路径。

  2. 它会变成一张表

    表以文件名命名——sales.csv 变成 sales——它的列出现在侧栏里。文件留在原处。

  3. 用 SQL 查询

    写 SQL,按 ⌘↵,再把答案画成图,或导出为 CSV 或 Parquet。

打开你手头已有的文件

打开一个文件夹,里面的数据文件(包括子文件夹里的)都会一起打开。*.csv 这样的通配符也能用。打开过的文件,下次启动还在。

  • CSV
  • TSV
  • Parquet
  • JSON 与 NDJSON
  • Excel xlsx、xls、ods
  • DuckDB 数据库
  • S3 与兼容存储

为 AI agent 准备好了

在终端里,ducklocal 不开窗口就能以 JSON 返回一条 SQL 的结果。脚本可以依赖这个格式,agent 也能据此推理。官方 agent skill 教它们先读 schema,再查询。

CLI 与 agent skill

$ ducklocal query --format md --sql "
    SELECT channel, round(sum(revenue), 2) AS revenue
    FROM 'sales.csv' GROUP BY channel
    ORDER BY revenue DESC"

| channel | revenue |
| --- | --- |
| Mobile app | 290549.76 |
| Web | 289544.8 |
| Store | 240067.6 |
| Phone | 82511.2 |

Dashboard 就是纯文本文件

.dash 文件里写好查询和图表,它就会作为 dashboard 标签页打开。因为是纯文本,所以能 diff、能审阅、能校验:ducklocal check 会在任何人打开之前发现缺失的列。

Dashboard(.dash)

query "by_channel" {
  sql = <<SQL
    SELECT channel, sum(revenue) AS revenue
    FROM sales GROUP BY channel
  SQL
}

plot "revenue" {
  type  = "bar"
  query = query.by_channel
  x     = channel
  y     = revenue
}

你的数据只属于你

DuckLocal 在应用内部、在你的 Mac 上运行 DuckDB。没有要注册的东西,你的文件也无处可去。

  • 文件在原地读取——从不复制,从不上传。
  • 没有账号、没有遥测、没有云服务。
  • Dashboard 只能读取,打开别人发来的 dashboard 不会改动你的数据。
  • 以 Apache-2.0 开源:每一行代码都可以查看。

用你自己的文件试试

下载 DuckLocal,拖入一个文件,按 ⌘↵。10 分钟上手教程会用一个样例文件带你走一遍。