DuckDB 实战笔记 - 2026-08-29
💸 别再手动对账了!5 行 SQL 自动揪出「消费刺客」
月底对账像破案?信用卡、微信、支付宝三份账单格式各异,Excel 合并到崩溃。今天用 DuckDB 直接读取 CSV 目录,一条 SQL 完成清洗+分类+异常检测。
场景:小张有 3 个 CSV(支付宝/微信/信用卡),字段名不同(金额 vs 交易额)。他想知道:哪笔钱花得最冤?
import duckdb
# 自动识别目录下所有 CSV,文件名作为来源表
duckdb.sql("""
INSTALL httpfs; LOAD httpfs;
-- 假设文件在本地 /data 目录
CREATE TABLE raw AS
SELECT * FROM read_csv_auto('/data/*.csv',
filename=true,
header=true,
union_by_name=true); -- 自动对齐不同列名
-- 统一字段 + 智能分类 + 异常标记(单笔超均值3倍)
CREATE TABLE clean AS
SELECT
filename AS source,
COALESCE(金额, 交易额, amount) AS amount,
COALESCE(商品说明, 商品名称, description) AS item,
CASE
WHEN item ILIKE '%外卖%' OR item ILIKE '%餐饮%' THEN '餐饮'
WHEN item ILIKE '%滴滴%' OR item ILIKE '%地铁%' THEN '交通'
ELSE '其他' END AS category,
amount > 3 * (SELECT avg(amount) FROM raw) AS is_anomaly
FROM raw;
-- 直接输出「冤枉钱」排行
SELECT item, amount, source
FROM clean
WHERE is_anomaly
ORDER BY amount DESC
LIMIT 5;
""")
核心价值:
union_by_name=true自动合并异构 CSV,省去 pandas 字段映射- 全程无 Python 循环,DuckDB 列式引擎处理百万行秒级完成
- 一条 SQL 完成从文件扫描到异常检测,比 Excel 透视表灵活 10 倍
升级思路:把 /data/.csv 换成 s3://bucket/.csv,立刻变成云端账单分析器。配合 COPY clean TO ‘report.parquet’ 直接导出给 BI 工具。
今晚就用它给上个月的账单「体检」一遍。