首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Excel植入DuckDB,小宇宙爆发

Excel植入DuckDB,小宇宙爆发

作者头像
用户4035096
发布2026-07-09 18:07:31
发布2026-07-09 18:07:31
70
举报

Excel工程师直呼过瘾 | DuckDB太帅了

个人认为数据分析就2步, 获取数据, 分析数据.

获取数据之前, 首先要看数据在哪, 通常可能在数据库产品里、也可能是本地文件、也可能是对象存储中的文件.

文件格式可能有excel、csv、txt、parquet等等.

就以上这些, 感觉需要一款专业的付费应用来支撑.

然后是分析数据, 分析通常需要对数据进行清洗、转换、处理, 然后是展示. 感觉又是一堆的功能, 也需要一款专业的付费应用来支撑.

今天在DuckDB中文社区群看到高手了, 感叹民间高手多啊. 看到群里的讨论, 简直帅哭了.

Excel通过ODBC直接调用DuckDB, 通过DuckDB可以完成数据的获取、处理、转换、统计等等一系列数据分析动作. 这些对DuckDB来讲易如反掌, 而且DuckDB又不用安装启动, 爽翻了!

通过Excel则可对最终数据进行展示. (当然Excel本身还具备数据处理的能力, 如有必要也可以在最终数据展示之前进行使用.)

当然了, DuckDB的野心不止出数据获取和处理, 它可能会把UI也弄进来. 如下文所示:

  • 《DuckDB UI 开启乔布斯时刻: An Analyzer, A Brain, A Portal》

下面简单给个Demo, 在excel中如何使用DuckDB.

Excel + DuckDB

我使用macOS进行演示.

首先安装ODBC驱动, 参考:

https://duckdb.org/docs/stable/clients/odbc/macos.html

安装unixODBC

代码语言:javascript
复制
brew install unixodbc  

验证安装是否正确:

代码语言:javascript
复制
$ odbcinst -j  
unixODBC 2.3.12  
DRIVERS............: /opt/homebrew/etc/odbcinst.ini  
SYSTEM DATA SOURCES: /opt/homebrew/etc/odbc.ini  
FILE DATA SOURCES..: /opt/homebrew/etc/ODBCDataSources  
USER DATA SOURCES..: /Users/digoal/.odbc.ini  
SQLULEN Size.......: 8  
SQLLEN Size........: 8  
SQLSETPOSIROW Size.: 8  

编译DuckDB odbc driver

代码语言:javascript
复制
git clone --depth 1 https://github.com/duckdb/duckdb-odbc 

cd duckdb-odbc 
make -j 4

$ pwd
/Users/digoal/Downloads  

$ ll /Users/digoal/duckdb-odbc/build/release
total 97640
drwxr-xr-x   3 digoal  staff    96B Jun 20 15:26 ..
-rw-r--r--   1 digoal  staff    15K Jun 20 15:26 CMakeCache.txt
-rw-r--r--   1 digoal  staff   1.7K Jun 20 15:26 cmake_install.cmake
-rw-r--r--   1 digoal  staff   541K Jun 20 15:26 Makefile
drwxr-xr-x   9 digoal  staff   288B Jun 20 15:26 src
drwxr-xr-x   9 digoal  staff   288B Jun 20 15:30 .
-rwxr-xr-x   1 digoal  staff    47M Jun 20 15:30 libduckdb_odbc.dylib    # 这个文件就是duckdb odbc driver
drwxr-xr-x   7 digoal  staff   224B Jun 20 15:30 test
drwxr-xr-x  13 digoal  staff   416B Jun 20 15:30 CMakeFiles

配置ODBC, 参考:

https://duckdb.org/docs/stable/clients/odbc/configuration.html

编辑/opt/homebrew/etc/odbc.ini文件

代码语言:javascript
复制
vi /opt/homebrew/etc/odbc.ini  
  
[DuckDB]  
Driver = DuckDB Driver  
Database = :memory:  
access_mode = read_write  

编辑/opt/homebrew/etc/odbcinst.ini文件

代码语言:javascript
复制
vi /opt/homebrew/etc/odbcinst.ini  
  
[ODBC]  
Trace = yes  
TraceFile = /tmp/odbctrace  
  
[DuckDB Driver]
Description = DuckDB ODBC Driver
Driver = /Users/digoal/duckdb-odbc/build/release/libduckdb_odbc.dylib
UsageCount = 1

测试

代码语言:javascript
复制
isql -v DuckDB  

有问题可查看日志

代码语言:javascript
复制
/tmp/odbctrace  

需要配置DYLD_LIBRARY_PATH环境变量(或者把libduckdb_odbc.dylib拷贝到/usr/local/lib目录, 使用这个目录中的dylib没有file not found问题), 否则找不到该libduckdb_odbc.dylib文件.

代码语言:javascript
复制
$ isql -v DuckDB  
[01000][unixODBC][Driver Manager]Can't open lib '/Users/digoal/duckdb-odbc/build/release/libduckdb_odbc.dylib' : file not found  
[ISQL]ERROR: Could not SQLConnect

$ otool -L /Users/digoal/duckdb-odbc/build/release/libduckdb_odbc.dylib 
/Users/digoal/duckdb-odbc/build/release/libduckdb_odbc.dylib:
 @rpath/libduckdb_odbc.dylib (compatibility version 0.0.0, current version 0.0.0)
 /opt/homebrew/opt/unixodbc/lib/libodbcinst.2.dylib (compatibility version 3.0.0, current version 3.0.0)
 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1500.65.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1319.100.3)

可能是这个 @rpath 的问题.   

$ export DYLD_LIBRARY_PATH=/Users/digoal/duckdb-odbc/build/release:$DYLD_LIBRARY_PATH
   
$ isql -v DuckDB  
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> create table test (id int);
SQLRowCount returns -1
SQL> insert into test values (1);
SQLRowCount returns 1
SQL> select * from test;
+------------+
| id         |
+------------+
| 1          |
+------------+
SQLRowCount returns -1
1 rows fetched
SQL> insert into test select * from range(1,1000000) as t(id);
SQLRowCount returns 1
SQL> select count(*) from test;
+---------------------+
| count_star()        |
+---------------------+
| 1000000             |
+---------------------+
SQLRowCount returns -1
1 rows fetched

如果ODBC配置完成后, 应该可以在excel中使用odbc通过DuckDB请求任意位置的数据.

截取了群里网友发来的截图如下, 大家参考一二

微软excel工程师发威

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Excel工程师直呼过瘾 | DuckDB太帅了
  • Excel + DuckDB
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档