View as:

État du stockage Wasabi — 2026-04-14

Snapshot figé du contenu du compte Wasabi utilisé par MaQI. Pour rafraîchir, lancer scripts/wasabi-state.sh puis committer la diff.

Totaux (auto-générés)

BucketTailleObjets
maqi21.053 KiB2
maqi-causalitylink186.909 GiB21860
maqi-databento1.430 TiB3042
maqi-gdelt47.781 GiB4658
maqi-ravenpack249.214 GiB14
maqi-spglobal10.528 MiB6 (partiel — stream en cours)

Les descriptions détaillées par bucket (rôle, structure, anomalies) sont maintenues à la main plus bas dans ce fichier. Ce script ne touche que la table des totaux — régénérer n'écrase pas les notes qualitatives.

maqi (test bucket)

PréfixeContenu
test-data/synthetic-ohlcv.parquetOHLCV synthétique pour les notebooks setup
tests/returns-test.parquetFichier écrit par test-connection.sh / notebook setup

Taille totale : 21.05 KiB (2 objets).

maqi-gdelt

Structure observée (racine plate) :

maqi-gdelt/
├── 1979.zip … 2005.zip                                 (annuel pré-2006)
├── 20060101.export.CSV.zip … 20250929.export.CSV.zip   (quotidien 2006+)
├── GDELT.MASTERREDUCEDV2.1979-2013.zip                 (master reduced)
├── filesizes                                           (manifest vendor)
└── md5sums                                             (manifest vendor)

Anomalies connues (héritées de la source) :

maqi-causalitylink

Structure (8 sous-ensembles, partitionnés year=YYYY/month=MM/) :

Sous-ensembleTailleObjetsRôle
202108131432-Markers91.18 GiB3 454Marqueurs d'événements de marché
202108131432-Indicators54.95 GiB4 285Indicateurs économiques et financiers
202108131432-Events19.37 GiB4 285Événements détectés
202108131432-Trends12.34 GiB4 285Tendances IA
202108131432-Links6.03 GiB4 285Relations causales entre entités
202108131432-Features2.96 GiB1 233Caractéristiques extraites
202108131432-KB51.29 MiB17Base de connaissances (ontologie)
202108131432-Tree40.63 MiB16Arborescence des concepts

Couverture des partitions (Events, exemple représentatif) : year=2014/month=01 \(\to\) year=2021/month=08.

maqi-ravenpack

Structure (racine plate) :

maqi-ravenpack/
├── RavenPackEdge_NEWS_COMP_FULL_2011.zip   (6.55 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2012.zip   (8.19 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2013.zip   (8.59 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2014.zip   (10.92 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2015.zip   (21.99 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2016.zip   (22.11 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2017.zip   (19.62 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2018.zip   (19.35 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2019.zip   (17.63 GiB)
│   ──── 2020 MANQUANTE ────
├── RavenPackEdge_NEWS_COMP_FULL_2021.zip   (22.51 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2022.zip   (27.90 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2023.zip   (33.70 GiB)
├── RavenPackEdge_NEWS_COMP_FULL_2024.zip   (27.36 GiB)
└── RavenPackEdge_NEWS_COMP_FULL_2025.zip   (2.79 GiB, partiel)

Anomalies : l'année 2020 est manquante depuis la source, voir anomalies.md §2.

maqi-databento

Lots :

LotTailleObjetsPériode couverte
XNAS-20250416-MHYNAA5XGU33.06 GiB1 754mai 2018 \(\to\) avril 2020
copy_XNAS-20250411-834CY4QERN51.84 GiB1 261avril 2020 \(\to\) avril 2025 (quotidien)
copy_XNAS-20250411-TUD5WDMULM1.347 TiB27mars 2025 (lot "full-depth" lourd)

Chaque lot suit le même schéma :

<lot>/
├── condition.json
├── manifest.json     (SHA-256 + taille par fichier)
├── metadata.json
├── symbology.json
└── xnas-itch-YYYYMMDD.mbp-10.dbn.zst …

maqi-spglobal — PREVIEW, stream en cours

Structure partielle observée (preview, un seul sous-ensemble présent) :

maqi-spglobal/
└── Xpressfeed/
    └── aPENcurr01/                      (Compustat Pensions — devise courante)
        ├── f_aPENcurr01-20260314.flg    (marqueur de livraison, 0 B)
        ├── f_aPENcurr01-20260411.flg    (marqueur de livraison, 0 B)
        ├── f_aco_pnfndq-20260314.01.xffmt.zip   (3.33 MiB)
        ├── f_aco_pnfndq-20260411.01.xffmt.zip   (3.33 MiB)
        ├── f_aco_pnfndytd-20260314.01.xffmt.zip (3.71 MiB)
        └── f_aco_pnfnta-20260314.01.xffmt.zip   (163 KiB)

À terme, l'arborescence couvrira :

maqi-spglobal/
├── Xpressfeed/               (Compustat + CIQ + Panjiva + GICRS + ESG + Transcripts)
│   ├── aPENcurr01/           (Pensions — devise courante)
│   ├── aPENbk01/             (Pensions — devise book)
│   ├── aIScurr01V2/          (Income Statement current)
│   ├── aBANK01/              (Banking)
│   ├── pkgcore02V2/          (Core fundamentals)
│   └── ... (~20 packages au total)
└── Products/                 (Filings textuels, GVKey, Panjiva BO/BR/CL/*, etc.)
    ├── FilingsTextualData10K/
    ├── PanjivaBOExport/
    ├── CRS_CoreV3Span/
    └── ...

Le catalogue détaillé des packages (rôle, schéma, colonnes clés) sera documenté après complétion du stream et inspection méthodique — cette entrée est un preview pour permettre un premier test polars dans le notebook de démo.

Format des données : .xffmt.zip = zip contenant 2 fichiers :

Licence académique S&P Global — non-redistribution. Aucun contenu brut dans le repo (résumés de schéma uniquement).

Principe directeur

CAL a formulé l'exigence dans ../cal/tech-solutions.md :

« Ranger les données, sans les transformer, dans une architecture de répertoires / fichiers qui fasse sens pour l'indexation. »

Traduction opérationnelle :

Arborescence globale

wasabi:/
├── maqi/                         ← tests de connexion
│   ├── test-data/
│   │   └── synthetic-ohlcv.parquet
│   └── tests/
│       └── returns-test.parquet
│
├── maqi-gdelt/                   ← GDELT (racine plate)
│   ├── <YYYY>.zip                (1979-2005 : annuel)
│   ├── <YYYYMMDD>.export.CSV.zip (2006+ : quotidien)
│   ├── GDELT.MASTERREDUCEDV2.1979-2013.zip
│   ├── md5sums                   (MD5 + taille, référence vendor)
│   └── filesizes
│
├── maqi-causalitylink/           ← snapshot unique 2021-08-13
│   ├── 202108131432-Events/
│   │   └── year=YYYY/month=MM/YYYYMMDD-Events.avro
│   ├── 202108131432-Features/    (même schéma year=/month=)
│   ├── 202108131432-Indicators/
│   ├── 202108131432-KB/          (ontologie, pas partitionnée)
│   ├── 202108131432-Links/
│   ├── 202108131432-Markers/
│   ├── 202108131432-Tree/        (ontologie, pas partitionnée)
│   └── 202108131432-Trends/
│
├── maqi-ravenpack/               ← RavenPack (racine plate)
│   └── RavenPackEdge_NEWS_COMP_FULL_<YYYY>.zip
│
├── maqi-databento/               ← 3 lots XNAS ITCH
│   ├── XNAS-20250416-MHYNAA5XGU/
│   │   ├── manifest.json         (SHA-256 + taille)
│   │   ├── metadata.json
│   │   ├── symbology.json
│   │   ├── condition.json
│   │   └── xnas-itch-<YYYYMMDD>.mbp-10.dbn.zst
│   ├── copy_XNAS-20250411-834CY4QERN/
│   │   └── ... (même schéma)
│   └── copy_XNAS-20250411-TUD5WDMULM/
│       └── ... (même schéma)
│
└── maqi-spglobal/                ← S&P Global Xpressfeed (PREVIEW — stream en cours)
    ├── Xpressfeed/               (Compustat, CIQ, GICRS, Panjiva, ESG, Transcripts)
    │   └── <package>/            (ex: aPENcurr01, aIScurr01V2, pkgcore02V2, …)
    │       ├── f_<package>-<YYYYMMDD>.flg    (marqueur livraison, 0 B)
    │       └── f_<table>-<YYYYMMDD>.01.xffmt.zip
    │           (zip → <table>.cnt manifest + <table>.txt pipe-delimited)
    └── Products/                 (Filings textuels, Panjiva BO/BR/CL, GVKey, …)
        └── ... (structure à documenter après stream complet)

Formats et moteurs de lecture

BucketFormat natifMoteur Python conseilléDécompression requise ?
maqiParquetpolars.read_parquet via s3fsnon
maqi-gdeltZIP(CSV)zipfile \(\to\) polars.read_csvoui (côté client)
maqi-causalitylinkAvro (Apache)fastavro \(\to\) DataFramenon
maqi-ravenpackZIP(CSV)zipfile \(\to\) polars.read_csvoui (côté client)
maqi-databentoDBN + Zstandarddatabento-python (lit .dbn.zst directement)non (la lib gère .zst)
maqi-spglobalZIP(XFFMT) — pipe-delimitedzipfile \(\to\) polars.read_csv(separator="|")oui (côté client)

Voir le notebook de démonstration ../../notebooks/maqi-data-demo.ipynb pour des exemples end-to-end sur chaque bucket.

Conventions de partitionnement

Deux conventions co-existent actuellement, parce qu'elles sont imposées par les vendors :

ConventionBuckets concernésForme
Racine platemaqi-gdelt, maqi-ravenpackTous les fichiers au même niveau, date encodée dans le nom
Hive-style (key=value/…)maqi-causalitylinkyear=YYYY/month=MM/, lisible directement par Hive/Athena
Par lot de livraisonmaqi-databentoUn dossier par livraison, chaque dossier auto-contenu (données + manifest)

On ne cherche pas à unifier ces conventions pour l'instant — chaque bucket reste fidèle à la livraison du vendor.

Comment interroger sans charger

Trois patterns utiles, par ordre de coût :

# 1. Lister sans lire (coût: 1 appel LIST)
import s3fs
fs = s3fs.S3FileSystem(
    key=WASABI_ACCESS_KEY,
    secret=WASABI_SECRET_KEY,
    endpoint_url="https://s3.eu-central-1.wasabisys.com",
)
fs.ls("maqi-causalitylink/202108131432-Events/year=2020")

# 2. Lire un seul fichier en streaming (pas de download complet)
import polars as pl
df = pl.read_parquet("s3://maqi/test-data/synthetic-ohlcv.parquet",
                     storage_options=STORAGE_OPTIONS)

# 3. Télécharger avant lecture (recommandé pour les gros fichiers zip)
fs.download("maqi-gdelt/20240101.export.CSV.zip", "/tmp/20240101.zip")

La règle de pouce : lire en streaming tant que c'est possible, sinon télécharger dans un cache local.

Checkpoints et cohérence

BucketTest de cohérence disponible
maqi-gdeltrclone check wasabi:maqi-gdelt/<local> + MD5 via md5sums
maqi-databentoSHA-256 du manifest.json de chaque lot
maqi-causalitylinkTaille uniquement (pas de checksum vendor)
maqi-ravenpackTaille uniquement (pas de checksum vendor)

Voir ../adr/001-data-reconciliation.md pour la stratégie de vérification à chaque frontière.

Évolution

Quand ce snapshot est régénéré, committer la diff avec un message qui cite la date de génération, et mettre à jour la table « Totaux » du README si les chiffres bougent. Ne pas éditer les sections par bucket à la main — elles sont générées depuis rclone size / rclone lsd, pas inventées.