直接在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图片,有知道怎么处理的大佬麻烦指点一下下!
