Skip to main content

Query Syntax

CCRP uses a URL-based query syntax that balances simplicity with expressiveness. This section describes how to construct queries for different types of dimensions and data patterns.

Dimension Types

CCRP queries work with two types of dimensions:

Continuous Dimensions

Dimensions that represent continuous values like coordinates, time, or measurements:

  • Time: 2024-01-01, 2024-01-01T12:00:00Z
  • Spatial coordinates: lat=30.5, lon=-120.0
  • Measurements: depth=100, pressure=1013.25

Discrete Dimensions

Dimensions that represent categorical or discrete values:

  • Variables: variable=temperature, band=C07
  • Categories: quality=good, sensor=A
  • Identifiers: station_id=KBOS, model_run=12Z

Query Operators

Equality (Default)

Matches exact values. This is the default when no operator is specified.

Syntax

dimension=value

Examples

band=C07
time=2024-01-15
station_id=KBOS

Set Inclusion (OR)

Matches any value in a comma-separated list. This is the OR operator.

Syntax

dimension=value1,value2,value3

Examples

band=C07,C08,C09           # Any of these three bands
quality=good,fair # Either good OR fair quality
year=2020,2021,2022 # Any of these three years

Comparison Operators

For continuous dimensions, use comparison operators to create ranges and boundaries.

Syntax

  • dimension[gt]=value - Greater than
  • dimension[gte]=value - Greater than or equal
  • dimension[lt]=value - Less than
  • dimension[lte]=value - Less than or equal

Examples

temperature[gte]=20.0      # Temperature >= 20.0
time[lt]=2024-01-01 # Times before 2024
depth[gt]=100 # Depths greater than 100
pressure[lte]=1013.25 # Pressure <= 1013.25

Open-Ended Ranges

You can create open-ended ranges by using only one boundary:

time[gte]=2024-01-01       # Everything from 2024 forward
depth[lt]=100 # Everything less than 100m
temperature[gt]=30 # Everything above 30 degrees

Creating Ranges

To select a range, combine operators:

time[gte]=2024-01-01&time[lt]=2024-02-01    # All of January 2024
lat[gte]=30&lat[lt]=40 # Latitude from 30 to 40 (exclusive)
depth[gte]=0&depth[lte]=100 # Depth from 0 to 100 (inclusive)

Combining Queries

Multiple dimension queries are combined with AND logic using &:

time[gte]=2024-01-01&time[lt]=2024-02-01&lat[gte]=30&lat[lt]=40&band=C07

This means: January 2024 AND latitude 30-40 AND band C07.

Multiple conditions on the same dimension are also combined with AND:

temperature[gte]=20&temperature[lte]=30    # Temperature between 20 and 30

Query Mechanics

Chunk Boundary Expansion

When you query a range, CCRP returns all chunks that overlap with your requested range:

  • Request: lat[gte]=35&lat[lt]=37
  • Chunk boundaries: [30-35], [35-40], [40-45]
  • Returns: Chunks [30-35] and [35-40]

The client is responsible for extracting the exact subset from the returned chunks.

Boundary Behavior

Be explicit about whether boundaries are inclusive or exclusive:

  • [gte] and [lte] include the boundary value
  • [gt] and [lt] exclude the boundary value

This is especially important for time ranges:

# All of January 2024
time[gte]=2024-01-01&time[lt]=2024-02-01

# Through end of January 2024
time[gte]=2024-01-01&time[lte]=2024-01-31T23:59:59

Complex Examples

Spatial-Temporal Query

GET /dataset/ocean-temp/data?time[gte]=2024-01-01&time[lt]=2024-07-01&lat[gte]=30&lat[lt]=45&lon[gte]=-125&lon[lt]=-110&depth[gte]=0&depth[lt]=50

Retrieves ocean temperature for:

  • First half of 2024
  • Latitude 30°N to 45°N
  • Longitude 125°W to 110°W
  • Surface to 50m depth

Multi-Variable Selection

GET /dataset/weather/data?time=2024-01-15&variable=temperature,humidity,pressure

Retrieves three variables for a specific day.

Filtered Table Query

GET /dataset/observations/data?time[gte]=2024-01-01&time[lt]=2024-02-01&quality=good,fair&station_id=KBOS,KORD,KLAX

Retrieves observations for:

  • January 2024
  • Quality of good or fair
  • From three specific stations

Special Characters and Encoding

Query values must be URL-encoded when they contain special characters. For example, spaces become %20.

Query Limits

Implementations may impose limits on:

  • Query complexity (number of dimensions)
  • Result size (total bytes)
  • Number of chunks returned

When limits are exceeded, the server returns 413 Payload Too Large with details about the limit.

Version Queries

For datasets that support versioning, add the version parameter:

GET /dataset/weather/data?time[gte]=2024-01-01&time[lt]=2024-02-01&temperature[gte]=20&version=v20240315

If version is omitted, the latest version is used. See the API Reference for version behavior details.