Feast Meets Oracle: Unlocking Feature Store for Oracle Database Users
The Problem: Your Data Is Already in Oracle — Why Move It?
If you work in a Fortune 500 company, chances are your most valuable data lives in Oracle Database. It is the one of the most widely used enterprise database for a reason — decades of battle-tested reliability, performance, and governance have made it the backbone of mission-critical systems across finance, healthcare, telecommunications, government, and retail.
But here’s the friction: when ML teams want to build features for their models, they typically export data out of Oracle into some other system — a data lake, a warehouse, a CSV on someone’s laptop. That data movement introduces latency, staleness bugs, security blind spots, and an entire class of silent failures that only surface when a model starts degrading in production.
What if you didn’t have to move your data at all?
With Feast’s new Oracle offline store support — now fully integrated into the Feast Kubernetes operator — you can define, compute, and serve ML features directly from your existing Oracle infrastructure. No data migration. No pipeline duct tape. No compromises.
What’s New
Oracle Database is now a first-class offline store in Feast, supported across the full stack:
| Layer | What Changed |
|---|---|
| Python SDK | OracleOfflineStore and OracleSource — a complete offline store implementation built on ibis-framework[oracle] |
| Feast Operator (v1 API) | oracle is a validated persistence type in the FeatureStore CRD, with Secret-backed credential management |
| CRD & Validation | Kubernetes validates oracle at admission time — bad configs are rejected before they ever reach the operator |
| Type System | Full Oracle-to-Feast type mapping covering NUMBER, VARCHAR2, CLOB, BLOB, BINARY_FLOAT, TIMESTAMP, and more |
| Documentation | Reference docs for the Oracle offline store and Oracle data source |
This isn’t a thin wrapper or a partial integration. The Oracle offline store supports the complete Feast offline store interface:
get_historical_features— point-in-time correct feature retrieval for training datasets, preventing future data leakagepull_latest_from_table_or_query— fetch the most recent feature valuespull_all_from_table_or_query— full table scans for batch processingoffline_write_batch— write feature data back to Oraclewrite_logged_features— persist logged features for monitoring and debugging
Why This Matters: Oracle Is Where the Enterprise Lives
Oracle Database isn’t just another backend option. It is the database that runs the world’s banks, hospitals, supply chains, and telecom networks. When we say “number one enterprise database,” we mean it in terms of:
- Installed base — More Fortune 100 companies run Oracle than any other database
- Data gravity — Petabytes of the world’s most regulated, most valuable data already sits in Oracle
- Operational maturity — Decades of enterprise features: partitioning, RAC, Data Guard, Advanced Security, Audit Vault
For ML teams in these organizations, the path to production has always involved a painful detour: extract data from Oracle, load it somewhere else, build features there, then figure out how to serve them. Every step in that chain is a potential point of failure, a security review, and a compliance headache.
Feast’s Oracle integration eliminates the detour entirely. Your features are computed where your data already has governance, backup, encryption, and access controls in place.
How It Works: From Oracle Table to Production Features
Step 1: Configure your feature store
Point Feast at your Oracle database in feature_store.yaml:
project: my_project
registry: data/registry.db
provider: local
offline_store:
type: oracle
host: oracle-db.example.com
port: 1521
user: feast_user
password: ${DB_PASSWORD}
service_name: ORCL
online_store:
path: data/online_store.db
Feast supports three Oracle connection modes — service_name, sid, or dsn — so it fits however your DBA has set things up:
# Using SID
offline_store:
type: oracle
host: oracle-db.example.com
port: 1521
user: feast_user
password: ${DB_PASSWORD}
sid: ORCL
# Using full DSN
offline_store:
type: oracle
host: oracle-db.example.com
port: 1521
user: feast_user
password: ${DB_PASSWORD}
dsn: "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle-db.example.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))"
Step 2: Define features backed by Oracle tables
from feast import FeatureView, Field, Entity
from feast.types import Float64, Int64
from feast.infra.offline_stores.contrib.oracle_offline_store.oracle_source import OracleSource
from datetime import timedelta
customer = Entity(name="customer_id", join_keys=["customer_id"])
customer_transactions = OracleSource(
name="customer_txn_source",
table_ref="ANALYTICS.CUSTOMER_TRANSACTIONS",
event_timestamp_column="TXN_TIMESTAMP",
)
customer_features = FeatureView(
name="customer_transaction_features",
entities=[customer],
ttl=timedelta(days=30),
schema=[
Field(name="avg_txn_amount_30d", dtype=Float64),
Field(name="txn_count_7d", dtype=Int64),
Field(name="max_txn_amount_90d", dtype=Float64),
],
source=customer_transactions,
)
Step 3: Retrieve features for training
from feast import FeatureStore
import pandas as pd
store = FeatureStore(repo_path=".")
entity_df = pd.DataFrame({
"customer_id": [101, 102, 103, 104],
"event_timestamp": pd.to_datetime(["2026-01-15", "2026-01-16", "2026-02-01", "2026-02-15"]),
})
training_df = store.get_historical_features(
entity_df=entity_df,
features=[
"customer_transaction_features:avg_txn_amount_30d",
"customer_transaction_features:txn_count_7d",
"customer_transaction_features:max_txn_amount_90d",
],
).to_df()
Feast performs point-in-time correct joins against Oracle — no future data leaks into your training set, and the query runs inside Oracle, not in some external compute engine.
Step 4: Serve features in production
store.materialize_incremental(end_date=datetime.utcnow())
features = store.get_online_features(
features=[
"customer_transaction_features:avg_txn_amount_30d",
"customer_transaction_features:txn_count_7d",
],
entity_rows=[{"customer_id": 101}],
).to_dict()
Kubernetes-Native: The Feast Operator and Oracle
For teams running Feast on Kubernetes, the Feast operator now natively manages Oracle-backed feature stores through the FeatureStore custom resource.
Create a Secret with your Oracle credentials
apiVersion: v1
kind: Secret
metadata:
name: oracle-offline-store
type: Opaque
stringData:
oracle: |
host: oracle-db.example.com
port: "1521"
user: feast_user
password: changeme
service_name: ORCL
Define a FeatureStore custom resource
apiVersion: feast.dev/v1
kind: FeatureStore
metadata:
name: production-feature-store
spec:
services:
offlineStore:
persistence:
store:
type: oracle
secretRef:
name: oracle-offline-store
Apply and let the operator do the rest
kubectl apply -f feature-store.yaml
The operator validates the configuration against the CRD schema (rejecting invalid types at admission), reads the Secret, merges the Oracle connection parameters into the generated Feast config, and deploys the offline store service. Credential rotation, version upgrades, and config changes are all handled through Kubernetes-native reconciliation — the same operational model your platform team already knows.
Because credentials live in Kubernetes Secrets, they integrate naturally with external secret managers like HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault through standard Kubernetes mechanisms. Oracle credentials never appear in plain text in your manifests or CI/CD logs.
Real-World Use Cases
Financial Services: Fraud Detection Without Data Movement
A global bank running Oracle for core banking can now build fraud detection features — transaction velocity, merchant category patterns, geographic anomaly scores — directly from their existing Oracle tables. The features stay within the same security perimeter, audit trail, and encryption boundary as the source data. No ETL pipeline to a secondary warehouse means no replication lag and no additional attack surface.
Healthcare: Predictive Models on Regulated Data
Hospitals and insurers with patient data in Oracle can compute ML features (readmission risk scores, treatment outcome signals, resource utilization patterns) without copying PHI into a less governed system. Feast’s feature definitions become the documented lineage trail that compliance teams need.
Telecommunications: Network Optimization at Scale
Telcos managing billions of CDRs and network metrics in Oracle can build churn prediction, capacity forecasting, and service quality features on top of the data they already have — avoiding the cost and latency of replicating to a separate analytical platform.
Retail: Demand Forecasting from Point-of-Sale Data
Retailers with Oracle-backed inventory and transaction systems can build demand forecasting and recommendation features without standing up a parallel data infrastructure. Features computed in Oracle can be materialized to the online store for real-time serving at the edge.
Under the Hood: Built on ibis
The Oracle offline store is built on the ibis framework, a portable Python dataframe API that compiles to native SQL for each backend. This means:
- Queries execute inside Oracle — ibis translates Feast’s retrieval operations into Oracle SQL, pushing computation to where the data lives
- No intermediate data movement — results are streamed back as Arrow tables without staging in a temporary system
- Full Oracle type fidelity — the type mapping covers the complete spectrum of Oracle data types, including
NUMBER,VARCHAR2,NVARCHAR2,CHAR,CLOB,NCLOB,BLOB,RAW,BINARY_FLOAT,BINARY_DOUBLE,DATE,TIMESTAMP,INTEGER,SMALLINT, andFLOAT - Automatic DATE-to-TIMESTAMP casting — Oracle’s
DATEtype (which includes time components, unlike SQL standard) is properly handled
Getting Started
Install Feast with Oracle support:
pip install 'feast[oracle]'
For Kubernetes deployments, ensure you’re running Feast operator v0.61.0+ with the v1 API.
The full configuration reference, functionality matrix, and data source documentation are available in the Feast docs:
Get started with the Feast documentation and join the community on GitHub and Slack. We’d love to hear how you’re using Feast with Oracle.