Excel 卡死别硬扛:一行 SQL 查完百万行
- 2026-11-08 10:10:00

DuckDB 2.0 正式发布(LTS),零配置、纯本地,业务人员也能玩转大文件
这些痛苦,做业务的大概都经历过
如果你是做运营、财务、销售的,下面这些场景应该不陌生:
• 月底要把 30 个门店的 Excel 合并成一张表,复制粘贴到手软,还总串列;
• 销售明细一超过 20 万行,点开数据透视表就转圈,电脑风扇狂响;
• 用 VLOOKUP 对账,一拉公式满屏 #N/A,改到半夜;
• 想看看“每个品类卖得最好的前 10 个商品”,Excel 实在搞不定,只能放弃。
你大概知道两条出路:要么学 Python(但要装环境、啃 pandas,劝退),要么上 Excel 的 Power Pivot(但要装加载项、建数据模型、学 DAX——又是一道墙)。
今天给你第三条,比这两者都轻:DuckDB。不用装数据库,不用学 Python,会一点点“像说话一样的 SQL”,就能直接对你的 Excel / CSV 文件下命令,百万行数据秒出结果,电脑还不卡。
新版本 DuckDB 2.0(代号 Cinnamon Teal)于 2026 年 10 月 21 日发布,是长期支持版(LTS,官方维护到至少 2027 年 10 月)。下面以 2.0 为准,但本文讲的核心用法在旧版本一样能跑。
一、DuckDB 是什么:给 Excel 用户的“分析加速器”
DuckDB 是一个能直接查你文件的 SQL 工具。数据不用导进数据库,也不用起服务。
你可以把它理解成“装在电脑里的分析引擎”:
• 单文件、零配置,下载就能用;
• 直接读 Excel、CSV 文件,不用先导入;
• 只读取用到的列(列存),所以大文件也快;
• 边读边算,还能把临时结果写回磁盘,数据比内存大也不崩;
• MIT 开源、数据全程留在你自己的文件里,不传云端、不注册账号
你只管用 SQL 发指令,比如“按品类汇总销售额”,它就去文件里把结果算出来。
二、DuckDB 和 Power Pivot,你到底该用哪个?
你搜“Excel 百万行卡死”,十有八九会看到让你上 Power Pivot / Power Query 的教程——那确实能解决问题,但门槛不低。把两条路摆在一起,你就知道该用哪把刀:
| DuckDB(本文) | Power Pivot(Excel 内置) | |
|---|---|---|
结论:Power Pivot 适合“人坐在 Excel 里反复拖着看”;DuckDB 适合“数据在 CSV / 多个 Excel 里、要合并清洗汇总、算完导出交给别人,且你不想学 DAX”。两者不冲突——很多人的真实工作流是:DuckDB 把脏数据洗好、表合并好,再丢回 Excel 让同事用透视表看。
三、DuckDB 2.0 带来了什么
跟“业务分析”最相关的两点:
• 读文件更快(异步 I/O): 读 Excel / CSV 时边读边算,大文件更不容易卡。
• VARIANT 类型: 像 JSON 这种不规则的数据,也能按列高效存、快速查。
⚠️ 升级注意:2.0 生成的数据库文件旧版打不开,升级前先小范围试一遍。
四、DuckDB 和手机里的 SQLite 是啥关系
你可能听过 SQLite——手机 App 几乎都在用它存数据。它和 DuckDB 很像(都是单文件、零配置),但干的活不同:SQLite 擅长“记流水”(一行行增删改),DuckDB 擅长“做分析”(扫大表、分组汇总)。简单说,记流水用 SQLite,做分析用 DuckDB。两者还能配合:业务数据在 SQLite 里,DuckDB 直接连上去分析,不用导出。
五、DuckDB 怎么干你每天在 Excel 里干的活
下面每一个都是业务同学的高频动作。这些操作全部直接用 SQL 对原始文件完成,不需要把数据导进任何地方。
场景 0:直接查你的 Excel 文件(不用另存为 CSV)
这是 DuckDB 最爽的一点——.xlsx 直接就能查:
1 2 3 4 5 6 7 8 9 10 11 -- 看看表里有什么(LIMIT 10 表示只看前 10 行)SELECT * FROM '销售明细.xlsx' LIMIT 10;-- 指定读某个工作表SELECT * FROM read_xlsx('销售明细.xlsx', sheet = 'Sheet1');-- 直接对 Excel 做汇总,结果秒出SELECT 品类, SUM(金额) AS 总额FROM '销售明细.xlsx'GROUP BY 品类ORDER BY 总额 DESC; 小提示:首次读 Excel 时,DuckDB 可能会提示加载 excel 扩展,按提示执行 INSTALL excel; LOAD excel; 一次即可,之后就免打扰了。若你的版本不支持 read_xlsx,用 read_excel 亦可,具体函数以实际版本为准。
场景 1:做透视表(行列交叉汇总)
Excel 数据透视表的本质,是把某一列的不同值拆成列头,再对值做聚合。DuckDB 自带原生 PIVOT 语句,和透视表一一对应:
• ON = 要拆成列头的字段(对应透视表的“列”)
• USING = 怎么聚合(对应透视表的“值”)
• GROUP BY = 每行一条的字段(对应透视表的“行”)
1 2 3 4 5 -- 行=品类,列=年份,值=各品类每年的销售额合计PIVOT '销售明细.xlsx'ON 年份USING sum(金额)GROUP BY 品类; 跑出来就是一张“品类 × 年份”的销售额交叉表,和你在 Excel 里拖出来的透视表一样。不写 USING 时默认按 count(*) 计数;反过来还有 UNPIVOT,能把宽表一键变回长表。
场景 2:多表关联(VLOOKUP 的替代)
需求:订单表(有商品编码 sku、数量)要补上商品名称和单价。
1 2 3 4 SELECT o.订单号, p.商品名称, o.数量, p.单价, o.数量 * p.单价 AS 金额FROM '订单.xlsx' oLEFT JOIN '商品.xlsx' p ON o.sku = p.sku; 再也不用担心 VLOOKUP 拉错列、漏行。两个表直接对上,结果干净。
场景 3:合并几十个门店的表(复制粘贴的替代)
需求:目录下有 门店01.xlsx … 门店50.xlsx,列名还不完全一样,要合并后按门店汇总。
1 2 3 SELECT 门店, SUM(金额) AS 总额FROM read_excel('门店*.xlsx', union_by_name=true)GROUP BY 门店; union_by_name=true 的意思是“按列名自动对齐”——列顺序乱了、某些表缺几列都不怕,DuckDB 自己拼好。CSV 文件同理,把 read_excel 换成 read_csv_auto 即可。
场景 4:找出异常数据(条件筛选)
需求:找出金额超过“该品类平均金额 3 倍”的可疑订单。
1 2 3 4 SELECT * FROM ( SELECT *, AVG(金额) OVER (PARTITION BY 品类) AS 品类均值 FROM '订单.xlsx') WHERE 金额 > 3 * 品类均值; 这种“分组内比较”的逻辑,用 SQL 写特别直白,也方便以后复用、改条件。
场景 5:把结果写回 Excel
算完的结果,直接导成一张新表:
1 2 3 4 COPY ( SELECT 品类, SUM(金额) AS 总额 FROM '销售明细.xlsx' GROUP BY 品类) TO '汇总结果.xlsx' (FORMAT XLSX); 也能导成 Parquet(体积只有 Excel 的 1/3~1/5,下次打开秒开还不丢类型),适合留给下游继续用。
性能大概差多少
数据为特定测试环境下的量级参考,实际表现因文件结构和电脑配置而异。
六、适用边界:什么时候该回到 Excel / Power Pivot
讲完好处,必须说清边界,免得你拿锤子找钉子。DuckDB 不是 Excel 的替代品,下面这些情况,老老实实回 Excel / Power Pivot 更顺手:
• 要做可交互的动态仪表板给老板看(拖切片器、点一下换维度)→ 用 Power Pivot + 透视表;
• 要边看中间结果边画图、做特别细的逐行加工 → pandas + 图表库更灵活;
• 数据极大且要多人云端协作 → Power BI / 在线 BI 更合适;
• 文件小(几万行内)、偶尔算一次 → Excel 透视表就够,不必换工具。
DuckDB 的甜区很明确:一次性或定期报表、合并清洗汇总一堆文件、结果落回 Excel / Parquet 交给别人。它就是干这个最省事。
七、三分钟上手
方式一:装个软件,像用计算器一样用
1 2 3 4 5 # Mac 电脑brew install duckdb# Windows 电脑(官方一键安装脚本)powershell -NoExit -ExecutionPolicy Bypass -Command "irm https://install.duckdb.org/install.ps1 | iex" 装完在终端输入 duckdb,然后直接写:
1 SELECT 品类, SUM(金额) FROM '销售明细.xlsx' GROUP BY 品类; 不想敲命令行?两条更省事的路:
• 在 Excel 里直接写 SQL: 装 xlDuckDb 这类免费开源插件,把 DuckDB 塞进 Excel 加载项,单元格里就能跑 SQL(如 =DUCKDB.EXEC(...),还能直接引用 Excel 区域)。
• 用 DBX 数据库管理工具: 浏览/筛选数据,管理你常用的 SQL,还支持自动补全。
方式二:嵌到流程里(Python)
1 pip install duckdb 1 2 import duckdbduckdb.sql("SELECT 品类, SUM(金额) FROM '销售明细.xlsx' GROUP BY 品类").df() 结语:本地优先,才是业务人员真正的安全感
Excel 是我们最熟悉的工具,但它天生不适合“大文件的分析”。过去要解决这个问题,要么忍(手工硬扛),要么学 Python、要么啃 Power Pivot——每一条都有门槛。
DuckDB 给了一种更轻的选择:会一点 SQL,就能直接对文件做专业级分析,免费、轻量、不卡电脑。而且它是开源的、数据全程留在你自己的文件里——不传云端、不绑账号、不依赖某家公司的订阅,这正是“本地优先”最实在的好处:你的数据,始终在你手里。
下次 Excel 再卡死的时候,别急着复制粘贴了——试试 DuckDB,把省下来的时间用来喝杯咖啡。
参考:DuckDB 2.0 官方发布公告(2026-10-21)。