DuckDB sur Wasabi¶
DuckDB est une base de données SQL serverless : pas de serveur à provisionner, ça tourne en process Python dans ton notebook Colab. Il sait lire des parquets directement depuis S3.
Pattern minimal¶
import duckdb
# Configuration de la connexion vers Wasabi
con = duckdb.connect(":memory:")
con.execute("""
INSTALL httpfs;
LOAD httpfs;
SET s3_endpoint='s3.eu-central-1.wasabisys.com';
SET s3_region='eu-central-1';
SET s3_use_ssl=true;
SET s3_url_style='path';
""")
# Tes credentials (récupérées via getpass dans la cellule précédente)
con.execute(f"SET s3_access_key_id='{ACCESS_KEY}';")
con.execute(f"SET s3_secret_access_key='{SECRET_KEY}';")
# Requête directe sur un parquet Wasabi
df = con.execute("""
SELECT
timestamp_utc,
symbol,
bid_price,
ask_price
FROM 's3://maqi-databento-clean/symbol=AAPL/year=2024/month=3/day=15/*.parquet'
WHERE bid_price > 0
LIMIT 1000
""").df()
Jointure cross-datasets¶
Une fois que tu as configuré la connexion, tu peux faire des jointures SQL directement entre datasets :
df = con.execute("""
WITH
sp_prices AS (
SELECT date, ticker, close
FROM 's3://maqi-sp-clean/prices_daily/year=2024/*.parquet'
WHERE ticker IN ('AAPL', 'MSFT', 'GOOGL')
),
gdelt_events AS (
SELECT date, country, goldstein_score
FROM 's3://maqi-gdelt-clean/year=2024/*.parquet'
WHERE country = 'United States'
)
SELECT sp.date, sp.ticker, sp.close, g.goldstein_score
FROM sp_prices sp
LEFT JOIN gdelt_events g ON sp.date = g.date
ORDER BY sp.date, sp.ticker
""").df()
Pièges et bonnes pratiques¶
- Toujours filtrer avant d'agréger. DuckDB sait pousser les prédicats
WHEREau niveau du parquet (column pruning + row group skip), à condition que les colonnes soient dans les paths de partitionnement. - Limite la portée temporelle. Une requête sur 10 ans de tick intra-day Databento toutes boîtes confondues, c'est plusieurs centaines de Go en RAM.
- DuckDB tourne en local. La RAM utilisée, c'est celle de ton Colab — pas d'un serveur. Si tu fais sauter la RAM, tu fais sauter ton kernel.
Pour aller plus loin¶
- Documentation officielle DuckDB → httpfs
- DuckDB SQL reference
- Le notebook
quickstart-duckdb.ipynb(à venir) contient un exemple end-to-end commenté.