← all releases

CalCOFI release v2026.08.14

2026-08-14 · 19 tables · 307,537,056 rows · 1.88 GB · latest

tablerowssize
cruise.parquet69114 KB
dataset_taxon.parquet1,91045 KB
dataset.parquet1612 KB
grid.parquet218100 KB
lookup.parquet262 KB
measurement_type.parquet20013 KB
obs/ 15 parts25,624,046190.8 MB
obs_attribute.parquet452,7891.7 MB
obs_ctd_full/ supplemental 135 parts259,309,8911.21 GB
obs_mets_full/ supplemental 49 parts19,927,416235.0 MB
obs.parquet25,624,046187.4 MB
region.parquet44 KB
sample_measurement.parquet589,6031.9 MB
sample.parquet1,466,25421.0 MB
ship.parquet492 KB
spatial_attribute.parquet148,461921 KB
spatial.parquet13,20645.3 MB
taxon_group.parquet1512 KB
taxon.parquet2,12570 KB

Sidecars

Machine-readable descriptions of this release.

filesize
RELEASE_NOTES.md2 KB
catalog.json2 KB
erd.mmd8 KB
metadata.json134 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.14/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.14/parquet/obs_ctd_full/**/*.parquet', hive_partitioning = true) LIMIT 10;