pip install duckdb 即可)
时间 | 里程碑 |
|---|---|
2018年 | 由 Mark Raasveldt 和 Hannes Mühleisen 在荷兰数学与计算机科学中心(CWI)启动开发 |
2019年 | 首次公开发布 |
2021年7月 | 创始人成立商业公司 DuckDB Labs,提供企业级支持 |
2024年6月 | 发布首个官方"稳定版"(项目实际已迭代5年) |
2025年 | 1.4.0 LTS(长期支持版)发布,新增:• 数据库加密• |
场景 | 优势 |
|---|---|
大数据分析 | 比Pandas快10-100倍(列式存储+向量化执行) |
ETL管道 | 直接查询原始文件,避免中间转换步骤 |
Jupyter Notebook | 用SQL替代复杂Pandas链式操作,代码更易读 |
资源受限环境 | 单文件部署,无服务器依赖,适合边缘计算 |
AI/ML预处理 | 高效特征工程,支持窗口函数、聚合等 |
import duckdb# 创建内存数据库连接con = duckdb.connect(database=':memory:')# 直接执行SQL(自动创建表)con.execute("""CREATE TABLE sales (product VARCHAR,amount DECIMAL(10,2),date DATE)""")# 插入数据con.execute("INSERT INTO sales VALUES ('Laptop', 1200.50, '2025-01-15')")con.execute("INSERT INTO sales VALUES ('Mouse', 25.99, '2025-01-16')")# 查询并转为Pandas DataFramedf = con.execute("""SELECT product, amountFROM salesWHERE amount > 100""").fetchdf()print(df)# product amount# 0 Laptop 1200.50
import pandas as pdimport duckdb# 创建Pandas DataFramedf = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],'age': [25, 30, 35],'salary': [50000, 60000, 75000]})# 将DataFrame注册为DuckDB虚拟表con = duckdb.connect()con.register('employees', df)# 用SQL分析Pandas数据high_earners = con.sql("""SELECT name, salaryFROM employeesWHERE salary > 60000""").df()print(high_earners)# name salary# 0 Charlie 75000
import duckdb# 查询JSON文件并使用窗口函数result = duckdb.sql("""WITH user_events AS (SELECTuser_id,event_type,event_time,ROW_NUMBER() OVER (PARTITION BY user_idORDER BY event_time DESC) as rnFROM read_json_auto('events.json'))SELECT user_id, event_type, event_timeFROM user_eventsWHERE rn = 1 -- 每个用户的最新事件""").show() # 直接在终端显示表格
ROW_NUMBER()合集 | 文章 |
|---|---|