Hydrographic Bottle
CalCOFI Bottle Database
calcofi_bottleCalCOFICC BY 4.0in the release since v2026.05.19ingested
Hydrographic bottle data including temperature, salinity, oxygen, nutrients, pigments, and C14 from CalCOFI cruises. CalCOFI holds 11,135,334 observations from 35,643 sampling events at 222 stations, 1949–2021, 0–5,351 m.
- 1949–2021
- years
- 11,135,334
- observations
- 35,643
- sampling events
- 222
- stations
- 41
- variables
- 0–5,351 m
- depth
What this is
Hydrographic bottle data including temperature, salinity, oxygen, nutrients, pigments, and C14 from CalCOFI cruises. The provider publishes it as two linked files: Cast, one row per hydrographic cast (the rosette the bottles came up on: date, position, weather, bottom depth), and Bottle, one row per bottle depth. That cast is not the CTD Cast Files dataset (calcofi_ctd-cast), although both come from the same station visit.
This record ends in 2021. From 2022 on, the bottle values are the btl_* variables of CTD Cast Files (calcofi_ctd-cast) — 7 of this dataset’s variables (chlorophyll_a, nitrate, nitrite, phaeopigment, phosphate, silicate, temperature), through 2026.
What is in it
41 variables · alkalinity_rep1, ammonia, c14_dark, c14_mean, c14_rep1, c14_rep2, chlorophyll_a, dic_rep1, light_pct, nitrate … all 41
obs_env profile · one value at each depth of a cast · 11,135,334 values · 1949–2021 · 26 variables
alkalinity_rep1 umol/kg 2,084ammonia umol/L 90,489c14_dark mgC/m3/hld 23,759c14_mean mgC/m3/hld 23,760c14_rep1 mgC/m3/hld 15,542c14_rep2 mgC/m3/hld 15,524chlorophyll_a ug/L 245,656dic_rep1 umol/kg 1,999light_pct % 19,767nitrate umol/L 364,982nitrite umol/L 364,432oxygen_ml_l ml/L 725,612oxygen_saturation % 690,728oxygen_umol_kg umol/kg 690,680phaeopigment ug/L 245,655phosphate umol/L 440,899r_ammonium umol/L 90,509r_depth m 895,353r_dynamic_height dyn m 848,666r_oxygen_umol_kg umol/kg 690,681r_salinity_sva 10^-8 m3/kg 842,551r_temperature degC 849,300salinity PSS-78 847,996sigma_theta kg/m3 842,652silicate umol/L 381,675temperature degC 884,383
sample_measurement per cast · one value for the whole cast or tow, at no depth · 268,871 values on 35,467 sampling events · 1949–2021 · 15 variables
wind_direction degrees 34,166wind_speed knots 33,964bottom_depth m 33,362weather_code 27,450dry_air_temp degC 20,308barometric_pressure millibars 20,302wet_air_temp degC 20,226wave_direction degrees 13,195wave_height feet 12,740cloud_amount oktas 12,520wave_period seconds 12,267cloud_type 10,456visibility 10,149secchi_depth meters 5,689water_color Forel-Ule 2,077
Also contributes to · Carbonate System (2) · Nutrients & Chemistry (6) · Productivity & Pigments (7) which variables
- Carbonate System — alkalinity_rep1, dic_rep1
- Nutrients & Chemistry — ammonia, nitrate, nitrite, phosphate, r_ammonium, silicate
- Productivity & Pigments — c14_dark, c14_mean, c14_rep1, c14_rep2, chlorophyll_a, light_pct, phaeopigment
Every month of the year · extent 18.4–47.9°N, 164.1–106.0°W · 1949-02 to 2021-05
Ways in
Explorerdb-queryOriginal at CalCOFI.orgERDDAPParquetnetCDFSTACIngest notebookcalcofi.orgAs JSON
Every endpoint 33 · explore 7, get the data 6, code 6, metadata records 7, archives & portals 7
Every endpoint this dataset can be reached through, grouped by how you would use it. Each name is the link; the copy button beside it copies the address. Everything is in the release record and was answered when the release was cut.
Apps that read this dataset from the release. The icons after a name are the app’s lenses — the spatial grain it shows the data at.
Every way to have the bytes, by source. Nothing here asks you to register first.
Tables from the release (Parquet)
The release’s own tables, as the parquet objects it is frozen from — the same bytes every app and package below reads. A table this dataset shares with others holds every dataset’s rows, so filter on dataset_key; a partition holds only this dataset’s. since is the release whose rows these are: an unchanged table keeps its object.
CF netCDF
One self-describing file, for a tool that reads netCDF.
how far this file is CF
CF-1.10 where CF applies (coordinates, units, standard names, time). The cast -> bottle -> occurrence hierarchy uses netCDF-4 groups with explicit parent_index links; CF defines no feature type for this nesting.
ERDDAP (erddap.calcofi.io)
One ERDDAP dataset per grain. Subset in the browser or query it from a script; for netCDF take the CF file above.
- observations
- one row per measurement — value, units and quality flag — joined to the sampling event it was taken on
- sampling events
- one row per cast, tow or transect: when, where and how it was sampled, with the effort that scales it
Legacy ids, still answering until 2026-12-04: calcofi_casts (replaced by calcofi_bottle)
From the provider
The dataset as its provider publishes it, before CalCOFI ingested it.
The same release, from a script or a browser SQL shell.
Packages
The whole release, pinned to a version, with the citation one call away.
con <- calcofi4r::cc_get_db()
calcofi4r::cc_cite("calcofi_bottle")
con = calcofi4py.cc_get_db()
calcofi4py.cc_cite("calcofi_bottle")
DuckDB, anywhere
No CalCOFI package needed: each table above is a plain parquet object, readable by any DuckDB (or Arrow, pandas, Spark) from its URL. The path carries a content hash — a table whose rows did not change between releases keeps the same object, so nothing unchanged is stored or downloaded twice. Swap in any table above; one shared with other datasets needs WHERE dataset_key = 'calcofi_bottle'. Every object of every release is listed in db-schema.
SELECT *
FROM read_parquet('https://storage.googleapis.com/calcofi-db/ducklake/tables/obs/dataset_key=calcofi_bottle/2ed9ee1bf1a619263238afaa/data_0.parquet')
LIMIT 100;
SELECT *
FROM read_parquet('https://storage.googleapis.com/calcofi-db/ducklake/tables/sample_measurement/aa7da429d4961367765fb31b/sample_measurement.parquet')
WHERE dataset_key = 'calcofi_bottle'
LIMIT 100;
db-query, in the browser
__TBL:obs__ is db-query’s name for the pinned release’s obs object — the hashed path above, resolved for you — so the same SQL keeps working when a release changes the object.
-- calcofi_bottle in the CalCOFI release v2026.11.05
SELECT *
FROM __TBL:obs__
WHERE dataset_key = 'calcofi_bottle'
LIMIT 100;
Records about the data, in the standards each portal harvests.
Where this dataset is registered outside calcofi.io: each portal’s role, what it is for, the dataset’s status there and the identifier it is known by. The policy — which portal is the archive of record and why — is in Portals.
Policy Archive of record: none yet — a CalCOFI program dataset with no DOI-bearing deposit. EDI is the planned archive (the package is built from each release and staged for review; the deposit waits on the EDI account); NCEI planned through the SWFSC data manager. OBIS does not apply (no occurrences). Mirrored on NOAA CoastWatch ERDDAP.
Cite CalCOFI, 2023
This dataset's own citation. What to cite, and how, is a chapter of the docs book.
CalCOFI. (2023). CalCOFI Bottle Database 194903-202105. CalCOFI.org.
License: CC-BY-4.0
BibTeX
@misc{calcofi_bottle,
title = {CalCOFI Bottle Database},
howpublished = {CalCOFI. (2023). CalCOFI Bottle Database 194903-202105. CalCOFI.org.},
year = {2023},
note = {License: CC-BY-4.0}
}
…and the release it came from
CalCOFI (2026). CalCOFI Integrated Database, release v2026.11.05 [Data set]. Scripps Institution of Oceanography, NOAA Fisheries, and California Department of Fish and Wildlife. https://calcofi.io/db-schema/?v=v2026.11.05
BibTeX
@misc{calcofi_release_v2026_11_05,
title = {CalCOFI Integrated Database, release v2026.11.05},
author = {CalCOFI},
year = {2026},
publisher = {Scripps Institution of Oceanography, NOAA Fisheries, and California Department of Fish and Wildlife},
url = {https://calcofi.io/db-schema/?v=v2026.11.05}
}
Provenance source read 2026-11-04 · 4 release tables · 2 changed in v2026.11.05 · 12 source files
What changed in v2026.11.05
- obs 71.9 MB · since v2026.11.04
- sample_measurement 2.8 MB · since v2026.11.05
Source files
The original inputs the ingest notebook read, mirrored nightly from the shared Drive to the public files bucket — 12 files, 433 MB.
- Bottle Database – CalCOFI.pdf1016 KB2026-06-09
- Bottle Database – CalCOFI.webloc283 B2026-06-09
- Bottle Field Descriptions - UTF-8.csv4.1 KB2026-06-09
- Bottle Field Descriptions.csv4.2 KB2026-06-09
- CalCOFI_Database_194903-202001_csv_22Sep2021/194903-202001_Bottle.csv197 MB2026-06-09
- CalCOFI_Database_194903-202001_csv_22Sep2021/194903-202001_Cast (sheet).csv10.5 MB2026-10-07
- CalCOFI_Database_194903-202001_csv_22Sep2021/194903-202001_Cast.csv12.3 MB2026-06-09
- CalCOFI_Database_194903-202001_csv_22Sep2021/Cast Field Descriptions.csv3.5 KB2026-06-09
- CalCOFI_Database_194903-202105_csv_16October2023/194903-202105_Bottle.csv167 MB2026-06-09
- CalCOFI_Database_194903-202105_csv_16October2023/194903-202105_Cast.csv11.9 MB2026-06-09
- Cast Field Descriptions.csv3.5 KB2026-06-09
- bottle_cast.rds32.8 MB2026-06-09
Open questions for the provider 1 on this dataset · 6 open in all
- Q11 pi_names — proposed
Each is a field the record proposes and the provider has not yet confirmed.
Keywords 12 GCMD
Water temperatureOcean salinityOxygenNutrientsChlorophyllCalCOFI NetworkTemperatureSalinityDissolved OxygenDissolved NutrientsOcean Acidification and HypoxiaPhytoplankton Biomass and Diversity
Everything here is open; nothing on calcofi.io asks you to register first. If this dataset ends up in something you build or publish, register your use so it can be credited and linked back; to hear when a release changes it, stay informed. Questions: data@calcofi.io.