為了在強大的功能和效率之間取得平衡,DuckDB 成為了一個很好的替代方案。作為一種高速、使用者友善的分析資料庫,DuckDB 正在改變 Python 和 R 中的資料處理方式。
本文將探討:
DuckDB 的獨特特性和功能
DuckDB相對於傳統資料操作工具的優勢
展示 DuckDB 潛力的實際用例
在 Python 和 R 中使用 DuckDB 的指南
在本文結束時,您將了解為什麼 DuckDB 是一個值得考慮用於資料分析任務的工具,無論資料大小和所涉及操作的複雜性如何。
什麼是 DuckDB?
DuckDB 是一個免費、開源、嵌入式、進程內、關聯式、線上分析處理 (OLAP) 資料庫管理系統 (DBMS)。有很多單字和縮寫,所以讓我們來分解一下:
透過in-process,我們的意思是 DBMS 功能是從您嘗試存取的應用程式內部運行的,而不是從您的應用程式連接到的外部進程運行的
OLAP意味著資料庫是為資料分析而設計的。還有線上事務處理(OLTP)資料庫,旨在處理大型事務資料。
OLAP 和 OLTP之間的主要區別在於資料的儲存方式。 OLTP 資料庫通常按記錄儲存數據,同時確保與記錄關聯的所有資料在記憶體中緊密儲存。它們還針對高效讀取和寫入行進行了最佳化。
相較之下,OLAP 資料庫通常按列定向,這表示資料按列組織。與列關聯的所有資料都在記憶體中彼此靠近地存儲,並且資料庫針對高效地讀取和計算列進行了最佳化。
由於 DuckDB 是一個 OLAP 資料庫,因此儲存的任何資料都是按列組織的。此外,DuckDB 經過最佳化,可以對資料執行複雜的查詢(例如,聯結、聚合、分組等)—查看SQL 基礎技能軌道以了解更多資訊。
如果您熟悉SQLite,那麼概念化 DuckDB 的最簡單方法就是將其作為以分析為中心的副本。這就是 DuckDB 如此受歡迎的原因——它利用了 SQLite 的簡單性和本地電腦上 Snowflake 的功能。 DuckDB 滿足了對用於分析處理的嵌入式資料庫解決方案的需求。
DuckDB 的主要特性
讓我們來看看 DuckDB 的一些關鍵特性。
快速分析查詢
DuckDB 的速度快得令人難以置信;對於任何熟悉處理 OLAP 工作負載的資料庫(例如 PostgreSQL)的人來說,這可能會感到震驚。傳統上,OLAP 資料庫往往回應時間較慢,因為它們通常處理更多資料。
然而,DuckDB 在列向量化查詢引擎上運行,這有助於有效利用 CPU 快取並加快分析查詢工作負載的回應時間。
支援 SQL 以及與其他程式語言的集成
DuckDB 使用戶能夠執行複雜的SQL 查詢,並提供適用於 Java、C、C++ 等的 API。它還深度整合到Python和R中,使用戶能夠進行高效的互動式數據分析;因此,您可以使用您喜歡的程式語言與 DuckDB 進行互動。還可以存取額外的 SQL 關鍵字,使 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 模組中的記憶體資料庫並傳回一個關係,該關係本質上是查詢的符號表示。
請注意,只有明確請求結果後才會執行查詢,如下所示:
# Source: Execute
results = duckdb.sql('SELECT 42').fetchall()
print(results)
"""
[(42,)]
"""
供電
我們也可以使用該df()方法將資料轉換為 Pandas DataFrame:
results_df = duckdb.sql('SELECT 42').df()
print(results)
"""
42
0 42
"""
供電
或者您可以使用多種資料提取方法之一將資料讀入記憶體:

# Source: Python
import duckdb
duckdb.read_csv('example.csv') # read a CSV file into a Relation
duckdb.read_parquet('example.parquet')# read a Parquet file into a Relation
duckdb.read_json('example.json') # read a JSON file into a Relation
duckdb.sql('SELECT * FROM "example.csv"') # directly query a CSV file
供電
免責聲明:如果您在沒有先連接到現有資料庫的情況下使用該sql() 方法,則關閉程式後,您儲存在文件中的任何資料都會遺失。您可以透過使用我們在本節開頭討論的方法建立連接來防止這種情況。connect()
結論和更多資源
DuckDB 是資料專業人員(例如資料科學家和分析師)使用的 OLAP 資料庫,用於快速有效地分析資料。它利用能夠在大型資料集上執行複雜查詢的 SQL 查詢執行引擎。
DuckDB 還與許多其他程式語言集成,因此可以從您最喜歡的語言存取它。