DuckDB在线Shell:浏览器内免安装的数据分析神器

DuckDB 官方在线 Shell(shell.duckdb.org)是一个基于 WebAssembly 的浏览器端数据查询工具,无需下载、无需安装、无需配置,打开浏览器就能用 DuckDB 分析 CSV、Parquet 等各种格式的数据文件。本文详解其功能、命令和使用场景。

引言

想象一下这个场景:你正在客户现场做技术演示,电脑上没有装任何数据分析工具。或者你在咖啡馆,临时需要验证一个数据分析逻辑,但笔记本只有 4GB 内存。又或者你的协作者在一台没有安装权限的受限机器上,需要快速查一下数据。

传统解决方案往往是:

  1. 求 IT 部门安装软件 —— 等三天
  2. 自己写个 Python 脚本 —— 半小时过去了
  3. 用 Google Sheets —— 数据太大传不上去

现在有一个更好的选择:DuckDB 在线 Shellshell.duckdb.org)。

打开浏览器,访问这个网址,你就拥有了一个完整的 DuckDB v1.5.2(当前版本)交互式查询环境——所有计算都在你的浏览器本地完成,数据不会上传到任何服务器

本文带你全面了解这个工具的功能、用法和实战场景。


1. shell.duckdb.org 是什么?

核心原理:WebAssembly + DuckDB

DuckDB 在线 Shell 的核心技术是 WebAssembly(Wasm)。DuckDB 的 C++ 引擎被编译成 Wasm 二进制文件,然后在浏览器中直接运行。这意味着:

  • 无需服务器:所有查询都在你的浏览器本地执行
  • 无需安装:打开网页就能用,零配置
  • 数据留在本地:你加载的数据文件不会离开你的电脑
  • 跨平台:Windows、macOS、Linux、iPad 都可以用
  • 离线可用:页面加载后,断开网络也能继续查询

与传统方式对比

维度在线 Shell本地安装Jupyter Notebook
安装步骤0 步3-5 步5-10 步
启动时间2 秒5-30 分钟2-5 分钟
权限要求需管理员权限需 Python 环境
内存限制浏览器上限系统内存系统内存
可分享性一键分享 URL不可分享需搭建服务

技术栈

┌─────────────────────────────────────┐
│        DuckDB Web Shell UI          │
├─────────────────────────────────────┤
│    xterm.js (终端模拟器)              │
├─────────────────────────────────────┤
│   DuckDB Wasm (WebAssembly 引擎)     │
├─────────────────────────────────────┤
│    Web API (File API, IndexedDB)     │
├─────────────────────────────────────┤
│         浏览器 (Chrome/Firefox/Safari)│
└─────────────────────────────────────┘

2. 界面与基本操作

页面布局

打开 shell.duckdb.org,你会看到:

  • 顶部导航栏:New(新建会话)、Share(分享)、Import(导入文件)、Datasets(示例数据集)
  • 主区域:一个完整的终端模拟器,支持彩色输出和语法高亮
  • 主题切换:支持亮色/暗色模式

导航按钮

按钮功能
New新建一个干净的会话,重置所有状态
Share生成当前会话的可分享链接
Import从本地电脑选择文件加载到 Shell 中
Datasets快速加载官方提供的示例数据集

示例数据集一览

Datasets 菜单内置了 7 个可直接加载的数据集:

数据集类型描述
NL Railway (DuckLake)DuckLake荷兰铁路时刻表数据
Star Trek (CSV)CSV星际迷航演员表
Train Services (Parquet)Parquet铁路服务数据
TPCH on DuckLakeDuckLakeTPC-H 基准测试数据
NYC Taxi (Parquet)Parquet纽约出租车数据(千万级行数)
NYC Bike Trips (Spatial)Spatial纽约自行车出行 + 地理空间数据
Iceberg (S3 Tables)IcebergS3 表格式的 Iceberg 数据

点击任何一个数据集,Shell 会自动加载并执行示例查询,一键体验 DuckDB 的强大功能。


3. 核心命令详解

3.1 通用 . 命令

DuckDB Shell 提供了一系列以点开头的特殊命令:

.help              -- 显示所有可用命令的帮助
.help -all         -- 显示扩展帮助
.version           -- 显示当前 DuckDB 版本
.tables            -- 列出所有表
.schema [表名]     -- 显示表的 CREATE 语句
.timer on/off      -- 开启/关闭查询计时
.maxrows 100       -- 设置最大显示行数
.maxwidth 80       -- 设置最大显示宽度
.mode markdown     -- 切换输出模式(markdown、csv、json 等)
.nullvalue 'N/A'   -- 设置 NULL 值的显示文本
.separator ','     -- 设置列分隔符
.headers on/off    -- 开启/关闭表头显示
.highlight on/off  -- 开启/关闭语法高亮

3.2 .files 文件管理命令

这是在线 Shell 中最实用的命令之一.files 系列命令用于管理上传到浏览器本地的文件:

.files list       -- 列出所有已注册的文件
.files drop       -- 移除特定文件
.files drop-all   -- 清除所有已注册的文件

注意:在 Shell 界面上传文件有两种方式——点击 Import 按钮或执行 .pick 命令。

3.3 其他实用命令

.pick               -- 打开文件选择对话框,从电脑选择文件
.print 'Hello'      -- 打印文字
.share              -- 生成当前会话的分享链接
.show               -- 显示当前配置
.last               -- 重新渲染上次结果(不截断)
.large_number_rendering MODE  -- 切换大数字的可读渲染
.progress_bar on    -- 开启进度条显示

4. 实战示例

示例 1:直接查询远程 Parquet 文件

这是 DuckDB 最强大的特性之一——直接在 URL 上运行 SQL,无需下载:

-- 加载 HTTPFS 扩展
LOAD httpfs;

-- 查询远程 Parquet 文件的行数
SELECT COUNT(*) 
FROM 'https://blobs.duckdb.org/data/yellow_tripdata_2010-01.parquet';

输出:

┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│ 14863778     │
└──────────────┘

这一千四百万行数据,查询在几秒内返回——全部在浏览器中本地完成。

-- 多列聚合查询
SELECT 
    COUNT(*) AS trips,
    AVG(tip_amount) AS avg_tip,
    AVG(trip_distance) AS avg_distance
FROM 'https://blobs.duckdb.org/data/yellow_tripdata_2010-01.parquet';

输出:

┌──────────┬────────────────────┬────────────────────┐
│  trips   │      avg_tip       │    avg_distance    │
│  int64   │       double       │       double       │
├──────────┼────────────────────┼────────────────────┤
│ 14863778 │ 0.6714118288096592 │ 2.6282668161494915 │
└──────────┴────────────────────┴────────────────────┘

示例 2:查询本地 CSV 文件

点击 Import(或执行 .pick)选择本地的 CSV 文件,然后直接查询:

-- 假设你上传了一个名为 sales.csv 的文件
-- 文件名自动成为表名(去除扩展名)
SELECT * FROM sales LIMIT 10;

-- 按产品类别汇总
SELECT 
    category,
    SUM(amount) AS total_sales,
    COUNT(*) AS order_count,
    AVG(amount) AS avg_order_value
FROM sales
GROUP BY category
ORDER BY total_sales DESC;

示例 3:查询远程 CSV 文件

LOAD httpfs;

SELECT * 
FROM 'https://blobs.duckdb.org/data/Star_Trek Season_1.csv'
LIMIT 5;

示例 4:多数据源 JOIN

在线 Shell 支持跨文件 JOIN——你可以同时加载多个文件并执行关联查询:

-- 导入 orders.csv 和 customers.csv 后:
SELECT 
    c.name,
    c.city,
    SUM(o.amount) AS total_spent
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY c.name, c.city
ORDER BY total_spent DESC
LIMIT 10;

示例 5:加载 DuckLake 格式

DuckLake 是 DuckDB 的原生数据湖格式:

-- 加载荷兰铁路数据集
ATTACH 'https://blobs.duckdb.org/datalake/nl railway.ducklake' AS nl_railway (TYPE ducklake);
USE nl_railway;
.tables

-- 查询列车服务
SELECT * FROM services LIMIT 5;

示例 6:启用计时器进行性能测试

.timer on

SELECT 
    passenger_count,
    COUNT(*) AS trip_count,
    AVG(total_amount) AS avg_fare
FROM 'https://blobs.duckdb.org/data/yellow_tripdata_2010-01.parquet'
GROUP BY passenger_count
ORDER BY passenger_count;

启用 .timer 后,每条查询执行完毕都会显示耗时,方便你评估查询性能。


5. 典型应用场景

场景 1:临时机器上的数据分析

问题:出差在外,借用的电脑上没有安装任何数据工具。

解决方案:打开浏览器,访问 shell.duckdb.org,上传数据文件或直接查询远程 Parquet URL,立即开始分析。

实际案例

一位数据分析师在客户现场需要用客户的 50GB 服务器日志做快速分析。客户电脑只装了浏览器。他让客户把 Parquet 文件放到 S3 上,然后在在线 Shell 中执行了三行 SQL,五分钟内就给出了初步结论。

场景 2:客户演示

问题:给客户演示数据分析能力,但不想花时间配置环境。

解决方案

  1. 将数据以 Parquet/CSV 格式放在可公开访问的 URL 上
  2. 在演示前用 Share 功能生成一个预加载了查询的分享链接
  3. 客户只需点击链接,即可看到完整的分析结果

为什么这很强大

  • 无需在客户电脑上安装任何软件
  • 无需担心版本兼容性
  • 客户可以亲自体验,增加信任感
  • Share 链接保留了完整的查询历史

场景 3:协作者没有安装权限

问题:协作者在公司 IT 管控严格的电脑上工作,无法安装任何软件。

解决方案:将数据通过 Import 上传或通过公开 URL 加载,协作者即可在浏览器中完成全部数据探索工作。

优势

  • 不需要管理员权限
  • 不需要 IT 审批流程
  • 数据和查询完全在本地执行,安全合规
  • 支持 .share 命令一键分享当前工作会话

场景 4:教学和培训

问题:在 SQL 培训课上,每个学员需要一套独立的 DuckDB 环境。

解决方案:所有学员只需打开浏览器访问 shell.duckdb.org,无需任何前置安装步骤。

教学优势

  • 零环境配置,5 分钟就能开始讲课
  • 每个学员的操作互不影响
  • 可以用 .share 分享自己的查询给培训师看
  • 内置 Datasets 提供了现成的教学数据

场景 5:快速验证和原型设计

问题:你想快速验证一个 SQL 查询逻辑,不想启动整个开发环境。

解决方案:打开在线 Shell,写 SQL,看到结果。几秒钟内完成验证。

-- 比如你想验证一个日期计算逻辑:
SELECT 
    date '2026-05-08' + INTERVAL '1 month' AS next_month,
    date_trunc('month', date '2026-05-08') AS month_start,
    last_day(date '2026-05-08') AS month_end;

6. 限制与注意事项

虽然 DuckDB 在线 Shell 非常强大,但它也有一些限制需要了解:

内存限制

  • 浏览器 Wasm 的内存上限通常为 4GB(Chrome 默认)
  • 对于超过 2GB 的大数据集,建议做采样或过滤后再查询
  • 大型 JOIN 操作可能超出内存限制

文件大小建议

  • CSV 文件:建议 < 500MB
  • Parquet 文件:建议 < 2GB(Parquet 有列式压缩,同样的数据更小)
  • 超过此范围,推荐使用本地安装版 DuckDB

网络依赖

  • 首次加载需要联网下载 Wasm 引擎(约 5MB)
  • 查询远程文件(通过 URL)需要网络
  • 但加载完成后,断开网络也可以继续使用已加载的数据

不支持的功能

  • 无法安装自定义扩展(扩展需要在 Wasm 编译时预置)
  • 无法直接写磁盘文件(浏览器沙箱限制)
  • .files add 命令在当前版本中不支持(使用 Import 按钮或 .pick 替代)
  • 不支持多线程并行(Wasm 单线程限制)

7. 与其他在线数据分析工具对比

特性DuckDB ShellSQLite OnlineGoogle SheetsBigQuery Console
执行引擎本地浏览器本地浏览器云端服务器云端服务器
数据隐私✅ 数据不离开本机✅ 数据不离开本机❌ 数据上传❌ 数据上传
离线可用✅ 加载后可用
数据大小上限~2GB~100MB~10M 行无上限
Parquet 支持✅ 原生
SQL 语法现代 OLAP SQL传统 SQL有限 SQL标准 SQL
学习成本
费用免费免费免费按量付费
扩展性浏览器受限浏览器受限协作好企业级

8. 变现建议

8.1 围绕 Shell 的知识付费产品

方向:SQL 实战训练营(零门槛)

利用在线 Shell 免安装的特性,做面向非技术人员的 SQL 培训:

  • 课程名称:“无需安装任何软件,3 天学会数据查询”
  • 目标受众:运营、市场、销售、HR 等非技术人员
  • 卖点:不需要装 Python、不需要配环境、打开浏览器就能学
  • 定价:¥99-¥299/人
  • 配套:提供预置数据集的 Share 链接,学员点击即用

交付方式

  1. 准备 20 个不同难度的 SQL 练习
  2. 每个练习附带一个 Share 链接(数据已预加载)
  3. 学员在浏览器中完成全部练习
  4. 作业通过 .share 提交给老师批改

8.2 企业培训定制服务

方向:数据素养内训

很多企业希望提升员工的数据分析能力,但受限于 IT 安全策略:

  • 企业问题:员工电脑只有浏览器,无法安装分析工具
  • 解决方案:基于 DuckDB Shell 的数据分析内训
  • 定价:¥5,000-¥20,000/次(按天计费)
  • 卖点:零安装、零 IT 介入、即刻上手

8.3 技术博客引流

利用 Shell 的 Share 功能,在技术博客中嵌入可交互的 SQL 查询:

  • 每篇文章末尾放一个 Share 链接,读者点击即可复现你的分析
  • 积累读者后,通过广告、付费专栏、咨询服务变现
  • 参考模式:类似的"可交互技术博客"在 Hacker News 上经常获得数千点赞

8.4 嵌入式数据分析工具

为 SaaS 产品集成 DuckDB Shell:

  • 如果你的产品涉及数据导出,加入"在浏览器中预览"功能
  • 用户导出 CSV/Parquet 后,一键在浏览器中打开分析
  • 可作为增值功能收费,提升产品竞争力

8.5 B 站/YouTube 视频内容

制作系列视频:

  • 第 1 集:DuckDB Shell 入门——打开浏览器就能分析数据
  • 第 2 集:5 个 SQL 技巧让你不用 Excel 也能做数据分析
  • 第 3 集:用 DuckDB Shell 分析纽约出租车数据——浏览器跑 1400 万行!
  • 第 4 集:现场演示神器:怎样在客户电脑上用 30 秒搭建数据分析环境

视频天然适合展示 Shell 的即时性和易用性,更容易获得传播。


9. 常见问题

Q:数据会上传到 DuckDB 的服务器吗?

不会。 所有计算都在你的浏览器中通过 WebAssembly 完成。数据上传至内存后不会离开你的电脑。

Q:能处理多大的数据?

浏览器 Wasm 通常有 4GB 内存限制。对于 CSV 文件建议不超过 500MB,Parquet 文件建议不超过 2GB。更大的数据推荐使用本地安装版。

Q:能离线使用吗?

可以的。首次加载 DuckDB Shell 页面后(需要网络),当 Wasm 引擎下载完成,你可以断开网络继续使用已加载的数据。

Q:支持哪些文件格式?

支持 DuckDB 支持的所有格式:CSV、Parquet、JSON、Excel(需扩展)等。通过 HTTPFS 扩展还支持 S3、GCS 上的远程文件。

Q:Share 链接分享的内容是什么?

Share 链接包含了你的所有 SQL 查询历史。接收者打开链接后会自动重放这些查询,看到相同的结果(前提是数据源可访问)。

Q:如何导出查询结果?

可以使用 .mode csv 切换到 CSV 输出模式,然后复制结果。或者将结果较小的查询结果手动保存。对于大批量导出,推荐使用本地 DuckDB。


10. 总结

DuckDB 在线 Shell 是数据分析领域的一个"隐形武器"。它不需要任何安装配置,打开浏览器就能使用完整的关系型查询能力。

它的核心价值在于:

  1. 零门槛——任何有浏览器的人都能使用
  2. 数据隐私——计算在本地完成,数据不离开电脑
  3. 功能完整——支持 DuckDB 的核心 SQL 语法和文件格式
  4. 场景丰富——从临时查询到教学培训,从客户演示到协作者协作

下次当你遇到以下情况时,不要急着装软件——试试 shell.duckdb.org:

  • 临时机器上需要分析数据
  • 给客户做演示但不想配置环境
  • 协作者的电脑没有安装权限
  • 想快速验证一个 SQL 查询逻辑

访问 shell.duckdb.org,三秒钟开始你的数据分析。


本文基于 DuckDB Web Shell v1.5.2(Variegata)版本编写。DuckDB 是开源的嵌入式 OLAP 数据库,在线 Shell 是其社区贡献的 WebAssembly 移植项目。