
为什么你需要一个 DuckDB 服务封装层
很多数据分析师学了一堆 DuckDB 优化技巧:EXPLAIN 看执行计划、只读需要的列、批量写入、设置 threads 和 memory_limit……但真正上项目的时候,这些知识是散落的。每次新需求都要重新手写一遍配置,容易遗漏,也容易在不同项目中行为不一致。
今天这篇,我把频道昨晚分享的优化技巧整合成一个可直接复用的 Python 类,让你每次调用 DuckDB 时自动应用最佳实践。
架构设计:三层分离
┌─────────────────────────────────────┐
│ 业务查询层 │
│ optimized_aggregation(query) │
│ fast_scan(table, columns) │
├─────────────────────────────────────┤
│ 优化管理层 │
│ _setup_optimizations() │
│ _apply_column_pruning() │
│ _batch_writer() │
├─────────────────────────────────────┤
│ DuckDB 连接层 │
│ con = duckdb.ATTACH (db_path) │
│ SET threads/memory_limit │
└─────────────────────────────────────┘
核心思路:把优化逻辑内化到类初始化中,业务代码不需要关心底层细节。
一、基础骨架:连接与资源隔离
import duckdb
import time
from pathlib import Path
from typing import Optional, List
import pandas as pd
class DuckDBService:
"""