S3 Key Patterns
S3
Amazon Simple Storage Service — data lake bucket for raw ingest and processed TEC output; S3 events trigger processing. keys follow deterministic patterns that enable
idempotent reprocessing and prefix-based catalog discovery.
Raw ingest keys
Section titled “Raw ingest keys”Pattern: raw/rinexhourly/{year}/{doy}/{filename}
| Component | Format | Example |
|---|---|---|
year | 4-digit integer | 2026 |
doy | 3-digit zero-padded integer | 179 |
filename | GeoNet hourly RINEX | auck1790.26o |
Full example: raw/rinexhourly/2026/179/auck1790.26o
Ingest copies from GeoNet
GeoNet open data — public S3 bucket `geonet-open-data` with GNSS RINEX hourly files under `gnss/rinexhourly/`. Not owned by this stack; no push notification when new files arrive. ‘s public bucket (geonet-open-data/gnss/rinexhourly/) into the private data lake
Private S3 bucket holding raw RINEX under `raw/rinexhourly/` and processed TEC output under `processed/tec/`. under this layout.
Processed output keys
Section titled “Processed output keys”Pattern: processed/tec/station={station}/year={year}/doy={doy}/{source_stem}.{ext}
| Component | Format | Example |
|---|---|---|
station | 4-character lowercase alphanumeric | auck |
year | 4-digit integer | 2026 |
doy | 3-digit zero-padded integer | 179 |
source_stem | Input filename without extension | auck1790 |
ext | Format extension |
|
Full examples:
processed/tec/station=auck/year=2026/doy=179/auck1790.parquetprocessed/tec/station=auck/year=2026/doy=179/auck1790.json
Key derivation
Section titled “Key derivation”The output key is deterministically derived from the input key:
- Parse
raw/rinexhourly/{year}/{doy}/{filename}to extract year, doy, and filename - Extract station (first 4 characters of filename, lowercased)
- Construct
processed/tec/station={station}/year={year}/doy={doy}/{source_stem}.{ext}wheresource_stemis the input filename without its extension
This ensures idempotent reprocessing — the same input always produces the same output key per format, allowing safe overwrites.
Catalog lookup contract
Section titled “Catalog lookup contract”Catalog endpoints list processed output only:
GET /catalog— Listsprocessed/tec/station=*/prefixes; returns unique station codes uppercasedGET /catalog?station=AUCK— Lists keys underprocessed/tec/station=auck/; parses(year, doy)pairs sorted descending
Raw ingest keys under raw/rinexhourly/ are not included in the catalog.
The Reprocess API
Reprocess API Lambda (`services/reprocess-api/`) — accepts `/reprocess` jobs, writes DynamoDB records, enqueues Reprocess_Queue. resolves raw input keys by listing objects under raw/rinexhourly/ for the requested station, year, and DOY.
Verify keys in S3
Section titled “Verify keys in S3”aws s3 ls "s3://$(terraform -chdir=terraform output -raw bucket_name)/raw/rinexhourly/" --recursive | headaws s3 ls "s3://$(terraform -chdir=terraform output -raw bucket_name)/processed/tec/" --recursive | headRelated pages
Section titled “Related pages”- Parquet Output — column schema
- S3 Processed Output verification