docs/reference/feature-store-yaml.md
feature_store.yaml is a file that is placed at the root of the Feature Repository. This file contains configuration about how the feature store runs. An example feature_store.yaml is shown below:
{% code title="feature_store.yaml" %}
project: loyal_spider
registry: data/registry.db
provider: local
online_store:
type: sqlite
path: data/online_store.db
{% endcode %}
The feature_server block configures the Python Feature Server when it is used
to serve online features and handle /push requests. This section is optional
and only applies when running the Python feature server.
An example configuration:
feature_server:
type: local
metrics: # Prometheus metrics configuration. Also achievable via `feast serve --metrics`.
enabled: true # Enable Prometheus metrics server on port 8000
resource: true # CPU / memory gauges
request: true # endpoint latency histograms & request counters
online_features: true # online feature retrieval counters + store read & ODFV transform timing
push: true # push request counters
materialization: true # materialization counters & duration histograms
freshness: true # per-feature-view freshness gauges
offline_push_batching_enabled: true # Enables batching of offline writes processed by /push. Online writes are unaffected.
offline_push_batching_batch_size: 100 # Maximum number of buffered rows before writing to the offline store.
offline_push_batching_batch_interval_seconds: 5 # Maximum time rows may remain buffered before a forced flush.
The provider field defines the environment in which Feast will execute data flows. As a result, it also determines the default values for other fields.
When using the local provider:
When using the GCP provider:
Permissions
<table> <thead> <tr> <th style="text-align:left"><b>Command</b> </th> <th style="text-align:left">Component</th> <th style="text-align:left">Permissions</th> <th style="text-align:left">Recommended Role</th> </tr> </thead> <tbody> <tr> <td style="text-align:left"><b>Apply</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left"> <p>bigquery.jobs.create</p> <p>bigquery.readsessions.create</p> <p>bigquery.readsessions.getData</p> </td> <td style="text-align:left">roles/bigquery.user</td> </tr> <tr> <td style="text-align:left"><b>Apply</b> </td> <td style="text-align:left">Datastore (destination)</td> <td style="text-align:left"> <p>datastore.entities.allocateIds</p> <p>datastore.entities.create</p> <p>datastore.entities.delete</p> <p>datastore.entities.get</p> <p>datastore.entities.list</p> <p>datastore.entities.update</p> </td> <td style="text-align:left">roles/datastore.owner</td> </tr> <tr> <td style="text-align:left"><b>Materialize</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left">bigquery.jobs.create</td> <td style="text-align:left">roles/bigquery.user</td> </tr> <tr> <td style="text-align:left"><b>Materialize</b> </td> <td style="text-align:left">Datastore (destination)</td> <td style="text-align:left"> <p>datastore.entities.allocateIds</p> <p>datastore.entities.create</p> <p>datastore.entities.delete</p> <p>datastore.entities.get</p> <p>datastore.entities.list</p> <p>datastore.entities.update</p> <p>datastore.databases.get</p> </td> <td style="text-align:left">roles/datastore.owner</td> </tr> <tr> <td style="text-align:left"><b>Get Online Features</b> </td> <td style="text-align:left">Datastore</td> <td style="text-align:left">datastore.entities.get</td> <td style="text-align:left">roles/datastore.user</td> </tr> <tr> <td style="text-align:left"><b>Get Historical Features</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left"> <p>bigquery.datasets.get</p> <p>bigquery.tables.get</p> <p>bigquery.tables.create</p> <p>bigquery.tables.updateData</p> <p>bigquery.tables.update</p> <p>bigquery.tables.delete</p> <p>bigquery.tables.getData</p> </td> <td style="text-align:left">roles/bigquery.dataEditor</td> </tr> </tbody> </table>