返回

JetBrains 在 DataGrip 中借助 DuckDB 实现跨库查询

RSS DuckDB Engineering Blog AI 逐段翻译 发布 2026-11-05 08:00 收录于 11-15

有效阅读仅保存在当前浏览器,用于「为你」推荐;暂停或清除记录。

DataHot 速览

JetBrains 的数据库 IDE DataGrip 长期被用户要求支持在单条查询中跨不同数据库连接做 join。团队评估了 Apache Calcite、自研 PSI 方案和 DuckDB,最终因集成成本最低而嵌入 DuckDB,并通过其自定义表函数把 DuckDB 接入 DataGrip 既有的查询执行链路,同时直接向开发者暴露 DuckDB 的 SQL 方言。官方称 DuckDB 比 H2 等更轻量的方案更受青睐。

为什么值得关注:这是一次少见的跨库查询引擎选型第一方复盘:它说明分析型嵌入式引擎正被 IDE 这类数据工具当作联邦查询的底座,对做数据集成、查询层和 Data Agent 工具链的团队有直接参考价值。

本文目录 6 节
  1. JetBrains 如何借助 DuckDB 在 DataGrip 中构建跨数据库查询
  2. 跨数据源查询
  3. 选择 DuckDB 而非自建
  4. 明面上的 DuckDB
  5. 初版方案,仍在演进
  6. 关于 JetBrains 和 DataGrip

译文

AI 逐段翻译

JetBrains 如何借助 DuckDB 在 DataGrip 中构建跨数据库查询

2026-11-05 4 分钟阅读

Ilia Epelbaum

Geertjan Wielenga

Tim Cox

TL;DR:JetBrains 用户长期以来一直希望能在单条查询中跨不同的数据库连接关联数据。JetBrains 没有构建自己的跨数据库查询引擎,而是在 DataGrip 中嵌入了 DuckDB,利用 DuckDB 的自定义表函数将其连接到 IDE 现有的查询执行机制。这就是 DuckDB 为何胜过其他备选方案的原因,也说明了该集成下一步的发展方向。

当JetBrains着手让开发者在单条查询中跨不同的数据库连接关联数据时,它选择不构建自己的跨数据库查询引擎。取而代之的是,DataGrip——其数据库 IDE——内嵌了 DuckDB 来执行这些查询,并直接向编写查询的开发者暴露 DuckDB 的 SQL 方言。

引用 事实证明,DuckDB 是最简单的集成方案。

跨数据源查询

DataGrip 是 JetBrains 用于处理数据库和编写 SQL 的 IDE,自 2015 年起开发。同样的数据库功能也以插件形式在其他 JetBrains IDE 中提供,因此该功能的影响范围远远超出 DataGrip 本身。

很长一段时间以来,用户一直特别渴望一件事:能够在多个数据源上运行单条查询。最常见的请求是在一条查询中关联来自不同数据库连接的数据。DataGrip 已经能够针对每个连接执行查询,但没有任何机制将结果串联起来,因此团队需要一个能够做到这一点的引擎。

选择 DuckDB 而非自建

JetBrains 探索了多种方案。它考虑过Apache Calcite、使用PSI(Program Structure Interface,JetBrains 在其各 IDE 中使用的内部代码表示形式)自行处理查询,以及 DuckDB。

DuckDB 在集成便捷性上胜出。“事实证明,DuckDB 是最简单的集成方案,”就职于 DataGrip 团队的 Ilia Epelbaum 说道。决定性功能是能够注册自定义表函数:这为 JetBrains 提供了一种直接的方式,将 DuckDB 连接到 DataGrip 已有的查询执行功能。相比H2等更轻量的备选方案,DuckDB 也更受青睐,因为它带来了更多能力,包括投影下推等查询优化。

JetBrains 数据库生态负责人 Maxim Sobolevskiy 用具体的方式描述了这一成果。“借助 DuckDB 及其对自定义表函数的支持,跨数据库查询终于在 DataGrip 中变得切实可行,”他说。“用户可以在一条查询中关联来自 PostgreSQL、MySQL、MongoDB 或任何其他受支持数据库的数据,而无需搭建额外的基础设施。”团队评估过的嵌入式备选方案无法做到这一点,因为“扩展它们要么需要原生代码,要么需要复杂的实现。”

Epelbaum 加入这个项目时对这一领域已有了解。在转入数据库工具领域之前,他曾是一名从事Trino相关工作的数据库开发者,并且已经知道 DuckDB 有多么灵活。这一背景也是团队选择它而非自行编写和维护跨数据库查询引擎的部分原因。

明面上的 DuckDB

开发者知道 DuckDB 的存在。由于跨源关联通过 DuckDB 表函数运行,查询本身是用 DuckDB 的 SQL 方言编写的,DataGrip 会告知开发者这一点。“我们会高亮提示这是 DuckDB,”Epelbaum 说道,这样编写跨连接关联的人就知道他们写的是一条 DuckDB 查询。

JetBrains 更进一步,将 DuckDB 作为一门独立的一等方言来支持,而不仅仅是作为跨源关联背后的引擎。Epelbaum 为 DuckDB 贡献了语法高亮,包括DuckDB 2.0中引入的语法。

初版方案,仍在演进

这仍然是第一个版本。“我们构建了初始方案,想看看用户在实践中会如何使用它,”Epelbaum 说道。只有在此之后,团队才计划叠加更多 DuckDB 的优化。

路线图上有两个方向。第一是更充分地利用 DuckDB 的查询优化。第二是让 DuckDB 用于基于文件的数据源,像它已经能跨连接读取那样读取文件。Epelbaum 还特别提到了 DuckDB 的友好 SQL,称这是团队在日常使用中看重的特性。

目前,DuckDB 处于一项 JetBrains 用户多年期盼的功能的核心位置,让他们能够跨数据库进行关联,而无需 JetBrains 为此转型成为查询引擎供应商。

关于 JetBrains 和 DataGrip

JetBrains 构建专业开发者工具,包括 IntelliJ IDEA、PyCharm 和 Kotlin 语言,二十多年来服务了数百万程序员。DataGrip是其数据库 IDE,帮助开发者和数据工程师在单一环境中查询、探索和管理多个数据库。

这篇内容对你有用吗?

反馈只用于改善内容筛选,不等同于收藏

分享这条资讯
分享海报
保存图片
iOS 也可以长按图片保存