DuckDB - 一款嵌入式關(guān)系型 OLAP 數(shù)據(jù)庫(kù)管理系統(tǒng)
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫(kù)管理與開發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
DuckDB 簡(jiǎn)介
安裝指南
Python 中安裝 DuckDB
R 中安裝 DuckDB
源碼安裝
相關(guān)鏈接
DuckDB 簡(jiǎn)介
DuckDB 是一款嵌入式數(shù)據(jù)庫(kù),主要用于嵌入其他程序執(zhí)行快速的 SQL 分析查詢,官方稱其為“分析型數(shù)據(jù)庫(kù)中的 SQLite”。DuckDB 易于安裝和使用,沒有外部依賴,同時(shí)提供了 C/C++、Python 以及 R 的語(yǔ)言綁定。
DuckDB 由荷蘭 Centrum Wiskunde & Informatica 的數(shù)據(jù)庫(kù)架構(gòu)組開發(fā),他們還開發(fā)了 MonetDB(一款開源的列式存儲(chǔ)數(shù)據(jù)庫(kù))。DuckDB 采用 MIT 開源協(xié)議,并且在 GitHub 上開放了源代碼。DuckDB 于 2019 年 6 月 27日首次發(fā)布了官方的 0.1 發(fā)布版。
安裝指南
Python 中安裝 DuckDB
使用以下命令在 Python 中安裝 DuckDB,目前支持 Python 3:
pip install duckdb
在 Python 中使用 DuckDB 需要安裝numpy。完成安裝之后,可以按照以下方式使用 DuckDB:
import duckdb
cursor = duckdb.connect(':memory:').cursor()
print(cursor.execute('SELECT 42').fetchall())
R 中安裝 DuckDB
使用以下命令在 R 環(huán)境中安裝 DuckDB:
remotes::install_github("cwida/duckdb/tools/rpkg", build = FALSE)
在 R 中使用 DuckDB 需要安裝remotes。如果使用 Windows,還需要安裝Rtools。完成安裝之后,可以按照以下方式使用 DuckDB:
library("DBI")
con <- dbConnect(duckdb::duckdb(), ":memory:")
dbWriteTable(con, "iris", iris)
dbGetQuery(con, 'SELECT "Species", MIN("Sepal.Width") FROM iris GROUP BY "Species"')
源碼安裝
DuckDB 源碼可以在 GitHub 上進(jìn)行下載。DuckDB 安裝需要使用 CMake 以及可以兼容 C++11 的編譯器。每次官方修訂都會(huì)針對(duì) GCC 4.9 及更高版本、Clang 3.9 及更高版本以及 VisualStudio 2017 進(jìn)行測(cè)試。
編譯
在代碼根目錄下運(yùn)行make進(jìn)行編譯。對(duì)于開發(fā)者,使用make debug構(gòu)建一個(gè)非優(yōu)化的調(diào)試版本。你可以在每次修改之后運(yùn)行make unit和make allunit進(jìn)行驗(yàn)證。
對(duì)于不支持 GNU Make 的系統(tǒng),例如 Windows,可以直接使用CMake為編譯器或者 IDE(例如 Visual Studio) 生成項(xiàng)目文件。
使用
DuckDB 提供樂意一個(gè)基于 sqlite3 的命令行工具。對(duì)于發(fā)布版(默認(rèn)),該工具位于 build/release/tools/shell/shell;對(duì)于調(diào)試版,位于 build/debug/tools/shell/shell。
嵌入應(yīng)用
DuckDB 是一款嵌入式數(shù)據(jù)庫(kù),不需要啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器,也不需要使用客戶端連接服務(wù)器。不過,可以使用 C 或 C++ 綁定將數(shù)據(jù)庫(kù)服務(wù)器直接嵌入應(yīng)用程序。主構(gòu)建程序?qū)?huì)創(chuàng)建共享鏈接庫(kù) build/release/src/libduckdb.[so|dylib|dll],同時(shí)也會(huì)創(chuàng)建一個(gè)靜態(tài)鏈接庫(kù)。
代碼庫(kù)中的 examples 目錄給出了一些如何在應(yīng)用程序中嵌入 DuckDB 的示例。