diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index c405c1f0840..2f2d0d2f5e3 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -2,7 +2,7 @@
name: Bug report
about: Create a report to help us improve
title: ''
-labels: ''
+labels: 'kind/bug, priority/p2'
assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index bbcbbe7d615..d73d6444812 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -2,7 +2,7 @@
name: Feature request
about: Suggest an idea for this project
title: ''
-labels: ''
+labels: 'kind/feature'
assignees: ''
---
diff --git a/.github/workflows/master_only.yml b/.github/workflows/master_only.yml
index 42f0383832a..3cdddba8479 100644
--- a/.github/workflows/master_only.yml
+++ b/.github/workflows/master_only.yml
@@ -125,6 +125,11 @@ jobs:
FEAST_SERVER_DOCKER_IMAGE_TAG: ${{ needs.build-lambda-docker-image.outputs.DOCKER_IMAGE_TAG }}
FEAST_USAGE: "False"
IS_TEST: "True"
+ SNOWFLAKE_CI_DEPLOYMENT: ${{ secrets.SNOWFLAKE_CI_DEPLOYMENT }}
+ SNOWFLAKE_CI_USER: ${{ secrets.SNOWFLAKE_CI_USER }}
+ SNOWFLAKE_CI_PASSWORD: ${{ secrets.SNOWFLAKE_CI_PASSWORD }}
+ SNOWFLAKE_CI_ROLE: ${{ secrets.SNOWFLAKE_CI_ROLE }}
+ SNOWFLAKE_CI_WAREHOUSE: ${{ secrets.SNOWFLAKE_CI_WAREHOUSE }}
run: pytest -n 8 --cov=./ --cov-report=xml --verbose --color=yes sdk/python/tests --integration --durations=5
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
@@ -140,6 +145,11 @@ jobs:
FEAST_SERVER_DOCKER_IMAGE_TAG: ${{ needs.build-lambda-docker-image.outputs.DOCKER_IMAGE_TAG }}
FEAST_USAGE: "False"
IS_TEST: "True"
+ SNOWFLAKE_CI_DEPLOYMENT: ${{ secrets.SNOWFLAKE_CI_DEPLOYMENT }}
+ SNOWFLAKE_CI_USER: ${{ secrets.SNOWFLAKE_CI_USER }}
+ SNOWFLAKE_CI_PASSWORD: ${{ secrets.SNOWFLAKE_CI_PASSWORD }}
+ SNOWFLAKE_CI_ROLE: ${{ secrets.SNOWFLAKE_CI_ROLE }}
+ SNOWFLAKE_CI_WAREHOUSE: ${{ secrets.SNOWFLAKE_CI_WAREHOUSE }}
run: pytest --verbose --color=yes sdk/python/tests --integration --benchmark --benchmark-autosave --benchmark-save-data --durations=5
- name: Upload Benchmark Artifact to S3
run: aws s3 cp --recursive .benchmarks s3://feast-ci-pytest-benchmarks
diff --git a/.github/workflows/pr_integration_tests.yml b/.github/workflows/pr_integration_tests.yml
index 8a910f943c6..e04b78ec320 100644
--- a/.github/workflows/pr_integration_tests.yml
+++ b/.github/workflows/pr_integration_tests.yml
@@ -151,6 +151,11 @@ jobs:
FEAST_SERVER_DOCKER_IMAGE_TAG: ${{ needs.build-docker-image.outputs.DOCKER_IMAGE_TAG }}
FEAST_USAGE: "False"
IS_TEST: "True"
+ SNOWFLAKE_CI_DEPLOYMENT: ${{ secrets.SNOWFLAKE_CI_DEPLOYMENT }}
+ SNOWFLAKE_CI_USER: ${{ secrets.SNOWFLAKE_CI_USER }}
+ SNOWFLAKE_CI_PASSWORD: ${{ secrets.SNOWFLAKE_CI_PASSWORD }}
+ SNOWFLAKE_CI_ROLE: ${{ secrets.SNOWFLAKE_CI_ROLE }}
+ SNOWFLAKE_CI_WAREHOUSE: ${{ secrets.SNOWFLAKE_CI_WAREHOUSE }}
run: pytest -n 8 --cov=./ --cov-report=xml --verbose --color=yes sdk/python/tests --integration --durations=5
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5ff1139acba..8dd29aeb588 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -144,5 +144,60 @@ jobs:
python3 setup.py sdist bdist_wheel
python3 -m twine upload --verbose dist/*
- # TODO(adchia): publish java sdk once maven repo is updated
- # See https://github.com/feast-dev/feast-java/blob/master/.github/workflows/release.yml#L104
\ No newline at end of file
+ publish-python-sdk-no-telemetry:
+ runs-on: ubuntu-latest
+ env:
+ TWINE_USERNAME: __token__
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
+ container: python:3.7
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install pip-tools
+ run: pip install pip-tools
+ - name: Install dependencies
+ run: make install-python-ci-dependencies PYTHON=3.7
+ - name: Publish Python Package
+ run: |
+ cd sdk/python
+ sed -i 's/DEFAULT_FEAST_USAGE_VALUE = "True"/DEFAULT_FEAST_USAGE_VALUE = "False"/g' feast/constants.py
+ sed -i 's/NAME = "feast"/NAME = "feast-no-telemetry"/g' setup.py
+ python3 -m pip install --user --upgrade setuptools wheel twine
+ python3 setup.py sdist bdist_wheel
+ python3 -m twine upload --verbose dist/*
+
+ publish-java-sdk:
+ container: maven:3.6-jdk-11
+ runs-on: ubuntu-latest
+ needs: get-version
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'true'
+ - name: Set up JDK 11
+ uses: actions/setup-java@v1
+ with:
+ java-version: '11'
+ java-package: jdk
+ architecture: x64
+ - uses: actions/setup-python@v2
+ with:
+ python-version: '3.7'
+ architecture: 'x64'
+ - uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-it-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-it-maven-
+ - name: Publish java sdk
+ env:
+ VERSION_WITHOUT_PREFIX: ${{ needs.get-version.outputs.version_without_prefix }}
+ GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
+ GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
+ MAVEN_SETTINGS: ${{ secrets.MAVEN_SETTINGS }}
+ run: |
+ echo -n "$GPG_PUBLIC_KEY" > /root/public-key
+ echo -n "$GPG_PRIVATE_KEY" > /root/private-key
+ mkdir -p /root/.m2/
+ echo -n "$MAVEN_SETTINGS" > /root/.m2/settings.xml
+ infra/scripts/publish-java-sdk.sh --revision ${VERSION_WITHOUT_PREFIX} --gpg-key-import-dir /root
diff --git a/.prow.yaml b/.prow.yaml
index b03a71a475a..4c8372cc7c8 100644
--- a/.prow.yaml
+++ b/.prow.yaml
@@ -1,102 +1,4 @@
-presubmits:
-- name: test-core-and-ingestion
- decorate: true
- spec:
- containers:
- - image: maven:3.6-jdk-11
- command: ["infra/scripts/test-java-core-ingestion.sh"]
- resources:
- requests:
- cpu: "2000m"
- memory: "1536Mi"
- skip_branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-core-and-ingestion-java-8
- decorate: true
- always_run: true
- spec:
- containers:
- - image: maven:3.6-jdk-8
- command: ["infra/scripts/test-java-core-ingestion.sh"]
- resources:
- requests:
- cpu: "2000m"
- memory: "1536Mi"
- branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-serving
- decorate: true
- spec:
- containers:
- - image: maven:3.6-jdk-11
- command: ["infra/scripts/test-java-serving.sh"]
- skip_branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-serving-java-8
- decorate: true
- always_run: true
- spec:
- containers:
- - image: maven:3.6-jdk-8
- command: ["infra/scripts/test-java-serving.sh"]
- branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-java-sdk
- decorate: true
- spec:
- containers:
- - image: maven:3.6-jdk-11
- command: ["infra/scripts/test-java-sdk.sh"]
- skip_branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-java-sdk-java-8
- decorate: true
- always_run: true
- spec:
- containers:
- - image: maven:3.6-jdk-8
- command: ["infra/scripts/test-java-sdk.sh"]
- branches:
- - ^v0\.(3|4)-branch$
-
-- name: test-golang-sdk
- decorate: true
- spec:
- containers:
- - image: golang:1.13
- command: ["infra/scripts/test-golang-sdk.sh"]
-
postsubmits:
-- name: publish-python-sdk
- decorate: true
- spec:
- containers:
- - image: python:3
- command:
- - sh
- - -c
- - |
- make package-protos && make compile-protos-python && infra/scripts/publish-python-sdk.sh \
- --directory-path sdk/python --repository pypi
- volumeMounts:
- - name: pypirc
- mountPath: /root/.pypirc
- subPath: .pypirc
- readOnly: true
- volumes:
- - name: pypirc
- secret:
- secretName: pypirc
- branches:
- # Filter on tags with semantic versioning, prefixed with "v"
- # https://github.com/semver/semver/issues/232
- - ^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$
-
- name: publish-java-sdk
decorate: true
spec:
@@ -128,31 +30,3 @@ postsubmits:
branches:
# Filter on tags with semantic versioning, prefixed with "v".
- ^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$
-
-- name: publish-java-8-sdk
- decorate: true
- spec:
- containers:
- - image: maven:3.6-jdk-8
- command:
- - bash
- - -c
- - infra/scripts/publish-java-sdk.sh --revision ${PULL_BASE_REF:1}
- volumeMounts:
- - name: gpg-keys
- mountPath: /etc/gpg
- readOnly: true
- - name: maven-settings
- mountPath: /root/.m2/settings.xml
- subPath: settings.xml
- readOnly: true
- volumes:
- - name: gpg-keys
- secret:
- secretName: gpg-keys
- - name: maven-settings
- secret:
- secretName: maven-settings
- branches:
- # Filter on tags with semantic versioning, prefixed with "v". v0.3 and v0.4 only.
- - ^v0\.(3|4)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53514c5ad0d..bc0368cca25 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,83 @@
# Changelog
+## [v0.18.0](https://github.com/feast-dev/feast/tree/v0.18.0) (2022-02-05)
+
+[Full Changelog](https://github.com/feast-dev/feast/compare/v0.17.0...v0.18.0)
+
+**Implemented enhancements:**
+
+- Tutorial on validation of historical features [\#2277](https://github.com/feast-dev/feast/pull/2277) ([pyalex](https://github.com/pyalex))
+- Feast plan clean up [\#2256](https://github.com/feast-dev/feast/pull/2256) ([felixwang9817](https://github.com/felixwang9817))
+- Return `UNIX\_TIMESTAMP` as Python `datetime` [\#2244](https://github.com/feast-dev/feast/pull/2244) ([judahrand](https://github.com/judahrand))
+- Validating historical features against reference dataset with "great expectations" profiler [\#2243](https://github.com/feast-dev/feast/pull/2243) ([pyalex](https://github.com/pyalex))
+- Implement feature\_store.\_apply\_diffs to handle registry and infra diffs [\#2238](https://github.com/feast-dev/feast/pull/2238) ([felixwang9817](https://github.com/felixwang9817))
+- Compare Python objects instead of proto objects [\#2227](https://github.com/feast-dev/feast/pull/2227) ([felixwang9817](https://github.com/felixwang9817))
+- Modify feature\_store.plan to produce an InfraDiff [\#2211](https://github.com/feast-dev/feast/pull/2211) ([felixwang9817](https://github.com/felixwang9817))
+- Implement diff\_infra\_protos method for feast plan [\#2204](https://github.com/feast-dev/feast/pull/2204) ([felixwang9817](https://github.com/felixwang9817))
+- Persisting results of historical retrieval [\#2197](https://github.com/feast-dev/feast/pull/2197) ([pyalex](https://github.com/pyalex))
+- Merge feast-snowflake plugin into main repo with documentation [\#2193](https://github.com/feast-dev/feast/pull/2193) ([sfc-gh-madkins](https://github.com/sfc-gh-madkins))
+- Add InfraDiff class for feast plan [\#2190](https://github.com/feast-dev/feast/pull/2190) ([felixwang9817](https://github.com/felixwang9817))
+- Use FeatureViewProjection instead of FeatureView in ODFV [\#2186](https://github.com/feast-dev/feast/pull/2186) ([judahrand](https://github.com/judahrand))
+
+**Fixed bugs:**
+
+- Set `created\_timestamp` and `last\_updated\_timestamp` fields [\#2266](https://github.com/feast-dev/feast/pull/2266) ([judahrand](https://github.com/judahrand))
+- Use `datetime.utcnow\(\)` to avoid timezone issues [\#2265](https://github.com/feast-dev/feast/pull/2265) ([judahrand](https://github.com/judahrand))
+- Fix Redis key serialization in java feature server [\#2264](https://github.com/feast-dev/feast/pull/2264) ([pyalex](https://github.com/pyalex))
+- modify registry.db s3 object initialization to work in S3 subdirectory with Java Feast Server [\#2259](https://github.com/feast-dev/feast/pull/2259) ([NalinGHub](https://github.com/NalinGHub))
+- Add snowflake environment variables to allow testing on snowflake infra [\#2258](https://github.com/feast-dev/feast/pull/2258) ([sfc-gh-madkins](https://github.com/sfc-gh-madkins))
+- Correct inconsistent dependency [\#2255](https://github.com/feast-dev/feast/pull/2255) ([judahrand](https://github.com/judahrand))
+- Fix for historical field mappings [\#2252](https://github.com/feast-dev/feast/pull/2252) ([michelle-rascati-sp](https://github.com/michelle-rascati-sp))
+- Add backticks to left\_table\_query\_string [\#2250](https://github.com/feast-dev/feast/pull/2250) ([dmille](https://github.com/dmille))
+- Fix inference of BigQuery ARRAY types. [\#2245](https://github.com/feast-dev/feast/pull/2245) ([judahrand](https://github.com/judahrand))
+- Fix Redshift data creator [\#2242](https://github.com/feast-dev/feast/pull/2242) ([felixwang9817](https://github.com/felixwang9817))
+- Delete entity key from Redis only when all attached feature views are gone [\#2240](https://github.com/feast-dev/feast/pull/2240) ([pyalex](https://github.com/pyalex))
+- Tests for transformation service integration in java feature server [\#2236](https://github.com/feast-dev/feast/pull/2236) ([pyalex](https://github.com/pyalex))
+- Feature server helm chart produces invalid YAML [\#2234](https://github.com/feast-dev/feast/pull/2234) ([pyalex](https://github.com/pyalex))
+- Docker build fails for java feature server [\#2230](https://github.com/feast-dev/feast/pull/2230) ([pyalex](https://github.com/pyalex))
+- Fix ValueType.UNIX\_TIMESTAMP conversions [\#2219](https://github.com/feast-dev/feast/pull/2219) ([judahrand](https://github.com/judahrand))
+- Add on demand feature views deletion [\#2203](https://github.com/feast-dev/feast/pull/2203) ([corentinmarek](https://github.com/corentinmarek))
+- Compare only specs in integration tests [\#2200](https://github.com/feast-dev/feast/pull/2200) ([felixwang9817](https://github.com/felixwang9817))
+- Bump log4j-core from 2.17.0 to 2.17.1 in /java [\#2189](https://github.com/feast-dev/feast/pull/2189) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Support multiple application properties files \(incl from classpath\) [\#2187](https://github.com/feast-dev/feast/pull/2187) ([pyalex](https://github.com/pyalex))
+- Avoid requesting features from OnlineStore twice [\#2185](https://github.com/feast-dev/feast/pull/2185) ([judahrand](https://github.com/judahrand))
+- Speed up Datastore deletes by batch deletions with multithreading [\#2182](https://github.com/feast-dev/feast/pull/2182) ([ptoman-pa](https://github.com/ptoman-pa))
+- Fixes large payload runtime exception in Datastore \(issue 1633\) [\#2181](https://github.com/feast-dev/feast/pull/2181) ([ptoman-pa](https://github.com/ptoman-pa))
+
+**Merged pull requests:**
+
+- Add link to community plugin for Spark offline store [\#2279](https://github.com/feast-dev/feast/pull/2279) ([adchia](https://github.com/adchia))
+- Fix broken links on documentation [\#2278](https://github.com/feast-dev/feast/pull/2278) ([adchia](https://github.com/adchia))
+- Publish alternative python package with FEAST\_USAGE=False by default [\#2275](https://github.com/feast-dev/feast/pull/2275) ([pyalex](https://github.com/pyalex))
+- Unify all helm charts versions [\#2274](https://github.com/feast-dev/feast/pull/2274) ([pyalex](https://github.com/pyalex))
+- Fix / update helm chart workflows to push the feast python server [\#2273](https://github.com/feast-dev/feast/pull/2273) ([adchia](https://github.com/adchia))
+- Update Feast Serving documentation with ways to run and debug locally [\#2272](https://github.com/feast-dev/feast/pull/2272) ([adchia](https://github.com/adchia))
+- Fix Snowflake docs [\#2270](https://github.com/feast-dev/feast/pull/2270) ([felixwang9817](https://github.com/felixwang9817))
+- Update local-feature-server.md [\#2269](https://github.com/feast-dev/feast/pull/2269) ([tsotnet](https://github.com/tsotnet))
+- Update docs to include Snowflake/DQM and removing unused docs from old versions of Feast [\#2268](https://github.com/feast-dev/feast/pull/2268) ([adchia](https://github.com/adchia))
+- Graduate Python feature server [\#2263](https://github.com/feast-dev/feast/pull/2263) ([felixwang9817](https://github.com/felixwang9817))
+- Fix benchmark tests at HEAD by passing in Snowflake secrets [\#2262](https://github.com/feast-dev/feast/pull/2262) ([adchia](https://github.com/adchia))
+- Refactor `pa\_to\_feast\_value\_type` [\#2246](https://github.com/feast-dev/feast/pull/2246) ([judahrand](https://github.com/judahrand))
+- Allow using pandas.StringDtype to support on-demand features with STRING type [\#2229](https://github.com/feast-dev/feast/pull/2229) ([pyalex](https://github.com/pyalex))
+- Bump jackson-databind from 2.10.1 to 2.10.5.1 in /java/common [\#2228](https://github.com/feast-dev/feast/pull/2228) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Split apply total parse repo [\#2226](https://github.com/feast-dev/feast/pull/2226) ([mickey-liu](https://github.com/mickey-liu))
+- Publish renamed java packages to maven central \(via Sonatype\) [\#2225](https://github.com/feast-dev/feast/pull/2225) ([pyalex](https://github.com/pyalex))
+- Make online store nullable [\#2224](https://github.com/feast-dev/feast/pull/2224) ([mirayyuce](https://github.com/mirayyuce))
+- Optimize `\_populate\_result\_rows\_from\_feature\_view` [\#2223](https://github.com/feast-dev/feast/pull/2223) ([judahrand](https://github.com/judahrand))
+- Update to newer `redis-py` [\#2221](https://github.com/feast-dev/feast/pull/2221) ([judahrand](https://github.com/judahrand))
+- Adding a local feature server test [\#2217](https://github.com/feast-dev/feast/pull/2217) ([adchia](https://github.com/adchia))
+- replace GetOnlineFeaturesResponse with GetOnlineFeaturesResponseV2 in… [\#2214](https://github.com/feast-dev/feast/pull/2214) ([tsotnet](https://github.com/tsotnet))
+- Updates to click==8.\* [\#2210](https://github.com/feast-dev/feast/pull/2210) ([diogommartins](https://github.com/diogommartins))
+- Bump protobuf-java from 3.12.2 to 3.16.1 in /java [\#2208](https://github.com/feast-dev/feast/pull/2208) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Add default priority for bug reports [\#2207](https://github.com/feast-dev/feast/pull/2207) ([adchia](https://github.com/adchia))
+- Modify issue templates to automatically attach labels [\#2205](https://github.com/feast-dev/feast/pull/2205) ([adchia](https://github.com/adchia))
+- Python FeatureServer optimization [\#2202](https://github.com/feast-dev/feast/pull/2202) ([judahrand](https://github.com/judahrand))
+- Refactor all importer logic to belong in feast.importer [\#2199](https://github.com/feast-dev/feast/pull/2199) ([felixwang9817](https://github.com/felixwang9817))
+- Refactor `OnlineResponse.to\_dict\(\)` [\#2196](https://github.com/feast-dev/feast/pull/2196) ([judahrand](https://github.com/judahrand))
+- \[Java feature server\] Converge ServingService API to make Python and Java feature servers consistent [\#2166](https://github.com/feast-dev/feast/pull/2166) ([pyalex](https://github.com/pyalex))
+- Add a unit test for the tag\_proto\_objects method [\#2163](https://github.com/feast-dev/feast/pull/2163) ([achals](https://github.com/achals))
+
+
## [v0.17.0](https://github.com/feast-dev/feast/tree/v0.17.0) (2021-12-31)
[Full Changelog](https://github.com/feast-dev/feast/compare/v0.16.1...v0.17.0)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6918d7f1de9..bef64577f91 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,8 +5,8 @@
This guide is targeted at developers looking to contribute to Feast components in
the main Feast repository:
- [Feast Python SDK / CLI](#feast-python-sdk-%2F-cli)
+- [Feast Java Serving](#feast-java-serving)
- [Feast Go Client](#feast-go-client)
-- [Feast Terraform](#feast-terraform)
## Making a pull request
@@ -50,7 +50,7 @@ Setting up your development environment for Feast Python SDK / CLI:
3. _Recommended:_ Create a virtual environment to isolate development dependencies to be installed
```sh
# create & activate a virtual environment
-python -v venv venv/
+python -m venv venv/
source venv/bin/activate
```
@@ -117,6 +117,9 @@ AWS
Then run `make test-python-integration`. Note that for GCP / AWS, this will create new temporary tables / datasets.
+## Feast Java Serving
+See [Java contributing guide](java/CONTRIBUTING.md)
+
## Feast Go Client
:warning: Feast Go Client will move to its own standalone repository in the future.
@@ -152,14 +155,4 @@ go vet
Unit tests for the Feast Go Client can be run as follows:
```sh
go test
-```
-
-## Feast on Kubernetes
-:warning: Feast Terraform will move to its own standalone repository in the future.
-
-See the deployment guide of the respective cloud providers for how to work with these deployments:
-- [Helm Deployment on Kubernetes](https://docs.feast.dev/feast-on-kubernetes/getting-started/install-feast/kubernetes-with-helm)
-- [Terraform Deployment on Amazon EKS](https://docs.feast.dev/feast-on-kubernetes/getting-started/install-feast/kubernetes-amazon-eks-with-terraform)
-- [Terraform Deployment on Azure AKS](https://docs.feast.dev/feast-on-kubernetes/getting-started/install-feast/kubernetes-azure-aks-with-terraform)
-- [Terraform Deployment on Google Cloud GKE](https://docs.feast.dev/feast-on-kubernetes/getting-started/install-feast/google-cloud-gke-with-terraform)
-- [Kustomize Deployment on IBM Cloud IKS or OpenShift](https://docs.feast.dev/feast-on-kubernetes/getting-started/install-feast/ibm-cloud-iks-with-kustomize)
+```
\ No newline at end of file
diff --git a/README.md b/README.md
index 6ef49896d4c..de972225dd2 100644
--- a/README.md
+++ b/README.md
@@ -23,9 +23,9 @@ Feast is an open source feature store for machine learning. Feast is the fastest
Please see our [documentation](https://docs.feast.dev/) for more information about the project.
## 📐 Architecture
-
+
-The above architecture is the minimal Feast deployment. Want to run the full Feast on GCP/AWS? Click [here](https://docs.feast.dev/how-to-guides/feast-gcp-aws).
+The above architecture is the minimal Feast deployment. Want to run the full Feast on Snowflake/GCP/AWS? Click [here](https://docs.feast.dev/how-to-guides/feast-snowflake-gcp-aws).
## 🐣 Getting Started
@@ -134,26 +134,29 @@ The list below contains the functionality that contributors are planning to deve
* We welcome contribution to all items in the roadmap!
* Want to influence our roadmap and prioritization? Submit your feedback to [this form](https://docs.google.com/forms/d/e/1FAIpQLSfa1nRQ0sKz-JEFnMMCi4Jseag\_yDssO\_3nV9qMfxfrkil-wA/viewform).
* Want to speak to a Feast contributor? We are more than happy to jump on a call. Please schedule a time using [Calendly](https://calendly.com/d/x2ry-g5bb/meet-with-feast-team).
+
* **Data Sources**
+ * [x] [Snowflake source](https://docs.feast.dev/reference/data-sources/snowflake)
* [x] [Redshift source](https://docs.feast.dev/reference/data-sources/redshift)
* [x] [BigQuery source](https://docs.feast.dev/reference/data-sources/bigquery)
* [x] [Parquet file source](https://docs.feast.dev/reference/data-sources/file)
* [x] [Synapse source (community plugin)](https://github.com/Azure/feast-azure)
* [x] [Hive (community plugin)](https://github.com/baineng/feast-hive)
* [x] [Postgres (community plugin)](https://github.com/nossrannug/feast-postgres)
- * [x] Kafka source (with [push support into the online store](reference/alpha-stream-ingestion.md))
- * [x] [Snowflake source (community plugin)](https://github.com/sfc-gh-madkins/feast-snowflake)
+ * [x] [Spark (community plugin)](https://github.com/Adyen/feast-spark-offline-store)
+ * [x] Kafka source (with [push support into the online store](https://docs.feast.dev/reference/alpha-stream-ingestion))
* [ ] HTTP source
* **Offline Stores**
+ * [x] [Snowflake](https://docs.feast.dev/reference/offline-stores/snowflake)
* [x] [Redshift](https://docs.feast.dev/reference/offline-stores/redshift)
* [x] [BigQuery](https://docs.feast.dev/reference/offline-stores/bigquery)
* [x] [Synapse (community plugin)](https://github.com/Azure/feast-azure)
* [x] [Hive (community plugin)](https://github.com/baineng/feast-hive)
* [x] [Postgres (community plugin)](https://github.com/nossrannug/feast-postgres)
+ * [x] [Trino (communiuty plugin)](https://github.com/Shopify/feast-trino)
+ * [x] [Spark (community plugin)](https://github.com/Adyen/feast-spark-offline-store)
* [x] [In-memory / Pandas](https://docs.feast.dev/reference/offline-stores/file)
* [x] [Custom offline store support](https://docs.feast.dev/how-to-guides/adding-a-new-offline-store)
- * [x] [Snowflake (community plugin)](https://github.com/sfc-gh-madkins/feast-snowflake)
- * [x] [Trino (communiuty plugin)](https://github.com/Shopify/feast-trino)
* **Online Stores**
* [x] [DynamoDB](https://docs.feast.dev/reference/online-stores/dynamodb)
* [x] [Redis](https://docs.feast.dev/reference/online-stores/redis)
@@ -188,7 +191,7 @@ The list below contains the functionality that contributors are planning to deve
* [ ] Delete API
* [ ] Feature Logging (for training)
* **Data Quality Management (See [RFC](https://docs.google.com/document/d/110F72d4NTv80p35wDSONxhhPBqWRwbZXG4f9mNEMd98/edit))**
- * [ ] Data profiling and validation (Great Expectations) (Planned for Q1 2022)
+ * [x] Data profiling and validation (Great Expectations)
* [ ] Metric production
* [ ] Training-serving skew detection
* [ ] Drift detection
@@ -196,10 +199,10 @@ The list below contains the functionality that contributors are planning to deve
* [x] Python SDK for browsing feature registry
* [x] CLI for browsing feature registry
* [x] Model-centric feature tracking (feature services)
+ * [x] Amundsen integration (see [Feast extractor](https://github.com/amundsen-io/amundsen/blob/main/databuilder/databuilder/extractor/feast_extractor.py))
* [ ] REST API for browsing feature registry
* [ ] Feast Web UI
* [ ] Feature versioning
- * [ ] Amundsen integration
## 🎓 Important Resources
@@ -207,7 +210,7 @@ The list below contains the functionality that contributors are planning to deve
Please refer to the official documentation at [Documentation](https://docs.feast.dev/)
* [Quickstart](https://docs.feast.dev/getting-started/quickstart)
* [Tutorials](https://docs.feast.dev/tutorials/tutorials-overview)
- * [Running Feast with GCP/AWS](https://docs.feast.dev/how-to-guides/feast-gcp-aws)
+ * [Running Feast with Snowflake/GCP/AWS](https://docs.feast.dev/how-to-guides/feast-snowflake-gcp-aws)
* [Change Log](https://github.com/feast-dev/feast/blob/master/CHANGELOG.md)
* [Slack (#Feast)](https://slack.feast.dev/)
diff --git a/docs/README.md b/docs/README.md
index 1a76adbde3d..f8b9af3c32f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -4,7 +4,7 @@
Feast (**Fea**ture **St**ore) is an operational data system for managing and serving machine learning features to models in production. Feast is able to serve feature data to models from a low-latency online store (for real-time prediction) or from an offline store (for scale-out batch scoring or model training).
-
+
## Problems Feast Solves
@@ -30,7 +30,7 @@ Feast addresses this problem by introducing feature reuse through a centralized
**Feature discovery:** We also aim for Feast to include a first-class user interface for exploring and discovering entities and features.
-**Feature validation:** We additionally aim for Feast to improve support for statistics generation of feature data and subsequent validation of these statistics. Current support is limited.
+**Feature validation:** We additionally aim for Feast to improve support for statistics generation of feature data and subsequent validation of these statistics. Current support is limited.
## What Feast is not
@@ -52,6 +52,6 @@ Explore the following resources to get started with Feast:
* [Concepts](getting-started/concepts/) describes all important Feast API concepts
* [Architecture](getting-started/architecture-and-components/) describes Feast's overall architecture.
* [Tutorials](tutorials/tutorials-overview.md) shows full examples of using Feast in machine learning applications.
-* [Running Feast with GCP/AWS](how-to-guides/feast-gcp-aws/) provides a more in-depth guide to using Feast.
+* [Running Feast with Snowflake/GCP/AWS](how-to-guides/feast-snowflake-gcp-aws/) provides a more in-depth guide to using Feast.
* [Reference](reference/feast-cli-commands.md) contains detailed API and design documents.
* [Contributing](project/contributing.md) contains resources for anyone who wants to contribute to Feast.
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index 987a432ac9a..439742af9f5 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -16,10 +16,11 @@
* [Feature service](getting-started/concepts/feature-service.md)
* [Feature retrieval](getting-started/concepts/feature-retrieval.md)
* [Point-in-time joins](getting-started/concepts/point-in-time-joins.md)
+ * [Dataset](getting-started/concepts/dataset.md)
* [Architecture](getting-started/architecture-and-components/README.md)
* [Overview](getting-started/architecture-and-components/overview.md)
* [Feature repository](getting-started/architecture-and-components/feature-repository.md)
- * [Registry](getting-started/architecture-and-components/untitled.md)
+ * [Registry](getting-started/architecture-and-components/registry.md)
* [Offline store](getting-started/architecture-and-components/offline-store.md)
* [Online store](getting-started/architecture-and-components/online-store.md)
* [Provider](getting-started/architecture-and-components/provider.md)
@@ -32,16 +33,18 @@
* [Driver ranking](tutorials/driver-ranking-with-feast.md)
* [Fraud detection on GCP](tutorials/fraud-detection.md)
* [Real-time credit scoring on AWS](tutorials/real-time-credit-scoring-on-aws.md)
+* [Driver stats on Snowflake](tutorials/driver-stats-on-snowflake.md)
+* [Validating historical features with Great Expectations](tutorials/validating-historical-features.md)
## How-to Guides
-* [Running Feast with GCP/AWS](how-to-guides/feast-gcp-aws/README.md)
- * [Install Feast](how-to-guides/feast-gcp-aws/install-feast.md)
- * [Create a feature repository](how-to-guides/feast-gcp-aws/create-a-feature-repository.md)
- * [Deploy a feature store](how-to-guides/feast-gcp-aws/deploy-a-feature-store.md)
- * [Build a training dataset](how-to-guides/feast-gcp-aws/build-a-training-dataset.md)
- * [Load data into the online store](how-to-guides/feast-gcp-aws/load-data-into-the-online-store.md)
- * [Read features from the online store](how-to-guides/feast-gcp-aws/read-features-from-the-online-store.md)
+* [Running Feast with Snowflake/GCP/AWS](how-to-guides/feast-snowflake-gcp-aws/README.md)
+ * [Install Feast](how-to-guides/feast-snowflake-gcp-aws/install-feast.md)
+ * [Create a feature repository](how-to-guides/feast-snowflake-gcp-aws/create-a-feature-repository.md)
+ * [Deploy a feature store](how-to-guides/feast-snowflake-gcp-aws/deploy-a-feature-store.md)
+ * [Build a training dataset](how-to-guides/feast-snowflake-gcp-aws/build-a-training-dataset.md)
+ * [Load data into the online store](how-to-guides/feast-snowflake-gcp-aws/load-data-into-the-online-store.md)
+ * [Read features from the online store](how-to-guides/feast-snowflake-gcp-aws/read-features-from-the-online-store.md)
* [Running Feast in production](how-to-guides/running-feast-in-production.md)
* [Upgrading from Feast 0.9](https://docs.google.com/document/u/1/d/1AOsr\_baczuARjCpmZgVd8mCqTF4AZ49OEyU4Cn-uTT0/edit)
* [Adding a custom provider](how-to-guides/creating-a-custom-provider.md)
@@ -53,10 +56,12 @@
* [Data sources](reference/data-sources/README.md)
* [File](reference/data-sources/file.md)
+ * [Snowflake](reference/data-sources/snowflake.md)
* [BigQuery](reference/data-sources/bigquery.md)
* [Redshift](reference/data-sources/redshift.md)
* [Offline stores](reference/offline-stores/README.md)
* [File](reference/offline-stores/file.md)
+ * [Snowflake](reference/offline-stores/snowflake.md)
* [BigQuery](reference/offline-stores/bigquery.md)
* [Redshift](reference/offline-stores/redshift.md)
* [Online stores](reference/online-stores/README.md)
@@ -71,9 +76,11 @@
* [Feature repository](reference/feature-repository/README.md)
* [feature\_store.yaml](reference/feature-repository/feature-store-yaml.md)
* [.feastignore](reference/feature-repository/feast-ignore.md)
+* [Feature servers](reference/feature-servers/README.md)
+ * [Local feature server](reference/feature-servers/local-feature-server.md)
+* [\[Alpha\] Data quality monitoring](reference/dqm.md)
* [\[Alpha\] On demand feature view](reference/alpha-on-demand-feature-view.md)
* [\[Alpha\] Stream ingestion](reference/alpha-stream-ingestion.md)
-* [\[Alpha\] Local feature server](reference/feature-server.md)
* [\[Alpha\] AWS Lambda feature server](reference/alpha-aws-lambda-feature-server.md)
* [Feast CLI reference](reference/feast-cli-commands.md)
* [Python API reference](http://rtd.feast.dev)
diff --git a/docs/advanced/audit-logging.md b/docs/advanced/audit-logging.md
deleted file mode 100644
index 1870a687bd4..00000000000
--- a/docs/advanced/audit-logging.md
+++ /dev/null
@@ -1,132 +0,0 @@
-# Audit Logging
-
-{% hint style="warning" %}
-This page applies to Feast 0.7. The content may be out of date for Feast 0.8+
-{% endhint %}
-
-## Introduction
-
-Feast provides audit logging functionality in order to debug problems and to trace the lineage of events.
-
-## Audit Log Types
-
-Audit Logs produced by Feast come in three favors:
-
-| Audit Log Type | Description |
-| :--- | :--- |
-| Message Audit Log | Logs service calls that can be used to track Feast request handling. Currently only gRPC request/response is supported. Enabling Message Audit Logs can be resource intensive and significantly increase latency, as such is not recommended on Online Serving. |
-| Transition Audit Log | Logs transitions in status in resources managed by Feast \(ie an Ingestion Job becoming RUNNING\). |
-| Action Audit Log | Logs actions performed on a specific resource managed by Feast \(ie an Ingestion Job is aborted\). |
-
-## Configuration
-
-| Audit Log Type | Description |
-| :--- | :--- |
-| Message Audit Log | Enabled when both `feast.logging.audit.enabled` and `feast.logging.audit.messageLogging.enabled` is set to `true` |
-| Transition Audit Log | Enabled when `feast.logging.audit.enabled` is set to `true` |
-| Action Audit Log | Enabled when `feast.logging.audit.enabled` is set to `true` |
-
-## JSON Format
-
-Audit Logs produced by Feast are written to the console similar to normal logs but in a structured, machine parsable JSON. Example of a Message Audit Log JSON entry produced:
-
-```text
-{
- "message": {
- "logType": "FeastAuditLogEntry",
- "kind": "MESSAGE",
- "statusCode": "OK",
- "request": {
- "filter": {
- "project": "dummy",
- }
- },
- "application": "Feast",
- "response": {},
- "method": "ListFeatureTables",
- "identity": "105960238928959148073",
- "service": "CoreService",
- "component": "feast-core",
- "id": "45329ea9-0d48-46c5-b659-4604f6193711",
- "version": "0.10.0-SNAPSHOT"
- },
- "hostname": "feast.core"
- "timestamp": "2020-10-20T04:45:24Z",
- "severity": "INFO",
-}
-```
-
-## Log Entry Schema
-
-Fields common to all Audit Log Types:
-
-| Field | Description |
-| :--- | :--- |
-| `logType` | Log Type. Always set to `FeastAuditLogEntry`. Useful for filtering out Feast audit logs. |
-| `application` | Application. Always set to `Feast`. |
-| `component` | Feast Component producing the Audit Log. Set to `feast-core` for Feast Core and `feast-serving` for Feast Serving. Use to filtering out Audit Logs by component. |
-| `version` | Version of Feast producing this Audit Log. Use to filtering out Audit Logs by version. |
-
-Fields in Message Audit Log Type
-
-| Field | Description |
-| :--- | :--- |
-| `id` | Generated UUID that uniquely identifies the service call. |
-| `service` | Name of the Service that handled the service call. |
-| `method` | Name of the Method that handled the service call. Useful for filtering Audit Logs by method \(ie `ApplyFeatureTable` calls\) |
-| `request` | Full request submitted by client in the service call as JSON. |
-| `response` | Full response returned to client by the service after handling the service call as JSON. |
-| `identity` | Identity of the client making the service call as an user Id. Only set when Authentication is enabled. |
-| `statusCode` | The status code returned by the service handling the service call \(ie `OK` if service call handled without error\). |
-
-Fields in Action Audit Log Type
-
-| Field | Description |
-| :--- | :--- |
-| `action` | Name of the action taken on the resource. |
-| `resource.type` | Type of resource of which the action was taken on \(i.e `FeatureTable`\) |
-| resource.id | Identifier specifying the specific resource of which the action was taken on. |
-
-Fields in Transition Audit Log Type
-
-| Field | Description |
-| :--- | :--- |
-| `status` | The new status that the resource transitioned to |
-| `resource.type` | Type of resource of which the transition occurred \(i.e `FeatureTable`\) |
-| `resource.id` | Identifier specifying the specific resource of which the transition occurred. |
-
-## Log Forwarder
-
-Feast currently only supports forwarding Request/Response \(Message Audit Log Type\) logs to an external fluentD service with `feast.**` Fluentd tag.
-
-### Request/Response Log Example
-
-```text
-{
- "id": "45329ea9-0d48-46c5-b659-4604f6193711",
- "service": "CoreService"
- "status_code": "OK",
- "identity": "105960238928959148073",
- "method": "ListProjects",
- "request": {},
- "response": {
- "projects": [
- "default", "project1", "project2"
- ]
- }
- "release_name": 506.457.14.512
-}
-```
-
-### Configuration
-
-The Fluentd Log Forwarder configured with the with the following configuration options in `application.yml`:
-
-| Settings | Description |
-| :--- | :--- |
-| `feast.logging.audit.messageLogging.destination` | `fluentd` |
-| `feast.logging.audit.messageLogging.fluentdHost` | `localhost` |
-| `feast.logging.audit.messageLogging.fluentdPort` | `24224` |
-
-When using Fluentd as the Log forwarder, a Feast `release_name` can be logged instead of the IP address \(eg. IP of Kubernetes pod deployment\), by setting an environment variable `RELEASE_NAME` when deploying Feast.
-
diff --git a/docs/advanced/metrics.md b/docs/advanced/metrics.md
deleted file mode 100644
index 5ea69f883f7..00000000000
--- a/docs/advanced/metrics.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Metrics
-
-{% hint style="warning" %}
-This page applies to Feast 0.7. The content may be out of date for Feast 0.8+
-{% endhint %}
-
-## Overview
-
-Feast Components export metrics that can provide insight into Feast behavior:
-
-* [Feast Ingestion Jobs can be configured to push metrics into StatsD](metrics.md#pushing-ingestion-metrics-to-statsd)
-* [Prometheus can be configured to scrape metrics from Feast Core and Serving.](metrics.md#exporting-feast-metrics-to-prometheus)
-
-See the [Metrics Reference ](../reference/metrics-reference.md)for documentation on metrics are exported by Feast.
-
-{% hint style="info" %}
-Feast Job Controller currently does not export any metrics on its own. However its `application.yml` is used to configure metrics export for ingestion jobs.
-{% endhint %}
-
-## Pushing Ingestion Metrics to StatsD
-
-### **Feast Ingestion Job**
-
-Feast Ingestion Job can be configured to push Ingestion metrics to a StatsD instance. Metrics export to StatsD for Ingestion Job is configured in Job Controller's `application.yml` under `feast.jobs.metrics`
-
-```yaml
- feast:
- jobs:
- metrics:
- # Enables Statd metrics export if true.
- enabled: true
- type: statsd
- # Host and port of the StatsD instance to export to.
- host: localhost
- port: 9125
-```
-
-{% hint style="info" %}
-If you need Ingestion Metrics in Prometheus or some other metrics backend, use a metrics forwarder to forward Ingestion Metrics from StatsD to the metrics backend of choice. \(ie Use [`prometheus-statsd-exporter`](https://github.com/prometheus/statsd_exporter) to forward metrics to Prometheus\).
-{% endhint %}
-
-## Exporting Feast Metrics to Prometheus
-
-### **Feast Core and Serving**
-
-Feast Core and Serving exports metrics to a Prometheus instance via Prometheus scraping its `/metrics` endpoint. Metrics export to Prometheus for Core and Serving can be configured via their corresponding `application.yml`
-
-```yaml
-server:
- # Configures the port where metrics are exposed via /metrics for Prometheus to scrape.
- port: 8081
-```
-
-[Direct Prometheus](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) to scrape directly from Core and Serving's `/metrics` endpoint.
-
-## Further Reading
-
-See the [Metrics Reference ](../reference/metrics-reference.md)for documentation on metrics are exported by Feast.
-
diff --git a/docs/advanced/security.md b/docs/advanced/security.md
deleted file mode 100644
index 769260074f5..00000000000
--- a/docs/advanced/security.md
+++ /dev/null
@@ -1,480 +0,0 @@
----
-description: 'Secure Feast with SSL/TLS, Authentication and Authorization.'
----
-
-# Security
-
-{% hint style="warning" %}
-This page applies to Feast 0.7. The content may be out of date for Feast 0.8+
-{% endhint %}
-
-### Overview
-
-
-
-Feast supports the following security methods:
-
-* [SSL/TLS on messaging between Feast Core, Feast Online Serving and Feast SDKs.](security.md#2-ssl-tls)
-* [Authentication to Feast Core and Serving based on Open ID Connect ID tokens.](security.md#3-authentication)
-* [Authorization based on project membership and delegating authorization grants to external Authorization Server.](security.md#4-authorization)
-
-[Important considerations when integrating Authentication/Authorization](security.md#5-authentication-and-authorization).
-
-### **SSL/TLS**
-
-Feast supports SSL/TLS encrypted inter-service communication among Feast Core, Feast Online Serving, and Feast SDKs.
-
-#### Configuring SSL/TLS on Feast Core and Feast Serving
-
-The following properties configure SSL/TLS. These properties are located in their corresponding `application.yml`files:
-
-| Configuration Property | Description |
-| :--- | :--- |
-| `grpc.server.security.enabled` | Enables SSL/TLS functionality if `true` |
-| `grpc.server.security.certificateChain` | Provide the path to certificate chain. |
-| `grpc.server.security.privateKey` | Provide the to private key. |
-
-> Read more on enabling SSL/TLS in the[ gRPC starter docs.](https://yidongnan.github.io/grpc-spring-boot-starter/en/server/security.html#enable-transport-layer-security)
-
-#### Configuring SSL/TLS on Python SDK/CLI
-
-To enable SSL/TLS in the [Feast Python SDK](https://api.docs.feast.dev/python/#feast.client.Client) or [Feast CLI](../getting-started/connect-to-feast/feast-cli.md), set the config options via `feast config`:
-
-| Configuration Option | Description |
-| :--- | :--- |
-| `core_enable_ssl` | Enables SSL/TLS functionality on connections to Feast core if `true` |
-| `serving_enable_ssl` | Enables SSL/TLS functionality on connections to Feast Online Serving if `true` |
-| `core_server_ssl_cert` | Optional. Specifies the path of the root certificate used to verify Core Service's identity. If omitted, uses system certificates. |
-| `serving_server_ssl_cert` | Optional. Specifies the path of the root certificate used to verify Serving Service's identity. If omitted, uses system certificates. |
-
-{% hint style="info" %}
-The Python SDK automatically uses SSL/TLS when connecting to Feast Core and Feast Online Serving via port 443.
-{% endhint %}
-
-#### Configuring SSL/TLS on Go SDK
-
-Configure SSL/TLS on the [Go SDK](https://godoc.org/github.com/feast-dev/feast/sdk/go) by passing configuration via `SecurityConfig`:
-
-```go
-cli, err := feast.NewSecureGrpcClient("localhost", 6566, feast.SecurityConfig{
- EnableTLS: true,
- TLSCertPath: "/path/to/cert.pem",
-})Option
-```
-
-| Config Option | Description |
-| :--- | :--- |
-| `EnableTLS` | Enables SSL/TLS functionality when connecting to Feast if `true` |
-| `TLSCertPath` | Optional. Provides the path of the root certificate used to verify Feast Service's identity. If omitted, uses system certificates. |
-
-#### Configuring SSL/TLS on **Java** SDK
-
-Configure SSL/TLS on the [Feast Java SDK](https://javadoc.io/doc/dev.feast/feast-sdk) by passing configuration via `SecurityConfig`:
-
-```java
-FeastClient client = FeastClient.createSecure("localhost", 6566,
- SecurityConfig.newBuilder()
- .setTLSEnabled(true)
- .setCertificatePath(Optional.of("/path/to/cert.pem"))
- .build());
-```
-
-| Config Option | Description |
-| :--- | :--- |
-| `setTLSEnabled()` | Enables SSL/TLS functionality when connecting to Feast if `true` |
-| `setCertificatesPath()` | Optional. Set the path of the root certificate used to verify Feast Service's identity. If omitted, uses system certificates. |
-
-### **Authentication**
-
-{% hint style="warning" %}
-To prevent man in the middle attacks, we recommend that SSL/TLS be implemented prior to authentication.
-{% endhint %}
-
-Authentication can be implemented to identify and validate client requests to Feast Core and Feast Online Serving. Currently, Feast uses[ ](https://auth0.com/docs/protocols/openid-connect-protocol)[Open ID Connect \(OIDC\)](https://auth0.com/docs/protocols/openid-connect-protocol) ID tokens \(i.e. [Google Open ID Connect](https://developers.google.com/identity/protocols/oauth2/openid-connect)\) to authenticate client requests.
-
-#### Configuring Authentication in Feast Core and Feast Online Serving
-
-Authentication can be configured for Feast Core and Feast Online Serving via properties in their corresponding `application.yml` files:
-
-| Configuration Property | Description |
-| :--- | :--- |
-| `feast.security.authentication.enabled` | Enables Authentication functionality if `true` |
-| `feast.security.authentication.provider` | Authentication Provider type. Currently only supports `jwt` |
-| `feast.security.authentication.option.jwkEndpointURI` | HTTPS URL used by Feast to retrieved the [JWK](https://tools.ietf.org/html/rfc7517) used to verify OIDC ID tokens. |
-
-{% hint style="info" %}
-`jwkEndpointURI`is set to retrieve Google's OIDC JWK by default, allowing OIDC ID tokens issued by Google to be used for authentication.
-{% endhint %}
-
-Behind the scenes, Feast Core and Feast Online Serving authenticate by:
-
-* Extracting the OIDC ID token `TOKEN`from gRPC metadata submitted with request:
-
-```text
-('authorization', 'Bearer: TOKEN')
-```
-
-* Validates token's authenticity using the JWK retrieved from the `jwkEndpointURI`
-
-#### **Authenticating Serving with Feast Core**
-
-Feast Online Serving communicates with Feast Core during normal operation. When both authentication and authorization are enabled on Feast Core, Feast Online Serving is forced to authenticate its requests to Feast Core. Otherwise, Feast Online Serving produces an Authentication failure error when connecting to Feast Core.
-
- Properties used to configure Serving authentication via `application.yml`:
-
-| Configuration Property | Description |
-| :--- | :--- |
-| `feast.core-authentication.enabled` | Requires Feast Online Serving to authenticate when communicating with Feast Core. |
-| `feast.core-authentication.provider` | Selects provider Feast Online Serving uses to retrieve credentials then used to authenticate requests to Feast Core. Valid providers are `google` and `oauth`. |
-
-{% tabs %}
-{% tab title="Google Provider" %}
-Google Provider automatically extracts the credential from the credential JSON file.
-
-* Set [`GOOGLE_APPLICATION_CREDENTIALS` environment variable](https://cloud.google.com/docs/authentication/getting-started#setting_the_environment_variable) to the path of the credential in the JSON file.
-{% endtab %}
-
-{% tab title="OAuth Provider" %}
-OAuth Provider makes an OAuth [client credentials](https://auth0.com/docs/flows/call-your-api-using-the-client-credentials-flow) request to obtain the credential. OAuth requires the following options to be set at `feast.security.core-authentication.options.`:
-
-
| Configuration Property | -Description | -
|---|---|
oauth_url
- |
- Target URL receiving the client-credentials request. | -
grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
client_id
- |
- Client Id used in the client-credentials request. | -
client_secret
- |
- Client secret used in the client-credentials request. | -
audience
- |
-
- Target audience of the credential. Set to host URL of Feast Core. -(i.e. |
-
jwkEndpointURI
- |
- HTTPS URL used to retrieve a JWK that can be used to decode the credential. | -
| Configuration Property | -Description | -
|---|---|
oauth_token_request_url
- |
- Target URL receiving the client-credentials request. | -
oauth_grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
oauth_client_id
- |
- Client Id used in the client-credentials request. | -
oauth_client_secret
- |
- Client secret used in the client-credentials request. | -
oauth_audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
| Parameter | -Description | -
|---|---|
audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
clientId
- |
- Client Id used in the client-credentials request. | -
clientSecret
- |
- Client secret used in the client-credentials request. | -
endpointURL
- |
- Target URL to make the client-credentials request to. | -
| Parameter | -Description | -
|---|---|
audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
client_id
- |
- Client Id used in the client-credentials request. | -
client_secret
- |
- Client secret used in the client-credentials request. | -
oauth_url
- |
- Target URL to make the client-credentials request to obtain credential. | -
jwkEndpointURI
- |
- HTTPS URL used to retrieve a JWK that can be used to decode the credential. | -
| Configuration Property | -Description | -
|---|---|
oauth_url
- |
- Target URL receiving the client-credentials request. | -
grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
client_id
- |
- Client Id used in the client-credentials request. | -
client_secret
- |
- Client secret used in the client-credentials request. | -
audience
- |
-
- Target audience of the credential. Set to host URL of Feast Core. -(i.e. |
-
jwkEndpointURI
- |
- HTTPS URL used to retrieve a JWK that can be used to decode the credential. | -
| Configuration Property | -Description | -
|---|---|
oauth_token_request_url
- |
- Target URL receiving the client-credentials request. | -
oauth_grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
oauth_client_id
- |
- Client Id used in the client-credentials request. | -
oauth_client_secret
- |
- Client secret used in the client-credentials request. | -
oauth_audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
| Parameter | -Description | -
|---|---|
audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
clientId
- |
- Client Id used in the client-credentials request. | -
clientSecret
- |
- Client secret used in the client-credentials request. | -
endpointURL
- |
- Target URL to make the client-credentials request to. | -
| Parameter | -Description | -
|---|---|
audience
- |
-
- Target audience of the credential. Set to host URL of target Service. -( |
-
grant_type
- |
- OAuth grant type. Set as client_credentials
- |
-
client_id
- |
- Client Id used in the client-credentials request. | -
client_secret
- |
- Client secret used in the client-credentials request. | -
oauth_url
- |
- Target URL to make the client-credentials request to obtain credential. | -
jwkEndpointURI
- |
- HTTPS URL used to retrieve a JWK that can be used to decode the credential. | -
The following field names are reserved in feature tables
-event_timestamp
- datetime
- created_timestamp
- ingestion_id
- job_id
- | Metric | -Description | -Tags | -
|---|---|---|
feast_ingestion_feature_row_lag_ms_{BUCKET}
- |
- Lag time in milliseconds between succeeding ingested Feature Rows. | -
-
|
-
feast_ingestion_feature_value_lag_ms_{BUCKET}
- |
- Lag time in milliseconds between succeeding ingested values for each Feature. | -
-
|
-
feast_ingestion_feature_value_{BUCKET}
- |
- Last value feature for each Feature. | -feast_store, feature_project_name, feast_feature_name,feast_featureSet_name, ingest_job_name, metrics_namepace
- |
-
feast_ingestion_feature_row_ingested_count
- |
- No. of Ingested Feature Rows | -
-
|
-
feast_ingestion_feature_value_missing_count
- |
- No. of times a ingested Feature values did not provide a value for the - Feature. | -
-
|
-
feast_ingestion_deadletter_row_count
- |
- No. of Feature Rows that that the Ingestion Job did not successfully write - to store. | -feast_store, feast_project_name,feast_featureSet_name,ingestion_job_name
- |
-
The following field names are reserved in feature tables
-event_timestamp
- datetime
- created_timestamp
- ingestion_id
- job_id
- | Metric | -Description | -Tags | -
|---|---|---|
feast_ingestion_feature_row_lag_ms_{BUCKET}
- |
- Lag time in milliseconds between succeeding ingested Feature Rows. | -
-
|
-
feast_ingestion_feature_value_lag_ms_{BUCKET}
- |
- Lag time in milliseconds between succeeding ingested values for each Feature. | -
-
|
-
feast_ingestion_feature_value_{BUCKET}
- |
- Last value feature for each Feature. | -feast_store, feature_project_name, feast_feature_name,feast_featureSet_name, ingest_job_name, metrics_namepace
- |
-
feast_ingestion_feature_row_ingested_count
- |
- No. of Ingested Feature Rows | -
-
|
-
feast_ingestion_feature_value_missing_count
- |
- No. of times a ingested Feature values did not provide a value for the - Feature. | -
-
|
-
feast_ingestion_deadletter_row_count
- |
- No. of Feature Rows that that the Ingestion Job did not successfully write - to store. | -feast_store, feast_project_name,feast_featureSet_name,ingestion_job_name
- |
-
| + | taxi_id | +event_timestamp | +
|---|---|---|
| 0 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2019-06-01 | +
| 1 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2019-06-02 | +
| 2 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2019-06-03 | +
| 3 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2019-06-04 | +
| 4 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2019-06-05 | +
| ... | +... | +... | +
| 156979 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2019-06-27 | +
| 156980 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2019-06-28 | +
| 156981 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2019-06-29 | +
| 156982 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2019-06-30 | +
| 156983 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2019-07-01 | +
156984 rows × 2 columns
+| + | total_earned | +avg_trip_seconds | +taxi_id | +total_miles_travelled | +trip_count | +earned_per_hour | +event_timestamp | +total_trip_seconds | +avg_fare | +avg_speed | +
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | +68.25 | +2270.000000 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +24.70 | +2.0 | +54.118943 | +2019-06-01 00:00:00+00:00 | +4540.0 | +34.125000 | +19.585903 | +
| 1 | +221.00 | +560.500000 | +7a4a6162eaf27805aef407d25d5cb21fe779cd962922cb... | +54.18 | +24.0 | +59.143622 | +2019-06-01 00:00:00+00:00 | +13452.0 | +9.208333 | +14.499554 | +
| 2 | +160.50 | +1010.769231 | +f4c9d05b215d7cbd08eca76252dae51cdb7aca9651d4ef... | +41.30 | +13.0 | +43.972603 | +2019-06-01 00:00:00+00:00 | +13140.0 | +12.346154 | +11.315068 | +
| 3 | +183.75 | +697.550000 | +c1f533318f8480a59173a9728ea0248c0d3eb187f4b897... | +37.30 | +20.0 | +47.415956 | +2019-06-01 00:00:00+00:00 | +13951.0 | +9.187500 | +9.625116 | +
| 4 | +217.75 | +1054.076923 | +455b6b5cae6ca5a17cddd251485f2266d13d6a2c92f07c... | +69.69 | +13.0 | +57.206451 | +2019-06-01 00:00:00+00:00 | +13703.0 | +16.750000 | +18.308692 | +
| ... | +... | +... | +... | +... | +... | +... | +... | +... | +... | +... | +
| 156979 | +38.00 | +1980.000000 | +0cccf0ec1f46d1e0beefcfdeaf5188d67e170cdff92618... | +14.90 | +1.0 | +69.090909 | +2019-07-01 00:00:00+00:00 | +1980.0 | +38.000000 | +27.090909 | +
| 156980 | +135.00 | +551.250000 | +beefd3462e3f5a8e854942a2796876f6db73ebbd25b435... | +28.40 | +16.0 | +55.102041 | +2019-07-01 00:00:00+00:00 | +8820.0 | +8.437500 | +11.591837 | +
| 156981 | +NaN | +NaN | +9a3c52aa112f46cf0d129fafbd42051b0fb9b0ff8dcb0e... | +NaN | +NaN | +NaN | +2019-07-01 00:00:00+00:00 | +NaN | +NaN | +NaN | +
| 156982 | +63.00 | +815.000000 | +08308c31cd99f495dea73ca276d19a6258d7b4c9c88e43... | +19.96 | +4.0 | +69.570552 | +2019-07-01 00:00:00+00:00 | +3260.0 | +15.750000 | +22.041718 | +
| 156983 | +NaN | +NaN | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +NaN | +NaN | +NaN | +2019-07-01 00:00:00+00:00 | +NaN | +NaN | +NaN | +
156984 rows × 10 columns
+| + | taxi_id | +event_timestamp | +
|---|---|---|
| 0 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2020-12-01 | +
| 1 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2020-12-02 | +
| 2 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2020-12-03 | +
| 3 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2020-12-04 | +
| 4 | +91d5288487e87c5917b813ba6f75ab1c3a9749af906a2d... | +2020-12-05 | +
| ... | +... | +... | +
| 35443 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2020-12-03 | +
| 35444 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2020-12-04 | +
| 35445 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2020-12-05 | +
| 35446 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2020-12-06 | +
| 35447 | +7ebf27414a0c7b128e7925e1da56d51a8b81484f7630cf... | +2020-12-07 | +
35448 rows × 2 columns
+
+
-The above architecture is the minimal Feast deployment. Want to run the full Feast on GCP/AWS? Click [here](https://docs.feast.dev/how-to-guides/feast-gcp-aws).
+The above architecture is the minimal Feast deployment. Want to run the full Feast on Snowflake/GCP/AWS? Click [here](https://docs.feast.dev/how-to-guides/feast-snowflake-gcp-aws).
## 🐣 Getting Started
@@ -133,7 +133,7 @@ pprint(feature_vector)
Please refer to the official documentation at [Documentation](https://docs.feast.dev/)
* [Quickstart](https://docs.feast.dev/getting-started/quickstart)
* [Tutorials](https://docs.feast.dev/tutorials/tutorials-overview)
- * [Running Feast with GCP/AWS](https://docs.feast.dev/how-to-guides/feast-gcp-aws)
+ * [Running Feast with Snowflake/GCP/AWS](https://docs.feast.dev/how-to-guides/feast-snowflake-gcp-aws)
* [Change Log](https://github.com/feast-dev/feast/blob/master/CHANGELOG.md)
* [Slack (#Feast)](https://slack.feast.dev/)
diff --git a/java/CONTRIBUTING.md b/java/CONTRIBUTING.md
index 1694b3f33f9..86eacfef419 100644
--- a/java/CONTRIBUTING.md
+++ b/java/CONTRIBUTING.md
@@ -5,7 +5,6 @@
### Overview
This guide is targeted at developers looking to contribute to Feast components in
the feast-java Repository:
-- [Feast Core](#feast-core)
- [Feast Serving](#feast-serving)
- [Feast Java Client](#feast-java-client)
@@ -15,11 +14,14 @@ the feast-java Repository:
#### Common Setup
Common Environment Setup for all feast-java Feast components:
-1. . Ensure following development tools are installed:
-- Java SE Development Kit 11, Maven 3.6, `make`
+
+Ensure following development tools are installed:
+- Java SE Development Kit 11
+- Maven 3.6
+- `make`
#### Code Style
-feast-java's codebase conforms to the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html).
+Feast's Java codebase conforms to the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html).
Automatically format the code to conform the style guide by:
@@ -59,82 +61,8 @@ Specifically, proto-generated code is not indexed by IntelliJ. To fix this, navi
- target/generated-sources/protobuf/java
- target/generated-sources/annotations
-
-## Feast Core
-### Environment Setup
-Setting up your development environment for Feast Core:
-1. Complete the feast-java [Common Setup](#common-setup)
-2. Boot up a PostgreSQL instance (version 11 and above). Example of doing so via Docker:
-```sh
-# spawn a PostgreSQL instance as a Docker container running in the background
-docker run \
- --rm -it -d \
- --name postgres \
- -e POSTGRES_DB=postgres \
- -e POSTGRES_USER=postgres \
- -e POSTGRES_PASSWORD=password \
- -p 5432:5432 postgres:12-alpine
-```
-
-### Configuration
-Feast Core is configured using it's [application.yml](https://docs.feast.dev/reference/configuration-reference#1-feast-core-and-feast-online-serving).
-
-### Building and Running
-1. Build / Compile Feast Core with Maven to produce an executable Feast Core JAR
-```sh
-mvn package -pl core --also-make -Dmaven.test.skip=true
-```
-
-2. Run Feast Core using the built JAR:
-```sh
-# where X.X.X is the version of the Feast Core JAR built
-java -jar core/target/feast-core-X.X.X-exec.jar
-```
-
-### Unit / Integration Tests
-Unit & Integration Tests can be used to verify functionality:
-```sh
-# run unit tests
-mvn test -pl core --also-make
-# run integration tests
-mvn verify -pl core --also-make
-```
-
## Feast Serving
-### Environment Setup
-Setting up your development environment for Feast Serving:
-1. Complete the feast-java [Common Setup](#common-setup)
-2. Boot up a Redis instance (version 5.x). Example of doing so via Docker:
-```sh
-docker run --name redis --rm -it -d -p 6379:6379 redis:5-alpine
-```
-
-> Feast Serving requires a running Feast Core instance to retrieve Feature metadata
-> in order to serve features. See the [Feast Core section](#feast-core) for
-> how to get a Feast Core instance running.
-
-### Configuration
-Feast Serving is configured using it's [application.yml](https://docs.feast.dev/reference/configuration-reference#1-feast-core-and-feast-online-serving).
-
-### Building and Running
-1. Build / Compile Feast Serving with Maven to produce an executable Feast Serving JAR
-```sh
-mvn package -pl serving --also-make -Dmaven.test.skip=true
-
-2. Run Feast Serving using the built JAR:
-```sh
-# where X.X.X is the version of the Feast serving JAR built
-java -jar serving/target/feast-serving-X.X.X-exec.jar
-```
-
-### Unit / Integration Tests
-Unit & Integration Tests can be used to verify functionality:
-```sh
-# run unit tests
-mvn test -pl serving --also-make
-# run integration tests
-mvn verify -pl serving --also-make
-```
+See instructions [here](serving/README.md) for developing.
## Feast Java Client
### Environment Setup
@@ -144,9 +72,6 @@ Setting up your development environment for Feast Java SDK:
> Feast Java Client is a Java Client for retrieving Features from a running Feast Serving instance.
> See the [Feast Serving Section](#feast-serving) section for how to get a Feast Serving instance running.
-### Configuration
-Feast Java Client is [configured as code](https://docs.feast.dev/v/master/reference/configuration-reference#4-feast-java-and-go-sdk)
-
### Building
1. Build / Compile Feast Java Client with Maven:
diff --git a/java/README.md b/java/README.md
index 8d6141faa84..ff5a1b85539 100644
--- a/java/README.md
+++ b/java/README.md
@@ -1,5 +1,4 @@
# Feast Java components
-[](https://github.com/feast-dev/feast-java/actions/workflows/complete.yml)
### Overview
@@ -19,4 +18,4 @@ Guides on Contributing:
- [Development Guide for feast-java (this repository)](CONTRIBUTING.md)
### Installing using Helm
-Please see the Helm charts in [charts](https://github.com/feast-dev/feast-helm-charts).
+Please see the Helm charts in [infra/charts/feast](../infra/charts/feast).
diff --git a/java/common/pom.xml b/java/common/pom.xml
index 0c5651876ea..e5a648a7f95 100644
--- a/java/common/pom.xml
+++ b/java/common/pom.xml
@@ -33,13 +33,14 @@