DuckDB 实战笔记 - 2026-09-02

📦 别再写 200 行 Pandas 拼接代码了,3 个函数搞定多文件 ETL

业务场景:你每天从 5 个业务库导出 CSV(销售、库存、用户、订单、退款),文件名带日期。老板要一份汇总大宽表,且每天自动更新。以前你写 for 循环 + concat,字段名对不上就报错,改到怀疑人生。

用 DuckDB 的 read_csv_auto + glob,3 步走:

import duckdb

# 1. 建库(文件不存在会自动创建)
con = duckdb.connect('etl.duckdb')

# 2. 多文件读取 + 清洗 + 合并(自动推断 schema,字段不一致也能容错)
con.execute("""
    CREATE OR REPLACE TABLE sales_agg AS
    SELECT 
        filename,
        region,
        SUM(amount) AS total_amount,
        COUNT(*) AS order_cnt
    FROM read_csv_auto('data/sales_*.csv', 
                       header=true, 
                       filename=true,
                       sample_size=-1)
    WHERE amount > 0  -- 清洗脏数据
    GROUP BY 1, 2
""")

# 3. 直接输出为 Parquet(压缩 10 倍,下游直接查)
con.execute("COPY sales_agg TO 'output/sales_agg.parquet' (FORMAT PARQUET)")
con.close()

核心价值:

  • 零依赖:一个 Python 文件 + DuckDB,不需要 Spark 或 Airflow
  • 自动识别类型read_csv_auto 自动处理日期/数字/字符串,不用手动指定 dtype
  • 增量更新:用 INSERT OR REPLACE 配合文件名过滤,只处理新文件
  • 性能碾压:处理 1GB 多文件,DuckDB 比 Pandas 快 5-10 倍,内存占用低 90%

进阶技巧:想要按天增量?加一个 WHERE filename >= ‘2026-09-01’ 即可,DuckDB 会下推过滤,只读新文件。

#DuckDB #ETL #数据管道 #效率工具

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计

⚠️ 本站为独立社区项目,与 DuckDB 基金会及 DuckDB 官方项目无任何从属、背书或赞助关系。

"DuckDB" 是 DuckDB 基金会的注册商标,本站仅以事实描述方式使用该名称。

本站内容仅供教育与社区推广用途,不构成任何商业服务。