在「Querying Parquet using DuckDB」這邊看到 DuckDB 這個東西,裡面引用的文章是「Querying Parquet with Precision using DuckDB」,可以直接對 Parquet 格式的資料下 SQL 找資料。
先前好像有看到 DuckDB 但沒有太注意,剛剛再次看到,然後玩了一下還蠻有趣的。DuckDB 支援蠻多程式語言與資料格式,不過這邊文章拿 Python 與 Parquet 玩還蠻有趣的...
先把 Parquet 的範例資料抓下來,然後透過 pip 裝 duckdb:
cd /tmp; wget https://github.com/cwida/duckdb-data/releases/download/v1.0/taxi_2019_04.parquet; pip install -U duckdb
然後進到 Python 3 的互動界面:
>>> import duckdb >>> print(duckdb.query("SELECT COUNT(*) FROM 'taxi_2019_04.parquet' WHERE pickup_at BETWEEN '2019-04-15' AND '2019-04-20'").fetchall()) [(1276565,)]
然後在範例裡面,檔名的部份還可以用 *
,看了一下說明,底層是 glob 類的用法:
DuckDB supports the globbing syntax, which allows it to query all three files simultaneously.
文章裡有提到速度比 Pandas 快很多,不過我覺得這好像不太能這樣比,會拿 Pandas 出來的時候常常是其他用法,但至少看起來速度是個 DuckDB 在意的點。
不過反而馬上想到的是,之後處理 CSV 之類的檔案應該也會試看看 DuckDB...