← all releases

CalCOFI release v2026.08.03

2026-08-03 · 19 tables · 255,037,035 rows · 2.01 GB

tablerowssize
cruise.parquet69114 KB
dataset_taxon.parquet1,90845 KB
dataset.parquet1510 KB
grid.parquet218100 KB
lookup.parquet262 KB
measurement_type.parquet19812 KB
obs/ 15 parts20,088,748223.0 MB
obs_attribute.parquet452,6821.7 MB
obs_ctd_full/ supplemental 97 parts212,444,2871.22 GB
obs_mets_full/ supplemental 50 parts19,936,073324.7 MB
obs.parquet20,088,748219.5 MB
region.parquet41 KB
sample_measurement.parquet588,9861.9 MB
sample.parquet1,477,20621.1 MB
ship.parquet492 KB
spatial_attribute.parquet40,298153 KB
spatial.parquet3,37319.7 MB
taxon_group.parquet1552 KB
taxon.parquet2,11857 KB

Sidecars

Machine-readable descriptions of this release.

filesize
RELEASE_NOTES.md2 KB
catalog.json2 KB
erd.mmd8 KB
index.html10 KB
metadata.json121 KB
relationships.json9 KB
test_results.json5 KB
Why obs appears twice. Each is published both as a Hive-partitioned directory and as a single .parquet file, on purpose — they are the same rows.

The partitioned form lets DuckDB, R and Python skip whole partitions when you filter on the partition column, so it is the faster choice for most analysis. The single-file form exists because plain HTTPS has no directory listing: browser DuckDB-WASM (which powers calcofi.io/db-query) and other HTTPS-only consumers cannot expand a /**/*.parquet glob against cloud storage, so they need one addressable object. Removing either breaks a real consumer.
Read directly with DuckDB — no download needed. A single-file table:
SELECT * FROM read_parquet('https://storage.googleapis.com/calcofi-db/ducklake/releases/v2026.08.03/parquet/sample.parquet') LIMIT 10;

A partitioned table (note the /**/*.parquet glob and hive_partitioning, which turns the directory names into a real column):
SELECT * FROM read_parquet('https://storage.googleapis.com/calcofi-db/ducklake/releases/v2026.08.03/parquet/obs_ctd_full/**/*.parquet', hive_partitioning = true) LIMIT 10;