Feast Trino Support
Trino is not included in current Feast roadmap, this project intends to add Trino support for Offline Store.
Version compatibilities
The feast-trino plugin is tested on the following versions of python [3.7, 3.8, 3.9]
Here is also how the current feast-trino plugin has been tested against different versions of Feast and Trino
| Feast-trino | Feast | Trino |
|---|---|---|
| 1.0.* | From 0.15.* to 0.18.* | 364 |
Quickstart
Install feast-trino
- Install stable version
pip install feast-trino
- Install develop version (not stable):
pip install git+https://github.com/shopify/feast-trino.git@main
Create a feature repository
feast init feature_repo
Edit feature_store.yaml
set offline_store type to be feast_trino.TrinoOfflineStore
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
Create Trino Table
Edit feature_repo/example.py
# This is an example feature definition file
import pandas as pd
from google.protobuf.duration_pb2 import Duration
from feast import Entity, Feature, FeatureView, FileSource, ValueType, FeatureStore
from feast_trino.connectors.upload import upload_pandas_dataframe_to_trino
from feast_trino import TrinoSource
from feast_trino.trino_utils import Trino
store = FeatureStore(repo_path="feature_repo")
client = Trino(
user="user",
catalog=store.config.offline_store.catalog,
host=store.config.offline_store.host,
port=store.config.offline_store.port,
)
client.execute_query("CREATE SCHEMA IF NOT EXISTS feast")
client.execute_query("DROP TABLE IF EXISTS feast.driver_stats")
input_df = pd.read_parquet("./feature_repo/data/driver_stats.parquet")
upload_pandas_dataframe_to_trino(
client=client,
df=input_df,
table_ref="feast.driver_stats",
connector_args={"type": "memory"},
)
# Read data from parquet files. Parquet is convenient for local development mode. For
# production, you can use your favorite DWH, such as BigQuery. See Feast documentation
# for more info.
driver_hourly_stats = TrinoSource(
event_timestamp_column="event_timestamp",
table_ref="feast.driver_stats",
created_timestamp_column="created",
)
# Define an entity for the driver. You can think of entity as a primary key used to
# fetch features.
driver = Entity(name="driver_id", value_type=ValueType.INT64, description="driver id",)
# Our parquet files contain sample data that includes a driver_id column, timestamps and
# three feature column. Here we define a Feature View that will allow us to serve this
# data to our model online.
driver_hourly_stats_view = FeatureView(
name="driver_hourly_stats",
entities=["driver_id"],
ttl=Duration(seconds=86400 * 1),
features=[
Feature(name="conv_rate", dtype=ValueType.FLOAT),
Feature(name="acc_rate", dtype=ValueType.FLOAT),
Feature(name="avg_daily_trips", dtype=ValueType.INT64),
],
online=True,
batch_source=driver_hourly_stats,
tags={},
)
store.apply([driver, driver_hourly_stats_view])
# Run an historical retrieval query
output_df = store.get_historical_features(
entity_df="""
SELECT
1004 AS driver_id,
TIMESTAMP '2021-11-21 15:00:00+00:00' AS event_timestamp
""",
features=["driver_hourly_stats:conv_rate"]
).to_df()
print(output_df.head())
Apply the feature definitions
python feature_repo/example.py
Developing and Testing
Developing
git clone https://github.com/shopify/feast-trino.git
cd feast-trino
# creating virtual env ...
python -v venv venv/
source venv/bin/activate
make build
# before commit
make format
make lint
Testing unit test
make start-local-cluster
make test
make kill-local-cluster
Note: You can visit http://localhost:8080/ui/ to access the Web UI of Trino. This makes it easy to look for queries.
Testing against Feast universal suite
make install-feast-submodule
make start-local-cluster
make test-python-universal
make kill-local-cluster
Using different versions of Feast or Trino
The makefile contains the following default values:
- FEAST_VERSION: v0.15.1
- TRINO_VERSION: 364
Thus, make install-feast-submodule will automatically compile Feast v0.15.1. If you want to try another version like v0.14.1, you just need to run make install-feast-submodule FEAST_VERSION=v0.14.1
Same applies for TRINO_VERSION when you start the local cluster make start-local-cluster TRINO_VERSION=XXX
Metadata
Release files for feast-trino 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| feast-trino-1.0.1.tar.gz | 15.4 kB | Without provenance | Details for feast-trino-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| feast_trino-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for feast_trino-1.0.1-py3-none-any.whl |
Total release size: 30.0 kB
Release files / feast-trino-1.0.1.tar.gz
| Download URL | feast-trino-1.0.1.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bfa0df6d5d79f91847f577d3085ab45037cb928f339b64714046eee2bb29091b
|
|
BLAKE2b-256 checksum How to use checksums |
4022faab46f2e8b239f67f67c5b6ce62a1ad9839dd98c101e17cdee010dd0b26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.1
|
Release files / feast_trino-1.0.1-py3-none-any.whl
| Download URL | feast_trino-1.0.1-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9b407aa2b632a8f9ab4afc4758cacea8638fd3313f34f167b36d3ede71a4b017
|
|
BLAKE2b-256 checksum How to use checksums |
7fea93cdc0d912107e1503392903a5bff59007b4846ff203a1346b833b05a776
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.1
|
Security for feast-trino 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.