引言
想象一下这个场景:你正在客户现场做技术演示,电脑上没有装任何数据分析工具。或者你在咖啡馆,临时需要验证一个数据分析逻辑,但笔记本只有 4GB 内存。又或者你的协作者在一台没有安装权限的受限机器上,需要快速查一下数据。
传统解决方案往往是:
- 求 IT 部门安装软件 —— 等三天
- 自己写个 Python 脚本 —— 半小时过去了
- 用 Google Sheets —— 数据太大传不上去
现在有一个更好的选择:DuckDB 在线 Shell(shell.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 DuckLake | DuckLake | TPC-H 基准测试数据 |
| NYC Taxi (Parquet) | Parquet | 纽约出租车数据(千万级行数) |
| NYC Bike Trips (Spatial) | Spatial | 纽约自行车出行 + 地理空间数据 |
| Iceberg (S3 Tables) | Iceberg | S3 表格式的 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:客户演示
问题:给客户演示数据分析能力,但不想花时间配置环境。
解决方案:
- 将数据以 Parquet/CSV 格式放在可公开访问的 URL 上
- 在演示前用 Share 功能生成一个预加载了查询的分享链接
- 客户只需点击链接,即可看到完整的分析结果
为什么这很强大:
- 无需在客户电脑上安装任何软件
- 无需担心版本兼容性
- 客户可以亲自体验,增加信任感
- 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 Shell | SQLite Online | Google Sheets | BigQuery Console |
|---|---|---|---|---|
| 执行引擎 | 本地浏览器 | 本地浏览器 | 云端服务器 | 云端服务器 |
| 数据隐私 | ✅ 数据不离开本机 | ✅ 数据不离开本机 | ❌ 数据上传 | ❌ 数据上传 |
| 离线可用 | ✅ 加载后可用 | ✅ | ❌ | ❌ |
| 数据大小上限 | ~2GB | ~100MB | ~10M 行 | 无上限 |
| Parquet 支持 | ✅ 原生 | ❌ | ❌ | ✅ |
| SQL 语法 | 现代 OLAP SQL | 传统 SQL | 有限 SQL | 标准 SQL |
| 学习成本 | 低 | 低 | 低 | 高 |
| 费用 | 免费 | 免费 | 免费 | 按量付费 |
| 扩展性 | 浏览器受限 | 浏览器受限 | 协作好 | 企业级 |
8. 变现建议
8.1 围绕 Shell 的知识付费产品
方向:SQL 实战训练营(零门槛)
利用在线 Shell 免安装的特性,做面向非技术人员的 SQL 培训:
- 课程名称:“无需安装任何软件,3 天学会数据查询”
- 目标受众:运营、市场、销售、HR 等非技术人员
- 卖点:不需要装 Python、不需要配环境、打开浏览器就能学
- 定价:¥99-¥299/人
- 配套:提供预置数据集的 Share 链接,学员点击即用
交付方式:
- 准备 20 个不同难度的 SQL 练习
- 每个练习附带一个 Share 链接(数据已预加载)
- 学员在浏览器中完成全部练习
- 作业通过
.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 是数据分析领域的一个"隐形武器"。它不需要任何安装配置,打开浏览器就能使用完整的关系型查询能力。
它的核心价值在于:
- 零门槛——任何有浏览器的人都能使用
- 数据隐私——计算在本地完成,数据不离开电脑
- 功能完整——支持 DuckDB 的核心 SQL 语法和文件格式
- 场景丰富——从临时查询到教学培训,从客户演示到协作者协作
下次当你遇到以下情况时,不要急着装软件——试试 shell.duckdb.org:
- 临时机器上需要分析数据
- 给客户做演示但不想配置环境
- 协作者的电脑没有安装权限
- 想快速验证一个 SQL 查询逻辑
访问 shell.duckdb.org,三秒钟开始你的数据分析。
本文基于 DuckDB Web Shell v1.5.2(Variegata)版本编写。DuckDB 是开源的嵌入式 OLAP 数据库,在线 Shell 是其社区贡献的 WebAssembly 移植项目。