iT邦幫忙

2024 iThome 鐵人賽

DAY 1
2
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 1

Day01 -- The Duck is rising

  • 分享至 

  • xImage
  •  

The SQLite for Analytics

duckdb-quadrants

DuckDB 是一個 Google、Facebook、Airbnb、Okta、HuggingFace 都有在 Production 環境中使用的資料庫 ,當初設計上為的就是想加強 SQLite 在 in process 分析能力的不足。 簡言之某些分析型 SQL 跑在 DuckDB 跟跑在 SQLite 上都可以得到一樣的答案,但是DuckDB 在這些 SQL 上會比 SQLite 會快 10 倍。

經典的 OLAP query 像是

“ 計算每個員工在所屬的部門的薪水排名 ”

SELECT  
    employee_id, first_name, last_name, department, 
    salary,
    RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank
FROM 
  employees
ORDER BY
  department,
  salary_rank;

書上會看到的 OLAP (線上分析處理)系統,主要是用來處理大量資料的分析。這種 query 會一次讀取整張表或是很多筆資料,然後進行一些像是彙總、平均、統計等聚合運算,通常用來做決策支援或是報表分析。這種情況下,查詢的速度雖然沒那麼即時,但強調的是如何快速處理大量資料,-可以-接受幾秒等級的處理時間

相較之下,OLTP (線上交易處理) 系統的重點在於即時反應,像是我們常見的電商下單、轉帳這類操作,這時候的 query 通常只會處理一小部分資料,重點是要很快就能完成,讓使用者不會感覺卡卡的,-不可以-接受幾秒等級的處理時間

簡單來說,OLAP 就是我們要分析一堆資料的時候,會用到的查詢;而 OLTP 是我們日常生活中,像訂餐、下單這類需要快速處理的查詢。兩者的差別就在於一個偏向資料分析,另一個偏向即時交易。

除了非常優異的性能,非常方便使用,也是 DuckDB 一個殺手級的功能.如果你想真的跑跑看上面那句 SQL,只需要點開以下網址,它會打開一個 Dukcdb WASM 的 console

https://shell.duckdb.org/

然後輸入

SELECT  
      employee_id, first_name, last_name, department, 
      salary,
      RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank
FROM 
     'https://ironman24.douenergy.com/employees.parquet'
ORDER BY
    department,
    salary_rank;

employees-window-function-result-in-wasm

非常簡單易用吧,接下來的一個禮拜,我會告訴大家,Google、Facebook、Airbnb、Okta、HuggingFace 把DuckDB 用在什麼地方,並且什麼時候是適合用 DuckDB 的情境。

劇透:jq , sqlite , postgres , pandas

when-to-use


下一篇
Day02 -- Who is using DuckDB (1) ?
系列文
粗暴的資料處理 DuckDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言