DuckDB学习

DuckDB学习

一、什么是DuckDB

DuckDB 是一款高性能的嵌入式 SQL 数据库管理系统,专为在线分析处理(OLAP)设计。它以其轻量级、快速查询和易用性,成为数据分析领域的热门工具,被誉为"分析型的 SQLite"。

DuckDB 采用 列式存储向量化查询引擎 ,显著提升了数据分析查询的性能。它支持标准 SQL 语法,包括窗口函数、复杂数据类型(如数组、结构体)和嵌套查询。此外,DuckDB 是一个 单文件数据库,无需复杂配置,安装简单,适合快速部署。

DuckDB 与 PythonR 深度集成,支持与 pandas 和 dplyr 的无缝协作。同时,它兼容 Apache Arrow 和 Parquet 等现代数据格式,支持直接查询 CSV、Parquet 和 JSON 文件,无需额外加载步骤。

二、安装

bash 复制代码
pip install duckdb openpyxl

首次使用需要加载excel拓展(仅支持.xlsx后缀的excel文件 ,不支持.xls后缀)

python 复制代码
import duckdb

db = duckdb.connect()
db.sql("INSTALL excel; LOAD excel;")

没有研究到太深,学习的初衷是因为笔者在做数据分析的时候发现数据加载会较慢,而且使用pandas操作,其中涉及的函数较多,各类参数又有设置,所以想找一个简单快速的操作方式。

三、测试数据

试试.xlsx sheet页:测试表1

名字 年龄
名字1 21
名字2 22
名字3 23
名字4 24
名字5 25
名字6 26

试试1.xlsx sheet页:测试表2

名字 编号
名字1 211
名字2 212
名字3 213
名字4 214
名字5 215
名字6 216

三、读取excel

3.1 单个文件读取

python 复制代码
import duckdb
import pandas as pd

excel_path = r'试试.xlsx'
sheet_name = '测试表1'

# pandas读取指定sheet,A-F前100行
df_raw = pd.read_excel(
    excel_path,
    sheet_name=sheet_name,
    usecols="A:B",
    nrows=99
)

# 注册进duckdb内存表,后续随便写SQL分析
db = duckdb.connect()
db.register("excel_table", df_raw)

# 示例查询
df = db.sql("SELECT * FROM excel_table where 名字 = '名字1'").df()
print(df)

3.2 读取多个文件

shell 复制代码
import duckdb
import pandas as pd

excel_path = r'试试.xlsx'
excel_path1 = r'试试1.xlsx'
sheet_name = '测试表1'
sheet_name1 = '测试表2'

df_raw = pd.read_excel(
    excel_path,
    sheet_name=sheet_name,
    usecols="A:B",
    nrows=99
)

df_raw1 = pd.read_excel(
    excel_path1,
    sheet_name=sheet_name1,
    usecols="A:B",
    nrows=99
)

# 注册进duckdb内存表,后续随便写SQL分析
db = duckdb.connect()
db.register("excel_table", df_raw)
db.register("excel_table1", df_raw1)

# 示例查询
df = db.sql("""
SELECT t1.名字,t1.年龄,t2.编号 FROM excel_table t1
left join excel_table1 t2
on t1.名字 = t2.名字
 where t1.名字 = '名字1'
""").df()
print(df)

3.3 聚合

python 复制代码
import duckdb
import pandas as pd

excel_path = r'F:\2026.07\试试.xlsx'
sheet_name = '测试表1'

df_raw = pd.read_excel(
    excel_path,
    sheet_name=sheet_name,
    usecols="A:B",
    nrows=99
)


# 注册进duckdb内存表,后续随便写SQL分析
db = duckdb.connect()
db.register("excel_table", df_raw)

# 示例查询
df = db.sql("""
SELECT sum(t1.年龄) FROM excel_table t1
""").df()
print(df)
相关推荐
艾莉丝努力练剑8 分钟前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt
andrsted4 小时前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_949950634 小时前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
问天_观心8 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊8 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white8 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程8 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
lifallen9 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程
千谦阙听9 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
Agudamu116110 小时前
AI 视频学习笔记工具拆解:4款工具谁能把视频变成复习资料
人工智能·学习·音视频