找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1561

积分

0

好友

231

主题
发表于 4 天前 | 查看: 18| 回复: 0

在本地进行数据分析时,你是否经常遇到超大CSV文件导致Excel直接卡死崩溃,或是使用Pandas读取大型数据集时遭遇内存不足的窘境?有时为了临时的分析任务去搭建MySQL、PostgreSQL这类完整的数据库/中间件服务,又显得过于繁重。

最近,一款在GitHub上流行的嵌入式分析数据库——DuckDB,为解决此类问题提供了出色的方案。它专为快速SQL分析、数据探索及嵌入式数据处理而设计,兼具轻量与高性能。

DuckDB Logo

项目简介

DuckDB 是一款开源的内嵌式列式关系型数据库管理系统(RDBMS),其设计核心聚焦于在线分析处理(OLAP)与复杂查询的高速执行。与需要独立服务进程的MySQL或PostgreSQL不同,DuckDB可直接嵌入到你的应用程序进程或Python等语言环境中运行。它提供了强大的SQL支持,并能够直接读取多种格式的数据文件,无需预先导入。

DuckDB 架构示意图性能对比图

该项目在GitHub上已获得超过34.7k的Star,拥有活跃的社区和日益完善的生态,成为数据分析开发者青睐的工具。

GitHub Star 趋势图

核心功能特性

  • 轻量嵌入式:无需独立的服务器进程,像SQLite一样直接嵌入应用,但专门为分析场景优化。
  • 高性能分析:采用列式存储与向量化查询引擎,在聚合、过滤、扫描等分析型查询上表现卓越。
  • 完整SQL支持:支持子查询、窗口函数、复杂数据类型等高级SQL功能,媲美专业分析工具。
  • 多格式直接查询:可直接通过SQL语句查询CSV、Parquet、JSON等格式的文件,省去繁琐的ETL步骤。
  • 多语言生态:原生支持Python、R、Java、Node.js、WASM等,并能与pandas、Apache Arrow等库深度集成。
  • 可扩展架构:支持通过扩展插件来增强功能,例如添加地理空间数据处理或支持更多文件格式。

功能特性图示

快速安装与使用

DuckDB支持跨平台及多语言环境的快速安装。

安装方式

命令行安装 (CLI):

# macOS 系统
brew install duckdb

# Ubuntu/Debian 系统
sudo apt-get install duckdb

# 通用脚本安装
curl https://install.duckdb.org | sh

Python 环境安装:

pip install duckdb

此外,也提供了针对R、Java、Node.js及WASM的安装方式,具体可查阅官方文档。

基础使用示例

1. 命令行交互模式
启动DuckDB CLI:

duckdb

执行SQL操作:

CREATE TABLE users (id INTEGER, name VARCHAR);
INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM users;

2. 在Python中直接分析CSV/Parquet文件

import duckdb

# 直接查询CSV文件
result = duckdb.sql("SELECT COUNT(*) FROM 'data.csv' WHERE age > 30").fetchall()
print(result)

# 直接查询Parquet文件
duckdb.sql("SELECT * FROM 'data.parquet' WHERE revenue > 10000").show()

无需预先将数据导入数据库,即可进行查询。

3. 与Pandas DataFrame无缝协作

import duckdb
import pandas as pd

df = pd.read_csv("sales.csv")
# 使用SQL查询DataFrame
res = duckdb.sql("SELECT region, SUM(amount) AS total FROM df GROUP BY region").df()
print(res)

Web Shell 在线体验

DuckDB官方提供了一个非常实用的Web Shell在线演示环境,无需任何安装与配置,打开浏览器即可体验其完整能力。

DuckDB Web Shell界面

进入Web Shell后,会看到连接提示:

Connected to a local transient in-memory database.

这表示你已连接到一个本地临时内存数据库,非常适合快速分析与实验。

以下是一个演示案例,DuckDB可以直接将远程Parquet文件创建为表:

CREATE TABLE stations AS FROM 'https://blobs.duckdb.org/stations.parquet';
CREATE TABLE distances AS FROM 'https://blobs.duckdb.org/distances.parquet';

表创建完成后,即可执行复杂查询。例如,查找同一国家内距离最长的3条国内铁路线路

SELECT
  s1.name_short,
  s2.name_short,
  d.distance
FROM distances d
JOIN stations s1 ON d.station1 = s1.code
JOIN stations s2 ON d.station2 = s2.code
WHERE s1.country = s2.country
  AND s1.code < s2.code
ORDER BY distance DESC
LIMIT 3;

此查询包含了多表JOIN、条件过滤、排序和结果条数限制。执行后,DuckDB会迅速返回结果:

name_short name_short distance
Eemshaven Vlissingen 426
Eemshaven Souburg 425
Nieuweschans Vlissingen 425

总结

DuckDB是一款定位清晰的嵌入式OLAP数据库。它并非旨在替代PostgreSQL、MySQL这类通用事务型数据库,也非完全取代Pandas这类数据科学库,而是在单机数据分析、轻量级ETL、应用原型开发等场景中,提供了一个更高效、更便捷的“瑞士军刀”式解决方案。

若想深入了解其更多细节与高级功能,可访问项目GitHub地址:


https://github.com/duckdb/duckdb



上一篇:Calcure TUI日历任务管理器:在终端中打造极简高效的工作流
下一篇:RT-Thread异构通信深度解析:基于RPMsg-Lite与RA8P1双核的核间通信实践
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 20:53 , Processed in 0.306412 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表