Aller au contenu

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 WHERE au 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