DuckDB 本地 UI

Jeff Raymakers 和 Gabor Szarnyas
2025-03-12 · 6 分钟阅读

TL;DR: DuckDB 团队和 MotherDuck 很高兴宣布发布 DuckDB 本地 UI,该 UI 作为 ui 扩展的一部分提供。

DuckDB 项目旨在让用户轻松利用现代数据库技术。DuckDB 可通过多种流行语言使用,并可在多种平台上运行。随附的命令行界面 (CLI) 提供了一种方便的方式,用于从终端窗口交互式运行 SQL 查询,并且有多种第三方工具提供更复杂的 UI。

DuckDB CLI 提供交互式多行编辑、自动完成和进度指示等高级功能。然而,对于处理冗长的 SQL 查询来说,它可能很繁琐,并且其数据探索工具也有限。许多可用的第三方 UI 都不错,但选择、安装和配置它们并不简单。通过 UI 使用 DuckDB 应该像使用 CLI 一样简单。现在,它做到了!

DuckDB UI 是 DuckDB LabsMotherDuck 之间合作的成果,并作为 ui 扩展的一部分提供。

介绍 DuckDB UI

DuckDB v1.2.1 开始,开箱即用地提供了一个功能齐全的本地 Web 用户界面!您可以通过使用 -ui 参数启动 DuckDB CLI 客户端来从终端启动它

duckdb -ui

您还可以从DuckDB 客户端(例如 CLI、Python、Java 等)运行以下 SQL 命令

CALL start_ui();

这两种方法都会安装 ui 扩展(如果尚未安装),然后会在您的浏览器中打开 DuckDB UI

DuckDB UI 使用交互式笔记本定义 SQL 脚本并显示查询结果。然而,它的功能远不止于此。让我们来看看它的主要功能。

DuckDB UI 在本地运行您的所有查询:您的查询和数据永远不会离开您的计算机。如果您想通过 UI 使用 MotherDuck,则必须明确选择加入

功能

数据库

您已附加的数据库显示在左侧。此列表包括内存数据库以及您已加载的任何文件和 URL。您可以通过展开数据库和架构来探索表和视图。

表摘要

单击表或视图以在下方显示摘要。UI 显示行数、每列的名称和类型,以及每列中的数据概况。

选择一列以查看其数据的更详细摘要。您可以使用右上角附近的“预览数据”按钮来检查前 100 行。您还可以在此处找到表或视图的 SQL 定义。

笔记本

您可以将工作组织到命名的笔记本中。笔记本的每个单元格可以执行一个或多个 SQL 语句。UI 支持语法高亮和自动完成功能,以帮助您编写查询。

您可以运行整个单元格,或仅运行选定的部分,然后使用提供的控件对结果进行排序、过滤或进一步转换。

列浏览器

右侧面板包含列浏览器,它显示了您的结果摘要。您可以深入查看每列以获取见解。

MotherDuck 集成

如果您想连接到 MotherDuck,您可以登录 MotherDuck,将文件和表持久化到为大规模使用 DuckDB 和与团队共享数据而精心设计的云数据仓库中。

……以及更多!

DuckDB UI 正在积极开发中。敬请期待更多新增功能和改进!

占用空间

与 DuckDB CLI 类似,DuckDB UI 会在您的主目录下的 .duckdb 目录中创建一些文件。UI 将其文件放在一个子目录中:extension_data/ui

  • 您的笔记本和其他一些状态存储在 DuckDB 数据库 ui.db 中。
  • 当您将数据导出到剪贴板或文件时(使用结果下方的控件),会生成一些微小的中间文件(例如 ui_export.csv)。数据在导出完成后会从这些文件中清除,但会保留一些几乎为空的文件,每种文件类型一个。

内部机制

对 UI 的支持是在 DuckDB 扩展中实现的。该扩展嵌入了一个 localhost HTTP 服务器,用于提供 UI 浏览器应用程序,并暴露了一个与 DuckDB 通信的 API。通过这种方式,UI 利用了启动它的原生 DuckDB 实例,从而可以完全访问您的本地内存、计算和文件系统。

结果以高效的二进制形式返回,与 DuckDB 的内存表示(DataChunk)密切匹配。服务器发送事件(Server-sent events)能够及时通知更新,例如附加数据库。这些技术及其他技术共同提供了低延迟体验,让您保持工作流畅。

有关更多详细信息,请参阅UI 扩展文档

总结

在这篇博客文章中,我们介绍了新的 DuckDB UI,这是一个功能强大的 DuckDB Web 界面。

DuckDB UI 与 DuckDB 数据库共享许多设计原则。它简单、快速、功能丰富、便携,并在您的计算机上本地运行。DuckDB UI 扩展也是开源的:如果您想深入了解扩展代码,请访问 duckdb/duckdb-ui 仓库

该仓库不包含前端的源代码,目前尚未开源。将其开源正在考虑中。

如需帮助或分享反馈,请提交问题,或加入 DuckDB DiscordMotherDuck Community Slack 中的 #ui 频道。

祝您使用愉快!

更新 (2025-03-20)

我们很高兴看到社区对 DuckDB 本地 UI 发布公告的压倒性积极反响。在这个简短的更新中,我们想回应社区提出的一些问题

  • 关于前端代码的许可(HTML、JavaScript 等),MotherDuck 目前正在审查 UI 代码和资产的许可选项,并将尽快澄清。
  • 关于离线(“隔离”)操作,我们正在努力在未来版本中支持离线使用,目前正在探索如何在升级可用时提供版本通知。
  • 关于 UI 的客户端-服务器协议,我们将致力于开放客户端-服务器协议,以便其他用户界面可以使用 UI 扩展的“后端”部分来在 DuckDB 中运行查询。