Operations depend on the target layout. Not every conversion needs every step.
Cloud-Native Geo in Practice
Do we always need to physically transform an existing Earth science archive to make it cloud-native?
COG
Materialized
Zarr
Virtual Zarr
Presented by
Siddharth Chaudhary
Data System Evolution (DSE)
NASA Office of Data Science and Informatics (ODSI)
Team
Aimee Barciauskas, Max Jones, Sean Harkins
Brianna Corremonte, Brian Freitag
01 / 15
Cloud-native access can introduce a second physical representation.
Operations depend on the target layout. Not every conversion needs every step.
Arrange pixels and overviews for raster access.
Arrange chunks across the dimensions you need.
Reference compatible chunks already in the archive.
“Make the data look like Zarr without necessarily
making the data become Zarr.”
Time, grid and units
Chunk layout + codecs
Parse source files
Create references
Order daily records
Check compatibility
Write a repository
Commit + validate
Compatible store
Read with xarray
References, array metadata and selected coordinates.
Original files, source chunks and their compression.
Not a land-surface model-output demonstration.
daily/{yyyymm}/
NLDAS_FOR0010_D.A{yyyymmdd}.030.beta.ncSchematic layout. Not a scientific map.
vds = open_virtual_mfdataset(
urls, registry=registry, parser=HDFParser(),
combine="nested", concat_dim="time",
coords="minimal", compat="equals",
loadable_variables=["time", "lat", "lon"],
decode_times=True,
)
session = build_repo.writable_session("main")
vds.vz.to_icechunk(session.store)
snapshot_id = session.commit("NLDAS-3 daily subset")A committed store, metadata and coordinates.
Source files and encoded data chunks.
Validate values, coordinates, units and masks.
session = repo.readonly_session("main")
ds = xr.open_zarr(session.store, consolidated=False,
zarr_format=3, chunks={})
point = ds["Tair"].sel(
lat=40.0, lon=-100.0, method="nearest")
series = point.sel(time=slice("2020-01-01", "2020-01-31"))
assert series.attrs.get("units") == "K"
series = series.compute()
series.plot().compute() is the execution boundary.Tair in Kelvin
January 2020 time labels
Nearest cell to
40° N, 100° W
Connect Icechunk sessions to the reader.
Validate masks, georeferencing and resampling.
Measure chunk reads, requests and tile latency.
Real-world use cases / NetCDF baselines
NLDAS-3 / REPORTED SUMMARY
Time-series extraction.
Virtual Zarr versus NetCDF
≈200×
End-to-end
≈400×
Dataset opening
≈20×
Query / 1 point
≈30×
Query / 5 points
Dataset of interest for the
Water Insights portal.
TEMPO / MARCH 14, 2025
Virtual Zarr versus Remote NetCDF
≈140×
≈12–14×
250 points
50–500 km AOI side
Median paired speedup. 1× = equal. Headline values rounded from plot.
The original archive is retained under both physical and virtual designs.
Inspect and engineer.
Rewrite or build references.
Validate equivalence.
Retain source storage.
Keep copies or references.
Refresh, validate and operate.
Resolve and request bytes.
Decode and compute.
Transfer and serve results.
Long point histories can intersect many spatial chunks, increasing the amount of data that must be accessed.
Test a different physical layout for the hot workload.
Many small objects or fragmented reads can increase the number of requests and access overhead.
Measure requests, useful bytes and concurrency.
Codecs, fill values, scales, coordinates or array metadata may not align with the intended representation.
Validate the resulting dataset rather than assuming the mapping is correct.
Replaced, deleted or inaccessible source objects can invalidate the virtual mapping.
Pin source identities, maintain access and monitor for changes.
Inspect source layout and benchmark the real workload
Compare decoded values, coordinates, units and masks
Record source identity and reference snapshot. Name an owner
Control access, observe requests and detect broken references
Materialize where repeated demand justifies it.
Cloud-native access does not always require a full rewrite.
Each representation puts costs in different places.
Source layout must fit the access pattern.
Less duplication still requires operational care.
Choose the workflow.
Then choose the representation.