直接在WPS启动DUCKDB SQL查询,还能合表拆表!

受社区帖子:【Excel插件推荐】xlDuckDb:在 Excel 中运行 DuckDB SQL语句启发,通过AI扒了xlDuckDb的底层代码,通过Codex写了个WPS的辅助书写SQL代码的插件。相关介绍如下:

一、DuckDB 的特点与优势

1.架构与定位:嵌入式单机分析引擎

DuckDB 的核心定位是“in-process(嵌入式)SQL 分析型(OLAP)数据库”:不需要单独部署数据库服务进程,而是嵌入宿主进程运行,减少进程间通信成本并便于与宿主应用(如 Excel、Python/R)交换数据。

这种架构直接带来几类优势:

易部署/易分发:无需维护 DB Server;可在多平台运行并提供多语言 API(Java/C/C++/Go/Node 等)。

“外部数据就地分析”友好:部分场景可在不复制数据的情况下处理外部数据(官方举例 Python 与 Pandas 的无拷贝/少拷贝交互)。

2.性能与并行:列式存储 + 向量化执行

DuckDB 官方强调其构建在快速列式(columnar)存储引擎之上,并支持工作负载超出内存时的磁盘溢写(out-of-core/spilling)。

在执行层面,DuckDB 采用向量化(vectorized)执行模型:算子以固定大小的向量(默认 STANDARD_VECTOR_SIZE=2048 tuples)为处理单位,通过 DataChunk 在算子树中推送(push-based)流动。

DuckDB 会并行处理,并自动做谓词下推(filters pushed down)与列裁剪(只读相关列)。可通过配置项设置并行线程数,如 SET threads = 4。

3.数据库模式:内存模式与持久化模式

DuckDB “连接时”就决定数据库是内存还是持久化:

持久化模式(persistent mode):连接时传数据库文件路径;文件不存在时会按需创建并打开。

内存模式(in-memory mode):传 :memory: 或省略文件参数;进程结束数据不保留。

持久化与内存数据库都可能溢写到磁盘以支持超内存工作负载;因此“内存模式=绝不触盘”并不成立(会有临时目录/溢写行为)。

4.多外部文件支持:直接查询、多文件、并行

DuckDB 支持在 SQL 中直接把 Parquet 当作表来查询,包括:

单文件:SELECT * FROM read_parquet('input.parquet');

glob 多文件:SELECT * FROM 'test/*.parquet'; 或 read_parquet('dir/**/*.parquet')

多路径列表:read_parquet(['folder1/*.parquet','folder2/*.parquet'])

远程 HTTPS:read_parquet('https://some.url/some_file.parquet')

这类能力的关键意义是:很多分析任务可以“无需导入/建表”就对数据湖文件做交互式 SQL 分析,在 Excel 这种“结果展示”型工具里尤为直观。

5.SQL 兼容性与生态接口:靠近 PostgreSQL 语法

DuckDB 官方明确:其 SQL 方言紧密遵循 PostgreSQL 语法约定,并列出少数差异点;另外提供“Friendly SQL”特性(如 CREATE OR REPLACE TABLE、CTAS 等)以提高数据分析脚本可读性。

二、xlDuckDb 实现原理

1.Excel-DNA UDF + DuckDB.NET(同进程执行)

xlDuckDb 通过 Excel-DNA 把一个用户自定义函数注册进 Excel:DuckDbQuery(SQL, Database File, [Excel Ranges...]),并在 Excel 进程内创建 DuckDB 连接执行 SQL,把结果作为二维数组(动态溢出)回填到工作表。其底层主要依赖于 ExcelDNA 和 DuckDB.NET 两个开源项目来实现集成:

1.ExcelDNA:这是一个用于将 .NET 代码集成为 Excel 加载项(即 .xll 文件)的开源库。通过它,开发者编写的 C# 代码可以被打包成 Excel 能直接识别的插件,从而在 Excel 中自动注册 DuckDbQuery 自定义函数,并实现与 Excel 动态数组的交互。

2.DuckDB.NET:这是 DuckDB 官方或社区提供的 .NET 绑定接口。当你在 Excel 单元格中输入 =DuckDbQuery() 并传入 SQL 语句时,.xll 插件内部的 C# 代码会通过 DuckDB.NET 将这些 SQL 指令发送给 DuckDB 的底层核心引擎去执行。

2.具体调用流程

1.当你将 Excel 的数据区域作为参数传给函数,并在 SQL 中写入 xlRange 时,插件内部会替换并抓取这些 Excel 数据,通过接口传递给 DuckDB。

2.读取外部的 Parquet 文件、处理本地的 Excel 数据或执行 SQL 运算)后,结果再通过 DuckDB.NET 返回给插件的 C# 运行环境。

3.最后,借助 ExcelDNA 的能力,这些结果被渲染回 Excel 中,以常规单元格(动态数组)的形式展示给你。

3.环境依赖

正因为它是基于 .NET 架构进行封装和调用的,所以在使用较高版本(v0.6.0 及以上)的 xlDuckDb 时,系统必须安装 .Net 8.0 或更高版本的运行时(Runtime)才能正常驱动这个 .xll 文件。

三、DuckDbQuery 函数用法

参数位置

Excel 参数名(说明)

类型(.NET/Excel)

是否可省略

核心语义与注意点

1

SQL

string

要执行的 SQL。空字符串会抛异常并由全局异常处理显示 #ERR - ...。

2

Database File

string

可留空(传空字符串)

为空则使用 :memory:;非空则作为数据库文件路径(也可在其后拼接 ;key=value 形式的连接/配置参数)。

3..n

Excel Ranges

params object[](允许 Range 引用)

可选

Range 会被转换成地址字符串,并在 SQL 包含 xlRange 时注册表函数与替换占位符;可传多个范围并用 xlRange[1].. 引用。

第一参数:SQL代码,用英文状态的双引号""进行包裹。

第二参数:持久化数据库文件,为空则使用内存模式,非空则需要设置数据库文件路径。

第三和第N参数:从第三参数开始可以选择不同的表格区域,这些区域包含在xlRange中,索引编号从1开始。例如,我要取出第一个区域,则在SQL代码的FROM后面加xlRange[1]

四、SQL Lab用法介绍

1.开发初衷

直接在Excel写SQL代码,约等于直接手搓代码的古法编程,既不方便也极其出错,而且排错流程也较为繁琐。

2.界面与功能介绍

图标

图标采用Gemini设计,风格与理念如下:

主界面

SQL Lab以侧边栏的形式出现在Excel中,包含SQL Editor库路径Excel区域3个编辑区域,分别对应DuckDbQuery函数的第1、2、3...n个参数。

备注:打开插件后,插件会自动把核心文件与github上的最新版进行比对,如果是最新版则无需更新,如果不是最新可以可以通过更新按钮一键下载安装更新。

SQL Editor

这里是书写SQL代码的地方,也是插件主要核心功能,它可以辅助SQL代码的书写,根据输入单词进行联想:

保存检查检查如果发现语法错误会进行相应提示:

设置

设置里面包含3个标签,分别包含AI设置、翻译设置、自定义关键词三个标签。

AI设置

这里用以提供AI助手功能实现所需要的API KEY,在这里可以设置、切换、新增、删除不同的模型,保存模型对话请求所需要的API KEY。

翻译设置

在Excel版插件中,当SQL语句通过DuckDbQuery函数返回以#ERR开头的错误时,这个错误如果命中本地规则库则直接返回对应提示;如果未命中则优先调用TRANSLATE进行翻译;当TRANSLATE函数不存在或翻译失败时,调用这里的翻译API进行翻译。而对于WPS,它没有内置的免费翻译函数可用,所以在未命中本地规则库的情况下就直接走了调用翻译API的路径。

自定义关键词

插件内置DUCKDB官方的关键词和函数,但不包含来自扩展的关键词或函数,如果安装了来自社区的DUCKDB拓展库,对应的函数就无法通过联想功能来辅助书写。在这种情况下,我们可以手工维护这里的关键词和函数来实现自定义联想的效果。

AI助手

借助设置中的AI设置里面提供的API,自动向AI提供错误详情的上下文,不必人工复述,直接咨询你的疑问即可。

2.插件特点

1.实现xlDuckDb插件的一键安装,不必进行依赖环境配置和加载项设置,安装后如果检测到新版本,支持一键拉取安装,然后重启Excel就可以更新。

2.SQL语句编辑框支持DUCKDB关键词与函数的联想与高亮,方便快速书写代码。如果安装社区拓展,也支持自定义函数和关键词参与联想。

3.SQL代码报错时,优先从代码返回结果给出中文提示和修复建议。如果还是不能解决,可以通过与AI对话,智能获取建议,建议结果支持一键回写单元格进行验证。

四、下载链接与介绍

1.各版本的异同

程序名称

适用软件

版本

说明

备注

DDuckSheet-Setup.exe

Excel

完整版

包含插件所必须的环境依赖

机器上安装过一次完整版之后就可以直接安装瘦身版即可,或者直接安装瘦身版再按照提示去微软官网下载

DDuckSheet-Setup-Slim.exe

瘦身版

不包含插件所必须的环境依赖

DDuckSheet-WPS-Setup.exe

WPS

完整版

包含插件所必须的环境依赖

DDuckSheet-WPS-Setup-Slim.exe

瘦身版

不包含插件所必须的环境依赖

2.下载链接

https://www.kdocs.cn/folder/cc07FasHLSXX

3.视频讲解

插件更多使用细节可以移步视频:直接在Excel/WPS里启动闪电般的DUCKDB SQL查询,还能合表拆表!

PS:wps中菜单栏的插件貌似无法启用透明通道的png图片,有知道怎么处理的大佬麻烦指点一下下!

广东省
浏览 117
2
8
分享
8 +1
4
2 +1
全部评论 4
 
夏天
感谢大佬
·
回复
 
李解Excel
牛批牛批,官方集成duckdb是指望不上了,各位大佬发力
·
回复
 
快乐小子新
厉害了,兄弟
·
回复
 
-29368067
谢谢
·
回复