关于 DuckDB
DuckDB 是一个面向分析的极速内存数据库。它的设计目标是快速、可靠、便携且易于使用。
DuckDB 提供了丰富的 SQL 方言,其支持远远超出了基本 SQL。
DuckDB 支持任意和嵌套的相关子查询、窗口函数、排序规则、复杂类型(数组、结构)等。
- 官网:https://duckdb.org
- github : https://github.com/duckdb/duckdb
- 文档:https://duckdb.org/docs/
- Python - API : https://duckdb.org/docs/api/python/overview
- SQL Introduction : https://duckdb.org/docs/sql/introduction
- LangChain - DuckDB
https://python.langchain.com/docs/integrations/vectorstores/duckdb/
其他
- DuckDB-NSQL-7B:文本到SQL转换:
DuckDB-NSQL-7B模型将自然语言转换成SQL代码。使非专业用户能轻松与数据库交互。基于大量真实和合成的DuckDB SQL查询训练。
教程文章等
- 书籍/教程
https://motherduck.com/duckdb-book-brief/
https://duckdb.org/duckdb-docs.pdf - 探索DuckDB:将 SQL 弯曲成灵活的新形状
https://mp.weixin.qq.com/s/WCmgvg4nh6tJTo-ygyeG1w - DuckDB 0.10.0 发布了,带来了重大更新
https://mp.weixin.qq.com/s/Fe1skpTcBnWeHTTpvUZW8g - 探索DuckDB:DuckDB 让 SQL 更友好
https://mp.weixin.qq.com/s/hs9paK-dntejPMTdb_1C8A
特点
- 极速内存数据库: DuckDB 将数据存储在内存中,因此查询速度非常快。它可以轻松处理数千亿条记录的数据,并且能够在几秒钟内完成复杂的查询。
- 关系数据库的强大功能: DuckDB 支持关系数据库的所有标准功能,例如表、索引、视图、外键等。它还支持 ANSI SQL,因此你可以使用熟悉的 SQL 语法来查询和操作数据。
- 内置机器学习和数据挖掘功能: DuckDB 内置了多种机器学习和数据挖掘函数,例如线性回归、决策树、聚类等。这使得你可以直接在 DuckDB 中进行数据分析和建模,而无需将数据导出到其他工具。
- 跨平台支持: DuckDB 支持 Windows、Linux 和 macOS 等多种操作系统。它还支持 Docker 和 Kubernetes 等容器和云平台。
使用场景
DuckDB 非常适合以下场景:
- 实时分析: DuckDB 可以实时处理数据,因此非常适合需要进行实时分析的场景,例如欺诈检测、网络安全等。
- 机器学习和数据挖掘: DuckDB 内置了多种机器学习和数据挖掘函数,因此非常适合需要进行数据分析和建模的场景,例如客户流失分析、推荐系统等。
- 数据仓库: DuckDB 可以作为数据仓库来存储和管理大量数据。它可以快速处理复杂查询,因此非常适合需要进行数据分析和报表生成的场景。
DuckDB与SQLite对比
DuckDB 非常适合需要快速进行数据分析和处理的场景,例如实时分析、机器学习和数据挖掘等。SQLite 非常适合需要小体积、高性能和广泛兼容性的场景,例如嵌入式系统、移动设备和 Web 应用程序等。
SQL 示例
-- Get the top-3 busiest train stations
SELECT station_name, count(*) AS num_services
FROM train_services
GROUP BY ALL
ORDER BY num_services DESC
LIMIT 3;
# Get the top-3 busiest train stations
import duckdb
duckdb.sql("""
SELECT station, count(*) AS num_services
FROM train_services
GROUP BY ALL
ORDER BY num_services DESC
LIMIT 3;
""")
LangChain + DuckDB
https://python.langchain.com/docs/integrations/vectorstores/duckdb/
这里演示如何使用 DuckDB
作为向量数据库
! pip install duckdb
import getpass
import os
# 使用 OpenAIEmbeddings 需要
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import DuckDB
from langchain.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../modules/state_of_the_union.txt")
documents = loader.load()
documents = CharacterTextSplitter().split_documents(documents)
embeddings = OpenAIEmbeddings()
docsearch = DuckDB.from_documents(documents, embeddings)
query = "What did the president say about Ketanji Brown Jackson"
docs = docsearch.similarity_search(query)
print(docs[0].page_content)
2024-04-17(三)