在数据科学与分析领域,从数据中提取洞见通常涉及一系列步骤,常用 Python 及其 pandas 等库来完成。尽管功能强大,pandas 在处理超大数据集和资源密集型操作时可能会遇到性能瓶颈。
为了在强大功能与高效性之间取得平衡,DuckDB 成为一个出色的替代方案。作为一款高速、易用的分析型数据库,DuckDB 正在改变 Python 和 R 中的数据处理方式。
本文将探讨:
DuckDB 的独特特性与能力
DuckDB 相较于传统数据处理工具的优势
展示 DuckDB 潜力的实用用例
在 Python 与 R 中使用 DuckDB 的操作指南
读完本文,您将明白为什么无论数据规模和操作复杂度如何,DuckDB 都值得纳入您的数据分析工具箱。
DuckDB 是什么?
DuckDB 是一款免费、开源、可嵌入、进程内的关系型联机分析处理(OnLine Analytical Processing,OLAP)数据库管理系统(DBMS)。术语和缩写不少,我们来逐一解释:
进程内(in-process) 意味着 DBMS 的功能在您要访问的那个应用进程内运行,而不是另起一个外部进程供应用连接
OLAP 表示数据库专为数据分析 而设计。与之对应的是联机事务处理(OLTP)数据库,擅长处理大量事务性数据。
OLAP 与 OLTP 的主要区别在于数据的存储方式。OLTP 数据库通常按记录存储,并确保与同一记录相关的数据在内存中彼此靠近;它们也针对高效读写行进行了优化。
相比之下,OLAP 数据库通常采用列式组织,即按列组织数据。与同一列相关的数据在内存中彼此靠近,数据库也针对高效读取与计算列进行了优化。
由于 DuckDB 是 OLAP 数据库,任何存储的数据都会按列组织。此外,DuckDB 针对在数据上执行复杂查询进行了优化(例如连接 、聚合 、分组 等)——想了解更多,请查看 SQL Fundamentals 技能路径。
如果您熟悉 SQLite ,可以把 DuckDB 理解为其面向分析的“孪生版”。这也解释了 DuckDB 的流行原因——它在本地计算机上结合了 SQLite 的简洁与 Snowflake 的功能性。DuckDB 填补了分析处理所需的嵌入式数据库方案空白。
DuckDB 的关键特性
下面来看看 DuckDB 的一些关键特性。
快速的分析型查询
DuckDB 的速度非常快;对熟悉 PostgreSQL 等处理 OLAP 负载的数据库的用户来说,这可能有些出乎意料。传统上,OLAP 数据库往往响应较慢,因为它们通常需要处理更多数据。
然而,DuckDB 运行在列式向量化查询引擎之上,能够高效利用 CPU 缓存,从而加速分析型查询工作负载的响应时间。
支持 SQL 并可与多种编程语言集成
DuckDB 允许用户运行复杂的SQL 查询 ,并提供 Java、C、C++ 等多种 API。它还与 Python 和 R 深度集成,使用户能够高效地进行交互式数据分析;因此,您可以使用偏好的编程语言与 DuckDB 交互。它还提供了一些额外的 SQL 关键字,便于编写查询,例如 EXCLUDE、REPLACE 和 ALL。
注意 :DuckDB 没有外部依赖项,因此您无需担心依赖冲突问题。
免费且开源
DuckDB 是开源项目,并拥有多位活跃贡献者,这意味着新功能与改进可以快速落地。它目前也是免费的,不过未来不一定会一直免费。
DuckDB 的使用场景
DuckDB 最常见的两个使用场景是交互式数据分析和边缘计算。
我们依次了解一下。
交互式数据分析
数据分析 指的是对数据进行处理与建模的一系列步骤。其目的在于发现有用信息,以支撑结论与数据驱动的决策。
如今,许多公司雇佣数据科学家和分析师,使用 Python 与 R 等技术来开展分析工作。
对于偏好在本地开发中使用 SQL 的用户而言,DuckDB 相比 SQLite 是更好的选择;SQLite 由于缺乏面向数据分析的功能,在处理 OLAP 负载时会比较吃力。
边缘计算
像 DuckDB 这样的可嵌入式数据库,使用户能够在边缘进行数据分析。边缘计算是一种新兴的分布式计算范式,指将一系列网络与设备部署到所需位置或更靠近所需位置。
在更靠近需求地点处理数据,可以提升响应速度并节省带宽。
开始使用 DuckDB
安装 DuckDB 的步骤取决于您的环境,完整的安装指南可参见 DuckDB 文档 。
总体而言,这非常简单。由于 DuckDB 是嵌入式方案,您只需几行代码即可开始。它也不需要任何服务器,且没有外部依赖。
以下是在 Python 中安装 DuckDB 的示例:
pip install duckdb== 0.8 .0 技术支持
在 R 中则是:
install.packages( "duckdb" ) 技术支持
现在,让我们来看看一些代码示例。
在 Python 中使用 DuckDB
安装 DuckDB 后,上手非常容易。您只需在环境中 import duckdb,然后连接到一个已存在的数据库,或在需要时创建一个新数据库。
例如:
import duckdb
connection = duckdb. connect( ) 技术支持
由于没有向 connect() 方法传入数据库文件参数,将会创建一个新数据库。
不过,开始用 DuckDB 执行 SQL 查询的最直接方法是使用 sql() 方法。
import duckdb
duckdb. sql( 'SELECT 42' ) . show( ) 技术支持
执行该命令会在 Python 模块中全局运行一个内存数据库,并返回一个 relation(关系),本质上是查询的符号化表示。
请注意,只有在明确请求结果时,查询才会真正执行,如下所示:
results = duckdb. sql( 'SELECT 42' ) . fetchall( )
print ( results)
"""
[(42,)]
""" 技术支持
我们也可以使用 df() 方法将数据转换为 Pandas DataFrame:
results_df = duckdb. sql( 'SELECT 42' ) . df( )
print ( results)
"""
42
0 42
""" 技术支持
或者使用多种数据摄取方法将数据读入内存:
import duckdb
duckdb. read_csv( 'example.csv' )
duckdb. read_parquet( 'example.parquet' )
duckdb. read_json( 'example.json' )
duckdb. sql( 'SELECT * FROM "example.csv"' ) 技术支持
声明 :如果您在未先连接到现有数据库的情况下使用 sql() 方法,那么程序关闭后,您在文件中存储的任何数据都会丢失。可通过在本节开头介绍的 connect() 方法建立连接来避免这一点。
结语与延伸资源
DuckDB 是一款供数据专业人士(如数据科学家与分析师)使用的 OLAP 数据库,能够以快速高效的方式进行数据分析。它利用了能够在大型数据集上运行复杂查询的 SQL 查询执行引擎。
DuckDB 还与多种编程语言集成,因此您可以从自己喜欢的语言中访问它。
若想继续学习,请查看 SQL 基础速查表 以及 DuckDB 如何让 SQL 成为 DataLab 的一等公民 。
在数据科学与分析领域,从数据中提取洞见通常涉及一系列步骤,常用 Python 及其 pandas 等库来完成。尽管功能强大,pandas 在处理超大数据集和资源密集型操作时可能会遇到性能瓶颈。
为了在强大功能与高效性之间取得平衡,DuckDB 成为一个出色的替代方案。作为一款高速、易用的分析型数据库,DuckDB 正在改变 Python 和 R 中的数据处理方式。
本文将探讨:
读完本文,您将明白为什么无论数据规模和操作复杂度如何,DuckDB 都值得纳入您的数据分析工具箱。
DuckDB 是什么?
DuckDB 是一款免费、开源、可嵌入、进程内的关系型联机分析处理(OnLine Analytical Processing,OLAP)数据库管理系统(DBMS)。术语和缩写不少,我们来逐一解释:
OLAP 与 OLTP 的主要区别在于数据的存储方式。OLTP 数据库通常按记录存储,并确保与同一记录相关的数据在内存中彼此靠近;它们也针对高效读写行进行了优化。
相比之下,OLAP 数据库通常采用列式组织,即按列组织数据。与同一列相关的数据在内存中彼此靠近,数据库也针对高效读取与计算列进行了优化。
由于 DuckDB 是 OLAP 数据库,任何存储的数据都会按列组织。此外,DuckDB 针对在数据上执行复杂查询进行了优化(例如连接、聚合、分组等)——想了解更多,请查看 SQL Fundamentals 技能路径。
如果您熟悉 SQLite,可以把 DuckDB 理解为其面向分析的“孪生版”。这也解释了 DuckDB 的流行原因——它在本地计算机上结合了 SQLite 的简洁与 Snowflake 的功能性。DuckDB 填补了分析处理所需的嵌入式数据库方案空白。
DuckDB 的关键特性
下面来看看 DuckDB 的一些关键特性。
快速的分析型查询
DuckDB 的速度非常快;对熟悉 PostgreSQL 等处理 OLAP 负载的数据库的用户来说,这可能有些出乎意料。传统上,OLAP 数据库往往响应较慢,因为它们通常需要处理更多数据。
然而,DuckDB 运行在列式向量化查询引擎之上,能够高效利用 CPU 缓存,从而加速分析型查询工作负载的响应时间。
支持 SQL 并可与多种编程语言集成
DuckDB 允许用户运行复杂的SQL 查询,并提供 Java、C、C++ 等多种 API。它还与 Python 和 R 深度集成,使用户能够高效地进行交互式数据分析;因此,您可以使用偏好的编程语言与 DuckDB 交互。它还提供了一些额外的 SQL 关键字,便于编写查询,例如 EXCLUDE、REPLACE 和 ALL。
注意:DuckDB 没有外部依赖项,因此您无需担心依赖冲突问题。
免费且开源
DuckDB 是开源项目,并拥有多位活跃贡献者,这意味着新功能与改进可以快速落地。它目前也是免费的,不过未来不一定会一直免费。
DuckDB 的使用场景
DuckDB 最常见的两个使用场景是交互式数据分析和边缘计算。
我们依次了解一下。
交互式数据分析
数据分析指的是对数据进行处理与建模的一系列步骤。其目的在于发现有用信息,以支撑结论与数据驱动的决策。
如今,许多公司雇佣数据科学家和分析师,使用 Python 与 R 等技术来开展分析工作。
对于偏好在本地开发中使用 SQL 的用户而言,DuckDB 相比 SQLite 是更好的选择;SQLite 由于缺乏面向数据分析的功能,在处理 OLAP 负载时会比较吃力。
边缘计算
像 DuckDB 这样的可嵌入式数据库,使用户能够在边缘进行数据分析。边缘计算是一种新兴的分布式计算范式,指将一系列网络与设备部署到所需位置或更靠近所需位置。
在更靠近需求地点处理数据,可以提升响应速度并节省带宽。
开始使用 DuckDB
安装 DuckDB 的步骤取决于您的环境,完整的安装指南可参见 DuckDB 文档。
总体而言,这非常简单。由于 DuckDB 是嵌入式方案,您只需几行代码即可开始。它也不需要任何服务器,且没有外部依赖。
以下是在 Python 中安装 DuckDB 的示例:
在 R 中则是:
现在,让我们来看看一些代码示例。
在 Python 中使用 DuckDB
安装 DuckDB 后,上手非常容易。您只需在环境中
import duckdb,然后连接到一个已存在的数据库,或在需要时创建一个新数据库。例如:
由于没有向
connect()方法传入数据库文件参数,将会创建一个新数据库。不过,开始用 DuckDB 执行 SQL 查询的最直接方法是使用
sql()方法。执行该命令会在 Python 模块中全局运行一个内存数据库,并返回一个 relation(关系),本质上是查询的符号化表示。
请注意,只有在明确请求结果时,查询才会真正执行,如下所示:
我们也可以使用
df()方法将数据转换为 Pandas DataFrame:或者使用多种数据摄取方法将数据读入内存:
声明:如果您在未先连接到现有数据库的情况下使用
sql()方法,那么程序关闭后,您在文件中存储的任何数据都会丢失。可通过在本节开头介绍的connect()方法建立连接来避免这一点。结语与延伸资源
DuckDB 是一款供数据专业人士(如数据科学家与分析师)使用的 OLAP 数据库,能够以快速高效的方式进行数据分析。它利用了能够在大型数据集上运行复杂查询的 SQL 查询执行引擎。
DuckDB 还与多种编程语言集成,因此您可以从自己喜欢的语言中访问它。
若想继续学习,请查看 SQL 基础速查表 以及 DuckDB 如何让 SQL 成为 DataLab 的一等公民。