État du stockage Wasabi — 2026-04-14
Snapshot figé du contenu du compte Wasabi utilisé par MaQI. Pour rafraîchir, lancer
scripts/wasabi-state.shpuis committer la diff.
Totaux (auto-générés)
| Bucket | Taille | Objets |
|---|---|---|
maqi | 21.053 KiB | 2 |
maqi-causalitylink | 186.909 GiB | 21860 |
maqi-databento | 1.430 TiB | 3042 |
maqi-gdelt | 47.781 GiB | 4658 |
maqi-ravenpack | 249.214 GiB | 14 |
maqi-spglobal | 10.528 MiB | 6 (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éfixe | Contenu |
|---|---|
test-data/synthetic-ohlcv.parquet | OHLCV synthétique pour les notebooks setup |
tests/returns-test.parquet | Fichier écrit par test-connection.sh / notebook setup |
Taille totale : 21.05 KiB (2 objets).
maqi-gdelt
- Taille : 47.78 GiB, 4 658 objets
- Période couverte : 1979 \(\to\) 2025 (événements quotidiens) + lot historique agrégé
- Checksums vendor :
md5sums+filesizesprésents à la racine du bucket (MD5 + taille, cf.../adr/001-data-reconciliation.md)
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) :
20221110.export.CSV.zipmanquant20230323.export.CSV.zipmanquant20230322.export.CSV.zipMD5 divergent- Voir
anomalies.md§1.
maqi-causalitylink
- Taille : 186.91 GiB, 21 860 objets
- Nature : snapshot unique daté
202108131432(13 août 2021) - Checksums vendor : aucun
Structure (8 sous-ensembles, partitionnés year=YYYY/month=MM/) :
| Sous-ensemble | Taille | Objets | Rôle |
|---|---|---|---|
202108131432-Markers | 91.18 GiB | 3 454 | Marqueurs d'événements de marché |
202108131432-Indicators | 54.95 GiB | 4 285 | Indicateurs économiques et financiers |
202108131432-Events | 19.37 GiB | 4 285 | Événements détectés |
202108131432-Trends | 12.34 GiB | 4 285 | Tendances IA |
202108131432-Links | 6.03 GiB | 4 285 | Relations causales entre entités |
202108131432-Features | 2.96 GiB | 1 233 | Caractéristiques extraites |
202108131432-KB | 51.29 MiB | 17 | Base de connaissances (ontologie) |
202108131432-Tree | 40.63 MiB | 16 | Arborescence des concepts |
Couverture des partitions (Events, exemple représentatif) :
year=2014/month=01 \(\to\) year=2021/month=08.
maqi-ravenpack
- Taille : 249.21 GiB, 14 objets
- Nature : 1 archive zip par année
- Checksums vendor : aucun
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
- Taille : 1.430 TiB, 3 042 objets
- Nature : 3 lots
XNAS ITCHlivrés par Databento - Checksums vendor :
manifest.jsonpar lot (SHA-256 + taille)
Lots :
| Lot | Taille | Objets | Période couverte |
|---|---|---|---|
XNAS-20250416-MHYNAA5XGU | 33.06 GiB | 1 754 | mai 2018 \(\to\) avril 2020 |
copy_XNAS-20250411-834CY4QERN | 51.84 GiB | 1 261 | avril 2020 \(\to\) avril 2025 (quotidien) |
copy_XNAS-20250411-TUD5WDMULM | 1.347 TiB | 27 | mars 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
- Taille snapshot : 10.53 MiB, 6 objets (dont 2 fichiers
.flgvides) - Source : SFTP
sftp2.spglobal.com(userEcol5648PC), stream direct SFTP \(\to\) Wasabi viarclone copy. Cf.sync-history.md§2026-04-15. - Total attendu à terme : ~3.747 TiB, 15 530 objets (mesuré côté SFTP).
- Checksums vendor : fichiers
.cntpar table (format<table>|<type>|<row_count>).
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 :
<table>.cnt— manifest<table>|<type>|<row_count><table>.txt— texte pipe-delimited (|), première ligne = header XpressfeedH|<timestamp>|<table>|<n_keys>|<col1>|<col2>|...
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 :
- Un bucket par dataset primaire. Permet la révocation d'accès atomique par dataset et reflète le découpage contractuel par vendor.
- Les fichiers livrés par le vendor sont préservés tels quels. Pas
de recompression, pas de renommage, pas de conversion. La seule
exception est la structure
.zip.downloadde Safari, quercloneaplatit automatiquement (cf. anomalies §2 anomalie 5). - Les fichiers d'index du vendor restent à la racine du bucket.
md5sums,filesizes,manifest.jsonsont uploadés tels quels, au même endroit que les données qu'ils décrivent.
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
| Bucket | Format natif | Moteur Python conseillé | Décompression requise ? |
|---|---|---|---|
maqi | Parquet | polars.read_parquet via s3fs | non |
maqi-gdelt | ZIP(CSV) | zipfile \(\to\) polars.read_csv | oui (côté client) |
maqi-causalitylink | Avro (Apache) | fastavro \(\to\) DataFrame | non |
maqi-ravenpack | ZIP(CSV) | zipfile \(\to\) polars.read_csv | oui (côté client) |
maqi-databento | DBN + Zstandard | databento-python (lit .dbn.zst directement) | non (la lib gère .zst) |
maqi-spglobal | ZIP(XFFMT) — pipe-delimited | zipfile \(\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 :
| Convention | Buckets concernés | Forme |
|---|---|---|
| Racine plate | maqi-gdelt, maqi-ravenpack | Tous les fichiers au même niveau, date encodée dans le nom |
Hive-style (key=value/…) | maqi-causalitylink | year=YYYY/month=MM/, lisible directement par Hive/Athena |
| Par lot de livraison | maqi-databento | Un 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
| Bucket | Test de cohérence disponible |
|---|---|
maqi-gdelt | rclone check wasabi:maqi-gdelt/<local> + MD5 via md5sums |
maqi-databento | SHA-256 du manifest.json de chaque lot |
maqi-causalitylink | Taille uniquement (pas de checksum vendor) |
maqi-ravenpack | Taille 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.