← all releases

CalCOFI release v2026.07.30

2026-07-30 · 18 tables · 233,730,737 rows · 1.67 GB

tablerowssize
_spatial_attr.parquet40,298121 KB
_spatial.parquet3,37325.0 MB
cruise.parquet69114 KB
dataset_taxon.parquet1,90845 KB
dataset.parquet1510 KB
grid.parquet21898 KB
lookup.parquet262 KB
measurement_type.parquet19810 KB
obs/ 15 parts18,718,710209.2 MB
obs_attribute.parquet452,6821.7 MB
obs_ctd_full/ supplemental 97 parts212,444,2871.22 GB
obs.parquet18,718,710205.2 MB
region.parquet41 KB
sample_measurement.parquet588,9861.9 MB
sample.parquet1,477,20421.2 MB
ship.parquet492 KB
taxon_group.parquet1552 KB
taxon.parquet1,93348 KB

Sidecars

Machine-readable descriptions of this release.

filesize
RELEASE_NOTES.md2 KB
catalog.json2 KB
erd.mmd8 KB
index.html9 KB
metadata.json108 KB
relationships.json9 KB
test_results.json4 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.07.30/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.07.30/parquet/obs_ctd_full/**/*.parquet', hive_partitioning = true) LIMIT 10;