From a3fcd1f369bdf07174b5ecf2a49ca9864cf145d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mehmet=20Tokg=C3=B6z?=
 <56408993+mehmettokgoz@users.noreply.github.com>
Date: Thu, 7 Sep 2023 07:50:17 +0300
Subject: [PATCH] feat: Implement gRPC server to ingest streaming features
 (#3687)

* Implemented gRPC server for ingesting streaming features.

Signed-off-by: mehmettokgoz <mehmet.tokgoz@hazelcast.com>
Signed-off-by: Danny C <d.chiao@gmail.com>
---
 Makefile                                      |   2 +-
 protos/feast/serving/GrpcServer.proto         |  27 ++
 sdk/python/feast/cli.py                       |  31 ++
 sdk/python/feast/infra/contrib/grpc_server.py |  95 ++++
 .../requirements/py3.10-ci-requirements.txt   | 400 +++++++++--------
 .../requirements/py3.10-requirements.txt      | 105 +++--
 .../requirements/py3.8-ci-requirements.txt    | 386 +++++++++--------
 .../requirements/py3.8-requirements.txt       | 109 +++--
 .../requirements/py3.9-ci-requirements.txt    | 408 +++++++++---------
 .../requirements/py3.9-requirements.txt       | 109 +++--
 setup.py                                      |  23 +-
 11 files changed, 999 insertions(+), 696 deletions(-)
 create mode 100644 protos/feast/serving/GrpcServer.proto
 create mode 100644 sdk/python/feast/infra/contrib/grpc_server.py

diff --git a/Makefile b/Makefile
index cf8a899ac68..4b85c0e4483 100644
--- a/Makefile
+++ b/Makefile
@@ -353,7 +353,7 @@ kill-trino-locally:
 	cd ${ROOT_DIR}; docker stop trino
 
 install-protoc-dependencies:
-	pip install --ignore-installed protobuf==4.23.4 grpcio-tools==1.47.0 mypy-protobuf==3.1.0
+	pip install --ignore-installed protobuf==4.23.4 "grpcio-tools>=1.56.2,<2" mypy-protobuf==3.1.0
 
 install-feast-ci-locally:
 	pip install -e ".[ci]"
diff --git a/protos/feast/serving/GrpcServer.proto b/protos/feast/serving/GrpcServer.proto
new file mode 100644
index 00000000000..cd0274c5c75
--- /dev/null
+++ b/protos/feast/serving/GrpcServer.proto
@@ -0,0 +1,27 @@
+syntax = "proto3";
+
+message PushRequest {
+    map<string, string> features = 1;
+    string stream_feature_view = 2;
+    bool allow_registry_cache = 3;
+    string to = 4;
+}
+
+message PushResponse {
+  bool status = 1;
+}
+
+message WriteToOnlineStoreRequest {
+    map<string, string> features = 1;
+    string feature_view_name = 2;
+    bool allow_registry_cache = 3;
+}
+
+message WriteToOnlineStoreResponse {
+  bool status = 1;
+}
+
+service GrpcFeatureServer {
+  rpc Push (PushRequest) returns (PushResponse) {};
+  rpc WriteToOnlineStore (WriteToOnlineStoreRequest) returns (WriteToOnlineStoreResponse);
+}
\ No newline at end of file
diff --git a/sdk/python/feast/cli.py b/sdk/python/feast/cli.py
index 229cb992321..8c2c326b595 100644
--- a/sdk/python/feast/cli.py
+++ b/sdk/python/feast/cli.py
@@ -28,6 +28,7 @@
 from feast.constants import DEFAULT_FEATURE_TRANSFORMATION_SERVER_PORT
 from feast.errors import FeastObjectNotFoundException, FeastProviderLoginError
 from feast.feature_view import FeatureView
+from feast.infra.contrib.grpc_server import get_grpc_server
 from feast.on_demand_feature_view import OnDemandFeatureView
 from feast.repo_config import load_repo_config
 from feast.repo_operations import (
@@ -689,6 +690,36 @@ def serve_command(
     )
 
 
+@cli.command("listen")
+@click.option(
+    "--address",
+    "-a",
+    type=click.STRING,
+    default="localhost:50051",
+    show_default=True,
+    help="Address of the gRPC server",
+)
+@click.option(
+    "--max_workers",
+    "-w",
+    type=click.INT,
+    default=10,
+    show_default=False,
+    help="The maximum number of threads that can be used to execute the gRPC calls",
+)
+@click.pass_context
+def listen_command(
+    ctx: click.Context,
+    address: str,
+    max_workers: int,
+):
+    """Start a gRPC feature server to ingest streaming features on given address"""
+    store = create_feature_store(ctx)
+    server = get_grpc_server(address, store, max_workers)
+    server.start()
+    server.wait_for_termination()
+
+
 @cli.command("serve_transformations")
 @click.option(
     "--port",
diff --git a/sdk/python/feast/infra/contrib/grpc_server.py b/sdk/python/feast/infra/contrib/grpc_server.py
new file mode 100644
index 00000000000..2017f1095b2
--- /dev/null
+++ b/sdk/python/feast/infra/contrib/grpc_server.py
@@ -0,0 +1,95 @@
+import logging
+from concurrent import futures
+
+import grpc
+import pandas as pd
+from grpc_health.v1 import health, health_pb2_grpc
+
+from feast.data_source import PushMode
+from feast.errors import PushSourceNotFoundException
+from feast.feature_store import FeatureStore
+from feast.protos.feast.serving.GrpcServer_pb2 import (
+    PushResponse,
+    WriteToOnlineStoreResponse,
+)
+from feast.protos.feast.serving.GrpcServer_pb2_grpc import (
+    GrpcFeatureServerServicer,
+    add_GrpcFeatureServerServicer_to_server,
+)
+
+
+def parse(features):
+    df = {}
+    for i in features.keys():
+        df[i] = [features.get(i)]
+    return pd.DataFrame.from_dict(df)
+
+
+class GrpcFeatureServer(GrpcFeatureServerServicer):
+    fs: FeatureStore
+
+    def __init__(self, fs: FeatureStore):
+        self.fs = fs
+        super().__init__()
+
+    def Push(self, request, context):
+        try:
+            df = parse(request.features)
+            if request.to == "offline":
+                to = PushMode.OFFLINE
+            elif request.to == "online":
+                to = PushMode.ONLINE
+            elif request.to == "online_and_offline":
+                to = PushMode.ONLINE_AND_OFFLINE
+            else:
+                raise ValueError(
+                    f"{request.to} is not a supported push format. Please specify one of these ['online', 'offline', "
+                    f"'online_and_offline']."
+                )
+            self.fs.push(
+                push_source_name=request.push_source_name,
+                df=df,
+                allow_registry_cache=request.allow_registry_cache,
+                to=to,
+            )
+        except PushSourceNotFoundException as e:
+            logging.exception(str(e))
+            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
+            context.set_details(str(e))
+            return PushResponse(status=False)
+        except Exception as e:
+            logging.exception(str(e))
+            context.set_code(grpc.StatusCode.INTERNAL)
+            context.set_details(str(e))
+            return PushResponse(status=False)
+        return PushResponse(status=True)
+
+    def WriteToOnlineStore(self, request, context):
+        logging.warning(
+            "write_to_online_store is deprecated. Please consider using Push instead"
+        )
+        try:
+            df = parse(request.features)
+            self.fs.write_to_online_store(
+                feature_view_name=request.feature_view_name,
+                df=df,
+                allow_registry_cache=request.allow_registry_cache,
+            )
+        except Exception as e:
+            logging.exception(str(e))
+            context.set_code(grpc.StatusCode.INTERNAL)
+            context.set_details(str(e))
+            return PushResponse(status=False)
+        return WriteToOnlineStoreResponse(status=True)
+
+
+def get_grpc_server(address: str, fs: FeatureStore, max_workers: int):
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=max_workers))
+    add_GrpcFeatureServerServicer_to_server(GrpcFeatureServer(fs), server)
+    health_servicer = health.HealthServicer(
+        experimental_non_blocking=True,
+        experimental_thread_pool=futures.ThreadPoolExecutor(max_workers=max_workers),
+    )
+    health_pb2_grpc.add_HealthServicer_to_server(health_servicer, server)
+    server.add_insecure_port(address)
+    return server
diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt
index 2f28a271dc3..cb72fdaa350 100644
--- a/sdk/python/requirements/py3.10-ci-requirements.txt
+++ b/sdk/python/requirements/py3.10-ci-requirements.txt
@@ -8,7 +8,7 @@ adal==1.2.7
     # via msrestazure
 adlfs==0.5.9
     # via feast (setup.py)
-aiohttp==3.8.4
+aiohttp==3.8.5
     # via
     #   adlfs
     #   gcsfs
@@ -18,7 +18,7 @@ alabaster==0.7.13
     # via sphinx
 altair==4.2.0
     # via great-expectations
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   jupyter-server
@@ -30,11 +30,8 @@ appnope==0.1.3
     # via
     #   ipykernel
     #   ipython
-argon2-cffi==21.3.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+argon2-cffi==23.1.0
+    # via jupyter-server
 argon2-cffi-bindings==21.2.0
     # via argon2-cffi
 arrow==1.2.3
@@ -45,9 +42,11 @@ asn1crypto==1.5.1
     #   snowflake-connector-python
 assertpy==1.1
     # via feast (setup.py)
-asttokens==2.2.1
+asttokens==2.4.0
     # via stack-data
-async-timeout==4.0.2
+async-lru==2.0.4
+    # via jupyterlab
+async-timeout==4.0.3
     # via
     #   aiohttp
     #   redis
@@ -56,9 +55,10 @@ attrs==23.1.0
     #   aiohttp
     #   bowler
     #   jsonschema
+    #   referencing
 avro==1.10.0
     # via feast (setup.py)
-azure-core==1.27.0
+azure-core==1.29.3
     # via
     #   adlfs
     #   azure-identity
@@ -66,16 +66,18 @@ azure-core==1.27.0
     #   msrest
 azure-datalake-store==0.0.53
     # via adlfs
-azure-identity==1.13.0
+azure-identity==1.14.0
     # via
     #   adlfs
     #   feast (setup.py)
-azure-storage-blob==12.16.0
+azure-storage-blob==12.17.0
     # via
     #   adlfs
     #   feast (setup.py)
 babel==2.12.1
-    # via sphinx
+    # via
+    #   jupyterlab-server
+    #   sphinx
 backcall==0.2.0
     # via ipython
 beautifulsoup4==4.12.2
@@ -84,30 +86,30 @@ black==22.12.0
     # via feast (setup.py)
 bleach==6.0.0
     # via nbconvert
-boto3==1.26.146
+boto3==1.28.42
     # via
     #   feast (setup.py)
     #   moto
-botocore==1.29.146
+botocore==1.31.42
     # via
     #   boto3
     #   moto
     #   s3transfer
 bowler==0.9.0
     # via feast (setup.py)
-build==0.10.0
+build==1.0.3
     # via
     #   feast (setup.py)
     #   pip-tools
 bytewax==0.15.1
     # via feast (setup.py)
-cachecontrol==0.13.0
+cachecontrol==0.13.1
     # via firebase-admin
 cachetools==5.3.1
     # via google-auth
-cassandra-driver==3.27.0
+cassandra-driver==3.28.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
@@ -122,14 +124,14 @@ cffi==1.15.1
     #   azure-datalake-store
     #   cryptography
     #   snowflake-connector-python
-cfgv==3.3.1
+cfgv==3.4.0
     # via pre-commit
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via
     #   aiohttp
     #   requests
     #   snowflake-connector-python
-click==8.1.3
+click==8.1.7
     # via
     #   black
     #   bowler
@@ -146,16 +148,17 @@ colorama==0.4.6
     # via
     #   feast (setup.py)
     #   great-expectations
-comm==0.1.3
-    # via ipykernel
-coverage[toml]==7.2.7
+comm==0.1.4
+    # via
+    #   ipykernel
+    #   ipywidgets
+coverage[toml]==7.3.1
     # via pytest-cov
-cryptography==40.0.2
+cryptography==41.0.3
     # via
     #   adal
     #   azure-identity
     #   azure-storage-blob
-    #   cassandra-driver
     #   feast (setup.py)
     #   great-expectations
     #   moto
@@ -165,11 +168,11 @@ cryptography==40.0.2
     #   snowflake-connector-python
     #   types-pyopenssl
     #   types-redis
-dask==2023.5.1
+dask==2023.9.1
     # via feast (setup.py)
 db-dtypes==1.1.1
     # via google-cloud-bigquery
-debugpy==1.6.7
+debugpy==1.6.7.post1
     # via ipykernel
 decorator==5.1.1
     # via
@@ -181,12 +184,12 @@ deprecated==1.2.14
     # via redis
 deprecation==2.1.0
     # via testcontainers
-dill==0.3.6
+dill==0.3.7
     # via
     #   bytewax
     #   feast (setup.py)
     #   multiprocess
-distlib==0.3.6
+distlib==0.3.7
     # via virtualenv
 docker==6.1.3
     # via
@@ -196,23 +199,24 @@ docutils==0.19
     # via sphinx
 entrypoints==0.4
     # via altair
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via
     #   anyio
+    #   ipython
     #   pytest
-execnet==1.9.0
+execnet==2.0.2
     # via pytest-xdist
 executing==1.2.0
     # via stack-data
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
-fastjsonschema==2.17.1
+fastjsonschema==2.18.0
     # via nbformat
-filelock==3.12.0
+filelock==3.12.3
     # via
     #   snowflake-connector-python
     #   virtualenv
@@ -224,7 +228,7 @@ flake8==6.0.0
     # via feast (setup.py)
 fqdn==1.5.1
     # via jsonschema
-frozenlist==1.3.3
+frozenlist==1.4.0
     # via
     #   aiohttp
     #   aiosignal
@@ -239,7 +243,7 @@ geojson==2.5.0
     # via rockset
 geomet==0.2.1.post1
     # via cassandra-driver
-google-api-core[grpc]==2.11.0
+google-api-core[grpc]==2.11.1
     # via
     #   feast (setup.py)
     #   firebase-admin
@@ -251,9 +255,9 @@ google-api-core[grpc]==2.11.0
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-api-python-client==2.88.0
+google-api-python-client==2.98.0
     # via firebase-admin
-google-auth==2.19.1
+google-auth==2.22.0
     # via
     #   gcsfs
     #   google-api-core
@@ -267,35 +271,35 @@ google-auth-httplib2==0.1.0
     # via google-api-python-client
 google-auth-oauthlib==1.0.0
     # via gcsfs
-google-cloud-bigquery[pandas]==3.11.0
+google-cloud-bigquery[pandas]==3.11.4
     # via feast (setup.py)
-google-cloud-bigquery-storage==2.20.0
+google-cloud-bigquery-storage==2.22.0
     # via feast (setup.py)
-google-cloud-bigtable==2.18.1
+google-cloud-bigtable==2.21.0
     # via feast (setup.py)
-google-cloud-core==2.3.2
+google-cloud-core==2.3.3
     # via
     #   google-cloud-bigquery
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-cloud-datastore==2.15.2
+google-cloud-datastore==2.18.0
     # via feast (setup.py)
 google-cloud-firestore==2.11.1
     # via firebase-admin
-google-cloud-storage==2.9.0
+google-cloud-storage==2.10.0
     # via
     #   feast (setup.py)
     #   firebase-admin
     #   gcsfs
 google-crc32c==1.5.0
     # via google-resumable-media
-google-resumable-media==2.5.0
+google-resumable-media==2.6.0
     # via
     #   google-cloud-bigquery
     #   google-cloud-storage
-googleapis-common-protos[grpc]==1.59.0
+googleapis-common-protos[grpc]==1.60.0
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -303,30 +307,31 @@ googleapis-common-protos[grpc]==1.59.0
     #   grpcio-status
 great-expectations==0.15.50
     # via feast (setup.py)
-greenlet==2.0.2
-    # via sqlalchemy
 grpc-google-iam-v1==0.12.6
     # via google-cloud-bigtable
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
     #   google-api-core
     #   google-cloud-bigquery
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
     #   grpcio-tools
-grpcio-reflection==1.54.2
+grpcio-health-checking==1.57.0
     # via feast (setup.py)
-grpcio-status==1.54.2
+grpcio-reflection==1.57.0
+    # via feast (setup.py)
+grpcio-status==1.57.0
     # via google-api-core
-grpcio-testing==1.54.2
+grpcio-testing==1.57.0
     # via feast (setup.py)
-grpcio-tools==1.54.2
+grpcio-tools==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
@@ -334,21 +339,21 @@ h11==0.14.0
     #   uvicorn
 happybase==1.2.0
     # via feast (setup.py)
-hazelcast-python-client==5.2.0
+hazelcast-python-client==5.3.0
     # via feast (setup.py)
 hiredis==2.2.3
     # via feast (setup.py)
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
 httplib2==0.22.0
     # via
     #   google-api-python-client
     #   google-auth-httplib2
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
-identify==2.5.24
+identify==2.5.27
     # via pre-commit
 idna==3.4
     # via
@@ -360,27 +365,20 @@ idna==3.4
     #   yarl
 imagesize==1.4.1
     # via sphinx
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via
     #   dask
     #   great-expectations
 iniconfig==2.0.0
     # via pytest
-ipykernel==6.23.1
-    # via
-    #   ipywidgets
-    #   nbclassic
-    #   notebook
-ipython==8.14.0
+ipykernel==6.25.2
+    # via jupyterlab
+ipython==8.15.0
     # via
     #   great-expectations
     #   ipykernel
     #   ipywidgets
-ipython-genutils==0.2.0
-    # via
-    #   nbclassic
-    #   notebook
-ipywidgets==8.0.6
+ipywidgets==8.1.0
     # via great-expectations
 isodate==0.6.1
     # via
@@ -390,7 +388,7 @@ isoduration==20.11.0
     # via jsonschema
 isort==5.12.0
     # via feast (setup.py)
-jedi==0.18.2
+jedi==0.19.0
     # via ipython
 jinja2==3.1.2
     # via
@@ -398,56 +396,69 @@ jinja2==3.1.2
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   moto
-    #   nbclassic
     #   nbconvert
-    #   notebook
     #   sphinx
 jmespath==1.0.1
     # via
     #   boto3
     #   botocore
-jsonpatch==1.32
+json5==0.9.14
+    # via jupyterlab-server
+jsonpatch==1.33
     # via great-expectations
-jsonpointer==2.3
+jsonpointer==2.4
     # via
     #   jsonpatch
     #   jsonschema
-jsonschema[format-nongpl]==4.17.3
+jsonschema[format-nongpl]==4.19.0
     # via
     #   altair
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-events
+    #   jupyterlab-server
     #   nbformat
-jupyter-client==8.2.0
+jsonschema-specifications==2023.7.1
+    # via jsonschema
+jupyter-client==8.3.1
     # via
     #   ipykernel
     #   jupyter-server
-    #   nbclassic
     #   nbclient
-    #   notebook
-jupyter-core==5.3.0
+jupyter-core==5.3.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
-jupyter-events==0.6.3
+jupyter-events==0.7.0
     # via jupyter-server
-jupyter-server==2.6.0
+jupyter-lsp==2.2.0
+    # via jupyterlab
+jupyter-server==2.7.3
     # via
-    #   nbclassic
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
+    #   notebook
     #   notebook-shim
 jupyter-server-terminals==0.4.4
     # via jupyter-server
+jupyterlab==4.0.5
+    # via notebook
 jupyterlab-pygments==0.2.2
     # via nbconvert
-jupyterlab-widgets==3.0.7
+jupyterlab-server==2.24.0
+    # via
+    #   jupyterlab
+    #   notebook
+jupyterlab-widgets==3.0.8
     # via ipywidgets
 kubernetes==20.13.0
     # via feast (setup.py)
@@ -460,7 +471,7 @@ markupsafe==2.1.3
     #   jinja2
     #   nbconvert
     #   werkzeug
-marshmallow==3.19.0
+marshmallow==3.20.1
     # via great-expectations
 matplotlib-inline==0.1.6
     # via
@@ -470,19 +481,19 @@ mccabe==0.7.0
     # via flake8
 minio==7.1.0
     # via feast (setup.py)
-mistune==2.0.5
+mistune==3.0.1
     # via
     #   great-expectations
     #   nbconvert
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 mock==2.0.0
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-moto==4.1.10
+moto==4.2.2
     # via feast (setup.py)
-msal==1.22.0
+msal==1.23.0
     # via
     #   azure-datalake-store
     #   azure-identity
@@ -499,7 +510,7 @@ multidict==6.0.4
     # via
     #   aiohttp
     #   yarl
-multiprocess==0.70.14
+multiprocess==0.70.15
     # via bytewax
 mypy==0.982
     # via
@@ -511,37 +522,29 @@ mypy-extensions==1.0.0
     #   mypy
 mypy-protobuf==3.1
     # via feast (setup.py)
-mysqlclient==2.1.1
+mysqlclient==2.2.0
     # via feast (setup.py)
-nbclassic==1.0.0
-    # via notebook
 nbclient==0.8.0
     # via nbconvert
-nbconvert==7.4.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-nbformat==5.9.0
+nbconvert==7.8.0
+    # via jupyter-server
+nbformat==5.9.2
     # via
     #   great-expectations
     #   jupyter-server
-    #   nbclassic
     #   nbclient
     #   nbconvert
-    #   notebook
-nest-asyncio==1.5.6
-    # via
-    #   ipykernel
-    #   nbclassic
-    #   notebook
+nest-asyncio==1.5.7
+    # via ipykernel
 nodeenv==1.8.0
     # via pre-commit
-notebook==6.5.4
+notebook==7.0.3
     # via great-expectations
 notebook-shim==0.2.3
-    # via nbclassic
-numpy==1.24.3
+    # via
+    #   jupyterlab
+    #   notebook
+numpy==1.25.2
     # via
     #   altair
     #   db-dtypes
@@ -555,7 +558,7 @@ oauthlib==3.2.2
     # via requests-oauthlib
 oscrypto==1.3.0
     # via snowflake-connector-python
-overrides==7.3.1
+overrides==7.4.0
     # via jupyter-server
 packaging==23.1
     # via
@@ -566,8 +569,11 @@ packaging==23.1
     #   docker
     #   google-cloud-bigquery
     #   great-expectations
+    #   gunicorn
     #   ipykernel
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   marshmallow
     #   nbconvert
     #   pytest
@@ -591,7 +597,7 @@ parso==0.8.3
     # via jedi
 partd==1.4.0
     # via dask
-pathspec==0.11.1
+pathspec==0.11.2
     # via black
 pbr==5.11.1
     # via mock
@@ -599,29 +605,27 @@ pexpect==4.8.0
     # via ipython
 pickleshare==0.7.5
     # via ipython
-pip-tools==6.13.0
+pip-tools==7.3.0
     # via feast (setup.py)
-platformdirs==3.5.1
+platformdirs==3.8.1
     # via
     #   black
     #   jupyter-core
+    #   snowflake-connector-python
     #   virtualenv
-pluggy==1.0.0
+pluggy==1.3.0
     # via pytest
 ply==3.11
     # via thriftpy2
 portalocker==2.7.0
     # via msal-extensions
-pre-commit==3.3.2
+pre-commit==3.3.1
     # via feast (setup.py)
-prometheus-client==0.17.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-prompt-toolkit==3.0.38
+prometheus-client==0.17.1
+    # via jupyter-server
+prompt-toolkit==3.0.39
     # via ipython
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via
     #   feast (setup.py)
     #   google-cloud-bigquery
@@ -629,7 +633,7 @@ proto-plus==1.22.2
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -640,6 +644,7 @@ protobuf==4.23.2
     #   google-cloud-firestore
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
@@ -650,7 +655,7 @@ psutil==5.9.0
     # via
     #   feast (setup.py)
     #   ipykernel
-psycopg2-binary==2.9.6
+psycopg2-binary==2.9.7
     # via feast (setup.py)
 ptyprocess==0.7.0
     # via
@@ -684,43 +689,41 @@ pycparser==2.21
     # via cffi
 pycryptodomex==3.18.0
     # via snowflake-connector-python
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
     #   great-expectations
 pyflakes==3.0.1
     # via flake8
-pygments==2.15.1
+pygments==2.16.1
     # via
     #   feast (setup.py)
     #   ipython
     #   nbconvert
     #   sphinx
-pyjwt[crypto]==2.7.0
+pyjwt[crypto]==2.8.0
     # via
     #   adal
     #   msal
     #   snowflake-connector-python
 pymssql==2.2.8
     # via feast (setup.py)
-pymysql==1.0.3
+pymysql==1.1.0
     # via feast (setup.py)
 pyodbc==4.0.39
     # via feast (setup.py)
 pyopenssl==23.2.0
     # via snowflake-connector-python
-pyparsing==3.0.9
+pyparsing==3.1.1
     # via
     #   great-expectations
     #   httplib2
 pyproject-hooks==1.0.0
     # via build
-pyrsistent==0.19.3
-    # via jsonschema
-pyspark==3.4.0
+pyspark==3.4.1
     # via feast (setup.py)
-pytest==7.3.1
+pytest==7.4.1
     # via
     #   feast (setup.py)
     #   pytest-benchmark
@@ -761,7 +764,7 @@ python-dotenv==1.0.0
     # via uvicorn
 python-json-logger==2.0.7
     # via jupyter-events
-pytz==2023.3
+pytz==2023.3.post1
     # via
     #   great-expectations
     #   pandas
@@ -776,16 +779,19 @@ pyyaml==6.0.1
     #   pre-commit
     #   responses
     #   uvicorn
-pyzmq==25.1.0
+pyzmq==25.1.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
-    #   notebook
 redis==4.2.2
     # via feast (setup.py)
-regex==2023.5.5
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+    #   jupyter-events
+regex==2023.8.8
     # via feast (setup.py)
 requests==2.31.0
     # via
@@ -801,6 +807,7 @@ requests==2.31.0
     #   google-cloud-bigquery
     #   google-cloud-storage
     #   great-expectations
+    #   jupyterlab-server
     #   kubernetes
     #   moto
     #   msal
@@ -815,7 +822,7 @@ requests-oauthlib==1.3.1
     #   google-auth-oauthlib
     #   kubernetes
     #   msrest
-responses==0.23.1
+responses==0.23.3
     # via moto
 rfc3339-validator==0.1.4
     # via
@@ -825,26 +832,26 @@ rfc3986-validator==0.1.1
     # via
     #   jsonschema
     #   jupyter-events
-rockset==2.0.0
+rockset==2.1.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 rsa==4.9
     # via google-auth
 ruamel-yaml==0.17.17
     # via great-expectations
-s3transfer==0.6.1
+s3transfer==0.6.2
     # via boto3
-scipy==1.10.1
+scipy==1.11.2
     # via great-expectations
 send2trash==1.8.2
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+    # via jupyter-server
 six==1.16.0
     # via
     #   asttokens
     #   azure-core
-    #   azure-identity
     #   bleach
     #   cassandra-driver
     #   geomet
@@ -866,29 +873,35 @@ sniffio==1.3.0
     #   httpx
 snowballstemmer==2.2.0
     # via sphinx
-snowflake-connector-python[pandas]==3.0.4
+snowflake-connector-python[pandas]==3.1.1
     # via feast (setup.py)
 sortedcontainers==2.4.0
     # via snowflake-connector-python
-soupsieve==2.4.1
+soupsieve==2.5
     # via beautifulsoup4
 sphinx==6.2.1
-    # via feast (setup.py)
-sphinxcontrib-applehelp==1.0.4
+    # via
+    #   feast (setup.py)
+    #   sphinxcontrib-applehelp
+    #   sphinxcontrib-devhelp
+    #   sphinxcontrib-htmlhelp
+    #   sphinxcontrib-qthelp
+    #   sphinxcontrib-serializinghtml
+sphinxcontrib-applehelp==1.0.7
     # via sphinx
-sphinxcontrib-devhelp==1.0.2
+sphinxcontrib-devhelp==1.0.5
     # via sphinx
-sphinxcontrib-htmlhelp==2.0.1
+sphinxcontrib-htmlhelp==2.0.4
     # via sphinx
 sphinxcontrib-jsmath==1.0.1
     # via sphinx
-sphinxcontrib-qthelp==1.0.3
+sphinxcontrib-qthelp==1.0.6
     # via sphinx
-sphinxcontrib-serializinghtml==1.1.5
+sphinxcontrib-serializinghtml==1.1.9
     # via sphinx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 stack-data==0.6.2
     # via ipython
@@ -896,14 +909,12 @@ starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 terminado==0.17.1
     # via
     #   jupyter-server
     #   jupyter-server-terminals
-    #   nbclassic
-    #   notebook
 testcontainers==3.7.1
     # via feast (setup.py)
 thriftpy2==0.4.16
@@ -917,23 +928,27 @@ tomli==2.0.1
     #   black
     #   build
     #   coverage
+    #   jupyterlab
     #   mypy
+    #   pip-tools
     #   pyproject-hooks
     #   pytest
+tomlkit==0.12.1
+    # via snowflake-connector-python
 toolz==0.12.0
     # via
     #   altair
     #   dask
     #   partd
-tornado==6.3.2
+tornado==6.3.3
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   notebook
     #   terminado
-tqdm==4.65.0
+tqdm==4.66.1
     # via
     #   feast (setup.py)
     #   great-expectations
@@ -947,12 +962,11 @@ traitlets==5.9.0
     #   jupyter-core
     #   jupyter-events
     #   jupyter-server
+    #   jupyterlab
     #   matplotlib-inline
-    #   nbclassic
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
 trino==0.326.0
     # via feast (setup.py)
 typeguard==2.13.3
@@ -961,42 +975,46 @@ types-protobuf==3.19.22
     # via
     #   feast (setup.py)
     #   mypy-protobuf
-types-pymysql==1.0.19.7
+types-pymysql==1.1.0.1
     # via feast (setup.py)
-types-pyopenssl==23.2.0.0
+types-pyopenssl==23.2.0.2
     # via types-redis
-types-python-dateutil==2.8.19.13
+types-python-dateutil==2.8.19.14
     # via feast (setup.py)
-types-pytz==2023.3.0.0
+types-pytz==2023.3.0.1
     # via feast (setup.py)
-types-pyyaml==6.0.12.10
+types-pyyaml==6.0.12.11
     # via
     #   feast (setup.py)
     #   responses
-types-redis==4.5.5.2
+types-redis==4.6.0.5
     # via feast (setup.py)
-types-requests==2.31.0.1
+types-requests==2.31.0.2
     # via feast (setup.py)
-types-setuptools==67.8.0.0
+types-setuptools==68.2.0.0
     # via feast (setup.py)
-types-tabulate==0.9.0.2
+types-tabulate==0.9.0.3
     # via feast (setup.py)
-types-urllib3==1.26.25.13
+types-urllib3==1.26.25.14
     # via types-requests
-typing-extensions==4.6.3
+typing-extensions==4.7.1
     # via
+    #   async-lru
     #   azure-core
     #   azure-storage-blob
+    #   fastapi
+    #   filelock
     #   great-expectations
     #   mypy
     #   pydantic
     #   snowflake-connector-python
     #   sqlalchemy2-stubs
+    #   uvicorn
 tzlocal==5.0.1
     # via
     #   great-expectations
     #   trino
-uri-template==1.2.0
+uri-template==1.3.0
     # via jsonschema
 uritemplate==4.1.1
     # via google-api-python-client
@@ -1013,15 +1031,17 @@ urllib3==1.26.16
     #   responses
     #   rockset
     #   snowflake-connector-python
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 virtualenv==20.23.0
-    # via pre-commit
+    # via
+    #   feast (setup.py)
+    #   pre-commit
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 wcwidth==0.2.6
     # via prompt-toolkit
@@ -1031,18 +1051,18 @@ webencodings==0.5.1
     # via
     #   bleach
     #   tinycss2
-websocket-client==1.5.2
+websocket-client==1.6.2
     # via
     #   docker
     #   jupyter-server
     #   kubernetes
 websockets==11.0.3
     # via uvicorn
-werkzeug==2.3.4
+werkzeug==2.3.7
     # via moto
-wheel==0.40.0
+wheel==0.41.2
     # via pip-tools
-widgetsnbextension==4.0.7
+widgetsnbextension==4.0.8
     # via ipywidgets
 wrapt==1.15.0
     # via
@@ -1052,7 +1072,7 @@ xmltodict==0.13.0
     # via moto
 yarl==1.9.2
     # via aiohttp
-zipp==3.15.0
+zipp==3.16.2
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt
index d9b70d51974..4140bea9d0f 100644
--- a/sdk/python/requirements/py3.10-requirements.txt
+++ b/sdk/python/requirements/py3.10-requirements.txt
@@ -4,7 +4,7 @@
 #
 #    pip-compile --output-file=sdk/python/requirements/py3.10-requirements.txt
 #
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   starlette
@@ -15,16 +15,17 @@ attrs==23.1.0
     # via
     #   bowler
     #   jsonschema
+    #   referencing
 bowler==0.9.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
     #   requests
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via requests
-click==8.1.3
+click==8.1.7
     # via
     #   bowler
     #   dask
@@ -35,39 +36,43 @@ cloudpickle==2.2.1
     # via dask
 colorama==0.4.6
     # via feast (setup.py)
-dask==2023.5.1
+dask==2023.9.1
     # via feast (setup.py)
-dill==0.3.6
+dill==0.3.7
     # via feast (setup.py)
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via anyio
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
 fissix==21.11.13
     # via bowler
-fsspec==2023.5.0
+fsspec==2023.9.0
     # via dask
-greenlet==2.0.2
-    # via sqlalchemy
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
-grpcio-reflection==1.54.2
+    #   grpcio-tools
+grpcio-health-checking==1.57.0
+    # via feast (setup.py)
+grpcio-reflection==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+grpcio-tools==1.57.0
+    # via feast (setup.py)
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
     #   httpcore
     #   uvicorn
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
@@ -76,32 +81,38 @@ idna==3.4
     #   anyio
     #   httpx
     #   requests
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via dask
 jinja2==3.1.2
     # via feast (setup.py)
-jsonschema==4.17.3
+jsonschema==4.19.0
     # via feast (setup.py)
+jsonschema-specifications==2023.7.1
+    # via jsonschema
 locket==1.0.0
     # via partd
 markupsafe==2.1.3
     # via jinja2
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-mypy==1.3.0
+mypy==1.5.1
     # via sqlalchemy
 mypy-extensions==1.0.0
     # via mypy
-numpy==1.24.3
+mypy-protobuf==3.1
+    # via feast (setup.py)
+numpy==1.25.2
     # via
     #   feast (setup.py)
     #   pandas
     #   pandavro
     #   pyarrow
 packaging==23.1
-    # via dask
+    # via
+    #   dask
+    #   gunicorn
 pandas==1.5.3
     # via
     #   feast (setup.py)
@@ -110,36 +121,45 @@ pandavro==1.5.2
     # via feast (setup.py)
 partd==1.4.0
     # via dask
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via feast (setup.py)
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
+    #   grpcio-tools
+    #   mypy-protobuf
     #   proto-plus
 pyarrow==11.0.0
     # via feast (setup.py)
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
-pygments==2.15.1
+pygments==2.16.1
     # via feast (setup.py)
-pyrsistent==0.19.3
-    # via jsonschema
 python-dateutil==2.8.2
     # via pandas
 python-dotenv==1.0.0
     # via uvicorn
-pytz==2023.3
+pytz==2023.3.post1
     # via pandas
 pyyaml==6.0.1
     # via
     #   dask
     #   feast (setup.py)
     #   uvicorn
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
 requests==2.31.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 six==1.16.0
     # via
     #   pandavro
@@ -149,15 +169,15 @@ sniffio==1.3.0
     #   anyio
     #   httpcore
     #   httpx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 toml==0.10.2
     # via feast (setup.py)
@@ -167,26 +187,33 @@ toolz==0.12.0
     # via
     #   dask
     #   partd
-tqdm==4.65.0
+tqdm==4.66.1
     # via feast (setup.py)
 typeguard==2.13.3
     # via feast (setup.py)
-typing-extensions==4.6.3
+types-protobuf==4.24.0.1
+    # via mypy-protobuf
+typing-extensions==4.7.1
     # via
+    #   fastapi
     #   mypy
     #   pydantic
     #   sqlalchemy2-stubs
-urllib3==2.0.2
+    #   uvicorn
+urllib3==2.0.4
     # via requests
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 websockets==11.0.3
     # via uvicorn
-zipp==3.15.0
+zipp==3.16.2
     # via importlib-metadata
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/sdk/python/requirements/py3.8-ci-requirements.txt b/sdk/python/requirements/py3.8-ci-requirements.txt
index de814374b68..9dfefc21081 100644
--- a/sdk/python/requirements/py3.8-ci-requirements.txt
+++ b/sdk/python/requirements/py3.8-ci-requirements.txt
@@ -8,7 +8,7 @@ adal==1.2.7
     # via msrestazure
 adlfs==0.5.9
     # via feast (setup.py)
-aiohttp==3.8.4
+aiohttp==3.8.5
     # via
     #   adlfs
     #   gcsfs
@@ -18,7 +18,7 @@ alabaster==0.7.13
     # via sphinx
 altair==4.2.0
     # via great-expectations
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   jupyter-server
@@ -30,11 +30,8 @@ appnope==0.1.3
     # via
     #   ipykernel
     #   ipython
-argon2-cffi==21.3.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+argon2-cffi==23.1.0
+    # via jupyter-server
 argon2-cffi-bindings==21.2.0
     # via argon2-cffi
 arrow==1.2.3
@@ -45,9 +42,11 @@ asn1crypto==1.5.1
     #   snowflake-connector-python
 assertpy==1.1
     # via feast (setup.py)
-asttokens==2.2.1
+asttokens==2.4.0
     # via stack-data
-async-timeout==4.0.2
+async-lru==2.0.4
+    # via jupyterlab
+async-timeout==4.0.3
     # via
     #   aiohttp
     #   redis
@@ -56,9 +55,10 @@ attrs==23.1.0
     #   aiohttp
     #   bowler
     #   jsonschema
+    #   referencing
 avro==1.10.0
     # via feast (setup.py)
-azure-core==1.27.0
+azure-core==1.29.3
     # via
     #   adlfs
     #   azure-identity
@@ -66,16 +66,18 @@ azure-core==1.27.0
     #   msrest
 azure-datalake-store==0.0.53
     # via adlfs
-azure-identity==1.13.0
+azure-identity==1.14.0
     # via
     #   adlfs
     #   feast (setup.py)
-azure-storage-blob==12.16.0
+azure-storage-blob==12.17.0
     # via
     #   adlfs
     #   feast (setup.py)
 babel==2.12.1
-    # via sphinx
+    # via
+    #   jupyterlab-server
+    #   sphinx
 backcall==0.2.0
     # via ipython
 backports-zoneinfo==0.2.1
@@ -88,30 +90,30 @@ black==22.12.0
     # via feast (setup.py)
 bleach==6.0.0
     # via nbconvert
-boto3==1.26.146
+boto3==1.28.42
     # via
     #   feast (setup.py)
     #   moto
-botocore==1.29.146
+botocore==1.31.42
     # via
     #   boto3
     #   moto
     #   s3transfer
 bowler==0.9.0
     # via feast (setup.py)
-build==0.10.0
+build==1.0.3
     # via
     #   feast (setup.py)
     #   pip-tools
 bytewax==0.15.1
     # via feast (setup.py)
-cachecontrol==0.13.0
+cachecontrol==0.13.1
     # via firebase-admin
 cachetools==5.3.1
     # via google-auth
-cassandra-driver==3.27.0
+cassandra-driver==3.28.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
@@ -126,14 +128,14 @@ cffi==1.15.1
     #   azure-datalake-store
     #   cryptography
     #   snowflake-connector-python
-cfgv==3.3.1
+cfgv==3.4.0
     # via pre-commit
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via
     #   aiohttp
     #   requests
     #   snowflake-connector-python
-click==8.1.3
+click==8.1.7
     # via
     #   black
     #   bowler
@@ -150,16 +152,17 @@ colorama==0.4.6
     # via
     #   feast (setup.py)
     #   great-expectations
-comm==0.1.3
-    # via ipykernel
-coverage[toml]==7.2.7
+comm==0.1.4
+    # via
+    #   ipykernel
+    #   ipywidgets
+coverage[toml]==7.3.1
     # via pytest-cov
-cryptography==40.0.2
+cryptography==41.0.3
     # via
     #   adal
     #   azure-identity
     #   azure-storage-blob
-    #   cassandra-driver
     #   feast (setup.py)
     #   great-expectations
     #   moto
@@ -173,7 +176,7 @@ dask==2023.5.0
     # via feast (setup.py)
 db-dtypes==1.1.1
     # via google-cloud-bigquery
-debugpy==1.6.7
+debugpy==1.6.7.post1
     # via ipykernel
 decorator==5.1.1
     # via
@@ -185,12 +188,12 @@ deprecated==1.2.14
     # via redis
 deprecation==2.1.0
     # via testcontainers
-dill==0.3.6
+dill==0.3.7
     # via
     #   bytewax
     #   feast (setup.py)
     #   multiprocess
-distlib==0.3.6
+distlib==0.3.7
     # via virtualenv
 docker==6.1.3
     # via
@@ -200,23 +203,23 @@ docutils==0.19
     # via sphinx
 entrypoints==0.4
     # via altair
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via
     #   anyio
     #   pytest
-execnet==1.9.0
+execnet==2.0.2
     # via pytest-xdist
 executing==1.2.0
     # via stack-data
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
-fastjsonschema==2.17.1
+fastjsonschema==2.18.0
     # via nbformat
-filelock==3.12.0
+filelock==3.12.3
     # via
     #   snowflake-connector-python
     #   virtualenv
@@ -228,7 +231,7 @@ flake8==6.0.0
     # via feast (setup.py)
 fqdn==1.5.1
     # via jsonschema
-frozenlist==1.3.3
+frozenlist==1.4.0
     # via
     #   aiohttp
     #   aiosignal
@@ -243,7 +246,7 @@ geojson==2.5.0
     # via rockset
 geomet==0.2.1.post1
     # via cassandra-driver
-google-api-core[grpc]==2.11.0
+google-api-core[grpc]==2.11.1
     # via
     #   feast (setup.py)
     #   firebase-admin
@@ -255,9 +258,9 @@ google-api-core[grpc]==2.11.0
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-api-python-client==2.88.0
+google-api-python-client==2.98.0
     # via firebase-admin
-google-auth==2.19.1
+google-auth==2.22.0
     # via
     #   gcsfs
     #   google-api-core
@@ -271,35 +274,35 @@ google-auth-httplib2==0.1.0
     # via google-api-python-client
 google-auth-oauthlib==1.0.0
     # via gcsfs
-google-cloud-bigquery[pandas]==3.11.0
+google-cloud-bigquery[pandas]==3.11.4
     # via feast (setup.py)
-google-cloud-bigquery-storage==2.20.0
+google-cloud-bigquery-storage==2.22.0
     # via feast (setup.py)
-google-cloud-bigtable==2.18.1
+google-cloud-bigtable==2.21.0
     # via feast (setup.py)
-google-cloud-core==2.3.2
+google-cloud-core==2.3.3
     # via
     #   google-cloud-bigquery
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-cloud-datastore==2.15.2
+google-cloud-datastore==2.18.0
     # via feast (setup.py)
 google-cloud-firestore==2.11.1
     # via firebase-admin
-google-cloud-storage==2.9.0
+google-cloud-storage==2.10.0
     # via
     #   feast (setup.py)
     #   firebase-admin
     #   gcsfs
 google-crc32c==1.5.0
     # via google-resumable-media
-google-resumable-media==2.5.0
+google-resumable-media==2.6.0
     # via
     #   google-cloud-bigquery
     #   google-cloud-storage
-googleapis-common-protos[grpc]==1.59.0
+googleapis-common-protos[grpc]==1.60.0
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -307,30 +310,31 @@ googleapis-common-protos[grpc]==1.59.0
     #   grpcio-status
 great-expectations==0.15.50
     # via feast (setup.py)
-greenlet==2.0.2
-    # via sqlalchemy
 grpc-google-iam-v1==0.12.6
     # via google-cloud-bigtable
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
     #   google-api-core
     #   google-cloud-bigquery
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
     #   grpcio-tools
-grpcio-reflection==1.54.2
+grpcio-health-checking==1.57.0
+    # via feast (setup.py)
+grpcio-reflection==1.57.0
     # via feast (setup.py)
-grpcio-status==1.54.2
+grpcio-status==1.57.0
     # via google-api-core
-grpcio-testing==1.54.2
+grpcio-testing==1.57.0
     # via feast (setup.py)
-grpcio-tools==1.54.2
+grpcio-tools==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
@@ -338,21 +342,21 @@ h11==0.14.0
     #   uvicorn
 happybase==1.2.0
     # via feast (setup.py)
-hazelcast-python-client==5.2.0
+hazelcast-python-client==5.3.0
     # via feast (setup.py)
 hiredis==2.2.3
     # via feast (setup.py)
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
 httplib2==0.22.0
     # via
     #   google-api-python-client
     #   google-auth-httplib2
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
-identify==2.5.24
+identify==2.5.27
     # via pre-commit
 idna==3.4
     # via
@@ -364,32 +368,32 @@ idna==3.4
     #   yarl
 imagesize==1.4.1
     # via sphinx
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via
+    #   build
     #   dask
     #   great-expectations
     #   jupyter-client
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
     #   nbconvert
     #   sphinx
-importlib-resources==5.12.0
-    # via jsonschema
+importlib-resources==6.0.1
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+    #   jupyterlab
 iniconfig==2.0.0
     # via pytest
-ipykernel==6.23.1
-    # via
-    #   ipywidgets
-    #   nbclassic
-    #   notebook
+ipykernel==6.25.2
+    # via jupyterlab
 ipython==8.12.2
     # via
     #   great-expectations
     #   ipykernel
     #   ipywidgets
-ipython-genutils==0.2.0
-    # via
-    #   nbclassic
-    #   notebook
-ipywidgets==8.0.6
+ipywidgets==8.1.0
     # via great-expectations
 isodate==0.6.1
     # via
@@ -399,7 +403,7 @@ isoduration==20.11.0
     # via jsonschema
 isort==5.12.0
     # via feast (setup.py)
-jedi==0.18.2
+jedi==0.19.0
     # via ipython
 jinja2==3.1.2
     # via
@@ -407,56 +411,69 @@ jinja2==3.1.2
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   moto
-    #   nbclassic
     #   nbconvert
-    #   notebook
     #   sphinx
 jmespath==1.0.1
     # via
     #   boto3
     #   botocore
-jsonpatch==1.32
+json5==0.9.14
+    # via jupyterlab-server
+jsonpatch==1.33
     # via great-expectations
-jsonpointer==2.3
+jsonpointer==2.4
     # via
     #   jsonpatch
     #   jsonschema
-jsonschema[format-nongpl]==4.17.3
+jsonschema[format-nongpl]==4.19.0
     # via
     #   altair
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-events
+    #   jupyterlab-server
     #   nbformat
-jupyter-client==8.2.0
+jsonschema-specifications==2023.7.1
+    # via jsonschema
+jupyter-client==8.3.1
     # via
     #   ipykernel
     #   jupyter-server
-    #   nbclassic
     #   nbclient
-    #   notebook
-jupyter-core==5.3.0
+jupyter-core==5.3.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
-jupyter-events==0.6.3
+jupyter-events==0.7.0
     # via jupyter-server
-jupyter-server==2.6.0
+jupyter-lsp==2.2.0
+    # via jupyterlab
+jupyter-server==2.7.3
     # via
-    #   nbclassic
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
+    #   notebook
     #   notebook-shim
 jupyter-server-terminals==0.4.4
     # via jupyter-server
+jupyterlab==4.0.5
+    # via notebook
 jupyterlab-pygments==0.2.2
     # via nbconvert
-jupyterlab-widgets==3.0.7
+jupyterlab-server==2.24.0
+    # via
+    #   jupyterlab
+    #   notebook
+jupyterlab-widgets==3.0.8
     # via ipywidgets
 kubernetes==20.13.0
     # via feast (setup.py)
@@ -469,7 +486,7 @@ markupsafe==2.1.3
     #   jinja2
     #   nbconvert
     #   werkzeug
-marshmallow==3.19.0
+marshmallow==3.20.1
     # via great-expectations
 matplotlib-inline==0.1.6
     # via
@@ -479,19 +496,19 @@ mccabe==0.7.0
     # via flake8
 minio==7.1.0
     # via feast (setup.py)
-mistune==2.0.5
+mistune==3.0.1
     # via
     #   great-expectations
     #   nbconvert
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 mock==2.0.0
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-moto==4.1.10
+moto==4.2.2
     # via feast (setup.py)
-msal==1.22.0
+msal==1.23.0
     # via
     #   azure-datalake-store
     #   azure-identity
@@ -508,7 +525,7 @@ multidict==6.0.4
     # via
     #   aiohttp
     #   yarl
-multiprocess==0.70.14
+multiprocess==0.70.15
     # via bytewax
 mypy==0.982
     # via
@@ -520,37 +537,29 @@ mypy-extensions==1.0.0
     #   mypy
 mypy-protobuf==3.1
     # via feast (setup.py)
-mysqlclient==2.1.1
+mysqlclient==2.2.0
     # via feast (setup.py)
-nbclassic==1.0.0
-    # via notebook
 nbclient==0.8.0
     # via nbconvert
-nbconvert==7.4.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-nbformat==5.9.0
+nbconvert==7.8.0
+    # via jupyter-server
+nbformat==5.9.2
     # via
     #   great-expectations
     #   jupyter-server
-    #   nbclassic
     #   nbclient
     #   nbconvert
-    #   notebook
-nest-asyncio==1.5.6
-    # via
-    #   ipykernel
-    #   nbclassic
-    #   notebook
+nest-asyncio==1.5.7
+    # via ipykernel
 nodeenv==1.8.0
     # via pre-commit
-notebook==6.5.4
+notebook==7.0.3
     # via great-expectations
 notebook-shim==0.2.3
-    # via nbclassic
-numpy==1.24.3
+    # via
+    #   jupyterlab
+    #   notebook
+numpy==1.24.4
     # via
     #   altair
     #   db-dtypes
@@ -564,7 +573,7 @@ oauthlib==3.2.2
     # via requests-oauthlib
 oscrypto==1.3.0
     # via snowflake-connector-python
-overrides==7.3.1
+overrides==7.4.0
     # via jupyter-server
 packaging==23.1
     # via
@@ -575,8 +584,11 @@ packaging==23.1
     #   docker
     #   google-cloud-bigquery
     #   great-expectations
+    #   gunicorn
     #   ipykernel
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   marshmallow
     #   nbconvert
     #   pytest
@@ -600,7 +612,7 @@ parso==0.8.3
     # via jedi
 partd==1.4.0
     # via dask
-pathspec==0.11.1
+pathspec==0.11.2
     # via black
 pbr==5.11.1
     # via mock
@@ -608,31 +620,29 @@ pexpect==4.8.0
     # via ipython
 pickleshare==0.7.5
     # via ipython
-pip-tools==6.13.0
+pip-tools==7.3.0
     # via feast (setup.py)
 pkgutil-resolve-name==1.3.10
     # via jsonschema
-platformdirs==3.5.1
+platformdirs==3.8.1
     # via
     #   black
     #   jupyter-core
+    #   snowflake-connector-python
     #   virtualenv
-pluggy==1.0.0
+pluggy==1.3.0
     # via pytest
 ply==3.11
     # via thriftpy2
 portalocker==2.7.0
     # via msal-extensions
-pre-commit==3.3.2
+pre-commit==3.3.1
     # via feast (setup.py)
-prometheus-client==0.17.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-prompt-toolkit==3.0.38
+prometheus-client==0.17.1
+    # via jupyter-server
+prompt-toolkit==3.0.39
     # via ipython
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via
     #   feast (setup.py)
     #   google-cloud-bigquery
@@ -640,7 +650,7 @@ proto-plus==1.22.2
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -651,6 +661,7 @@ protobuf==4.23.2
     #   google-cloud-firestore
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
@@ -661,7 +672,7 @@ psutil==5.9.0
     # via
     #   feast (setup.py)
     #   ipykernel
-psycopg2-binary==2.9.6
+psycopg2-binary==2.9.7
     # via feast (setup.py)
 ptyprocess==0.7.0
     # via
@@ -695,43 +706,41 @@ pycparser==2.21
     # via cffi
 pycryptodomex==3.18.0
     # via snowflake-connector-python
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
     #   great-expectations
 pyflakes==3.0.1
     # via flake8
-pygments==2.15.1
+pygments==2.16.1
     # via
     #   feast (setup.py)
     #   ipython
     #   nbconvert
     #   sphinx
-pyjwt[crypto]==2.7.0
+pyjwt[crypto]==2.8.0
     # via
     #   adal
     #   msal
     #   snowflake-connector-python
 pymssql==2.2.8
     # via feast (setup.py)
-pymysql==1.0.3
+pymysql==1.1.0
     # via feast (setup.py)
 pyodbc==4.0.39
     # via feast (setup.py)
 pyopenssl==23.2.0
     # via snowflake-connector-python
-pyparsing==3.0.9
+pyparsing==3.1.1
     # via
     #   great-expectations
     #   httplib2
 pyproject-hooks==1.0.0
     # via build
-pyrsistent==0.19.3
-    # via jsonschema
-pyspark==3.4.0
+pyspark==3.4.1
     # via feast (setup.py)
-pytest==7.3.1
+pytest==7.4.1
     # via
     #   feast (setup.py)
     #   pytest-benchmark
@@ -772,7 +781,7 @@ python-dotenv==1.0.0
     # via uvicorn
 python-json-logger==2.0.7
     # via jupyter-events
-pytz==2023.3
+pytz==2023.3.post1
     # via
     #   babel
     #   great-expectations
@@ -788,16 +797,19 @@ pyyaml==6.0.1
     #   pre-commit
     #   responses
     #   uvicorn
-pyzmq==25.1.0
+pyzmq==25.1.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
-    #   notebook
 redis==4.2.2
     # via feast (setup.py)
-regex==2023.5.5
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+    #   jupyter-events
+regex==2023.8.8
     # via feast (setup.py)
 requests==2.31.0
     # via
@@ -813,6 +825,7 @@ requests==2.31.0
     #   google-cloud-bigquery
     #   google-cloud-storage
     #   great-expectations
+    #   jupyterlab-server
     #   kubernetes
     #   moto
     #   msal
@@ -827,7 +840,7 @@ requests-oauthlib==1.3.1
     #   google-auth-oauthlib
     #   kubernetes
     #   msrest
-responses==0.23.1
+responses==0.23.3
     # via moto
 rfc3339-validator==0.1.4
     # via
@@ -837,28 +850,28 @@ rfc3986-validator==0.1.1
     # via
     #   jsonschema
     #   jupyter-events
-rockset==2.0.0
+rockset==2.1.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 rsa==4.9
     # via google-auth
 ruamel-yaml==0.17.17
     # via great-expectations
 ruamel-yaml-clib==0.2.7
     # via ruamel-yaml
-s3transfer==0.6.1
+s3transfer==0.6.2
     # via boto3
 scipy==1.10.1
     # via great-expectations
 send2trash==1.8.2
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+    # via jupyter-server
 six==1.16.0
     # via
     #   asttokens
     #   azure-core
-    #   azure-identity
     #   bleach
     #   cassandra-driver
     #   geomet
@@ -880,11 +893,11 @@ sniffio==1.3.0
     #   httpx
 snowballstemmer==2.2.0
     # via sphinx
-snowflake-connector-python[pandas]==3.0.4
+snowflake-connector-python[pandas]==3.1.1
     # via feast (setup.py)
 sortedcontainers==2.4.0
     # via snowflake-connector-python
-soupsieve==2.4.1
+soupsieve==2.5
     # via beautifulsoup4
 sphinx==6.2.1
     # via feast (setup.py)
@@ -900,9 +913,9 @@ sphinxcontrib-qthelp==1.0.3
     # via sphinx
 sphinxcontrib-serializinghtml==1.1.5
     # via sphinx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 stack-data==0.6.2
     # via ipython
@@ -910,14 +923,12 @@ starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 terminado==0.17.1
     # via
     #   jupyter-server
     #   jupyter-server-terminals
-    #   nbclassic
-    #   notebook
 testcontainers==3.7.1
     # via feast (setup.py)
 thriftpy2==0.4.16
@@ -931,23 +942,27 @@ tomli==2.0.1
     #   black
     #   build
     #   coverage
+    #   jupyterlab
     #   mypy
+    #   pip-tools
     #   pyproject-hooks
     #   pytest
+tomlkit==0.12.1
+    # via snowflake-connector-python
 toolz==0.12.0
     # via
     #   altair
     #   dask
     #   partd
-tornado==6.3.2
+tornado==6.3.3
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   notebook
     #   terminado
-tqdm==4.65.0
+tqdm==4.66.1
     # via
     #   feast (setup.py)
     #   great-expectations
@@ -961,12 +976,11 @@ traitlets==5.9.0
     #   jupyter-core
     #   jupyter-events
     #   jupyter-server
+    #   jupyterlab
     #   matplotlib-inline
-    #   nbclassic
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
 trino==0.326.0
     # via feast (setup.py)
 typeguard==2.13.3
@@ -975,33 +989,36 @@ types-protobuf==3.19.22
     # via
     #   feast (setup.py)
     #   mypy-protobuf
-types-pymysql==1.0.19.7
+types-pymysql==1.1.0.1
     # via feast (setup.py)
-types-pyopenssl==23.2.0.0
+types-pyopenssl==23.2.0.2
     # via types-redis
-types-python-dateutil==2.8.19.13
+types-python-dateutil==2.8.19.14
     # via feast (setup.py)
-types-pytz==2023.3.0.0
+types-pytz==2023.3.0.1
     # via feast (setup.py)
-types-pyyaml==6.0.12.10
+types-pyyaml==6.0.12.11
     # via
     #   feast (setup.py)
     #   responses
-types-redis==4.5.5.2
+types-redis==4.6.0.5
     # via feast (setup.py)
-types-requests==2.31.0.1
+types-requests==2.31.0.2
     # via feast (setup.py)
-types-setuptools==67.8.0.0
+types-setuptools==68.2.0.0
     # via feast (setup.py)
-types-tabulate==0.9.0.2
+types-tabulate==0.9.0.3
     # via feast (setup.py)
-types-urllib3==1.26.25.13
+types-urllib3==1.26.25.14
     # via types-requests
-typing-extensions==4.6.3
+typing-extensions==4.7.1
     # via
+    #   async-lru
     #   azure-core
     #   azure-storage-blob
     #   black
+    #   fastapi
+    #   filelock
     #   great-expectations
     #   ipython
     #   mypy
@@ -1009,11 +1026,12 @@ typing-extensions==4.6.3
     #   snowflake-connector-python
     #   sqlalchemy2-stubs
     #   starlette
+    #   uvicorn
 tzlocal==5.0.1
     # via
     #   great-expectations
     #   trino
-uri-template==1.2.0
+uri-template==1.3.0
     # via jsonschema
 uritemplate==4.1.1
     # via google-api-python-client
@@ -1030,15 +1048,17 @@ urllib3==1.26.16
     #   responses
     #   rockset
     #   snowflake-connector-python
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 virtualenv==20.23.0
-    # via pre-commit
+    # via
+    #   feast (setup.py)
+    #   pre-commit
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 wcwidth==0.2.6
     # via prompt-toolkit
@@ -1048,18 +1068,18 @@ webencodings==0.5.1
     # via
     #   bleach
     #   tinycss2
-websocket-client==1.5.2
+websocket-client==1.6.2
     # via
     #   docker
     #   jupyter-server
     #   kubernetes
 websockets==11.0.3
     # via uvicorn
-werkzeug==2.3.4
+werkzeug==2.3.7
     # via moto
-wheel==0.40.0
+wheel==0.41.2
     # via pip-tools
-widgetsnbextension==4.0.7
+widgetsnbextension==4.0.8
     # via ipywidgets
 wrapt==1.15.0
     # via
@@ -1069,7 +1089,7 @@ xmltodict==0.13.0
     # via moto
 yarl==1.9.2
     # via aiohttp
-zipp==3.15.0
+zipp==3.16.2
     # via
     #   importlib-metadata
     #   importlib-resources
diff --git a/sdk/python/requirements/py3.8-requirements.txt b/sdk/python/requirements/py3.8-requirements.txt
index 55ee6349048..636f886133d 100644
--- a/sdk/python/requirements/py3.8-requirements.txt
+++ b/sdk/python/requirements/py3.8-requirements.txt
@@ -4,7 +4,7 @@
 #
 #    pip-compile --output-file=sdk/python/requirements/py3.8-requirements.txt
 #
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   starlette
@@ -15,16 +15,17 @@ attrs==23.1.0
     # via
     #   bowler
     #   jsonschema
+    #   referencing
 bowler==0.9.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
     #   requests
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via requests
-click==8.1.3
+click==8.1.7
     # via
     #   bowler
     #   dask
@@ -37,37 +38,41 @@ colorama==0.4.6
     # via feast (setup.py)
 dask==2023.5.0
     # via feast (setup.py)
-dill==0.3.6
+dill==0.3.7
     # via feast (setup.py)
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via anyio
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
 fissix==21.11.13
     # via bowler
-fsspec==2023.5.0
+fsspec==2023.9.0
     # via dask
-greenlet==2.0.2
-    # via sqlalchemy
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
-grpcio-reflection==1.54.2
+    #   grpcio-tools
+grpcio-health-checking==1.57.0
+    # via feast (setup.py)
+grpcio-reflection==1.57.0
+    # via feast (setup.py)
+grpcio-tools==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
     #   httpcore
     #   uvicorn
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
@@ -76,34 +81,42 @@ idna==3.4
     #   anyio
     #   httpx
     #   requests
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via dask
-importlib-resources==5.12.0
-    # via jsonschema
+importlib-resources==6.0.1
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
 jinja2==3.1.2
     # via feast (setup.py)
-jsonschema==4.17.3
+jsonschema==4.19.0
     # via feast (setup.py)
+jsonschema-specifications==2023.7.1
+    # via jsonschema
 locket==1.0.0
     # via partd
 markupsafe==2.1.3
     # via jinja2
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-mypy==1.3.0
+mypy==1.5.1
     # via sqlalchemy
 mypy-extensions==1.0.0
     # via mypy
-numpy==1.24.3
+mypy-protobuf==3.1
+    # via feast (setup.py)
+numpy==1.24.4
     # via
     #   feast (setup.py)
     #   pandas
     #   pandavro
     #   pyarrow
 packaging==23.1
-    # via dask
+    # via
+    #   dask
+    #   gunicorn
 pandas==1.5.3
     # via
     #   feast (setup.py)
@@ -114,36 +127,45 @@ partd==1.4.0
     # via dask
 pkgutil-resolve-name==1.3.10
     # via jsonschema
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via feast (setup.py)
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
+    #   grpcio-tools
+    #   mypy-protobuf
     #   proto-plus
 pyarrow==11.0.0
     # via feast (setup.py)
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
-pygments==2.15.1
+pygments==2.16.1
     # via feast (setup.py)
-pyrsistent==0.19.3
-    # via jsonschema
 python-dateutil==2.8.2
     # via pandas
 python-dotenv==1.0.0
     # via uvicorn
-pytz==2023.3
+pytz==2023.3.post1
     # via pandas
 pyyaml==6.0.1
     # via
     #   dask
     #   feast (setup.py)
     #   uvicorn
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
 requests==2.31.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 six==1.16.0
     # via
     #   pandavro
@@ -153,15 +175,15 @@ sniffio==1.3.0
     #   anyio
     #   httpcore
     #   httpx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 toml==0.10.2
     # via feast (setup.py)
@@ -171,29 +193,36 @@ toolz==0.12.0
     # via
     #   dask
     #   partd
-tqdm==4.65.0
+tqdm==4.66.1
     # via feast (setup.py)
 typeguard==2.13.3
     # via feast (setup.py)
-typing-extensions==4.6.3
+types-protobuf==4.24.0.1
+    # via mypy-protobuf
+typing-extensions==4.7.1
     # via
+    #   fastapi
     #   mypy
     #   pydantic
     #   sqlalchemy2-stubs
     #   starlette
-urllib3==2.0.2
+    #   uvicorn
+urllib3==2.0.4
     # via requests
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 websockets==11.0.3
     # via uvicorn
-zipp==3.15.0
+zipp==3.16.2
     # via
     #   importlib-metadata
     #   importlib-resources
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt
index aa79b8ec3be..3992303d00e 100644
--- a/sdk/python/requirements/py3.9-ci-requirements.txt
+++ b/sdk/python/requirements/py3.9-ci-requirements.txt
@@ -1,6 +1,6 @@
 #
-# This file is autogenerated by pip-compile with python 3.9
-# To update, run:
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
 #
 #    pip-compile --extra=ci --output-file=sdk/python/requirements/py3.9-ci-requirements.txt
 #
@@ -8,7 +8,7 @@ adal==1.2.7
     # via msrestazure
 adlfs==0.5.9
     # via feast (setup.py)
-aiohttp==3.8.4
+aiohttp==3.8.5
     # via
     #   adlfs
     #   gcsfs
@@ -18,7 +18,7 @@ alabaster==0.7.13
     # via sphinx
 altair==4.2.0
     # via great-expectations
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   jupyter-server
@@ -30,11 +30,8 @@ appnope==0.1.3
     # via
     #   ipykernel
     #   ipython
-argon2-cffi==21.3.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+argon2-cffi==23.1.0
+    # via jupyter-server
 argon2-cffi-bindings==21.2.0
     # via argon2-cffi
 arrow==1.2.3
@@ -45,9 +42,11 @@ asn1crypto==1.5.1
     #   snowflake-connector-python
 assertpy==1.1
     # via feast (setup.py)
-asttokens==2.2.1
+asttokens==2.4.0
     # via stack-data
-async-timeout==4.0.2
+async-lru==2.0.4
+    # via jupyterlab
+async-timeout==4.0.3
     # via
     #   aiohttp
     #   redis
@@ -56,9 +55,10 @@ attrs==23.1.0
     #   aiohttp
     #   bowler
     #   jsonschema
+    #   referencing
 avro==1.10.0
     # via feast (setup.py)
-azure-core==1.27.0
+azure-core==1.29.3
     # via
     #   adlfs
     #   azure-identity
@@ -66,16 +66,18 @@ azure-core==1.27.0
     #   msrest
 azure-datalake-store==0.0.53
     # via adlfs
-azure-identity==1.13.0
+azure-identity==1.14.0
     # via
     #   adlfs
     #   feast (setup.py)
-azure-storage-blob==12.16.0
+azure-storage-blob==12.17.0
     # via
     #   adlfs
     #   feast (setup.py)
 babel==2.12.1
-    # via sphinx
+    # via
+    #   jupyterlab-server
+    #   sphinx
 backcall==0.2.0
     # via ipython
 beautifulsoup4==4.12.2
@@ -84,30 +86,30 @@ black==22.12.0
     # via feast (setup.py)
 bleach==6.0.0
     # via nbconvert
-boto3==1.26.146
+boto3==1.28.42
     # via
     #   feast (setup.py)
     #   moto
-botocore==1.29.146
+botocore==1.31.42
     # via
     #   boto3
     #   moto
     #   s3transfer
 bowler==0.9.0
     # via feast (setup.py)
-build==0.10.0
+build==1.0.3
     # via
     #   feast (setup.py)
     #   pip-tools
 bytewax==0.15.1
     # via feast (setup.py)
-cachecontrol==0.13.0
+cachecontrol==0.13.1
     # via firebase-admin
 cachetools==5.3.1
     # via google-auth
-cassandra-driver==3.27.0
+cassandra-driver==3.28.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
@@ -122,14 +124,14 @@ cffi==1.15.1
     #   azure-datalake-store
     #   cryptography
     #   snowflake-connector-python
-cfgv==3.3.1
+cfgv==3.4.0
     # via pre-commit
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via
     #   aiohttp
     #   requests
     #   snowflake-connector-python
-click==8.1.3
+click==8.1.7
     # via
     #   black
     #   bowler
@@ -146,16 +148,17 @@ colorama==0.4.6
     # via
     #   feast (setup.py)
     #   great-expectations
-comm==0.1.3
-    # via ipykernel
-coverage[toml]==7.2.7
+comm==0.1.4
+    # via
+    #   ipykernel
+    #   ipywidgets
+coverage[toml]==7.3.1
     # via pytest-cov
-cryptography==40.0.2
+cryptography==41.0.3
     # via
     #   adal
     #   azure-identity
     #   azure-storage-blob
-    #   cassandra-driver
     #   feast (setup.py)
     #   great-expectations
     #   moto
@@ -165,11 +168,11 @@ cryptography==40.0.2
     #   snowflake-connector-python
     #   types-pyopenssl
     #   types-redis
-dask==2023.5.1
+dask==2023.9.1
     # via feast (setup.py)
 db-dtypes==1.1.1
     # via google-cloud-bigquery
-debugpy==1.6.7
+debugpy==1.6.7.post1
     # via ipykernel
 decorator==5.1.1
     # via
@@ -181,12 +184,12 @@ deprecated==1.2.14
     # via redis
 deprecation==2.1.0
     # via testcontainers
-dill==0.3.6
+dill==0.3.7
     # via
     #   bytewax
     #   feast (setup.py)
     #   multiprocess
-distlib==0.3.6
+distlib==0.3.7
     # via virtualenv
 docker==6.1.3
     # via
@@ -196,23 +199,24 @@ docutils==0.19
     # via sphinx
 entrypoints==0.4
     # via altair
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via
     #   anyio
+    #   ipython
     #   pytest
-execnet==1.9.0
+execnet==2.0.2
     # via pytest-xdist
 executing==1.2.0
     # via stack-data
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
-fastjsonschema==2.17.1
+fastjsonschema==2.18.0
     # via nbformat
-filelock==3.12.0
+filelock==3.12.3
     # via
     #   snowflake-connector-python
     #   virtualenv
@@ -224,7 +228,7 @@ flake8==6.0.0
     # via feast (setup.py)
 fqdn==1.5.1
     # via jsonschema
-frozenlist==1.3.3
+frozenlist==1.4.0
     # via
     #   aiohttp
     #   aiosignal
@@ -239,7 +243,7 @@ geojson==2.5.0
     # via rockset
 geomet==0.2.1.post1
     # via cassandra-driver
-google-api-core[grpc]==2.11.0
+google-api-core[grpc]==2.11.1
     # via
     #   feast (setup.py)
     #   firebase-admin
@@ -251,9 +255,9 @@ google-api-core[grpc]==2.11.0
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-api-python-client==2.88.0
+google-api-python-client==2.98.0
     # via firebase-admin
-google-auth==2.19.1
+google-auth==2.22.0
     # via
     #   gcsfs
     #   google-api-core
@@ -267,35 +271,35 @@ google-auth-httplib2==0.1.0
     # via google-api-python-client
 google-auth-oauthlib==1.0.0
     # via gcsfs
-google-cloud-bigquery[pandas]==3.11.0
+google-cloud-bigquery[pandas]==3.11.4
     # via feast (setup.py)
-google-cloud-bigquery-storage==2.20.0
+google-cloud-bigquery-storage==2.22.0
     # via feast (setup.py)
-google-cloud-bigtable==2.18.1
+google-cloud-bigtable==2.21.0
     # via feast (setup.py)
-google-cloud-core==2.3.2
+google-cloud-core==2.3.3
     # via
     #   google-cloud-bigquery
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
     #   google-cloud-storage
-google-cloud-datastore==2.15.2
+google-cloud-datastore==2.18.0
     # via feast (setup.py)
 google-cloud-firestore==2.11.1
     # via firebase-admin
-google-cloud-storage==2.9.0
+google-cloud-storage==2.10.0
     # via
     #   feast (setup.py)
     #   firebase-admin
     #   gcsfs
 google-crc32c==1.5.0
     # via google-resumable-media
-google-resumable-media==2.5.0
+google-resumable-media==2.6.0
     # via
     #   google-cloud-bigquery
     #   google-cloud-storage
-googleapis-common-protos[grpc]==1.59.0
+googleapis-common-protos[grpc]==1.60.0
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -303,30 +307,31 @@ googleapis-common-protos[grpc]==1.59.0
     #   grpcio-status
 great-expectations==0.15.50
     # via feast (setup.py)
-greenlet==2.0.2
-    # via sqlalchemy
 grpc-google-iam-v1==0.12.6
     # via google-cloud-bigtable
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
     #   google-api-core
     #   google-cloud-bigquery
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
     #   grpcio-tools
-grpcio-reflection==1.54.2
+grpcio-health-checking==1.57.0
     # via feast (setup.py)
-grpcio-status==1.54.2
+grpcio-reflection==1.57.0
+    # via feast (setup.py)
+grpcio-status==1.57.0
     # via google-api-core
-grpcio-testing==1.54.2
+grpcio-testing==1.57.0
     # via feast (setup.py)
-grpcio-tools==1.54.2
+grpcio-tools==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
@@ -334,21 +339,21 @@ h11==0.14.0
     #   uvicorn
 happybase==1.2.0
     # via feast (setup.py)
-hazelcast-python-client==5.2.0
+hazelcast-python-client==5.3.0
     # via feast (setup.py)
 hiredis==2.2.3
     # via feast (setup.py)
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
 httplib2==0.22.0
     # via
     #   google-api-python-client
     #   google-auth-httplib2
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
-identify==2.5.24
+identify==2.5.27
     # via pre-commit
 idna==3.4
     # via
@@ -360,30 +365,27 @@ idna==3.4
     #   yarl
 imagesize==1.4.1
     # via sphinx
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via
+    #   build
     #   dask
     #   great-expectations
     #   jupyter-client
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
     #   nbconvert
     #   sphinx
 iniconfig==2.0.0
     # via pytest
-ipykernel==6.23.1
-    # via
-    #   ipywidgets
-    #   nbclassic
-    #   notebook
-ipython==8.14.0
+ipykernel==6.25.2
+    # via jupyterlab
+ipython==8.15.0
     # via
     #   great-expectations
     #   ipykernel
     #   ipywidgets
-ipython-genutils==0.2.0
-    # via
-    #   nbclassic
-    #   notebook
-ipywidgets==8.0.6
+ipywidgets==8.1.0
     # via great-expectations
 isodate==0.6.1
     # via
@@ -393,7 +395,7 @@ isoduration==20.11.0
     # via jsonschema
 isort==5.12.0
     # via feast (setup.py)
-jedi==0.18.2
+jedi==0.19.0
     # via ipython
 jinja2==3.1.2
     # via
@@ -401,56 +403,69 @@ jinja2==3.1.2
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   moto
-    #   nbclassic
     #   nbconvert
-    #   notebook
     #   sphinx
 jmespath==1.0.1
     # via
     #   boto3
     #   botocore
-jsonpatch==1.32
+json5==0.9.14
+    # via jupyterlab-server
+jsonpatch==1.33
     # via great-expectations
-jsonpointer==2.3
+jsonpointer==2.4
     # via
     #   jsonpatch
     #   jsonschema
-jsonschema[format-nongpl]==4.17.3
+jsonschema[format-nongpl]==4.19.0
     # via
     #   altair
     #   feast (setup.py)
     #   great-expectations
     #   jupyter-events
+    #   jupyterlab-server
     #   nbformat
-jupyter-client==8.2.0
+jsonschema-specifications==2023.7.1
+    # via jsonschema
+jupyter-client==8.3.1
     # via
     #   ipykernel
     #   jupyter-server
-    #   nbclassic
     #   nbclient
-    #   notebook
-jupyter-core==5.3.0
+jupyter-core==5.3.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
-jupyter-events==0.6.3
+jupyter-events==0.7.0
     # via jupyter-server
-jupyter-server==2.6.0
+jupyter-lsp==2.2.0
+    # via jupyterlab
+jupyter-server==2.7.3
     # via
-    #   nbclassic
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
+    #   notebook
     #   notebook-shim
 jupyter-server-terminals==0.4.4
     # via jupyter-server
+jupyterlab==4.0.5
+    # via notebook
 jupyterlab-pygments==0.2.2
     # via nbconvert
-jupyterlab-widgets==3.0.7
+jupyterlab-server==2.24.0
+    # via
+    #   jupyterlab
+    #   notebook
+jupyterlab-widgets==3.0.8
     # via ipywidgets
 kubernetes==20.13.0
     # via feast (setup.py)
@@ -463,7 +478,7 @@ markupsafe==2.1.3
     #   jinja2
     #   nbconvert
     #   werkzeug
-marshmallow==3.19.0
+marshmallow==3.20.1
     # via great-expectations
 matplotlib-inline==0.1.6
     # via
@@ -473,19 +488,19 @@ mccabe==0.7.0
     # via flake8
 minio==7.1.0
     # via feast (setup.py)
-mistune==2.0.5
+mistune==3.0.1
     # via
     #   great-expectations
     #   nbconvert
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 mock==2.0.0
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-moto==4.1.10
+moto==4.2.2
     # via feast (setup.py)
-msal==1.22.0
+msal==1.23.0
     # via
     #   azure-datalake-store
     #   azure-identity
@@ -502,7 +517,7 @@ multidict==6.0.4
     # via
     #   aiohttp
     #   yarl
-multiprocess==0.70.14
+multiprocess==0.70.15
     # via bytewax
 mypy==0.982
     # via
@@ -514,37 +529,29 @@ mypy-extensions==1.0.0
     #   mypy
 mypy-protobuf==3.1
     # via feast (setup.py)
-mysqlclient==2.1.1
+mysqlclient==2.2.0
     # via feast (setup.py)
-nbclassic==1.0.0
-    # via notebook
 nbclient==0.8.0
     # via nbconvert
-nbconvert==7.4.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-nbformat==5.9.0
+nbconvert==7.8.0
+    # via jupyter-server
+nbformat==5.9.2
     # via
     #   great-expectations
     #   jupyter-server
-    #   nbclassic
     #   nbclient
     #   nbconvert
-    #   notebook
-nest-asyncio==1.5.6
-    # via
-    #   ipykernel
-    #   nbclassic
-    #   notebook
+nest-asyncio==1.5.7
+    # via ipykernel
 nodeenv==1.8.0
     # via pre-commit
-notebook==6.5.4
+notebook==7.0.3
     # via great-expectations
 notebook-shim==0.2.3
-    # via nbclassic
-numpy==1.24.3
+    # via
+    #   jupyterlab
+    #   notebook
+numpy==1.25.2
     # via
     #   altair
     #   db-dtypes
@@ -558,7 +565,7 @@ oauthlib==3.2.2
     # via requests-oauthlib
 oscrypto==1.3.0
     # via snowflake-connector-python
-overrides==7.3.1
+overrides==7.4.0
     # via jupyter-server
 packaging==23.1
     # via
@@ -569,8 +576,11 @@ packaging==23.1
     #   docker
     #   google-cloud-bigquery
     #   great-expectations
+    #   gunicorn
     #   ipykernel
     #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
     #   marshmallow
     #   nbconvert
     #   pytest
@@ -594,7 +604,7 @@ parso==0.8.3
     # via jedi
 partd==1.4.0
     # via dask
-pathspec==0.11.1
+pathspec==0.11.2
     # via black
 pbr==5.11.1
     # via mock
@@ -602,29 +612,27 @@ pexpect==4.8.0
     # via ipython
 pickleshare==0.7.5
     # via ipython
-pip-tools==6.13.0
+pip-tools==7.3.0
     # via feast (setup.py)
-platformdirs==3.5.1
+platformdirs==3.8.1
     # via
     #   black
     #   jupyter-core
+    #   snowflake-connector-python
     #   virtualenv
-pluggy==1.0.0
+pluggy==1.3.0
     # via pytest
 ply==3.11
     # via thriftpy2
 portalocker==2.7.0
     # via msal-extensions
-pre-commit==3.3.2
+pre-commit==3.3.1
     # via feast (setup.py)
-prometheus-client==0.17.0
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
-prompt-toolkit==3.0.38
+prometheus-client==0.17.1
+    # via jupyter-server
+prompt-toolkit==3.0.39
     # via ipython
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via
     #   feast (setup.py)
     #   google-cloud-bigquery
@@ -632,7 +640,7 @@ proto-plus==1.22.2
     #   google-cloud-bigtable
     #   google-cloud-datastore
     #   google-cloud-firestore
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
     #   google-api-core
@@ -643,6 +651,7 @@ protobuf==4.23.2
     #   google-cloud-firestore
     #   googleapis-common-protos
     #   grpc-google-iam-v1
+    #   grpcio-health-checking
     #   grpcio-reflection
     #   grpcio-status
     #   grpcio-testing
@@ -653,7 +662,7 @@ psutil==5.9.0
     # via
     #   feast (setup.py)
     #   ipykernel
-psycopg2-binary==2.9.6
+psycopg2-binary==2.9.7
     # via feast (setup.py)
 ptyprocess==0.7.0
     # via
@@ -687,43 +696,41 @@ pycparser==2.21
     # via cffi
 pycryptodomex==3.18.0
     # via snowflake-connector-python
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
     #   great-expectations
 pyflakes==3.0.1
     # via flake8
-pygments==2.15.1
+pygments==2.16.1
     # via
     #   feast (setup.py)
     #   ipython
     #   nbconvert
     #   sphinx
-pyjwt[crypto]==2.7.0
+pyjwt[crypto]==2.8.0
     # via
     #   adal
     #   msal
     #   snowflake-connector-python
 pymssql==2.2.8
     # via feast (setup.py)
-pymysql==1.0.3
+pymysql==1.1.0
     # via feast (setup.py)
 pyodbc==4.0.39
     # via feast (setup.py)
 pyopenssl==23.2.0
     # via snowflake-connector-python
-pyparsing==3.0.9
+pyparsing==3.1.1
     # via
     #   great-expectations
     #   httplib2
 pyproject-hooks==1.0.0
     # via build
-pyrsistent==0.19.3
-    # via jsonschema
-pyspark==3.4.0
+pyspark==3.4.1
     # via feast (setup.py)
-pytest==7.3.1
+pytest==7.4.1
     # via
     #   feast (setup.py)
     #   pytest-benchmark
@@ -764,7 +771,7 @@ python-dotenv==1.0.0
     # via uvicorn
 python-json-logger==2.0.7
     # via jupyter-events
-pytz==2023.3
+pytz==2023.3.post1
     # via
     #   great-expectations
     #   pandas
@@ -779,16 +786,19 @@ pyyaml==6.0.1
     #   pre-commit
     #   responses
     #   uvicorn
-pyzmq==25.1.0
+pyzmq==25.1.1
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
-    #   notebook
 redis==4.2.2
     # via feast (setup.py)
-regex==2023.5.5
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+    #   jupyter-events
+regex==2023.8.8
     # via feast (setup.py)
 requests==2.31.0
     # via
@@ -804,6 +814,7 @@ requests==2.31.0
     #   google-cloud-bigquery
     #   google-cloud-storage
     #   great-expectations
+    #   jupyterlab-server
     #   kubernetes
     #   moto
     #   msal
@@ -818,7 +829,7 @@ requests-oauthlib==1.3.1
     #   google-auth-oauthlib
     #   kubernetes
     #   msrest
-responses==0.23.1
+responses==0.23.3
     # via moto
 rfc3339-validator==0.1.4
     # via
@@ -828,28 +839,28 @@ rfc3986-validator==0.1.1
     # via
     #   jsonschema
     #   jupyter-events
-rockset==2.0.0
+rockset==2.1.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 rsa==4.9
     # via google-auth
 ruamel-yaml==0.17.17
     # via great-expectations
 ruamel-yaml-clib==0.2.7
     # via ruamel-yaml
-s3transfer==0.6.1
+s3transfer==0.6.2
     # via boto3
-scipy==1.10.1
+scipy==1.11.2
     # via great-expectations
 send2trash==1.8.2
-    # via
-    #   jupyter-server
-    #   nbclassic
-    #   notebook
+    # via jupyter-server
 six==1.16.0
     # via
     #   asttokens
     #   azure-core
-    #   azure-identity
     #   bleach
     #   cassandra-driver
     #   geomet
@@ -871,29 +882,35 @@ sniffio==1.3.0
     #   httpx
 snowballstemmer==2.2.0
     # via sphinx
-snowflake-connector-python[pandas]==3.0.4
+snowflake-connector-python[pandas]==3.1.1
     # via feast (setup.py)
 sortedcontainers==2.4.0
     # via snowflake-connector-python
-soupsieve==2.4.1
+soupsieve==2.5
     # via beautifulsoup4
 sphinx==6.2.1
-    # via feast (setup.py)
-sphinxcontrib-applehelp==1.0.4
+    # via
+    #   feast (setup.py)
+    #   sphinxcontrib-applehelp
+    #   sphinxcontrib-devhelp
+    #   sphinxcontrib-htmlhelp
+    #   sphinxcontrib-qthelp
+    #   sphinxcontrib-serializinghtml
+sphinxcontrib-applehelp==1.0.7
     # via sphinx
-sphinxcontrib-devhelp==1.0.2
+sphinxcontrib-devhelp==1.0.5
     # via sphinx
-sphinxcontrib-htmlhelp==2.0.1
+sphinxcontrib-htmlhelp==2.0.4
     # via sphinx
 sphinxcontrib-jsmath==1.0.1
     # via sphinx
-sphinxcontrib-qthelp==1.0.3
+sphinxcontrib-qthelp==1.0.6
     # via sphinx
-sphinxcontrib-serializinghtml==1.1.5
+sphinxcontrib-serializinghtml==1.1.9
     # via sphinx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 stack-data==0.6.2
     # via ipython
@@ -901,14 +918,12 @@ starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 terminado==0.17.1
     # via
     #   jupyter-server
     #   jupyter-server-terminals
-    #   nbclassic
-    #   notebook
 testcontainers==3.7.1
     # via feast (setup.py)
 thriftpy2==0.4.16
@@ -922,23 +937,27 @@ tomli==2.0.1
     #   black
     #   build
     #   coverage
+    #   jupyterlab
     #   mypy
+    #   pip-tools
     #   pyproject-hooks
     #   pytest
+tomlkit==0.12.1
+    # via snowflake-connector-python
 toolz==0.12.0
     # via
     #   altair
     #   dask
     #   partd
-tornado==6.3.2
+tornado==6.3.3
     # via
     #   ipykernel
     #   jupyter-client
     #   jupyter-server
-    #   nbclassic
+    #   jupyterlab
     #   notebook
     #   terminado
-tqdm==4.65.0
+tqdm==4.66.1
     # via
     #   feast (setup.py)
     #   great-expectations
@@ -952,12 +971,11 @@ traitlets==5.9.0
     #   jupyter-core
     #   jupyter-events
     #   jupyter-server
+    #   jupyterlab
     #   matplotlib-inline
-    #   nbclassic
     #   nbclient
     #   nbconvert
     #   nbformat
-    #   notebook
 trino==0.326.0
     # via feast (setup.py)
 typeguard==2.13.3
@@ -966,33 +984,36 @@ types-protobuf==3.19.22
     # via
     #   feast (setup.py)
     #   mypy-protobuf
-types-pymysql==1.0.19.7
+types-pymysql==1.1.0.1
     # via feast (setup.py)
-types-pyopenssl==23.2.0.0
+types-pyopenssl==23.2.0.2
     # via types-redis
-types-python-dateutil==2.8.19.13
+types-python-dateutil==2.8.19.14
     # via feast (setup.py)
-types-pytz==2023.3.0.0
+types-pytz==2023.3.0.1
     # via feast (setup.py)
-types-pyyaml==6.0.12.10
+types-pyyaml==6.0.12.11
     # via
     #   feast (setup.py)
     #   responses
-types-redis==4.5.5.2
+types-redis==4.6.0.5
     # via feast (setup.py)
-types-requests==2.31.0.1
+types-requests==2.31.0.2
     # via feast (setup.py)
-types-setuptools==67.8.0.0
+types-setuptools==68.2.0.0
     # via feast (setup.py)
-types-tabulate==0.9.0.2
+types-tabulate==0.9.0.3
     # via feast (setup.py)
-types-urllib3==1.26.25.13
+types-urllib3==1.26.25.14
     # via types-requests
-typing-extensions==4.6.3
+typing-extensions==4.7.1
     # via
+    #   async-lru
     #   azure-core
     #   azure-storage-blob
     #   black
+    #   fastapi
+    #   filelock
     #   great-expectations
     #   ipython
     #   mypy
@@ -1000,11 +1021,12 @@ typing-extensions==4.6.3
     #   snowflake-connector-python
     #   sqlalchemy2-stubs
     #   starlette
+    #   uvicorn
 tzlocal==5.0.1
     # via
     #   great-expectations
     #   trino
-uri-template==1.2.0
+uri-template==1.3.0
     # via jsonschema
 uritemplate==4.1.1
     # via google-api-python-client
@@ -1021,15 +1043,17 @@ urllib3==1.26.16
     #   responses
     #   rockset
     #   snowflake-connector-python
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 virtualenv==20.23.0
-    # via pre-commit
+    # via
+    #   feast (setup.py)
+    #   pre-commit
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 wcwidth==0.2.6
     # via prompt-toolkit
@@ -1039,18 +1063,18 @@ webencodings==0.5.1
     # via
     #   bleach
     #   tinycss2
-websocket-client==1.5.2
+websocket-client==1.6.2
     # via
     #   docker
     #   jupyter-server
     #   kubernetes
 websockets==11.0.3
     # via uvicorn
-werkzeug==2.3.4
+werkzeug==2.3.7
     # via moto
-wheel==0.40.0
+wheel==0.41.2
     # via pip-tools
-widgetsnbextension==4.0.7
+widgetsnbextension==4.0.8
     # via ipywidgets
 wrapt==1.15.0
     # via
@@ -1060,7 +1084,7 @@ xmltodict==0.13.0
     # via moto
 yarl==1.9.2
     # via aiohttp
-zipp==3.15.0
+zipp==3.16.2
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt
index 53b0ff0e584..7d30fd3452b 100644
--- a/sdk/python/requirements/py3.9-requirements.txt
+++ b/sdk/python/requirements/py3.9-requirements.txt
@@ -1,10 +1,10 @@
 #
-# This file is autogenerated by pip-compile with python 3.9
-# To update, run:
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
 #
 #    pip-compile --output-file=sdk/python/requirements/py3.9-requirements.txt
 #
-anyio==3.7.0
+anyio==4.0.0
     # via
     #   httpcore
     #   starlette
@@ -15,16 +15,17 @@ attrs==23.1.0
     # via
     #   bowler
     #   jsonschema
+    #   referencing
 bowler==0.9.0
     # via feast (setup.py)
-certifi==2023.5.7
+certifi==2023.7.22
     # via
     #   httpcore
     #   httpx
     #   requests
-charset-normalizer==3.1.0
+charset-normalizer==3.2.0
     # via requests
-click==8.1.3
+click==8.1.7
     # via
     #   bowler
     #   dask
@@ -35,39 +36,43 @@ cloudpickle==2.2.1
     # via dask
 colorama==0.4.6
     # via feast (setup.py)
-dask==2023.5.1
+dask==2023.9.1
     # via feast (setup.py)
-dill==0.3.6
+dill==0.3.7
     # via feast (setup.py)
-exceptiongroup==1.1.1
+exceptiongroup==1.1.3
     # via anyio
-fastapi==0.95.2
+fastapi==0.99.1
     # via feast (setup.py)
-fastavro==1.8.1
+fastavro==1.8.2
     # via
     #   feast (setup.py)
     #   pandavro
 fissix==21.11.13
     # via bowler
-fsspec==2023.5.0
+fsspec==2023.9.0
     # via dask
-greenlet==2.0.2
-    # via sqlalchemy
-grpcio==1.54.2
+grpcio==1.57.0
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
-grpcio-reflection==1.54.2
+    #   grpcio-tools
+grpcio-health-checking==1.57.0
+    # via feast (setup.py)
+grpcio-reflection==1.57.0
     # via feast (setup.py)
-gunicorn==20.1.0
+grpcio-tools==1.57.0
+    # via feast (setup.py)
+gunicorn==21.2.0
     # via feast (setup.py)
 h11==0.14.0
     # via
     #   httpcore
     #   uvicorn
-httpcore==0.17.2
+httpcore==0.17.3
     # via httpx
-httptools==0.5.0
+httptools==0.6.0
     # via uvicorn
 httpx==0.24.1
     # via feast (setup.py)
@@ -76,32 +81,38 @@ idna==3.4
     #   anyio
     #   httpx
     #   requests
-importlib-metadata==6.6.0
+importlib-metadata==6.8.0
     # via dask
 jinja2==3.1.2
     # via feast (setup.py)
-jsonschema==4.17.3
+jsonschema==4.19.0
     # via feast (setup.py)
+jsonschema-specifications==2023.7.1
+    # via jsonschema
 locket==1.0.0
     # via partd
 markupsafe==2.1.3
     # via jinja2
-mmh3==4.0.0
+mmh3==4.0.1
     # via feast (setup.py)
 moreorless==0.4.0
     # via bowler
-mypy==1.3.0
+mypy==1.5.1
     # via sqlalchemy
 mypy-extensions==1.0.0
     # via mypy
-numpy==1.24.3
+mypy-protobuf==3.1.0
+    # via feast (setup.py)
+numpy==1.25.2
     # via
     #   feast (setup.py)
     #   pandas
     #   pandavro
     #   pyarrow
 packaging==23.1
-    # via dask
+    # via
+    #   dask
+    #   gunicorn
 pandas==1.5.3
     # via
     #   feast (setup.py)
@@ -110,36 +121,45 @@ pandavro==1.5.2
     # via feast (setup.py)
 partd==1.4.0
     # via dask
-proto-plus==1.22.2
+proto-plus==1.22.3
     # via feast (setup.py)
-protobuf==4.23.2
+protobuf==4.23.3
     # via
     #   feast (setup.py)
+    #   grpcio-health-checking
     #   grpcio-reflection
+    #   grpcio-tools
+    #   mypy-protobuf
     #   proto-plus
 pyarrow==11.0.0
     # via feast (setup.py)
-pydantic==1.10.8
+pydantic==1.10.12
     # via
     #   fastapi
     #   feast (setup.py)
-pygments==2.15.1
+pygments==2.16.1
     # via feast (setup.py)
-pyrsistent==0.19.3
-    # via jsonschema
 python-dateutil==2.8.2
     # via pandas
 python-dotenv==1.0.0
     # via uvicorn
-pytz==2023.3
+pytz==2023.3.post1
     # via pandas
 pyyaml==6.0.1
     # via
     #   dask
     #   feast (setup.py)
     #   uvicorn
+referencing==0.30.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
 requests==2.31.0
     # via feast (setup.py)
+rpds-py==0.10.2
+    # via
+    #   jsonschema
+    #   referencing
 six==1.16.0
     # via
     #   pandavro
@@ -149,15 +169,15 @@ sniffio==1.3.0
     #   anyio
     #   httpcore
     #   httpx
-sqlalchemy[mypy]==1.4.48
+sqlalchemy[mypy]==1.4.49
     # via feast (setup.py)
-sqlalchemy2-stubs==0.0.2a34
+sqlalchemy2-stubs==0.0.2a35
     # via sqlalchemy
 starlette==0.27.0
     # via fastapi
 tabulate==0.9.0
     # via feast (setup.py)
-tenacity==8.2.2
+tenacity==8.2.3
     # via feast (setup.py)
 toml==0.10.2
     # via feast (setup.py)
@@ -167,27 +187,34 @@ toolz==0.12.0
     # via
     #   dask
     #   partd
-tqdm==4.65.0
+tqdm==4.66.1
     # via feast (setup.py)
 typeguard==2.13.3
     # via feast (setup.py)
-typing-extensions==4.6.3
+types-protobuf==4.24.0.1
+    # via mypy-protobuf
+typing-extensions==4.7.1
     # via
+    #   fastapi
     #   mypy
     #   pydantic
     #   sqlalchemy2-stubs
     #   starlette
-urllib3==2.0.2
+    #   uvicorn
+urllib3==2.0.4
     # via requests
-uvicorn[standard]==0.22.0
+uvicorn[standard]==0.23.2
     # via feast (setup.py)
 uvloop==0.17.0
     # via uvicorn
 volatile==2.1.0
     # via bowler
-watchfiles==0.19.0
+watchfiles==0.20.0
     # via uvicorn
 websockets==11.0.3
     # via uvicorn
-zipp==3.15.0
+zipp==3.16.2
     # via importlib-metadata
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/setup.py b/setup.py
index f10322ed8a3..699d394940e 100644
--- a/setup.py
+++ b/setup.py
@@ -46,8 +46,11 @@
     "colorama>=0.3.9,<1",
     "dill~=0.3.0",
     "fastavro>=1.1.0,<2",
-    "grpcio>=1.47.0,<2",
-    "grpcio-reflection>=1.47.0,<2",
+    "grpcio>=1.56.2,<2",
+    "grpcio-tools>=1.56.2,<2",
+    "grpcio-reflection>=1.56.2,<2",
+    "grpcio-health-checking>=1.56.2,<2",
+    "mypy-protobuf==3.1",
     "Jinja2>=2,<4",
     "jsonschema",
     "mmh3",
@@ -69,7 +72,7 @@
     "toml>=0.10.0,<1",
     "tqdm>=4,<5",
     "typeguard==2.13.3",
-    "fastapi>=0.68.0,<1",
+    "fastapi>=0.68.0,<0.100",
     "uvicorn[standard]>=0.14.0,<1",
     "gunicorn",
     "dask>=2021.1.0",
@@ -142,17 +145,16 @@
 CI_REQUIRED = (
     [
         "build",
+        "virtualenv==20.23.0",
         "cryptography>=35.0,<42",
-        "flake8",
+        "flake8>=6.0.0,<6.1.0",
         "black>=22.6.0,<23",
         "isort>=5,<6",
-        "grpcio-tools>=1.47.0",
-        "grpcio-testing>=1.47.0",
+        "grpcio-testing>=1.56.2,<2",
         "minio==7.1.0",
         "mock==2.0.0",
         "moto",
         "mypy>=0.981,<0.990",
-        "mypy-protobuf==3.1",
         "avro==1.10.0",
         "gcsfs>=0.4.0,<=2022.01.0",
         "urllib3>=1.25.4,<2",
@@ -170,7 +172,7 @@
         "testcontainers>=3.5,<4",
         "adlfs==0.5.9",
         "firebase-admin>=5.2.0,<6",
-        "pre-commit",
+        "pre-commit<3.3.2",
         "assertpy==1.1",
         "pip-tools",
         "pybindgen",
@@ -182,6 +184,7 @@
         "types-requests",
         "types-setuptools",
         "types-tabulate",
+        "virtualenv<20.24.2"
     ]
     + GCP_REQUIRED
     + REDIS_REQUIRED
@@ -380,8 +383,8 @@ def run(self):
     use_scm_version=use_scm_version,
     setup_requires=[
         "setuptools_scm",
-        "grpcio>=1.47.0",
-        "grpcio-tools>=1.47.0",
+        "grpcio>=1.56.2,<2",
+        "grpcio-tools>=1.56.2,<2",
         "mypy-protobuf==3.1",
         "pybindgen==0.22.0",
     ],