bars
The bars table contains one canonical timeframe period per row. Always specify ORDER BY open_time_ms when chronological order matters.
Columns
| Column | Type | Meaning |
|---|---|---|
open_time_ms |
INTEGER PRIMARY KEY |
Canonical bar open time in milliseconds |
open_time_utc |
TEXT |
Human-readable UTC mirror |
close_time_ms |
INTEGER |
Canonical bar close time in milliseconds |
close_time_utc |
TEXT |
Human-readable UTC mirror |
price_open |
REAL NULL |
Provider open price |
price_high |
REAL NULL |
Provider high price |
price_low |
REAL NULL |
Provider low price |
price_close |
REAL NULL |
Provider close price |
volume_traded |
REAL NULL |
Provider-reported traded volume |
trades_count |
INTEGER NULL |
Provider-reported trade count when available |
provider_data_status |
TEXT |
Effective provider-data state for the row |
Provider-data status values
final: provider data is accepted as durable under the active DataCat policy.pending_finalization: a returned row or empty placeholder still awaits provider confirmation.provider_omitted: the provider returned no row after the applicable check.provider_error: a localized provider or data failure affected the period or range.
NULL provider values
Provider OHLCV cells remain NULL when input is missing, still pending without a returned row, or affected by a provider error. DataCat does not write calculation-only normalization back into bars.
Check provider_data_status before filtering NULL values. A placeholder can preserve the expected timeline even when raw provider data is not currently usable.
Bars and gaps
A returned pending_finalization bar is not itself a gap. An empty pending placeholder can have both a bars row and a gaps row because the gap owns the due confirmation schedule.