Historical feature storage and retrieval.
The Chalk offline store persists all computed feature values — enabling monitoring and dataset generation for model training. It is backed by a data warehouse such as BigQuery, Snowflake, or Iceberg. While the online store — backed by low-latency stores like Redis or DynamoDB — caches the latest value of each feature for fast serving, the offline store retains a deep historical record of feature values, timestamped and keyed by entity.
The offline store is typically implemented using BigQuery, Snowflake, Iceberg, or other data warehouses.
Feature values can be written to the offline store from several sources:
Each feature in Chalk has a Fully Qualified Name (FQN) that uniquely identifies it. An FQN is composed of:
<namespace>.<feature_name>
The namespace comes from the @features class name (stripped of a trailing "Features" suffix if present),
and the feature name comes from the Python attribute name — unless overridden via feature(name=...) or
@features(name=...).
For example:
@features
class User:
id: int
fraud_score: float| Python attribute | FQN |
|---|---|
UserExample.id | user_example.id |
UserExample.fraud_score | user_example.fraud_score |
Historical feature value tables in the offline store are named after a hash of the feature’s namespace, FQN, and internal version. More information on the historical feature value table schema can be found in Chalk catalog components.
In addition to the FQN, Chalk tracks an internal version for every feature when naming its offline
store table. This internal version is managed automatically and is separate from the explicit
user-defined versions you can set with feature(version=...).
The internal version increments whenever you change the type of a feature. For example, changing
fraud_score from float to int will cause Chalk to write new values into a new table, rather than
mixing them with the existing one. This guarantees that the offline store never serves values of
incompatible types for the same feature.
In practice:
There are a few ways to query the offline store:
Offline queries — use ChalkClient.offline_query() from the Python client to retrieve historical feature
values, build training datasets, and run batch inference. See Offline Queries for the
full API reference, including point-in-time lookups, spine SQL input, timebounds, and large query execution.
SQL Explorer — run SQL directly against historical feature value tables from the Chalk dashboard. Navigate to the SQL Explorer tab to query the offline store without writing any code. See Chalk SQL for more detail.
Chalk supports several offline store backends. In general, choose the store you already use in your data platform — Chalk handles routing and FQN-based isolation regardless of backend.
| Store | Format | Cloud | Setup guide |
|---|---|---|---|
| Google BigQuery | Columnar (Bigtable-based) | GCP | BigQuery |
| Amazon Redshift | Columnar (Parquet) | AWS | — |
| Snowflake | Columnar (Micro-partitions) | GCP or AWS | Snowflake (AWS) · Snowflake (GCP) |
| Databricks Delta Lake | Columnar (Parquet) | Any | Databricks |
| Iceberg | Columnar (Parquet) | Any | Iceberg |
For GCP deployments, BigQuery is generally recommended for its performance with analytical queries. For AWS deployments, Redshift or Snowflake are common choices depending on your existing data platform.