All pages
Powered by GitBook
1 of 10

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Offline stores

Please see for a conceptual explanation of offline stores.

Offline Store
Overview
File
Snowflake
BigQuery
Redshift
Spark (contrib)
PostgreSQL (contrib)
Trino (contrib)
Azure Synapse + Azure SQL (contrib)

File

Description

The file offline store provides support for reading FileSources. It uses Dask as the compute engine.

All data is downloaded and joined using Python and therefore may not scale to production workloads.

Example

feature_store.yaml
project: my_feature_repo
registry: data/registry.db
provider: local
offline_store:
  type: file

The full set of configuration options is available in FileOfflineStoreConfig.

Functionality Matrix

The set of functionality supported by offline stores is described in detail here. Below is a matrix indicating which functionality is supported by the file offline store.

File

Below is a matrix indicating which functionality is supported by FileRetrievalJob.

File

To compare this set of functionality against other offline stores, please see the full .

Azure Synapse + Azure SQL (contrib)

Description

The MsSQL offline store provides support for reading MsSQL Sources. Specifically, it is developed to read from Synapse SQL on Microsoft Azure

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe.

Getting started

In order to use this offline store, you'll need to run pip install 'feast[azure]'. You can get started by then following this tutorial.

Disclaimer

The MsSQL offline store does not achieve full test coverage. Please do not assume complete stability.

Example

feature_store.yaml
registry:
  registry_store_type: AzureRegistryStore
  path: ${REGISTRY_PATH} # Environment Variable
project: production
provider: azure
online_store:
    type: redis
    connection_string: ${REDIS_CONN} # Environment Variable
offline_store:
    type: mssql
    connection_string: ${SQL_CONN}  # Environment Variable

Functionality Matrix

The set of functionality supported by offline stores is described in detail . Below is a matrix indicating which functionality is supported by the Spark offline store.

MsSql

Below is a matrix indicating which functionality is supported by MsSqlServerRetrievalJob.

MsSql

To compare this set of functionality against other offline stores, please see the full .

export to SQL

no

export to data lake (S3, GCS, etc.)

no

export to data warehouse

no

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data

yes

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

yes

offline_write_batch (persist dataframes to offline store)

yes

write_logged_features (persist logged features to offline store)

yes

export to dataframe

yes

export to arrow table

yes

export to arrow batches

functionality matrix

no

offline_write_batch (persist dataframes to offline store)

no

write_logged_features (persist logged features to offline store)

no

export to SQL

no

export to data lake (S3, GCS, etc.)

no

export to data warehouse

no

local execution of Python-based on-demand transforms

no

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

export to dataframe

yes

export to arrow table

yes

export to arrow batches

here
functionality matrix

yes

no

Spark (contrib)

Description

The Spark offline store provides support for reading SparkSources.

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be converted to a Spark dataframe and processed as a temporary view.

Disclaimer

The Spark offline store does not achieve full test coverage. Please do not assume complete stability.

Getting started

In order to use this offline store, you'll need to run pip install 'feast[spark]'. You can get started by then running feast init -t spark.

The full set of configuration options is available in .

The set of functionality supported by offline stores is described in detail . Below is a matrix indicating which functionality is supported by the Spark offline store.

Spark

Below is a matrix indicating which functionality is supported by SparkRetrievalJob.

Spark

To compare this set of functionality against other offline stores, please see the full .

PostgreSQL (contrib)

Description

The PostgreSQL offline store provides support for reading PostgreSQLSources.

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be uploaded to Postgres as a table in order to complete join operations.

Disclaimer

The PostgreSQL offline store does not achieve full test coverage. Please do not assume complete stability.

Getting started

In order to use this offline store, you'll need to run pip install 'feast[postgres]'. You can get started by then running feast init -t postgres.

Note that sslmode, sslkey_path, sslcert_path, and sslrootcert_path are optional parameters. The full set of configuration options is available in .

The set of functionality supported by offline stores is described in detail . Below is a matrix indicating which functionality is supported by the PostgreSQL offline store.

Postgres

Below is a matrix indicating which functionality is supported by PostgreSQLRetrievalJob.

Postgres

To compare this set of functionality against other offline stores, please see the full .

BigQuery

The BigQuery offline store provides support for reading .

  • All joins happen within BigQuery.

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be uploaded to BigQuery as a table (marked for expiration) in order to complete join operations.

In order to use this offline store, you'll need to run pip install 'feast[gcp]'

Trino (contrib)

The Trino offline store provides support for reading .

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be uploaded to Trino as a table in order to complete join operations.

The Trino offline store does not achieve full test coverage. Please do not assume complete stability.

In order to use this offline store, you'll need to run pip install 'feast[trino]'. You can then run feast init

offline_write_batch (persist dataframes to offline store)

no

write_logged_features (persist logged features to offline store)

no

export to SQL

no

export to data lake (S3, GCS, etc.)

no

export to data warehouse

no

export as Spark dataframe

yes

local execution of Python-based on-demand transforms

no

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data

yes

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

export to dataframe

yes

export to arrow table

yes

export to arrow batches

Example

Functionality Matrix

SparkOfflineStoreConfig
here
functionality matrix

yes

no

offline_write_batch (persist dataframes to offline store)

no

write_logged_features (persist logged features to offline store)

no

export to SQL

yes

export to data lake (S3, GCS, etc.)

yes

export to data warehouse

yes

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data

yes

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

export to dataframe

yes

export to arrow table

yes

export to arrow batches

Example

Functionality Matrix

PostgreSQLOfflineStoreConfig
here
functionality matrix

yes

no

feature_store.yaml
project: my_project
registry: data/registry.db
provider: local
offline_store:
    type: spark
    spark_conf:
        spark.master: "local[*]"
        spark.ui.enabled: "false"
        spark.eventLog.enabled: "false"
        spark.sql.catalogImplementation: "hive"
        spark.sql.parser.quotedRegexColumnNames: "true"
        spark.sql.session.timeZone: "UTC"
online_store:
    path: data/online_store.db
feature_store.yaml
project: my_project
registry: data/registry.db
provider: local
offline_store:
  type: postgres
  host: DB_HOST
  port: DB_PORT
  database: DB_NAME
  db_schema: DB_SCHEMA
  user: DB_USERNAME
  password: DB_PASSWORD
  sslmode: verify-ca
  sslkey_path: /path/to/client-key.pem
  sslcert_path: /path/to/client-cert.pem
  sslrootcert_path: /path/to/server-ca.pem
online_store:
    path: data/online_store.db
. You can get started by then running
feast init -t gcp
.

The full set of configuration options is available in BigQueryOfflineStoreConfig.

The set of functionality supported by offline stores is described in detail here. Below is a matrix indicating which functionality is supported by the BigQuery offline store.

BigQuery

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

Below is a matrix indicating which functionality is supported by BigQueryRetrievalJob.

BigQuery

export to dataframe

yes

export to arrow table

yes

export to arrow batches

*See GitHub issue for details on proposed solutions for enabling the BigQuery offline store to understand tables that use _PARTITIONTIME as the partition column.

To compare this set of functionality against other offline stores, please see the full functionality matrix.

Description

Getting started

BigQuerySources
feature_store.yaml
project: my_feature_repo
registry: gs://my-bucket/data/registry.db
provider: gcp
offline_store:
  type: bigquery
  dataset: feast_bq_dataset

Example

Functionality Matrix

, then swap out
feature_store.yaml
with the below example to connect to Trino.

The full set of configuration options is available in TrinoOfflineStoreConfig.

The set of functionality supported by offline stores is described in detail here. Below is a matrix indicating which functionality is supported by the Trino offline store.

Trino

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

Below is a matrix indicating which functionality is supported by TrinoRetrievalJob.

Trino

export to dataframe

yes

export to arrow table

yes

export to arrow batches

To compare this set of functionality against other offline stores, please see the full functionality matrix.

Description

Disclaimer

Getting started

TrinoSources
feature_store.yaml
project: feature_repo
registry: data/registry.db
provider: local
offline_store:
    type: feast_trino.trino.TrinoOfflineStore
    host: localhost
    port: 8080
    catalog: memory
    connector:
        type: memory
online_store:
    path: data/online_store.db

Example

Functionality Matrix

Snowflake

Description

The Snowflake offline store provides support for reading SnowflakeSources.

  • All joins happen within Snowflake.

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be uploaded to Snowflake as a temporary table in order to complete join operations.

Getting started

In order to use this offline store, you'll need to run pip install 'feast[snowflake]'.

If you're using a file based registry, then you'll also need to install the relevant cloud extra (pip install 'feast[snowflake, CLOUD]' where CLOUD is one of aws, gcp, azure)

You can get started by then running feast init -t snowflake.

The full set of configuration options is available in .

The set of functionality supported by offline stores is described in detail . Below is a matrix indicating which functionality is supported by the Snowflake offline store.

Snowflake

Below is a matrix indicating which functionality is supported by SnowflakeRetrievalJob.

Snowflake

To compare this set of functionality against other offline stores, please see the full .

yes

offline_write_batch (persist dataframes to offline store)

yes

write_logged_features (persist logged features to offline store)

yes

no

export to SQL

yes

export to data lake (S3, GCS, etc.)

no

export to data warehouse

yes

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data*

partial

yes

offline_write_batch (persist dataframes to offline store)

no

write_logged_features (persist logged features to offline store)

no

no

export to SQL

yes

export to data lake (S3, GCS, etc.)

no

export to data warehouse

no

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

no

preview the query plan before execution

yes

read partitioned data

yes

offline_write_batch (persist dataframes to offline store)

yes

write_logged_features (persist logged features to offline store)

yes

export to SQL

yes

export to data lake (S3, GCS, etc.)

yes

export to data warehouse

yes

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data

yes

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

export to dataframe

yes

export to arrow table

yes

export to arrow batches

Example

Functionality Matrix

SnowflakeOfflineStoreConfig
here
functionality matrix

yes

no

feature_store.yaml
project: my_feature_repo
registry: data/registry.db
provider: local
offline_store:
  type: snowflake.offline
  account: snowflake_deployment.us-east-1
  user: user_login
  password: user_password
  role: sysadmin
  warehouse: demo_wh
  database: FEAST

Redshift

The Redshift offline store provides support for reading .

  • All joins happen within Redshift.

  • Entity dataframes can be provided as a SQL query or can be provided as a Pandas dataframe. A Pandas dataframes will be uploaded to Redshift temporarily in order to complete join operations.

In order to use this offline store, you'll need to run pip install 'feast[aws]'

. You can get started by then running
feast init -t aws
.

The full set of configuration options is available in RedshiftOfflineStoreConfig.

The set of functionality supported by offline stores is described in detail here. Below is a matrix indicating which functionality is supported by the Redshift offline store.

Redshift

get_historical_features (point-in-time correct join)

yes

pull_latest_from_table_or_query (retrieve latest feature values)

yes

pull_all_from_table_or_query (retrieve a saved dataset)

Below is a matrix indicating which functionality is supported by RedshiftRetrievalJob.

Redshift

export to dataframe

yes

export to arrow table

yes

export to arrow batches

To compare this set of functionality against other offline stores, please see the full functionality matrix.

Feast requires the following permissions in order to execute commands for Redshift offline store:

Command

Permissions

Resources

Apply

redshift-data:DescribeTable

redshift:GetClusterCredentials

arn:aws:redshift:<region>:<account_id>:dbuser:<redshift_cluster_id>/<redshift_username>

arn:aws:redshift:<region>:<account_id>:dbname:<redshift_cluster_id>/<redshift_database_name>

arn:aws:redshift:<region>:<account_id>:cluster:<redshift_cluster_id>

Materialize

The following inline policy can be used to grant Feast the necessary permissions:

In addition to this, Redshift offline store requires an IAM role that will be used by Redshift itself to interact with S3. More concretely, Redshift has to use this IAM role to run UNLOAD and COPY commands. Once created, this IAM role needs to be configured in feature_store.yaml file as offline_store: iam_role.

The following inline policy can be used to grant Redshift necessary permissions to access S3:

While the following trust relationship is necessary to make sure that Redshift, and only Redshift can assume this role:

Description

Getting started

RedshiftSources
feature_store.yaml
project: my_feature_repo
registry: data/registry.db
provider: aws
offline_store:
  type: redshift
  region: us-west-2
  cluster_id: feast-cluster
  database: feast-database
  user: redshift-user
  s3_staging_location: s3://feast-bucket/redshift
  iam_role: arn:aws:iam::123456789012:role/redshift_s3_access_role
{
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<bucket_name>/*",
                "arn:aws:s3:::<bucket_name>"
            ]
        },
        {
            "Action": [
                "redshift-data:DescribeTable",
                "redshift:GetClusterCredentials",
                "redshift-data:ExecuteStatement"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:redshift:<region>:<account_id>:dbuser:<redshift_cluster_id>/<redshift_username>",
                "arn:aws:redshift:<region>:<account_id>:dbname:<redshift_cluster_id>/<redshift_database_name>",
                "arn:aws:redshift:<region>:<account_id>:cluster:<redshift_cluster_id>"
            ]
        },
        {
            "Action": [
                "redshift-data:DescribeStatement"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "2012-10-17"
}
{
    "Statement": [
        {
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::feast-integration-tests",
                "arn:aws:s3:::feast-integration-tests/*"
            ]
        }
    ],
    "Version": "2012-10-17"
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Example

Functionality Matrix

Permissions

yes

offline_write_batch (persist dataframes to offline store)

yes

write_logged_features (persist logged features to offline store)

yes

yes

export to SQL

yes

export to data lake (S3, GCS, etc.)

no

export to data warehouse

yes

export as Spark dataframe

no

local execution of Python-based on-demand transforms

yes

remote execution of Python-based on-demand transforms

no

persist results in the offline store

yes

preview the query plan before execution

yes

read partitioned data

yes

redshift-data:ExecuteStatement

arn:aws:redshift:<region>:<account_id>:cluster:<redshift_cluster_id>

Materialize

redshift-data:DescribeStatement

*

Materialize

s3:ListBucket

s3:GetObject

s3:DeleteObject

arn:aws:s3:::<bucket_name>

arn:aws:s3:::<bucket_name>/*

Get Historical Features

redshift-data:ExecuteStatement

redshift:GetClusterCredentials

arn:aws:redshift:<region>:<account_id>:dbuser:<redshift_cluster_id>/<redshift_username>

arn:aws:redshift:<region>:<account_id>:dbname:<redshift_cluster_id>/<redshift_database_name>

arn:aws:redshift:<region>:<account_id>:cluster:<redshift_cluster_id>

Get Historical Features

redshift-data:DescribeStatement

*

Get Historical Features

s3:ListBucket

s3:GetObject

s3:PutObject

s3:DeleteObject

arn:aws:s3:::<bucket_name>

arn:aws:s3:::<bucket_name>/*

Overview

Functionality

Here are the methods exposed by the OfflineStore interface, along with the core functionality supported by the method:

  • get_historical_features: point-in-time correct join to retrieve historical features

  • pull_latest_from_table_or_query: retrieve latest feature values for materialization into the online store

  • pull_all_from_table_or_query: retrieve a saved dataset

  • offline_write_batch: persist dataframes to the offline store, primarily for push sources

  • write_logged_features: persist logged features to the offline store, for feature logging

The first three of these methods all return a RetrievalJob specific to an offline store, such as a SnowflakeRetrievalJob. Here is a list of functionality supported by RetrievalJobs:

  • export to dataframe

  • export to arrow table

  • export to arrow batches (to handle large datasets in memory)

There are currently four core offline store implementations: FileOfflineStore, BigQueryOfflineStore, SnowflakeOfflineStore, and RedshiftOfflineStore. There are several additional implementations contributed by the Feast community (PostgreSQLOfflineStore, SparkOfflineStore, and TrinoOfflineStore), which are not guaranteed to be stable or to match the functionality of the core implementations. Details for each specific offline store, such as how to configure it in a feature_store.yaml, can be found .

Below is a matrix indicating which offline stores support which methods.

File
BigQuery
Snowflake
Redshift
Postgres
Spark
Trino

Below is a matrix indicating which RetrievalJobs support what functionality.

File
BigQuery
Snowflake
Redshift
Postgres
Spark
Trino
export to SQL
  • export to data lake (S3, GCS, etc.)

  • export to data warehouse

  • export as Spark dataframe

  • local execution of Python-based on-demand transforms

  • remote execution of Python-based on-demand transforms

  • persist results in the offline store

  • preview the query plan before execution (RetrievalJobs are lazily executed)

  • read partitioned data

  • yes

    yes

    yes

    yes

    yes

    yes

    pull_latest_from_table_or_query

    yes

    yes

    yes

    yes

    yes

    yes

    yes

    pull_all_from_table_or_query

    yes

    yes

    yes

    yes

    yes

    yes

    yes

    offline_write_batch

    yes

    yes

    yes

    yes

    no

    no

    no

    write_logged_features

    yes

    yes

    yes

    yes

    no

    no

    no

    yes

    yes

    yes

    yes

    yes

    yes

    export to arrow table

    yes

    yes

    yes

    yes

    yes

    yes

    yes

    export to arrow batches

    no

    no

    no

    yes

    no

    no

    no

    export to SQL

    no

    yes

    no

    yes

    yes

    no

    yes

    export to data lake (S3, GCS, etc.)

    no

    no

    yes

    no

    yes

    no

    no

    export to data warehouse

    no

    yes

    yes

    yes

    yes

    no

    no

    export as Spark dataframe

    no

    no

    no

    no

    no

    yes

    no

    local execution of Python-based on-demand transforms

    yes

    yes

    yes

    yes

    yes

    no

    yes

    remote execution of Python-based on-demand transforms

    no

    no

    no

    no

    no

    no

    no

    persist results in the offline store

    yes

    yes

    yes

    yes

    yes

    yes

    no

    preview the query plan before execution

    yes

    yes

    yes

    yes

    yes

    yes

    yes

    read partitioned data

    yes

    yes

    yes

    yes

    yes

    yes

    yes

    get_historical_features

    export to dataframe

    Functionality Matrix

    here

    yes

    yes