SQLite的高级分析工具:DuckDB

发表时间: 2022-04-03 14:23

DuckDB 是一个非常有趣的项目,旨在成为一个专注于 OLAP(在线分析处理)的 SQLite 风格的数据库。OLAP 通常与分析相关联,因为它的设计适合对大型数据集的长时间运行查询或对具有大量数据的多个表的连接进行聚合。DuckDB 是一个开源项目,由位于荷兰阿姆斯特丹的非营利组织 DuckDB Labs 开发,并围绕其数据库进行捐赠和承包工作。

DuckDB 中的一些功能概览包括:

  • 单文件数据库
  • 客户端 API 支持 Python、R、Java、C、C++、Node.js、WASM 和命令行交互
  • 专注于OLAP数据引擎
  • 通过 MVCC(多版本并发控制)实现 ACID 合规性
  • 支持从 CSV 文件、Parquet 文件、HTTP、S3、Panda 和 Dataframes 加载数据
  • 广泛的 SQL 支持
  • 对查询 JSON 的扩展支持
  • 对字符串全文搜索的扩展支持
  • 严格的测试和持续集成
  • 免费和开源

以下是一些对我来说非常突出的功能,我觉得这些功能非常令人兴奋和有用。

DuckDB 和 Python 的 Pandas!

DuckDB 的 Python 客户端包的一些非常酷的特性是界面与sqlite3包非常相似,使其易于学习。下面看到的另一件有用的事情是,执行查询可以直接作为 Pandas 数据帧返回。这使得数据科学工作流程非常方便。

https://duckdb.org/docs/guides/python/execute_sql

熊猫的观点

Python API 中另一个有用的特性是 DuckDB 的“VIEW”等效项,它允许您将 Pandas Dataframe 注册为虚拟表。然后可以转换虚拟表以创建持久表,这是一种将大型数据集传输到数据库的便捷方式,如文档中所述。

使用 JSON 扩展查询 JSON

DuckDB 的扩展系统包括一个支持从 JSON 数据中查询数据的系统。以下是文档站点上提供的一些示例。

https://duckdb.org/docs/extensions/json

唯一数据类型

对于那些来自 SQL Server 或 Postgres 等主流数据库的数据,DuckDB 中的一些数据类型可能看起来很新。即,结构和映射。结构列本质上是称为“条目”的其他列的列表;类似于嵌套哈希表的想法。

结构具有映射到“值”的“键”,并且每一行都需要确保其结构具有与列定义的键和值类型相同的键和值类型。结构可用于多种情况,包括点(即 x、y、z)、地理位置(即经度、纬度)、完整地址(即地址、城市、州、邮编)、名称(即第一、中间, 最后的)。这使得设置一个包含两列类似数据的表变得更清晰,例如具有两个位置的项目转移,交付自,交付至。

创建结构

从结构中选择

Maps 是 DuckDB 中的另一种独特类型,它扩展了 struct 以允许不同数据类型的值和重复键。否则它们与结构非常相似。

职能

DuckDB 还具有多种有用的功能,可用于查询,以帮助更轻松地解析字符串中的数据、执行间隔操作、转换数据类型和大量其他任务。

我绝对会建议您查看功能列表,看看有什么让您印象深刻的。我还可以在另一篇文章中重新审视这些函数,以获取带有用例的方便的函数备忘单文章。

https://duckdb.org/docs/sql/functions/overview

结论

总的来说,我真的觉得这个项目很有趣。我在很多项目中都使用过 SQLite,它总是作为一个具有广泛用途的独特灵活的数据库脱颖而出。DuckDB 有很好的文档、可用的接口和语言 API、与 Pandas 数据框的干净集成以及其 SQL 引擎中的许多内部工具来处理许多数据转换任务,从而使查询更容易编写。这是我将使用和关注的项目。

参考

  • 数据库站点— https://duckdb.org/
  • 该基金会的网站— https://duckdblabs.com/
  • 测试一下!— https://duckdb.org/demo/
  • https://duckdb.org/docs/sql/functions/overview
  • https://github.com/duckdb/duckdb