diff --git a/core/src/main/java/feast/core/service/SpecService.java b/core/src/main/java/feast/core/service/SpecService.java
index 4ea2d288f2e..31040063fa1 100644
--- a/core/src/main/java/feast/core/service/SpecService.java
+++ b/core/src/main/java/feast/core/service/SpecService.java
@@ -136,8 +136,8 @@ public GetFeatureSetResponse getFeatureSet(GetFeatureSetRequest request)
* Get featureSets matching the feature name and version provided in the filter. If the feature
* name is not provided, the method will return all featureSets currently registered to Feast.
*
- *
The feature set name in the filter accepts any valid regex string. All matching featureSets
- * will be returned.
+ *
The feature set name in the filter accepts an asterisk as a wildcard. All matching
+ * featureSets will be returned.
*
*
The version filter is optional; If not provided, this method will return all featureSet
* versions of the featureSet name provided. Valid version filters should optionally contain a
diff --git a/protos/feast/core/CoreService.proto b/protos/feast/core/CoreService.proto
index 2e0646e9730..0ffbb7edfb5 100644
--- a/protos/feast/core/CoreService.proto
+++ b/protos/feast/core/CoreService.proto
@@ -58,11 +58,28 @@ service CoreService {
//
// If the changes are valid, core will return the given store configuration in response, and
// start or update the necessary feature population jobs for the updated store.
- rpc UpdateStore(UpdateStoreRequest) returns (UpdateStoreResponse);
+ rpc UpdateStore (UpdateStoreRequest) returns (UpdateStoreResponse);
+
+ // Creates a project. Projects serve as namespaces within which resources like features will be
+ // created. Both feature set names as well as field names must be unique within a project. Project
+ // names themselves must be globally unique.
+ rpc CreateProject (CreateProjectRequest) returns (CreateProjectResponse);
+
+ // Archives a project. Archived projects will continue to exist and function, but won't be visible
+ // through the Core API. Any existing ingestion or serving requests will continue to function,
+ // but will result in warning messages being logged. It is not possible to unarchive a project
+ // through the Core API
+ rpc ArchiveProject (ArchiveProjectRequest) returns (ArchiveProjectResponse);
+
+ // Lists all projects active projects.
+ rpc ListProjects (ListProjectsRequest) returns (ListProjectsResponse);
}
// Request for a single feature set
message GetFeatureSetRequest {
+ // Name of project the feature set belongs to (required)
+ string project = 3;
+
// Name of feature set (required).
string name = 1;
@@ -77,12 +94,18 @@ message GetFeatureSetResponse {
// Retrieves details for all versions of a specific feature set
message ListFeatureSetsRequest {
+ // Name of project that the feature sets belongs to.
+ string project = 2;
+
+ Filter filter = 1;
+
message Filter {
- // Name of the desired feature set. Valid regex strings are allowed.
+ // Name of the desired feature set. Asterisks can be used as wildcards in the name.
// e.g.
- // - .* can be used to match all feature sets
- // - my-project-.* can be used to match all features prefixed by "my-project"
+ // - * can be used to match all feature sets
+ // - my-feature-set* can be used to match all features prefixed by "my-feature-set"
string feature_set_name = 1;
+
// Version of the desired feature set. Either a number or valid expression can be provided.
// e.g.
// - 1 will match version 1 exactly
@@ -90,8 +113,6 @@ message ListFeatureSetsRequest {
// - <10 will match all versions less than 10
string feature_set_version = 2;
}
-
- Filter filter = 1;
}
message ListFeatureSetsResponse {
@@ -112,6 +133,9 @@ message ListStoresResponse {
}
message ApplyFeatureSetRequest {
+ // Name of project that the feature set belongs to.
+ string project = 2;
+
// Feature set version and source will be ignored
feast.core.FeatureSetSpec feature_set = 1;
}
@@ -133,7 +157,8 @@ message ApplyFeatureSetResponse {
Status status = 2;
}
-message GetFeastCoreVersionRequest {}
+message GetFeastCoreVersionRequest {
+}
message GetFeastCoreVersionResponse {
string version = 1;
@@ -153,4 +178,34 @@ message UpdateStoreResponse {
}
feast.core.Store store = 1;
Status status = 2;
+}
+
+// Request to create a project
+message CreateProjectRequest {
+ // Name of project (required)
+ string name = 1;
+}
+
+// Response for creation of a project
+message CreateProjectResponse {
+}
+
+// Request for the archival of a project
+message ArchiveProjectRequest {
+ // Name of project to be archived
+ string name = 1;
+}
+
+// Response for archival of a project
+message ArchiveProjectResponse {
+}
+
+// Request for listing of projects
+message ListProjectsRequest {
+}
+
+// Response for listing of projects
+message ListProjectsResponse {
+ // List of project names (archived projects are filtered out)
+ repeated string projects = 1;
}
\ No newline at end of file
diff --git a/protos/feast/core/FeatureSet.proto b/protos/feast/core/FeatureSet.proto
index a80ae36f088..be6dfcadc5d 100644
--- a/protos/feast/core/FeatureSet.proto
+++ b/protos/feast/core/FeatureSet.proto
@@ -27,10 +27,13 @@ import "feast/core/Source.proto";
import "google/protobuf/duration.proto";
message FeatureSetSpec {
+ // Name of project that this feature set belongs to (read-only).
+ string project = 7;
+
// Name of the featureSet. Must be unique.
string name = 1;
- // FeatureSet version.
+ // FeatureSet version (read-only).
int32 version = 2;
// List of entities contained within this featureSet.
diff --git a/protos/feast/core/Store.proto b/protos/feast/core/Store.proto
index e1b8c581a38..6ea2aacd703 100644
--- a/protos/feast/core/Store.proto
+++ b/protos/feast/core/Store.proto
@@ -123,6 +123,10 @@ message Store {
}
message Subscription {
+ // Name of project where subscribed feature sets can be found. All feature sets must be located
+ // within this project. Wildcards are not supported.
+ string project = 3;
+
// Name of featureSet to subscribe to. This field supports any valid basic POSIX regex,
// e.g. customer_.* or .*
// https://www.regular-expressions.info/posix.html
diff --git a/protos/feast/serving/ServingService.proto b/protos/feast/serving/ServingService.proto
index fe896253a94..5145670ec9a 100644
--- a/protos/feast/serving/ServingService.proto
+++ b/protos/feast/serving/ServingService.proto
@@ -62,15 +62,15 @@ message GetFeastServingInfoResponse {
string job_staging_location = 10;
}
-message FeatureSetRequest {
- // Feature set name
- string name = 1;
+message FeatureReference {
+ // Project name
+ string project = 1;
- // Feature set version
- int32 version = 2;
+ // Feature name
+ string name = 2;
- // Features that should be retrieved from this feature set
- repeated string feature_names = 3;
+ // Feature version
+ int32 version = 3;
// The features will be retrieved if:
// entity_timestamp - max_age <= event_timestamp <= entity_timestamp
@@ -81,8 +81,8 @@ message FeatureSetRequest {
}
message GetOnlineFeaturesRequest {
- // List of feature sets and their features that are being retrieved
- repeated FeatureSetRequest feature_sets = 1;
+ // List of features that are being retrieved
+ repeated FeatureReference features = 4;
// List of entity rows, containing entity id and timestamp data.
// Used during retrieval of feature rows and for joining feature
@@ -104,8 +104,8 @@ message GetOnlineFeaturesRequest {
}
message GetBatchFeaturesRequest {
- // List of feature sets and their features that are being retrieved.
- repeated FeatureSetRequest feature_sets = 1;
+ // List of features that are being retrieved
+ repeated FeatureReference features = 3;
// Source of the entity dataset containing the timestamps and entity keys to retrieve
// features for.
diff --git a/sdk/go/go.mod b/sdk/go/go.mod
index 7c029da1095..0def759a4f2 100644
--- a/sdk/go/go.mod
+++ b/sdk/go/go.mod
@@ -4,7 +4,7 @@ go 1.13
require (
github.com/golang/protobuf v1.3.2
- github.com/google/go-cmp v0.3.0
+ github.com/google/go-cmp v0.3.1
github.com/opentracing/opentracing-go v1.1.0
github.com/stretchr/testify v1.4.0 // indirect
go.opencensus.io v0.22.1
diff --git a/sdk/go/go.sum b/sdk/go/go.sum
index 56df48673e5..04cf3d8d7f3 100644
--- a/sdk/go/go.sum
+++ b/sdk/go/go.sum
@@ -16,6 +16,8 @@ github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
diff --git a/sdk/go/protos/feast/core/CoreService.pb.go b/sdk/go/protos/feast/core/CoreService.pb.go
index e0af92433b7..71700ac94f4 100644
--- a/sdk/go/protos/feast/core/CoreService.pb.go
+++ b/sdk/go/protos/feast/core/CoreService.pb.go
@@ -84,6 +84,8 @@ func (UpdateStoreResponse_Status) EnumDescriptor() ([]byte, []int) {
// Request for a single feature set
type GetFeatureSetRequest struct {
+ // Name of project the feature set belongs to (required)
+ Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"`
// Name of feature set (required).
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Version of feature set (optional). If omitted then latest feature set will be returned.
@@ -118,6 +120,13 @@ func (m *GetFeatureSetRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_GetFeatureSetRequest proto.InternalMessageInfo
+func (m *GetFeatureSetRequest) GetProject() string {
+ if m != nil {
+ return m.Project
+ }
+ return ""
+}
+
func (m *GetFeatureSetRequest) GetName() string {
if m != nil {
return m.Name
@@ -174,6 +183,8 @@ func (m *GetFeatureSetResponse) GetFeatureSet() *FeatureSetSpec {
// Retrieves details for all versions of a specific feature set
type ListFeatureSetsRequest struct {
+ // Name of project that the feature sets belongs to.
+ Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
Filter *ListFeatureSetsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@@ -205,6 +216,13 @@ func (m *ListFeatureSetsRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_ListFeatureSetsRequest proto.InternalMessageInfo
+func (m *ListFeatureSetsRequest) GetProject() string {
+ if m != nil {
+ return m.Project
+ }
+ return ""
+}
+
func (m *ListFeatureSetsRequest) GetFilter() *ListFeatureSetsRequest_Filter {
if m != nil {
return m.Filter
@@ -213,10 +231,10 @@ func (m *ListFeatureSetsRequest) GetFilter() *ListFeatureSetsRequest_Filter {
}
type ListFeatureSetsRequest_Filter struct {
- // Name of the desired feature set. Valid regex strings are allowed.
+ // Name of the desired feature set. Asterisks can be used as wildcards in the name.
// e.g.
- // - .* can be used to match all feature sets
- // - my-project-.* can be used to match all features prefixed by "my-project"
+ // - * can be used to match all feature sets
+ // - my-feature-set* can be used to match all features prefixed by "my-feature-set"
FeatureSetName string `protobuf:"bytes,1,opt,name=feature_set_name,json=featureSetName,proto3" json:"feature_set_name,omitempty"`
// Version of the desired feature set. Either a number or valid expression can be provided.
// e.g.
@@ -426,6 +444,8 @@ func (m *ListStoresResponse) GetStore() []*Store {
}
type ApplyFeatureSetRequest struct {
+ // Name of project that the feature set belongs to.
+ Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
// Feature set version and source will be ignored
FeatureSet *FeatureSetSpec `protobuf:"bytes,1,opt,name=feature_set,json=featureSet,proto3" json:"feature_set,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -458,6 +478,13 @@ func (m *ApplyFeatureSetRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_ApplyFeatureSetRequest proto.InternalMessageInfo
+func (m *ApplyFeatureSetRequest) GetProject() string {
+ if m != nil {
+ return m.Project
+ }
+ return ""
+}
+
func (m *ApplyFeatureSetRequest) GetFeatureSet() *FeatureSetSpec {
if m != nil {
return m.FeatureSet
@@ -669,6 +696,225 @@ func (m *UpdateStoreResponse) GetStatus() UpdateStoreResponse_Status {
return UpdateStoreResponse_NO_CHANGE
}
+// Request to create a project
+type CreateProjectRequest struct {
+ // Name of project (required)
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CreateProjectRequest) Reset() { *m = CreateProjectRequest{} }
+func (m *CreateProjectRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateProjectRequest) ProtoMessage() {}
+func (*CreateProjectRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{12}
+}
+
+func (m *CreateProjectRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CreateProjectRequest.Unmarshal(m, b)
+}
+func (m *CreateProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CreateProjectRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateProjectRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CreateProjectRequest.Merge(m, src)
+}
+func (m *CreateProjectRequest) XXX_Size() int {
+ return xxx_messageInfo_CreateProjectRequest.Size(m)
+}
+func (m *CreateProjectRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_CreateProjectRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateProjectRequest proto.InternalMessageInfo
+
+func (m *CreateProjectRequest) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+// Response for creation of a project
+type CreateProjectResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *CreateProjectResponse) Reset() { *m = CreateProjectResponse{} }
+func (m *CreateProjectResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateProjectResponse) ProtoMessage() {}
+func (*CreateProjectResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{13}
+}
+
+func (m *CreateProjectResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_CreateProjectResponse.Unmarshal(m, b)
+}
+func (m *CreateProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_CreateProjectResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateProjectResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CreateProjectResponse.Merge(m, src)
+}
+func (m *CreateProjectResponse) XXX_Size() int {
+ return xxx_messageInfo_CreateProjectResponse.Size(m)
+}
+func (m *CreateProjectResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_CreateProjectResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateProjectResponse proto.InternalMessageInfo
+
+// Request for the archival of a project
+type ArchiveProjectRequest struct {
+ // Name of project to be archived
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ArchiveProjectRequest) Reset() { *m = ArchiveProjectRequest{} }
+func (m *ArchiveProjectRequest) String() string { return proto.CompactTextString(m) }
+func (*ArchiveProjectRequest) ProtoMessage() {}
+func (*ArchiveProjectRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{14}
+}
+
+func (m *ArchiveProjectRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ArchiveProjectRequest.Unmarshal(m, b)
+}
+func (m *ArchiveProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ArchiveProjectRequest.Marshal(b, m, deterministic)
+}
+func (m *ArchiveProjectRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ArchiveProjectRequest.Merge(m, src)
+}
+func (m *ArchiveProjectRequest) XXX_Size() int {
+ return xxx_messageInfo_ArchiveProjectRequest.Size(m)
+}
+func (m *ArchiveProjectRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_ArchiveProjectRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArchiveProjectRequest proto.InternalMessageInfo
+
+func (m *ArchiveProjectRequest) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+// Response for archival of a project
+type ArchiveProjectResponse struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ArchiveProjectResponse) Reset() { *m = ArchiveProjectResponse{} }
+func (m *ArchiveProjectResponse) String() string { return proto.CompactTextString(m) }
+func (*ArchiveProjectResponse) ProtoMessage() {}
+func (*ArchiveProjectResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{15}
+}
+
+func (m *ArchiveProjectResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ArchiveProjectResponse.Unmarshal(m, b)
+}
+func (m *ArchiveProjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ArchiveProjectResponse.Marshal(b, m, deterministic)
+}
+func (m *ArchiveProjectResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ArchiveProjectResponse.Merge(m, src)
+}
+func (m *ArchiveProjectResponse) XXX_Size() int {
+ return xxx_messageInfo_ArchiveProjectResponse.Size(m)
+}
+func (m *ArchiveProjectResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_ArchiveProjectResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArchiveProjectResponse proto.InternalMessageInfo
+
+// Request for listing of projects
+type ListProjectsRequest struct {
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ListProjectsRequest) Reset() { *m = ListProjectsRequest{} }
+func (m *ListProjectsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListProjectsRequest) ProtoMessage() {}
+func (*ListProjectsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{16}
+}
+
+func (m *ListProjectsRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ListProjectsRequest.Unmarshal(m, b)
+}
+func (m *ListProjectsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ListProjectsRequest.Marshal(b, m, deterministic)
+}
+func (m *ListProjectsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ListProjectsRequest.Merge(m, src)
+}
+func (m *ListProjectsRequest) XXX_Size() int {
+ return xxx_messageInfo_ListProjectsRequest.Size(m)
+}
+func (m *ListProjectsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_ListProjectsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListProjectsRequest proto.InternalMessageInfo
+
+// Response for listing of projects
+type ListProjectsResponse struct {
+ // List of project names (archived projects are filtered out)
+ Projects []string `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ListProjectsResponse) Reset() { *m = ListProjectsResponse{} }
+func (m *ListProjectsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListProjectsResponse) ProtoMessage() {}
+func (*ListProjectsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_d9be266444105411, []int{17}
+}
+
+func (m *ListProjectsResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ListProjectsResponse.Unmarshal(m, b)
+}
+func (m *ListProjectsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ListProjectsResponse.Marshal(b, m, deterministic)
+}
+func (m *ListProjectsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ListProjectsResponse.Merge(m, src)
+}
+func (m *ListProjectsResponse) XXX_Size() int {
+ return xxx_messageInfo_ListProjectsResponse.Size(m)
+}
+func (m *ListProjectsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_ListProjectsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListProjectsResponse proto.InternalMessageInfo
+
+func (m *ListProjectsResponse) GetProjects() []string {
+ if m != nil {
+ return m.Projects
+ }
+ return nil
+}
+
func init() {
proto.RegisterEnum("feast.core.ApplyFeatureSetResponse_Status", ApplyFeatureSetResponse_Status_name, ApplyFeatureSetResponse_Status_value)
proto.RegisterEnum("feast.core.UpdateStoreResponse_Status", UpdateStoreResponse_Status_name, UpdateStoreResponse_Status_value)
@@ -686,52 +932,67 @@ func init() {
proto.RegisterType((*GetFeastCoreVersionResponse)(nil), "feast.core.GetFeastCoreVersionResponse")
proto.RegisterType((*UpdateStoreRequest)(nil), "feast.core.UpdateStoreRequest")
proto.RegisterType((*UpdateStoreResponse)(nil), "feast.core.UpdateStoreResponse")
+ proto.RegisterType((*CreateProjectRequest)(nil), "feast.core.CreateProjectRequest")
+ proto.RegisterType((*CreateProjectResponse)(nil), "feast.core.CreateProjectResponse")
+ proto.RegisterType((*ArchiveProjectRequest)(nil), "feast.core.ArchiveProjectRequest")
+ proto.RegisterType((*ArchiveProjectResponse)(nil), "feast.core.ArchiveProjectResponse")
+ proto.RegisterType((*ListProjectsRequest)(nil), "feast.core.ListProjectsRequest")
+ proto.RegisterType((*ListProjectsResponse)(nil), "feast.core.ListProjectsResponse")
}
func init() { proto.RegisterFile("feast/core/CoreService.proto", fileDescriptor_d9be266444105411) }
var fileDescriptor_d9be266444105411 = []byte{
- // 636 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdd, 0x72, 0xd2, 0x40,
- 0x14, 0x36, 0xb5, 0xa5, 0xc3, 0x89, 0xad, 0xb0, 0x28, 0x65, 0x52, 0xac, 0x18, 0x3b, 0x16, 0xbd,
- 0x48, 0x66, 0xf0, 0xc2, 0x0b, 0xc5, 0x19, 0xfe, 0x5a, 0x67, 0x74, 0xa0, 0xb3, 0x80, 0xe3, 0xf4,
- 0x86, 0x01, 0xba, 0x20, 0xb6, 0x65, 0x63, 0x76, 0xe9, 0x8c, 0x6f, 0xe3, 0x85, 0xef, 0xe1, 0x03,
- 0xf8, 0x52, 0x4e, 0xb2, 0x5b, 0xb2, 0x09, 0x21, 0x5c, 0xe8, 0x5d, 0xb2, 0xe7, 0x3b, 0xdf, 0x9e,
- 0xfd, 0xce, 0x1f, 0x14, 0x27, 0x64, 0xc8, 0xb8, 0x3d, 0xa6, 0x2e, 0xb1, 0x1b, 0xd4, 0x25, 0x5d,
- 0xe2, 0xde, 0xce, 0xc6, 0xc4, 0x72, 0x5c, 0xca, 0x29, 0x02, 0xdf, 0x6a, 0x79, 0x56, 0xe3, 0x50,
- 0x41, 0x9e, 0x92, 0x21, 0x5f, 0x78, 0x60, 0x2e, 0x80, 0x46, 0x5e, 0x31, 0x76, 0x39, 0x75, 0x25,
- 0x81, 0xd9, 0x84, 0x47, 0x67, 0x84, 0x07, 0x70, 0x4c, 0xbe, 0x2f, 0x08, 0xe3, 0x08, 0xc1, 0xf6,
- 0x7c, 0x78, 0x43, 0x0a, 0x5a, 0x49, 0x2b, 0xa7, 0xb1, 0xff, 0x8d, 0x0a, 0xb0, 0x7b, 0x4b, 0x5c,
- 0x36, 0xa3, 0xf3, 0xc2, 0x56, 0x49, 0x2b, 0xef, 0xe0, 0xbb, 0x5f, 0xb3, 0x07, 0x8f, 0x23, 0x2c,
- 0xcc, 0xa1, 0x73, 0x46, 0xd0, 0x5b, 0xd0, 0x27, 0xe2, 0x74, 0xc0, 0x08, 0xf7, 0xd9, 0xf4, 0x8a,
- 0x61, 0x05, 0x51, 0x5b, 0x81, 0x53, 0xd7, 0x21, 0x63, 0x0c, 0x93, 0xe5, 0xbf, 0xf9, 0x5b, 0x83,
- 0xfc, 0xa7, 0x19, 0x53, 0x78, 0xd9, 0x5d, 0x78, 0x35, 0x48, 0x4d, 0x66, 0xd7, 0x9c, 0xb8, 0x92,
- 0xf2, 0xa5, 0x4a, 0x19, 0xef, 0x63, 0x9d, 0xfa, 0x0e, 0x58, 0x3a, 0x1a, 0x23, 0x48, 0x89, 0x13,
- 0x54, 0x86, 0x8c, 0x12, 0xe4, 0x40, 0x79, 0xf7, 0x7e, 0x10, 0x4d, 0xdb, 0x53, 0xc0, 0x82, 0x9c,
- 0x8a, 0x54, 0xd5, 0x48, 0xe3, 0x6c, 0x00, 0xfe, 0x2c, 0x75, 0xf9, 0x02, 0x07, 0x2b, 0xc1, 0x48,
- 0x65, 0xaa, 0xf0, 0x40, 0xa1, 0x62, 0x05, 0xad, 0x74, 0x7f, 0x83, 0x34, 0x7a, 0xc0, 0xcf, 0x4c,
- 0x0a, 0x59, 0x8f, 0xd9, 0x4f, 0xe5, 0x52, 0x95, 0x77, 0x11, 0x55, 0x8e, 0xa3, 0xaa, 0x84, 0xe0,
- 0x51, 0x41, 0x8a, 0x4b, 0x41, 0x62, 0x92, 0x6f, 0x56, 0x01, 0xa9, 0x0c, 0xf2, 0x15, 0x27, 0xb0,
- 0xc3, 0xbc, 0x13, 0x19, 0x7e, 0x56, 0xbd, 0xd0, 0x87, 0x62, 0x61, 0x37, 0xfb, 0x90, 0xaf, 0x39,
- 0xce, 0xf5, 0x8f, 0xd5, 0x4a, 0xfb, 0xa7, 0x12, 0xf9, 0xa3, 0xc1, 0xc1, 0x0a, 0xef, 0x7f, 0xa8,
- 0x3d, 0x54, 0x87, 0x14, 0xe3, 0x43, 0xbe, 0x60, 0x7e, 0x72, 0xf7, 0x2b, 0xaf, 0x54, 0xbf, 0x35,
- 0x37, 0x5a, 0x5d, 0xdf, 0x03, 0x4b, 0x4f, 0xd3, 0x86, 0x94, 0x38, 0x41, 0x7b, 0x90, 0x6e, 0x77,
- 0x06, 0x8d, 0x0f, 0xb5, 0xf6, 0x59, 0x2b, 0x73, 0x0f, 0xe9, 0xb0, 0xdb, 0xc0, 0xad, 0x5a, 0xaf,
- 0xd5, 0xcc, 0x68, 0x28, 0x0d, 0x3b, 0x2d, 0x8c, 0x3b, 0x38, 0xb3, 0x65, 0x16, 0xc1, 0x10, 0x6d,
- 0xc4, 0xb8, 0xd7, 0xea, 0xb2, 0x8a, 0xa4, 0x50, 0xe6, 0x1b, 0x38, 0x8c, 0xb5, 0xca, 0xe7, 0x2a,
- 0xdd, 0x29, 0xf2, 0xb6, 0xec, 0xce, 0x2a, 0xa0, 0xbe, 0x73, 0x39, 0xe4, 0x44, 0x64, 0x44, 0xea,
- 0xae, 0xa4, 0x4e, 0x4b, 0x4c, 0xdd, 0x2f, 0x0d, 0x72, 0x21, 0xff, 0xd5, 0xdc, 0x27, 0x12, 0xa0,
- 0xf7, 0x11, 0x2d, 0x5f, 0xa8, 0xc8, 0x18, 0xe6, 0xa8, 0x8e, 0xc7, 0x09, 0x3a, 0xf6, 0xcf, 0x9b,
- 0x42, 0xc7, 0xca, 0xcf, 0x6d, 0xd0, 0x95, 0x01, 0x89, 0x26, 0x90, 0x8b, 0x91, 0x0b, 0x85, 0x2e,
- 0x5f, 0xaf, 0xb6, 0x71, 0xb2, 0x11, 0x27, 0x65, 0xe8, 0xc1, 0x5e, 0x68, 0xf6, 0xa1, 0xd2, 0xaa,
- 0x67, 0xb8, 0xe4, 0x8d, 0x67, 0x09, 0x08, 0xc9, 0x7a, 0x01, 0x0f, 0x23, 0x93, 0x03, 0x99, 0x9b,
- 0x67, 0x9c, 0xf1, 0x3c, 0x11, 0x23, 0xb9, 0x3f, 0x02, 0x04, 0xad, 0x8c, 0x9e, 0x24, 0x0e, 0x09,
- 0xe3, 0x68, 0x9d, 0x39, 0x08, 0x34, 0xd2, 0x0e, 0xe1, 0x40, 0xe3, 0xbb, 0x3e, 0x1c, 0xe8, 0xba,
- 0x0e, 0x6e, 0x83, 0xae, 0x94, 0x07, 0x3a, 0x5a, 0x5b, 0x37, 0x82, 0xf3, 0xe9, 0x86, 0xba, 0xaa,
- 0x77, 0x40, 0xd9, 0x97, 0xf5, 0x8c, 0x52, 0x2d, 0xe7, 0xde, 0x32, 0xbc, 0xb0, 0xa7, 0x33, 0xfe,
- 0x75, 0x31, 0xb2, 0xc6, 0xf4, 0xc6, 0x9e, 0xd2, 0x6f, 0xe4, 0xca, 0x16, 0x5b, 0x93, 0x5d, 0x5e,
- 0xd9, 0x53, 0x6a, 0xfb, 0x1b, 0x93, 0xd9, 0xc1, 0x26, 0x1d, 0xa5, 0xfc, 0xa3, 0xd7, 0x7f, 0x03,
- 0x00, 0x00, 0xff, 0xff, 0xc7, 0xc1, 0x10, 0xf1, 0xa5, 0x07, 0x00, 0x00,
+ // 772 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x4e, 0x1b, 0x39,
+ 0x14, 0xde, 0x81, 0x25, 0x6c, 0x4e, 0x80, 0x0d, 0x0e, 0x09, 0xd1, 0xc0, 0x42, 0xd6, 0x45, 0x85,
+ 0x52, 0x69, 0x46, 0x4a, 0x2f, 0x7a, 0xd1, 0x52, 0x29, 0x84, 0x40, 0xa5, 0x56, 0x81, 0x4e, 0xa0,
+ 0xad, 0xb8, 0x28, 0x0a, 0xc1, 0x81, 0xf0, 0xe7, 0xe9, 0xd8, 0x41, 0xea, 0xeb, 0x54, 0x7d, 0x9b,
+ 0x3e, 0x41, 0xdf, 0xa6, 0x9a, 0xb1, 0x93, 0xb1, 0x9d, 0xc9, 0xa4, 0x52, 0x7b, 0x97, 0xb1, 0xbf,
+ 0xf3, 0xf9, 0xf8, 0x3b, 0xe7, 0x3b, 0x31, 0xac, 0x76, 0x49, 0x9b, 0x71, 0xb7, 0x43, 0x03, 0xe2,
+ 0xd6, 0x69, 0x40, 0x5a, 0x24, 0x78, 0xe8, 0x75, 0x88, 0xe3, 0x07, 0x94, 0x53, 0x04, 0xd1, 0xae,
+ 0x13, 0xee, 0xda, 0x2b, 0x0a, 0x72, 0x9f, 0xb4, 0x79, 0x3f, 0x04, 0x73, 0x01, 0xb4, 0x4b, 0xca,
+ 0x66, 0x8b, 0xd3, 0x40, 0x12, 0xe0, 0x4f, 0xb0, 0x74, 0x40, 0x78, 0x0c, 0xf7, 0xc8, 0xe7, 0x3e,
+ 0x61, 0x1c, 0x95, 0x61, 0xd6, 0x0f, 0xe8, 0x35, 0xe9, 0xf0, 0xf2, 0x74, 0xc5, 0xda, 0xca, 0x7a,
+ 0x83, 0x4f, 0x84, 0xe0, 0xef, 0xfb, 0xf6, 0x1d, 0x29, 0x5b, 0xd1, 0x72, 0xf4, 0x3b, 0x44, 0x3f,
+ 0x90, 0x80, 0xf5, 0xe8, 0x7d, 0x79, 0xaa, 0x62, 0x6d, 0xcd, 0x78, 0x83, 0x4f, 0x7c, 0x0c, 0x45,
+ 0x83, 0x9f, 0xf9, 0xf4, 0x9e, 0x11, 0xf4, 0x02, 0x72, 0x5d, 0xb1, 0x7a, 0xc6, 0x08, 0x8f, 0xd8,
+ 0x72, 0x55, 0xdb, 0x89, 0xef, 0xe3, 0xc4, 0x41, 0x2d, 0x9f, 0x74, 0x3c, 0xe8, 0x0e, 0xbf, 0xf1,
+ 0x0f, 0x0b, 0x4a, 0x6f, 0x7b, 0x4c, 0xe1, 0x65, 0x09, 0x89, 0x4f, 0xe9, 0x89, 0xd7, 0x20, 0xd3,
+ 0xed, 0xdd, 0x72, 0x12, 0xc8, 0xc3, 0x9e, 0xa8, 0x87, 0x25, 0xb3, 0x39, 0xfb, 0x51, 0x80, 0x27,
+ 0x03, 0xed, 0x73, 0xc8, 0x88, 0x15, 0xb4, 0x05, 0x79, 0x25, 0xfd, 0x33, 0x45, 0x91, 0x85, 0x38,
+ 0xcf, 0x66, 0xa8, 0x8d, 0x03, 0x05, 0x15, 0xa9, 0xea, 0x94, 0xf5, 0x16, 0x63, 0xf0, 0x7b, 0xa9,
+ 0xd8, 0x47, 0x58, 0x1e, 0x49, 0x46, 0x6a, 0xb6, 0x03, 0x73, 0x0a, 0x15, 0x2b, 0x5b, 0x95, 0xe9,
+ 0x09, 0xa2, 0xe5, 0x62, 0x7e, 0x86, 0x29, 0x2c, 0x86, 0xcc, 0x51, 0xf9, 0x87, 0x7a, 0xbd, 0x34,
+ 0x54, 0xd9, 0x30, 0x55, 0xd1, 0xe0, 0xa6, 0x20, 0xab, 0x43, 0x41, 0x12, 0xda, 0x02, 0xef, 0x00,
+ 0x52, 0x19, 0xe4, 0x2d, 0x36, 0x61, 0x86, 0x85, 0x2b, 0x32, 0xfd, 0x45, 0xf5, 0xc0, 0x08, 0xea,
+ 0x89, 0x7d, 0x4c, 0xa1, 0x54, 0xf3, 0xfd, 0xdb, 0x2f, 0xa9, 0xdd, 0x69, 0x14, 0xf9, 0xb7, 0xda,
+ 0xea, 0xbb, 0x05, 0xcb, 0x23, 0x27, 0xfe, 0x81, 0x7e, 0x45, 0xbb, 0x90, 0x61, 0xbc, 0xcd, 0xfb,
+ 0x2c, 0x4a, 0x77, 0xa1, 0xba, 0xad, 0xc6, 0x8d, 0x39, 0xd1, 0x69, 0x45, 0x11, 0x9e, 0x8c, 0xc4,
+ 0x2e, 0x64, 0xc4, 0x0a, 0x9a, 0x87, 0x6c, 0xf3, 0xf0, 0xac, 0xfe, 0xba, 0xd6, 0x3c, 0x68, 0xe4,
+ 0xff, 0x42, 0x39, 0x98, 0xad, 0x7b, 0x8d, 0xda, 0x71, 0x63, 0x2f, 0x6f, 0xa1, 0x2c, 0xcc, 0x34,
+ 0x3c, 0xef, 0xd0, 0xcb, 0x4f, 0xe1, 0x55, 0xb0, 0x85, 0xf5, 0x18, 0x0f, 0x07, 0x87, 0xec, 0x2f,
+ 0x29, 0x21, 0x7e, 0x0e, 0x2b, 0x89, 0xbb, 0xf2, 0xba, 0x8a, 0xa3, 0x45, 0x45, 0x87, 0x8e, 0xde,
+ 0x01, 0x74, 0xe2, 0x5f, 0xb4, 0x39, 0x11, 0xb5, 0x92, 0x15, 0x51, 0x8a, 0x6a, 0xa5, 0x16, 0xf5,
+ 0x9b, 0x05, 0x05, 0x2d, 0x7e, 0xb4, 0x2b, 0x52, 0x09, 0xd0, 0x2b, 0x43, 0xcb, 0xc7, 0x2a, 0x32,
+ 0x81, 0xd9, 0xd4, 0x71, 0x23, 0x45, 0xc7, 0x93, 0xa3, 0x3d, 0xa1, 0x23, 0xde, 0x86, 0xa5, 0x7a,
+ 0x40, 0xda, 0x9c, 0x1c, 0x89, 0xc6, 0x1a, 0xdc, 0x33, 0xa9, 0xcd, 0x97, 0xa1, 0x68, 0x60, 0xc5,
+ 0xc9, 0xf8, 0x29, 0x14, 0x6b, 0x41, 0xe7, 0xaa, 0xf7, 0xf0, 0x2b, 0x2c, 0x65, 0x28, 0x99, 0x60,
+ 0x49, 0x53, 0x84, 0x42, 0x68, 0x23, 0xb9, 0x3c, 0xb0, 0x22, 0xae, 0xc2, 0x92, 0xbe, 0x2c, 0x95,
+ 0xb4, 0xe1, 0x1f, 0xe9, 0x06, 0x31, 0x21, 0xb2, 0xde, 0xf0, 0xbb, 0xfa, 0x35, 0x03, 0x39, 0xe5,
+ 0x5f, 0x04, 0x75, 0xa1, 0x90, 0xd0, 0x05, 0x48, 0xd3, 0x74, 0x7c, 0x13, 0xd9, 0x9b, 0x13, 0x71,
+ 0x32, 0xa7, 0x63, 0x98, 0xd7, 0xfe, 0x06, 0x50, 0x65, 0x34, 0x52, 0xf7, 0xb8, 0xfd, 0x7f, 0x0a,
+ 0x42, 0xb2, 0x9e, 0xc2, 0xbf, 0xc6, 0xa8, 0x44, 0x78, 0xf2, 0x50, 0xb7, 0x1f, 0xa5, 0x62, 0x24,
+ 0xf7, 0x1b, 0x80, 0x78, 0x76, 0xa1, 0xff, 0x52, 0xa7, 0xa2, 0xbd, 0x36, 0x6e, 0x3b, 0x4e, 0xd4,
+ 0x70, 0xb9, 0x9e, 0x68, 0xf2, 0x98, 0xd3, 0x13, 0x1d, 0x37, 0x98, 0x9a, 0x90, 0x53, 0xba, 0x1e,
+ 0xad, 0x8d, 0xb5, 0x83, 0xe0, 0x5c, 0x9f, 0x60, 0x97, 0xb0, 0x54, 0x5a, 0x37, 0xeb, 0xa5, 0x4a,
+ 0x32, 0x85, 0x5e, 0xaa, 0x44, 0x2b, 0xa0, 0x0f, 0xb0, 0xa0, 0x77, 0x37, 0xd2, 0x82, 0x12, 0x6d,
+ 0x62, 0xe3, 0x34, 0x88, 0x24, 0x7e, 0x07, 0x73, 0xaa, 0x0b, 0xd0, 0xba, 0x59, 0x0a, 0xc3, 0x36,
+ 0x76, 0x65, 0x3c, 0x40, 0x50, 0xee, 0x1e, 0x82, 0xf2, 0xac, 0xda, 0xcd, 0x2b, 0x7e, 0x39, 0x0a,
+ 0xdf, 0x4c, 0xa7, 0xee, 0x65, 0x8f, 0x5f, 0xf5, 0xcf, 0x9d, 0x0e, 0xbd, 0x73, 0x2f, 0xe9, 0x35,
+ 0xb9, 0x71, 0xc5, 0xe3, 0x8a, 0x5d, 0xdc, 0xb8, 0x97, 0xd4, 0x8d, 0x1e, 0x56, 0xcc, 0x8d, 0x1f,
+ 0x5c, 0xe7, 0x99, 0x68, 0xe9, 0xd9, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0xcb, 0xa4, 0xd7,
+ 0xcc, 0x09, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -774,6 +1035,17 @@ type CoreServiceClient interface {
// If the changes are valid, core will return the given store configuration in response, and
// start or update the necessary feature population jobs for the updated store.
UpdateStore(ctx context.Context, in *UpdateStoreRequest, opts ...grpc.CallOption) (*UpdateStoreResponse, error)
+ // Creates a project. Projects serve as namespaces within which resources like features will be
+ // created. Both feature set names as well as field names must be unique within a project. Project
+ // names themselves must be globally unique.
+ CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error)
+ // Archives a project. Archived projects will continue to exist and function, but won't be visible
+ // through the Core API. Any existing ingestion or serving requests will continue to function,
+ // but will result in warning messages being logged. It is not possible to unarchive a project
+ // through the Core API
+ ArchiveProject(ctx context.Context, in *ArchiveProjectRequest, opts ...grpc.CallOption) (*ArchiveProjectResponse, error)
+ // Lists all projects active projects.
+ ListProjects(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error)
}
type coreServiceClient struct {
@@ -838,6 +1110,33 @@ func (c *coreServiceClient) UpdateStore(ctx context.Context, in *UpdateStoreRequ
return out, nil
}
+func (c *coreServiceClient) CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) {
+ out := new(CreateProjectResponse)
+ err := c.cc.Invoke(ctx, "/feast.core.CoreService/CreateProject", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *coreServiceClient) ArchiveProject(ctx context.Context, in *ArchiveProjectRequest, opts ...grpc.CallOption) (*ArchiveProjectResponse, error) {
+ out := new(ArchiveProjectResponse)
+ err := c.cc.Invoke(ctx, "/feast.core.CoreService/ArchiveProject", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *coreServiceClient) ListProjects(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error) {
+ out := new(ListProjectsResponse)
+ err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListProjects", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// CoreServiceServer is the server API for CoreService service.
type CoreServiceServer interface {
// Retrieve version information about this Feast deployment
@@ -868,6 +1167,17 @@ type CoreServiceServer interface {
// If the changes are valid, core will return the given store configuration in response, and
// start or update the necessary feature population jobs for the updated store.
UpdateStore(context.Context, *UpdateStoreRequest) (*UpdateStoreResponse, error)
+ // Creates a project. Projects serve as namespaces within which resources like features will be
+ // created. Both feature set names as well as field names must be unique within a project. Project
+ // names themselves must be globally unique.
+ CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error)
+ // Archives a project. Archived projects will continue to exist and function, but won't be visible
+ // through the Core API. Any existing ingestion or serving requests will continue to function,
+ // but will result in warning messages being logged. It is not possible to unarchive a project
+ // through the Core API
+ ArchiveProject(context.Context, *ArchiveProjectRequest) (*ArchiveProjectResponse, error)
+ // Lists all projects active projects.
+ ListProjects(context.Context, *ListProjectsRequest) (*ListProjectsResponse, error)
}
// UnimplementedCoreServiceServer can be embedded to have forward compatible implementations.
@@ -892,6 +1202,15 @@ func (*UnimplementedCoreServiceServer) ApplyFeatureSet(ctx context.Context, req
func (*UnimplementedCoreServiceServer) UpdateStore(ctx context.Context, req *UpdateStoreRequest) (*UpdateStoreResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateStore not implemented")
}
+func (*UnimplementedCoreServiceServer) CreateProject(ctx context.Context, req *CreateProjectRequest) (*CreateProjectResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented")
+}
+func (*UnimplementedCoreServiceServer) ArchiveProject(ctx context.Context, req *ArchiveProjectRequest) (*ArchiveProjectResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ArchiveProject not implemented")
+}
+func (*UnimplementedCoreServiceServer) ListProjects(ctx context.Context, req *ListProjectsRequest) (*ListProjectsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListProjects not implemented")
+}
func RegisterCoreServiceServer(s *grpc.Server, srv CoreServiceServer) {
s.RegisterService(&_CoreService_serviceDesc, srv)
@@ -1005,6 +1324,60 @@ func _CoreService_UpdateStore_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
+func _CoreService_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CreateProjectRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CoreServiceServer).CreateProject(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/feast.core.CoreService/CreateProject",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CoreServiceServer).CreateProject(ctx, req.(*CreateProjectRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CoreService_ArchiveProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ArchiveProjectRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CoreServiceServer).ArchiveProject(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/feast.core.CoreService/ArchiveProject",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CoreServiceServer).ArchiveProject(ctx, req.(*ArchiveProjectRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CoreService_ListProjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListProjectsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CoreServiceServer).ListProjects(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/feast.core.CoreService/ListProjects",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CoreServiceServer).ListProjects(ctx, req.(*ListProjectsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
var _CoreService_serviceDesc = grpc.ServiceDesc{
ServiceName: "feast.core.CoreService",
HandlerType: (*CoreServiceServer)(nil),
@@ -1033,6 +1406,18 @@ var _CoreService_serviceDesc = grpc.ServiceDesc{
MethodName: "UpdateStore",
Handler: _CoreService_UpdateStore_Handler,
},
+ {
+ MethodName: "CreateProject",
+ Handler: _CoreService_CreateProject_Handler,
+ },
+ {
+ MethodName: "ArchiveProject",
+ Handler: _CoreService_ArchiveProject_Handler,
+ },
+ {
+ MethodName: "ListProjects",
+ Handler: _CoreService_ListProjects_Handler,
+ },
},
Streams: []grpc.StreamDesc{},
Metadata: "feast/core/CoreService.proto",
diff --git a/sdk/go/protos/feast/core/FeatureSet.pb.go b/sdk/go/protos/feast/core/FeatureSet.pb.go
index 79cbcaa94b1..538887de34c 100644
--- a/sdk/go/protos/feast/core/FeatureSet.pb.go
+++ b/sdk/go/protos/feast/core/FeatureSet.pb.go
@@ -23,9 +23,11 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type FeatureSetSpec struct {
+ // Name of project that this feature set belongs to (read-only).
+ Project string `protobuf:"bytes,7,opt,name=project,proto3" json:"project,omitempty"`
// Name of the featureSet. Must be unique.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- // FeatureSet version.
+ // FeatureSet version (read-only).
Version int32 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
// List of entities contained within this featureSet.
// This allows the feature to be used during joins between feature sets.
@@ -71,6 +73,13 @@ func (m *FeatureSetSpec) XXX_DiscardUnknown() {
var xxx_messageInfo_FeatureSetSpec proto.InternalMessageInfo
+func (m *FeatureSetSpec) GetProject() string {
+ if m != nil {
+ return m.Project
+ }
+ return ""
+}
+
func (m *FeatureSetSpec) GetName() string {
if m != nil {
return m.Name
@@ -220,28 +229,28 @@ func init() {
func init() { proto.RegisterFile("feast/core/FeatureSet.proto", fileDescriptor_972fbd278ac19c0c) }
var fileDescriptor_972fbd278ac19c0c = []byte{
- // 357 bytes of a gzipped FileDescriptorProto
+ // 368 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0x4d, 0x6f, 0xe2, 0x30,
- 0x10, 0x55, 0xf8, 0x08, 0x30, 0x48, 0xac, 0xe4, 0xc3, 0x92, 0x5d, 0xa4, 0x55, 0xc4, 0x29, 0xda,
- 0x83, 0x2d, 0x85, 0x5b, 0x6f, 0x45, 0x6d, 0x8f, 0x55, 0x15, 0xaa, 0x1e, 0xaa, 0x56, 0xc8, 0x84,
- 0x21, 0x4d, 0x21, 0x71, 0x14, 0x3b, 0x08, 0x7e, 0x41, 0xff, 0x76, 0x15, 0x1b, 0x37, 0x39, 0xf4,
- 0xd8, 0x9b, 0xc7, 0xef, 0xcd, 0xc7, 0x7b, 0x33, 0x30, 0xdb, 0x21, 0x97, 0x8a, 0xc5, 0xa2, 0x44,
- 0x76, 0x87, 0x5c, 0x55, 0x25, 0xae, 0x50, 0xd1, 0xa2, 0x14, 0x4a, 0x10, 0xd0, 0x20, 0xad, 0xc1,
- 0xbf, 0x53, 0x43, 0x54, 0xe7, 0x02, 0x25, 0x7b, 0xe2, 0x87, 0x0a, 0x0d, 0xc9, 0x02, 0xba, 0xc2,
- 0x4a, 0x54, 0x65, 0x6c, 0x81, 0x7f, 0x89, 0x10, 0xc9, 0x01, 0x99, 0x8e, 0x36, 0xd5, 0x8e, 0x6d,
- 0xab, 0x92, 0xab, 0x54, 0xe4, 0x06, 0x9f, 0x7f, 0x74, 0x60, 0xd2, 0xb4, 0x5c, 0x15, 0x18, 0x13,
- 0x02, 0xbd, 0x9c, 0x67, 0xe8, 0x39, 0xbe, 0x13, 0x8c, 0x22, 0xfd, 0x26, 0x1e, 0x0c, 0x8e, 0x58,
- 0xca, 0x54, 0xe4, 0x5e, 0xc7, 0x77, 0x82, 0x7e, 0x64, 0x43, 0x12, 0xc2, 0x10, 0x73, 0x95, 0xaa,
- 0x14, 0xa5, 0xd7, 0xf5, 0xbb, 0xc1, 0x38, 0xfc, 0x4d, 0x9b, 0x89, 0xe9, 0x6d, 0x8d, 0x9d, 0xeb,
- 0xba, 0xd1, 0x17, 0x8f, 0x2c, 0x60, 0xb8, 0x33, 0x3d, 0xa5, 0xd7, 0xd3, 0x39, 0xd3, 0x76, 0x8e,
- 0x9d, 0x47, 0x27, 0x59, 0x22, 0x09, 0x61, 0x90, 0xf1, 0xd3, 0x9a, 0x27, 0xe8, 0xf5, 0x7d, 0x27,
- 0x18, 0x87, 0x7f, 0xa8, 0xd1, 0x46, 0xad, 0x36, 0x7a, 0x73, 0xd1, 0x16, 0xb9, 0x19, 0x3f, 0x5d,
- 0x27, 0x48, 0xfe, 0x83, 0x2b, 0xb5, 0x1b, 0x9e, 0xab, 0x53, 0x48, 0xbb, 0x8d, 0xf1, 0x29, 0xba,
- 0x30, 0xe6, 0x2f, 0x00, 0xcd, 0xb0, 0xdf, 0x9a, 0x70, 0x05, 0x70, 0xac, 0x3d, 0x5f, 0xd7, 0xfe,
- 0x6b, 0x1f, 0x26, 0xe1, 0xec, 0x52, 0x51, 0xaf, 0x84, 0xea, 0x95, 0x3c, 0x9e, 0x8b, 0x5a, 0x77,
- 0x95, 0x45, 0xa3, 0xa3, 0x8d, 0xe7, 0xaf, 0x30, 0x6e, 0xc9, 0xfa, 0xe9, 0xf2, 0xcb, 0x7b, 0x68,
- 0x9d, 0xc9, 0xf2, 0x57, 0xb3, 0xd1, 0x87, 0xda, 0x9b, 0x67, 0x96, 0xa4, 0xea, 0xad, 0xda, 0xd0,
- 0x58, 0x64, 0x2c, 0x11, 0xef, 0xb8, 0x67, 0xe6, 0x5e, 0xe4, 0x76, 0xcf, 0x12, 0x61, 0x8e, 0x43,
- 0xb2, 0xe6, 0x86, 0x36, 0xae, 0xfe, 0x5a, 0x7c, 0x06, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x96, 0x15,
- 0x04, 0x9a, 0x02, 0x00, 0x00,
+ 0x10, 0x55, 0xf8, 0x08, 0x60, 0x24, 0x56, 0xf2, 0x61, 0xf1, 0x2e, 0xd2, 0x2a, 0xe2, 0x14, 0xed,
+ 0xc1, 0x96, 0xc2, 0x6d, 0x6f, 0x8b, 0xda, 0x1e, 0xab, 0x2a, 0x54, 0x3d, 0x54, 0xad, 0x90, 0x09,
+ 0x43, 0x1a, 0x20, 0x71, 0x14, 0x3b, 0x08, 0x7e, 0x4e, 0xff, 0x69, 0x65, 0x1b, 0x37, 0x39, 0xf4,
+ 0xd8, 0x9b, 0xc7, 0xef, 0xcd, 0xc7, 0x9b, 0x37, 0x68, 0xb6, 0x03, 0x2e, 0x15, 0x4b, 0x44, 0x05,
+ 0xec, 0x0e, 0xb8, 0xaa, 0x2b, 0x58, 0x81, 0xa2, 0x65, 0x25, 0x94, 0xc0, 0xc8, 0x80, 0x54, 0x83,
+ 0xbf, 0xa7, 0x96, 0xa8, 0x2e, 0x25, 0x48, 0xf6, 0xc4, 0x8f, 0x35, 0x58, 0x92, 0x03, 0x4c, 0x85,
+ 0x95, 0xa8, 0xab, 0xc4, 0x01, 0x7f, 0x52, 0x21, 0xd2, 0x23, 0x30, 0x13, 0x6d, 0xea, 0x1d, 0xdb,
+ 0xd6, 0x15, 0x57, 0x99, 0x28, 0x2c, 0x3e, 0x7f, 0xef, 0xa0, 0x49, 0xd3, 0x72, 0x55, 0x42, 0x82,
+ 0x09, 0x1a, 0x94, 0x95, 0xd8, 0x43, 0xa2, 0xc8, 0x20, 0xf0, 0xc2, 0x51, 0xec, 0x42, 0x8c, 0x51,
+ 0xaf, 0xe0, 0x39, 0x10, 0xcf, 0x7c, 0x9b, 0xb7, 0x66, 0x9f, 0xa0, 0x92, 0x99, 0x28, 0x48, 0x27,
+ 0xf0, 0xc2, 0x7e, 0xec, 0x42, 0x1c, 0xa1, 0x21, 0x14, 0x2a, 0x53, 0x19, 0x48, 0xd2, 0x0d, 0xba,
+ 0xe1, 0x38, 0xfa, 0x49, 0x1b, 0x2d, 0xf4, 0x56, 0x63, 0x17, 0xdd, 0x31, 0xfe, 0xe4, 0xe1, 0x05,
+ 0x1a, 0xee, 0xec, 0x34, 0x92, 0xf4, 0x4c, 0xce, 0xb4, 0x9d, 0xe3, 0x26, 0x35, 0x49, 0x8e, 0x88,
+ 0x23, 0x34, 0xc8, 0xf9, 0x79, 0xcd, 0x53, 0x20, 0xfd, 0xc0, 0x0b, 0xc7, 0xd1, 0x2f, 0x6a, 0x55,
+ 0x53, 0xa7, 0x9a, 0xde, 0x5c, 0x55, 0xc7, 0x7e, 0xce, 0xcf, 0xff, 0x53, 0xc0, 0x7f, 0x91, 0x2f,
+ 0xcd, 0x9e, 0x88, 0x6f, 0x52, 0x70, 0xbb, 0x8d, 0xdd, 0x60, 0x7c, 0x65, 0xcc, 0x5f, 0x10, 0x6a,
+ 0x86, 0xfd, 0x72, 0x09, 0xff, 0x10, 0x3a, 0x69, 0x37, 0xd6, 0xda, 0x19, 0xb3, 0x87, 0x49, 0x34,
+ 0xbb, 0x56, 0x34, 0x66, 0x51, 0x63, 0xd6, 0xe3, 0xa5, 0xd4, 0xba, 0xeb, 0x3c, 0x1e, 0x9d, 0x5c,
+ 0x3c, 0x7f, 0x45, 0xe3, 0x96, 0xac, 0xef, 0x2e, 0xbf, 0xbc, 0x47, 0xad, 0x03, 0x5a, 0xfe, 0x68,
+ 0xbc, 0x7e, 0xd0, 0xbb, 0x79, 0x66, 0x69, 0xa6, 0xde, 0xea, 0x0d, 0x4d, 0x44, 0xce, 0x52, 0xb1,
+ 0x87, 0x03, 0xb3, 0x97, 0x24, 0xb7, 0x07, 0x96, 0x0a, 0x7b, 0x36, 0x92, 0x35, 0xd7, 0xb5, 0xf1,
+ 0xcd, 0xd7, 0xe2, 0x23, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x76, 0xdf, 0xba, 0xb4, 0x02, 0x00, 0x00,
}
diff --git a/sdk/go/protos/feast/core/Store.pb.go b/sdk/go/protos/feast/core/Store.pb.go
index 5dafb63d942..8e0452d5354 100644
--- a/sdk/go/protos/feast/core/Store.pb.go
+++ b/sdk/go/protos/feast/core/Store.pb.go
@@ -391,6 +391,9 @@ func (m *Store_CassandraConfig) GetPort() int32 {
}
type Store_Subscription struct {
+ // Name of project where subscribed feature sets can be found. All feature sets must be located
+ // within this project. Wildcards are not supported.
+ Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"`
// Name of featureSet to subscribe to. This field supports any valid basic POSIX regex,
// e.g. customer_.* or .*
// https://www.regular-expressions.info/posix.html
@@ -431,6 +434,13 @@ func (m *Store_Subscription) XXX_DiscardUnknown() {
var xxx_messageInfo_Store_Subscription proto.InternalMessageInfo
+func (m *Store_Subscription) GetProject() string {
+ if m != nil {
+ return m.Project
+ }
+ return ""
+}
+
func (m *Store_Subscription) GetName() string {
if m != nil {
return m.Name
@@ -457,33 +467,34 @@ func init() {
func init() { proto.RegisterFile("feast/core/Store.proto", fileDescriptor_4b177bc9ccf64875) }
var fileDescriptor_4b177bc9ccf64875 = []byte{
- // 442 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6f, 0xd3, 0x30,
- 0x14, 0xc7, 0x97, 0xae, 0xdd, 0x96, 0x97, 0xfe, 0x88, 0x7c, 0x40, 0x51, 0xd1, 0x50, 0xd8, 0xa9,
- 0xa7, 0x58, 0x2a, 0xe2, 0x80, 0xc4, 0x81, 0xa6, 0x9d, 0x20, 0x02, 0x55, 0xcc, 0x05, 0x24, 0xb8,
- 0x4c, 0xf9, 0xe1, 0x65, 0xde, 0xb4, 0x38, 0xd8, 0x2e, 0x52, 0xff, 0x3a, 0xfe, 0x35, 0x64, 0x27,
- 0x69, 0x53, 0xda, 0xc3, 0x2e, 0x91, 0xfd, 0x7d, 0xdf, 0xf7, 0xc9, 0xd3, 0xf3, 0x7b, 0xf0, 0xe2,
- 0x8e, 0xc6, 0x52, 0xe1, 0x94, 0x0b, 0x8a, 0x57, 0x8a, 0x0b, 0x1a, 0x94, 0x82, 0x2b, 0x8e, 0xc0,
- 0xe8, 0x81, 0xd6, 0xaf, 0xfe, 0xf6, 0xa0, 0x67, 0x62, 0x08, 0x41, 0xb7, 0x88, 0x9f, 0xa8, 0x67,
- 0xf9, 0xd6, 0xc4, 0x26, 0xe6, 0x8c, 0x30, 0x74, 0xd5, 0xa6, 0xa4, 0x5e, 0xc7, 0xb7, 0x26, 0xc3,
- 0xe9, 0xcb, 0x60, 0x97, 0x18, 0x54, 0x40, 0xf3, 0xfd, 0xb6, 0x29, 0x29, 0x31, 0x46, 0xb4, 0x80,
- 0x81, 0x5c, 0x27, 0x32, 0x15, 0xac, 0x54, 0x8c, 0x17, 0xd2, 0xeb, 0xfa, 0xa7, 0x13, 0x67, 0xfa,
- 0xea, 0x48, 0x66, 0xcb, 0x46, 0xf6, 0x93, 0x50, 0x08, 0x7d, 0x41, 0x33, 0x26, 0x6f, 0x53, 0x5e,
- 0xdc, 0xb1, 0xdc, 0x73, 0x7c, 0x6b, 0xe2, 0x4c, 0x2f, 0x0f, 0x21, 0x44, 0xbb, 0xe6, 0xc6, 0xf4,
- 0xe9, 0x84, 0x38, 0x62, 0x77, 0x45, 0x9f, 0x61, 0x94, 0xb0, 0xfc, 0xf7, 0x9a, 0x8a, 0x4d, 0x83,
- 0xe9, 0x1b, 0x8c, 0x7f, 0x88, 0x09, 0x59, 0x7e, 0xa3, 0x8d, 0x5b, 0xd2, 0xb0, 0x49, 0xad, 0x61,
- 0x4b, 0x70, 0xd3, 0x58, 0xca, 0xb8, 0xc8, 0x44, 0xdc, 0xd0, 0x06, 0x86, 0xf6, 0xfa, 0x90, 0x36,
- 0x6f, 0x9c, 0x5b, 0xdc, 0x28, 0xdd, 0x97, 0xc6, 0x6f, 0xc1, 0x69, 0x95, 0xae, 0x5b, 0x7f, 0xcf,
- 0xa5, 0x6a, 0x5a, 0xaf, 0xcf, 0x5a, 0x2b, 0xb9, 0x50, 0xa6, 0xf5, 0x3d, 0x62, 0xce, 0xe3, 0x25,
- 0x0c, 0xf7, 0x4b, 0x45, 0x97, 0x00, 0xa5, 0xe0, 0x0f, 0x34, 0x55, 0xb7, 0x2c, 0xab, 0xf3, 0xed,
- 0x5a, 0x89, 0x32, 0x1d, 0xce, 0x62, 0x15, 0x4b, 0x6a, 0xc2, 0x9d, 0x2a, 0x5c, 0x2b, 0x51, 0x36,
- 0x7e, 0x07, 0xa3, 0xff, 0x8a, 0x7d, 0x76, 0x29, 0xef, 0xa1, 0xdf, 0x7e, 0xc1, 0xa3, 0xd3, 0xe3,
- 0xc1, 0xf9, 0x1f, 0x2a, 0x24, 0xe3, 0x45, 0xfd, 0xeb, 0xe6, 0x7a, 0xf5, 0x01, 0xec, 0xed, 0xe4,
- 0x20, 0x07, 0xce, 0xa3, 0xe5, 0x8f, 0xd9, 0x97, 0x68, 0xe1, 0x9e, 0x20, 0x1b, 0x7a, 0xe4, 0x7a,
- 0x11, 0xad, 0x5c, 0x0b, 0xf5, 0xe1, 0x22, 0x8c, 0x3e, 0xde, 0x7c, 0xbf, 0x26, 0x3f, 0xdd, 0x0e,
- 0x1a, 0x80, 0x3d, 0x9f, 0xad, 0x56, 0xb3, 0xe5, 0x82, 0xcc, 0xdc, 0xd3, 0xf0, 0x02, 0xce, 0xaa,
- 0x77, 0x08, 0x23, 0x68, 0xcd, 0x73, 0x08, 0x86, 0xfb, 0x55, 0xcf, 0xf9, 0x2f, 0x9c, 0x33, 0x75,
- 0xbf, 0x4e, 0x82, 0x94, 0x3f, 0xe1, 0x9c, 0x3f, 0xd0, 0x47, 0x5c, 0x2d, 0x84, 0xcc, 0x1e, 0x71,
- 0xce, 0xb1, 0x59, 0x06, 0x89, 0x77, 0x4b, 0x92, 0x9c, 0x19, 0xe9, 0xcd, 0xbf, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xdc, 0xaf, 0xad, 0x8c, 0x39, 0x03, 0x00, 0x00,
+ // 450 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x4f, 0x6f, 0xd3, 0x30,
+ 0x18, 0xc6, 0x97, 0xfe, 0x59, 0x97, 0x37, 0xfd, 0x13, 0xf9, 0x80, 0xa2, 0xa2, 0xa1, 0xb0, 0x53,
+ 0x4f, 0xb1, 0x54, 0xc4, 0x81, 0x1b, 0x4d, 0x3b, 0x41, 0x04, 0xaa, 0x98, 0x0b, 0x93, 0xe0, 0x32,
+ 0xa5, 0x89, 0x97, 0x79, 0xd3, 0xe2, 0x60, 0xbb, 0x48, 0xfd, 0xa8, 0x7c, 0x1b, 0x64, 0x27, 0x69,
+ 0x53, 0xda, 0xc3, 0x2e, 0x91, 0xfd, 0xbc, 0xcf, 0xf3, 0xcb, 0x2b, 0xdb, 0x2f, 0xbc, 0xba, 0xa7,
+ 0xb1, 0x54, 0x38, 0xe1, 0x82, 0xe2, 0x95, 0xe2, 0x82, 0x06, 0x85, 0xe0, 0x8a, 0x23, 0x30, 0x7a,
+ 0xa0, 0xf5, 0xab, 0xbf, 0x5d, 0xe8, 0x9a, 0x1a, 0x42, 0xd0, 0xc9, 0xe3, 0x67, 0xea, 0x59, 0xbe,
+ 0x35, 0xb1, 0x89, 0x59, 0x23, 0x0c, 0x1d, 0xb5, 0x2d, 0xa8, 0xd7, 0xf2, 0xad, 0xc9, 0x70, 0xfa,
+ 0x3a, 0xd8, 0x07, 0x83, 0x12, 0x68, 0xbe, 0xdf, 0xb7, 0x05, 0x25, 0xc6, 0x88, 0x16, 0x30, 0x90,
+ 0x9b, 0xb5, 0x4c, 0x04, 0x2b, 0x14, 0xe3, 0xb9, 0xf4, 0x3a, 0x7e, 0x7b, 0xe2, 0x4c, 0xdf, 0x9c,
+ 0x48, 0x36, 0x6c, 0xe4, 0x30, 0x84, 0x42, 0xe8, 0x0b, 0x9a, 0x32, 0x79, 0x97, 0xf0, 0xfc, 0x9e,
+ 0x65, 0x9e, 0xe3, 0x5b, 0x13, 0x67, 0x7a, 0x79, 0x0c, 0x21, 0xda, 0x35, 0x37, 0xa6, 0xcf, 0x67,
+ 0xc4, 0x11, 0xfb, 0x2d, 0xfa, 0x02, 0xa3, 0x35, 0xcb, 0x7e, 0x6f, 0xa8, 0xd8, 0xd6, 0x98, 0xbe,
+ 0xc1, 0xf8, 0xc7, 0x98, 0x90, 0x65, 0x37, 0xda, 0xb8, 0x23, 0x0d, 0xeb, 0x68, 0x05, 0x5b, 0x82,
+ 0x9b, 0xc4, 0x52, 0xc6, 0x79, 0x2a, 0xe2, 0x9a, 0x36, 0x30, 0xb4, 0xb7, 0xc7, 0xb4, 0x79, 0xed,
+ 0xdc, 0xe1, 0x46, 0xc9, 0xa1, 0x34, 0x7e, 0x0f, 0x4e, 0xa3, 0x75, 0x7d, 0xf4, 0x0f, 0x5c, 0xaa,
+ 0xfa, 0xe8, 0xf5, 0x5a, 0x6b, 0x05, 0x17, 0xca, 0x1c, 0x7d, 0x97, 0x98, 0xf5, 0x78, 0x09, 0xc3,
+ 0xc3, 0x56, 0xd1, 0x25, 0x40, 0x21, 0xf8, 0x23, 0x4d, 0xd4, 0x1d, 0x4b, 0xab, 0xbc, 0x5d, 0x29,
+ 0x51, 0xaa, 0xcb, 0x69, 0xac, 0x62, 0x49, 0x4d, 0xb9, 0x55, 0x96, 0x2b, 0x25, 0x4a, 0xc7, 0x1f,
+ 0x60, 0xf4, 0x5f, 0xb3, 0x2f, 0x6e, 0xe5, 0x16, 0xfa, 0xcd, 0x1b, 0x44, 0x1e, 0xf4, 0xaa, 0xdf,
+ 0x7a, 0x6d, 0x13, 0xad, 0xb7, 0x27, 0xdf, 0x95, 0x07, 0xbd, 0x3f, 0x54, 0x48, 0xc6, 0xf3, 0xaa,
+ 0xa9, 0x7a, 0x7b, 0xf5, 0x11, 0xec, 0xdd, 0x9b, 0x42, 0x0e, 0xf4, 0xa2, 0xe5, 0xed, 0xec, 0x6b,
+ 0xb4, 0x70, 0xcf, 0x90, 0x0d, 0x5d, 0x72, 0xbd, 0x88, 0x56, 0xae, 0x85, 0xfa, 0x70, 0x11, 0x46,
+ 0x9f, 0x6e, 0x7e, 0x5c, 0x93, 0x9f, 0x6e, 0x0b, 0x0d, 0xc0, 0x9e, 0xcf, 0x56, 0xab, 0xd9, 0x72,
+ 0x41, 0x66, 0x6e, 0x3b, 0xbc, 0x80, 0xf3, 0xf2, 0x86, 0xc2, 0x08, 0x1a, 0x2f, 0x3d, 0x04, 0xc3,
+ 0xfd, 0xa6, 0x27, 0xe0, 0x17, 0xce, 0x98, 0x7a, 0xd8, 0xac, 0x83, 0x84, 0x3f, 0xe3, 0x8c, 0x3f,
+ 0xd2, 0x27, 0x5c, 0x8e, 0x8a, 0x4c, 0x9f, 0x70, 0xc6, 0xb1, 0x19, 0x13, 0x89, 0xf7, 0xe3, 0xb3,
+ 0x3e, 0x37, 0xd2, 0xbb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x56, 0xfe, 0x58, 0x14, 0x53, 0x03,
+ 0x00, 0x00,
}
diff --git a/sdk/go/protos/feast/serving/ServingService.pb.go b/sdk/go/protos/feast/serving/ServingService.pb.go
index 49c730ad3ca..41c642d9f8b 100644
--- a/sdk/go/protos/feast/serving/ServingService.pb.go
+++ b/sdk/go/protos/feast/serving/ServingService.pb.go
@@ -231,13 +231,13 @@ func (m *GetFeastServingInfoResponse) GetJobStagingLocation() string {
return ""
}
-type FeatureSetRequest struct {
- // Feature set name
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- // Feature set version
- Version int32 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
- // Features that should be retrieved from this feature set
- FeatureNames []string `protobuf:"bytes,3,rep,name=feature_names,json=featureNames,proto3" json:"feature_names,omitempty"`
+type FeatureReference struct {
+ // Project name
+ Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
+ // Feature name
+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+ // Feature version
+ Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"`
// The features will be retrieved if:
// entity_timestamp - max_age <= event_timestamp <= entity_timestamp
//
@@ -249,53 +249,53 @@ type FeatureSetRequest struct {
XXX_sizecache int32 `json:"-"`
}
-func (m *FeatureSetRequest) Reset() { *m = FeatureSetRequest{} }
-func (m *FeatureSetRequest) String() string { return proto.CompactTextString(m) }
-func (*FeatureSetRequest) ProtoMessage() {}
-func (*FeatureSetRequest) Descriptor() ([]byte, []int) {
+func (m *FeatureReference) Reset() { *m = FeatureReference{} }
+func (m *FeatureReference) String() string { return proto.CompactTextString(m) }
+func (*FeatureReference) ProtoMessage() {}
+func (*FeatureReference) Descriptor() ([]byte, []int) {
return fileDescriptor_0c1ba93cf29a8d9d, []int{2}
}
-func (m *FeatureSetRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_FeatureSetRequest.Unmarshal(m, b)
+func (m *FeatureReference) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FeatureReference.Unmarshal(m, b)
}
-func (m *FeatureSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_FeatureSetRequest.Marshal(b, m, deterministic)
+func (m *FeatureReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FeatureReference.Marshal(b, m, deterministic)
}
-func (m *FeatureSetRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_FeatureSetRequest.Merge(m, src)
+func (m *FeatureReference) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FeatureReference.Merge(m, src)
}
-func (m *FeatureSetRequest) XXX_Size() int {
- return xxx_messageInfo_FeatureSetRequest.Size(m)
+func (m *FeatureReference) XXX_Size() int {
+ return xxx_messageInfo_FeatureReference.Size(m)
}
-func (m *FeatureSetRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_FeatureSetRequest.DiscardUnknown(m)
+func (m *FeatureReference) XXX_DiscardUnknown() {
+ xxx_messageInfo_FeatureReference.DiscardUnknown(m)
}
-var xxx_messageInfo_FeatureSetRequest proto.InternalMessageInfo
+var xxx_messageInfo_FeatureReference proto.InternalMessageInfo
-func (m *FeatureSetRequest) GetName() string {
+func (m *FeatureReference) GetProject() string {
if m != nil {
- return m.Name
+ return m.Project
}
return ""
}
-func (m *FeatureSetRequest) GetVersion() int32 {
+func (m *FeatureReference) GetName() string {
if m != nil {
- return m.Version
+ return m.Name
}
- return 0
+ return ""
}
-func (m *FeatureSetRequest) GetFeatureNames() []string {
+func (m *FeatureReference) GetVersion() int32 {
if m != nil {
- return m.FeatureNames
+ return m.Version
}
- return nil
+ return 0
}
-func (m *FeatureSetRequest) GetMaxAge() *duration.Duration {
+func (m *FeatureReference) GetMaxAge() *duration.Duration {
if m != nil {
return m.MaxAge
}
@@ -303,8 +303,8 @@ func (m *FeatureSetRequest) GetMaxAge() *duration.Duration {
}
type GetOnlineFeaturesRequest struct {
- // List of feature sets and their features that are being retrieved
- FeatureSets []*FeatureSetRequest `protobuf:"bytes,1,rep,name=feature_sets,json=featureSets,proto3" json:"feature_sets,omitempty"`
+ // List of features that are being retrieved
+ Features []*FeatureReference `protobuf:"bytes,4,rep,name=features,proto3" json:"features,omitempty"`
// List of entity rows, containing entity id and timestamp data.
// Used during retrieval of feature rows and for joining feature
// rows into a final dataset
@@ -342,9 +342,9 @@ func (m *GetOnlineFeaturesRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_GetOnlineFeaturesRequest proto.InternalMessageInfo
-func (m *GetOnlineFeaturesRequest) GetFeatureSets() []*FeatureSetRequest {
+func (m *GetOnlineFeaturesRequest) GetFeatures() []*FeatureReference {
if m != nil {
- return m.FeatureSets
+ return m.Features
}
return nil
}
@@ -414,8 +414,8 @@ func (m *GetOnlineFeaturesRequest_EntityRow) GetFields() map[string]*types.Value
}
type GetBatchFeaturesRequest struct {
- // List of feature sets and their features that are being retrieved.
- FeatureSets []*FeatureSetRequest `protobuf:"bytes,1,rep,name=feature_sets,json=featureSets,proto3" json:"feature_sets,omitempty"`
+ // List of features that are being retrieved
+ Features []*FeatureReference `protobuf:"bytes,4,rep,name=features,proto3" json:"features,omitempty"`
// Source of the entity dataset containing the timestamps and entity keys to retrieve
// features for.
DatasetSource *DatasetSource `protobuf:"bytes,2,opt,name=dataset_source,json=datasetSource,proto3" json:"dataset_source,omitempty"`
@@ -449,9 +449,9 @@ func (m *GetBatchFeaturesRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_GetBatchFeaturesRequest proto.InternalMessageInfo
-func (m *GetBatchFeaturesRequest) GetFeatureSets() []*FeatureSetRequest {
+func (m *GetBatchFeaturesRequest) GetFeatures() []*FeatureReference {
if m != nil {
- return m.FeatureSets
+ return m.Features
}
return nil
}
@@ -870,7 +870,7 @@ func init() {
proto.RegisterEnum("feast.serving.DataFormat", DataFormat_name, DataFormat_value)
proto.RegisterType((*GetFeastServingInfoRequest)(nil), "feast.serving.GetFeastServingInfoRequest")
proto.RegisterType((*GetFeastServingInfoResponse)(nil), "feast.serving.GetFeastServingInfoResponse")
- proto.RegisterType((*FeatureSetRequest)(nil), "feast.serving.FeatureSetRequest")
+ proto.RegisterType((*FeatureReference)(nil), "feast.serving.FeatureReference")
proto.RegisterType((*GetOnlineFeaturesRequest)(nil), "feast.serving.GetOnlineFeaturesRequest")
proto.RegisterType((*GetOnlineFeaturesRequest_EntityRow)(nil), "feast.serving.GetOnlineFeaturesRequest.EntityRow")
proto.RegisterMapType((map[string]*types.Value)(nil), "feast.serving.GetOnlineFeaturesRequest.EntityRow.FieldsEntry")
@@ -889,77 +889,76 @@ func init() {
func init() { proto.RegisterFile("feast/serving/ServingService.proto", fileDescriptor_0c1ba93cf29a8d9d) }
var fileDescriptor_0c1ba93cf29a8d9d = []byte{
- // 1105 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x73, 0xda, 0x46,
- 0x14, 0x8f, 0xc0, 0xc6, 0xe1, 0x11, 0x63, 0x79, 0xed, 0xda, 0xb2, 0xe2, 0x24, 0x0c, 0xed, 0xd4,
- 0x94, 0x83, 0x68, 0x49, 0x9b, 0x69, 0xd3, 0xe9, 0x4c, 0xc0, 0x08, 0x82, 0xc7, 0x11, 0x9e, 0x05,
- 0x3b, 0x6d, 0x2f, 0x1a, 0x01, 0x0b, 0x96, 0x0d, 0x5a, 0x57, 0xbb, 0x38, 0xf1, 0xd7, 0xe8, 0xb1,
- 0x87, 0x5e, 0x7a, 0xee, 0xb5, 0x9f, 0xa4, 0x9f, 0xa0, 0xb7, 0x7e, 0x83, 0x1e, 0x3b, 0x5a, 0xad,
- 0x30, 0xff, 0x9c, 0xd8, 0x9d, 0x69, 0x4e, 0xda, 0x7d, 0xef, 0xf7, 0xfe, 0xee, 0x7b, 0x4f, 0x0f,
- 0xb2, 0x3d, 0xe2, 0x30, 0x5e, 0x60, 0xc4, 0xbf, 0x74, 0xbd, 0x7e, 0xa1, 0x19, 0x7e, 0xc5, 0xa7,
- 0x43, 0x8c, 0x0b, 0x9f, 0x72, 0x8a, 0x56, 0x05, 0xc6, 0x90, 0x18, 0xfd, 0x49, 0x9f, 0xd2, 0xfe,
- 0x80, 0x14, 0x04, 0xb3, 0x3d, 0xea, 0x15, 0xb8, 0x3b, 0x24, 0x8c, 0x3b, 0xc3, 0x8b, 0x10, 0xaf,
- 0x3f, 0x9e, 0x05, 0x74, 0x47, 0xbe, 0xc3, 0x5d, 0xea, 0x49, 0xfe, 0x76, 0x68, 0x93, 0x5f, 0x5d,
- 0x10, 0x56, 0x38, 0x71, 0x06, 0x23, 0x69, 0x28, 0xbb, 0x0b, 0x7a, 0x8d, 0xf0, 0x6a, 0xc0, 0x95,
- 0x8e, 0xd4, 0xbd, 0x1e, 0xc5, 0xe4, 0xa7, 0x11, 0x61, 0x3c, 0xfb, 0xab, 0x02, 0x0f, 0x17, 0xb2,
- 0xd9, 0x05, 0xf5, 0x18, 0x41, 0x1a, 0xac, 0x5c, 0x12, 0x9f, 0xb9, 0xd4, 0xd3, 0x94, 0x8c, 0x92,
- 0x4b, 0xe2, 0xe8, 0x8a, 0x9e, 0xc2, 0x52, 0x60, 0x4c, 0x8b, 0x65, 0x94, 0x5c, 0xba, 0xf8, 0xc4,
- 0x98, 0x8a, 0xc7, 0x98, 0x54, 0xd8, 0xba, 0xba, 0x20, 0x58, 0x80, 0xd1, 0xe7, 0xb0, 0x79, 0x46,
- 0xdb, 0x36, 0xe3, 0x4e, 0xdf, 0xf5, 0xfa, 0xf6, 0x80, 0x76, 0x44, 0x0c, 0x1a, 0x08, 0xdd, 0xe8,
- 0x8c, 0xb6, 0x9b, 0x21, 0xeb, 0x50, 0x72, 0xb2, 0xbf, 0x28, 0xb0, 0x5e, 0x25, 0x0e, 0x1f, 0xf9,
- 0xa4, 0x49, 0xb8, 0x74, 0x1b, 0x21, 0x58, 0xf2, 0x9c, 0x21, 0x91, 0x3e, 0x89, 0xf3, 0xa4, 0xab,
- 0x81, 0x4f, 0xcb, 0xd7, 0xae, 0x7e, 0x0c, 0x41, 0xb6, 0x03, 0x15, 0x76, 0x80, 0x64, 0x5a, 0x3c,
- 0x13, 0xcf, 0x25, 0xf1, 0x03, 0x49, 0xb4, 0x02, 0x1a, 0x2a, 0xc2, 0xca, 0xd0, 0x79, 0x6b, 0x3b,
- 0x7d, 0xa2, 0x2d, 0x65, 0x94, 0x5c, 0xaa, 0xb8, 0x63, 0x84, 0x29, 0x37, 0xa2, 0x94, 0x1b, 0x15,
- 0x99, 0x72, 0x9c, 0x18, 0x3a, 0x6f, 0x4b, 0x7d, 0x92, 0xfd, 0x3b, 0x0e, 0x5a, 0x8d, 0xf0, 0x86,
- 0x37, 0x70, 0x3d, 0x22, 0xbd, 0x64, 0x91, 0x8f, 0xfb, 0x10, 0x19, 0xb0, 0x19, 0xe1, 0x4c, 0x53,
- 0x32, 0xf1, 0x5c, 0xaa, 0x98, 0x99, 0x4f, 0xd4, 0x74, 0x6c, 0x38, 0xd5, 0x1b, 0x93, 0x18, 0xc2,
- 0x90, 0x22, 0x1e, 0x77, 0xf9, 0x95, 0xed, 0xd3, 0x37, 0x4c, 0x8b, 0x09, 0x1d, 0x5f, 0xcc, 0xe8,
- 0xb8, 0xc9, 0x05, 0xc3, 0x14, 0xa2, 0x98, 0xbe, 0xc1, 0x40, 0xa2, 0x23, 0x43, 0xdf, 0xc0, 0x0e,
- 0x1d, 0xba, 0xdc, 0x16, 0x24, 0x97, 0x30, 0xdb, 0xf5, 0x6c, 0x5f, 0x3e, 0xb8, 0x16, 0xcf, 0x28,
- 0xb9, 0xfb, 0x78, 0x2b, 0x00, 0x98, 0x92, 0x5f, 0xf7, 0xa2, 0x72, 0xd0, 0xff, 0x51, 0x20, 0x39,
- 0x56, 0x8a, 0x4c, 0x50, 0xa5, 0x73, 0xe3, 0x6a, 0x15, 0x2f, 0x92, 0x2a, 0xea, 0x73, 0xb9, 0x6b,
- 0x45, 0x08, 0xbc, 0x16, 0xca, 0x8c, 0x09, 0xe8, 0x18, 0x12, 0x3d, 0x97, 0x0c, 0xba, 0x51, 0x78,
- 0xdf, 0xdd, 0x39, 0x3c, 0xa3, 0x2a, 0xe4, 0x4d, 0x8f, 0xfb, 0x57, 0x58, 0x2a, 0xd3, 0x5f, 0x41,
- 0x6a, 0x82, 0x8c, 0x54, 0x88, 0x9f, 0x93, 0x2b, 0x59, 0x31, 0xc1, 0x11, 0xe5, 0x60, 0xf9, 0x32,
- 0x68, 0x14, 0x51, 0x2e, 0xa9, 0x22, 0x92, 0x66, 0x45, 0x0b, 0x19, 0xa2, 0x85, 0x70, 0x08, 0x78,
- 0x1e, 0xfb, 0x5a, 0xc9, 0xfe, 0xa6, 0xc0, 0x76, 0x8d, 0xf0, 0xb2, 0xc3, 0x3b, 0xa7, 0xff, 0xcb,
- 0x53, 0xef, 0x43, 0xba, 0xeb, 0x70, 0x87, 0x11, 0x6e, 0x33, 0x3a, 0xf2, 0x3b, 0x91, 0x5f, 0xbb,
- 0x33, 0x6a, 0x2a, 0x21, 0xa8, 0x29, 0x30, 0x78, 0xb5, 0x3b, 0x79, 0xcd, 0xfe, 0x1e, 0x83, 0x9d,
- 0x05, 0xf9, 0x92, 0xdd, 0xfc, 0x1a, 0x1e, 0x88, 0xe4, 0xd8, 0x22, 0xac, 0xc8, 0xcf, 0x2f, 0xdf,
- 0x9f, 0xef, 0x50, 0x3e, 0x4c, 0xb3, 0xc8, 0x0c, 0xc3, 0xa9, 0xde, 0xf5, 0x45, 0xff, 0x43, 0x91,
- 0xc9, 0x0e, 0xef, 0xe8, 0xfb, 0xf1, 0x93, 0x86, 0x26, 0x5e, 0xfc, 0x17, 0x13, 0x1f, 0xe2, 0x55,
- 0x5f, 0x88, 0x06, 0x9e, 0x79, 0x54, 0x99, 0xad, 0x4f, 0x20, 0x7e, 0x46, 0xdb, 0xb2, 0xa2, 0xd1,
- 0x4c, 0x04, 0x07, 0xb4, 0x8d, 0x03, 0x76, 0xf6, 0x2b, 0x58, 0xad, 0x11, 0x1e, 0x5c, 0x65, 0x31,
- 0xdc, 0x4e, 0xec, 0x19, 0xa4, 0x23, 0xb1, 0x3b, 0x99, 0xfb, 0x4b, 0x81, 0xf8, 0x01, 0x6d, 0xa3,
- 0x34, 0xc4, 0xdc, 0xae, 0x8c, 0x3b, 0xe6, 0x76, 0x51, 0x7e, 0x6a, 0x1c, 0x6f, 0xcd, 0x8b, 0x4f,
- 0x4d, 0xe1, 0x04, 0xe3, 0x0e, 0x1f, 0x31, 0xd1, 0xed, 0xe9, 0xa2, 0x36, 0x8f, 0x6e, 0x0a, 0x3e,
- 0x96, 0x38, 0xb4, 0x09, 0xcb, 0xc4, 0xf7, 0xa9, 0x2f, 0x46, 0x63, 0x12, 0x87, 0x17, 0xf4, 0x10,
- 0x92, 0x3d, 0x77, 0x40, 0xec, 0x91, 0xef, 0x32, 0x6d, 0x59, 0xcc, 0xd4, 0xfb, 0x01, 0xe1, 0xd8,
- 0x77, 0x19, 0x7a, 0x0e, 0xa9, 0xa0, 0x34, 0xed, 0x1e, 0xf5, 0x87, 0x0e, 0xd7, 0x12, 0xc2, 0xd2,
- 0xce, 0x82, 0x5a, 0xae, 0x0a, 0x00, 0x86, 0xee, 0xf8, 0x9c, 0xfd, 0x53, 0x81, 0xd5, 0xa9, 0x32,
- 0x47, 0x07, 0x90, 0x12, 0xa6, 0x64, 0x67, 0x84, 0x49, 0xda, 0x7b, 0x57, 0x67, 0x18, 0x55, 0x77,
- 0x40, 0xc2, 0xe3, 0xcb, 0x7b, 0x18, 0x7a, 0xe3, 0x9b, 0x4e, 0x00, 0xae, 0x79, 0xd3, 0x41, 0x28,
- 0xef, 0x0e, 0x22, 0x76, 0x87, 0x20, 0xca, 0xea, 0x6c, 0x3f, 0xe7, 0x29, 0xa8, 0xb3, 0xff, 0x45,
- 0xf4, 0x18, 0xf4, 0xaa, 0x59, 0x6a, 0xb6, 0xec, 0xa6, 0x89, 0x4f, 0xea, 0x56, 0xcd, 0x6e, 0xfd,
- 0x70, 0x64, 0xda, 0x75, 0xeb, 0xa4, 0x74, 0x58, 0xaf, 0xa8, 0xf7, 0xd0, 0x23, 0xd8, 0x59, 0xc0,
- 0x6f, 0x58, 0x87, 0x75, 0xcb, 0x54, 0x15, 0xb4, 0x0b, 0xda, 0x02, 0x76, 0xb9, 0xd4, 0xda, 0x7f,
- 0xa9, 0xc6, 0xf2, 0xcf, 0x60, 0x45, 0xbe, 0x3c, 0xda, 0x04, 0xf5, 0xa0, 0x51, 0x9e, 0xd5, 0xfe,
- 0x11, 0xac, 0x8f, 0xa9, 0x95, 0xc6, 0x6b, 0xeb, 0xb0, 0x51, 0xaa, 0xa8, 0x4a, 0xfe, 0x14, 0x92,
- 0xe3, 0x1a, 0x40, 0x5b, 0x80, 0x02, 0x4c, 0xb3, 0x55, 0x6a, 0x1d, 0x37, 0x27, 0x64, 0xa7, 0xe9,
- 0x47, 0xa6, 0x55, 0xa9, 0x5b, 0x35, 0x55, 0x99, 0xa1, 0xe3, 0x63, 0xcb, 0x0a, 0xe8, 0x31, 0xb4,
- 0x01, 0x6b, 0x13, 0xf4, 0x4a, 0xc3, 0x32, 0xd5, 0x78, 0xfe, 0x5b, 0x80, 0xeb, 0xf4, 0xa1, 0x6d,
- 0xd8, 0xa8, 0x94, 0x5a, 0x25, 0xbb, 0xda, 0xc0, 0xaf, 0x4a, 0xad, 0x09, 0x5b, 0x9b, 0xa0, 0x4e,
- 0x32, 0x4a, 0x27, 0xb8, 0xa1, 0x2a, 0xc5, 0x9f, 0xe3, 0x90, 0x9e, 0x5e, 0xae, 0xd0, 0x00, 0x36,
- 0x16, 0xac, 0x33, 0xe8, 0xb3, 0xf9, 0xf9, 0x73, 0xc3, 0x46, 0xa4, 0xe7, 0x6f, 0x03, 0x95, 0x2d,
- 0xdb, 0x83, 0xf5, 0xb9, 0x49, 0x86, 0xf6, 0x6e, 0xf9, 0xfb, 0xd2, 0x73, 0xb7, 0x1d, 0x8a, 0xa8,
- 0x03, 0xea, 0xec, 0x94, 0x42, 0x9f, 0xce, 0x4b, 0x2f, 0xfa, 0x37, 0xe9, 0x7b, 0xef, 0xc5, 0x49,
- 0x23, 0x26, 0x24, 0xc2, 0x89, 0x84, 0x76, 0xe7, 0x45, 0xae, 0xe7, 0x9b, 0xfe, 0xe8, 0x06, 0x6e,
- 0xa8, 0xa6, 0xdc, 0x82, 0xe9, 0xd5, 0xb6, 0xbc, 0x26, 0x33, 0x57, 0x3a, 0xaa, 0x1f, 0x05, 0xdb,
- 0xc0, 0x8f, 0xc5, 0xbe, 0xcb, 0x4f, 0x47, 0x6d, 0xa3, 0x43, 0x87, 0x85, 0x3e, 0x3d, 0x23, 0xe7,
- 0x05, 0xb9, 0x2f, 0x77, 0xcf, 0x0b, 0x7d, 0x1a, 0x6e, 0xb8, 0xac, 0x30, 0xb5, 0x43, 0xb7, 0x13,
- 0x82, 0xfa, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xc6, 0xa7, 0xc9, 0x5b, 0x0b, 0x00,
- 0x00,
+ // 1097 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x51, 0x73, 0xda, 0x46,
+ 0x10, 0x8e, 0xc0, 0xc6, 0x66, 0xa9, 0xb1, 0x72, 0x76, 0x6d, 0x59, 0x71, 0x12, 0x86, 0xe9, 0xd4,
+ 0x94, 0x07, 0xd1, 0x92, 0x36, 0xd3, 0x26, 0xd3, 0x99, 0x40, 0x10, 0x04, 0x8f, 0x03, 0x9e, 0x03,
+ 0x3b, 0x6d, 0x5f, 0x34, 0x02, 0x4e, 0x58, 0x36, 0xe8, 0xa8, 0xee, 0x70, 0xe2, 0x3f, 0xd1, 0x87,
+ 0xbe, 0x76, 0xa6, 0xff, 0xa0, 0xaf, 0xfd, 0x25, 0xfd, 0x03, 0xed, 0xaf, 0xe8, 0x63, 0x47, 0xa7,
+ 0x03, 0x23, 0xc0, 0x89, 0xdd, 0xe9, 0xf4, 0x49, 0x77, 0xbb, 0xdf, 0xde, 0xde, 0x7e, 0xb7, 0xbb,
+ 0x5a, 0xc8, 0x3a, 0xc4, 0x66, 0xbc, 0xc0, 0x88, 0x7f, 0xe9, 0x7a, 0xfd, 0x42, 0x2b, 0xfc, 0x8a,
+ 0x4f, 0x97, 0x18, 0x23, 0x9f, 0x72, 0x8a, 0x36, 0x04, 0xc6, 0x90, 0x18, 0xfd, 0x71, 0x9f, 0xd2,
+ 0xfe, 0x80, 0x14, 0x84, 0xb2, 0x33, 0x76, 0x0a, 0xdc, 0x1d, 0x12, 0xc6, 0xed, 0xe1, 0x28, 0xc4,
+ 0xeb, 0x8f, 0xe6, 0x01, 0xbd, 0xb1, 0x6f, 0x73, 0x97, 0x7a, 0x52, 0xbf, 0x1b, 0xfa, 0xe4, 0x57,
+ 0x23, 0xc2, 0x0a, 0xa7, 0xf6, 0x60, 0x2c, 0x1d, 0x65, 0xf7, 0x41, 0xaf, 0x11, 0x5e, 0x0d, 0xb4,
+ 0xf2, 0x22, 0x75, 0xcf, 0xa1, 0x98, 0xfc, 0x38, 0x26, 0x8c, 0x67, 0x7f, 0x55, 0xe0, 0xc1, 0x52,
+ 0x35, 0x1b, 0x51, 0x8f, 0x11, 0xa4, 0xc1, 0xda, 0x25, 0xf1, 0x99, 0x4b, 0x3d, 0x4d, 0xc9, 0x28,
+ 0xb9, 0x24, 0x9e, 0x6c, 0xd1, 0x13, 0x58, 0x09, 0x9c, 0x69, 0xb1, 0x8c, 0x92, 0x4b, 0x17, 0x1f,
+ 0x1b, 0x91, 0x78, 0x8c, 0xd9, 0x03, 0xdb, 0x57, 0x23, 0x82, 0x05, 0x18, 0x7d, 0x0e, 0xdb, 0xe7,
+ 0xb4, 0x63, 0x31, 0x6e, 0xf7, 0x5d, 0xaf, 0x6f, 0x0d, 0x68, 0x57, 0xc4, 0xa0, 0x81, 0x38, 0x1b,
+ 0x9d, 0xd3, 0x4e, 0x2b, 0x54, 0x1d, 0x49, 0x4d, 0xf6, 0x27, 0x05, 0xd4, 0x2a, 0xb1, 0xf9, 0xd8,
+ 0x27, 0x98, 0x38, 0xc4, 0x27, 0x5e, 0x57, 0xdc, 0x6a, 0xe4, 0xd3, 0x73, 0xd2, 0xe5, 0x93, 0x5b,
+ 0xc9, 0x2d, 0x42, 0xb0, 0xe2, 0xd9, 0xc3, 0xf0, 0x56, 0x49, 0x2c, 0xd6, 0xb3, 0x31, 0xc4, 0x33,
+ 0x4a, 0x6e, 0xf5, 0x3a, 0x86, 0x22, 0xac, 0x0d, 0xed, 0x77, 0x96, 0xdd, 0x27, 0xda, 0x4a, 0x46,
+ 0xc9, 0xa5, 0x8a, 0x7b, 0x46, 0x48, 0xb3, 0x31, 0xa1, 0xd9, 0xa8, 0x48, 0x9a, 0x71, 0x62, 0x68,
+ 0xbf, 0x2b, 0xf5, 0x49, 0xf6, 0xcf, 0x38, 0x68, 0x35, 0xc2, 0x9b, 0xde, 0xc0, 0xf5, 0x88, 0xbc,
+ 0x19, 0x93, 0x74, 0xa2, 0xe7, 0xb0, 0xee, 0x48, 0x91, 0xb6, 0x92, 0x89, 0xe7, 0x52, 0xcb, 0x88,
+ 0x89, 0xc4, 0x82, 0xa7, 0x06, 0x08, 0x43, 0x8a, 0x78, 0xdc, 0xe5, 0x57, 0x96, 0x4f, 0xdf, 0x32,
+ 0x2d, 0x26, 0xec, 0xbf, 0x98, 0xb3, 0xbf, 0xc9, 0xb5, 0x61, 0x0a, 0x53, 0x4c, 0xdf, 0x62, 0x20,
+ 0x93, 0x25, 0x43, 0xdf, 0xc0, 0x1e, 0x1d, 0xba, 0xdc, 0x12, 0x22, 0x97, 0x30, 0xcb, 0xf5, 0x2c,
+ 0x5f, 0x3e, 0xae, 0x60, 0x63, 0x1d, 0xef, 0x04, 0x00, 0x53, 0xea, 0xeb, 0xde, 0xe4, 0xe9, 0xf5,
+ 0xbf, 0x15, 0x48, 0x4e, 0x0f, 0x45, 0x26, 0xa8, 0xf2, 0x72, 0xd3, 0xcc, 0x14, 0xdc, 0xa7, 0x8a,
+ 0xfa, 0x02, 0x67, 0xed, 0x09, 0x02, 0x6f, 0x86, 0x36, 0x53, 0x01, 0x3a, 0x81, 0x84, 0xe3, 0x92,
+ 0x41, 0x6f, 0x12, 0xde, 0xb7, 0x77, 0x0e, 0xcf, 0xa8, 0x0a, 0x7b, 0xd3, 0xe3, 0xfe, 0x15, 0x96,
+ 0x87, 0xe9, 0xaf, 0x21, 0x35, 0x23, 0x46, 0x2a, 0xc4, 0x2f, 0xc8, 0x95, 0xcc, 0x8d, 0x60, 0x89,
+ 0x72, 0xb0, 0x7a, 0x19, 0x14, 0x85, 0x48, 0x8c, 0x54, 0x11, 0x49, 0xb7, 0xa2, 0x5c, 0x0c, 0x51,
+ 0x2e, 0x38, 0x04, 0x3c, 0x8b, 0x7d, 0xad, 0x64, 0x7f, 0x51, 0x60, 0xb7, 0x46, 0x78, 0xd9, 0xe6,
+ 0xdd, 0xb3, 0xff, 0xf4, 0x89, 0x5f, 0x42, 0xba, 0x67, 0x73, 0x9b, 0x11, 0x6e, 0x31, 0x3a, 0xf6,
+ 0xbb, 0x93, 0xfb, 0xec, 0xcf, 0x1d, 0x51, 0x09, 0x41, 0x2d, 0x81, 0xc1, 0x1b, 0xbd, 0xd9, 0x6d,
+ 0xf6, 0xb7, 0x18, 0xec, 0x2d, 0xe1, 0x49, 0x56, 0xec, 0x1b, 0xf8, 0x48, 0x90, 0x62, 0x89, 0x70,
+ 0x98, 0xa6, 0x88, 0x3b, 0x7e, 0xf9, 0x61, 0x9e, 0x43, 0xfb, 0x90, 0x5e, 0xc1, 0x08, 0xc3, 0x29,
+ 0xe7, 0x7a, 0xa3, 0xff, 0xae, 0x48, 0x92, 0xc3, 0x3d, 0xfa, 0x6e, 0xfa, 0x94, 0xa1, 0x8b, 0x17,
+ 0xff, 0xc6, 0xc5, 0xff, 0xf1, 0x9a, 0x2f, 0x44, 0xc1, 0xce, 0x3d, 0xa6, 0x64, 0xeb, 0x13, 0x88,
+ 0x9f, 0xd3, 0x8e, 0xcc, 0x64, 0x34, 0x17, 0xc1, 0x21, 0xed, 0xe0, 0x40, 0x9d, 0xfd, 0x0a, 0x36,
+ 0x6a, 0x84, 0x07, 0x5b, 0x99, 0x04, 0xb7, 0x33, 0x7b, 0x0a, 0xe9, 0x89, 0xd9, 0x9d, 0xdc, 0xfd,
+ 0xa5, 0x40, 0xfc, 0x90, 0x76, 0x50, 0x1a, 0x62, 0x6e, 0x4f, 0xc6, 0x1d, 0x73, 0x7b, 0x28, 0x1f,
+ 0x69, 0xb9, 0x3b, 0x8b, 0xe6, 0x91, 0x4e, 0x9b, 0x60, 0xdc, 0xe6, 0x63, 0x26, 0xaa, 0x3c, 0x5d,
+ 0xd4, 0x16, 0xd1, 0x2d, 0xa1, 0xc7, 0x12, 0x87, 0xb6, 0x61, 0x95, 0xf8, 0x3e, 0xf5, 0x45, 0x2b,
+ 0x4c, 0xe2, 0x70, 0x83, 0x1e, 0x40, 0xd2, 0x71, 0x07, 0xc4, 0x1a, 0xfb, 0x2e, 0xd3, 0x56, 0x33,
+ 0xf1, 0x5c, 0x12, 0xaf, 0x07, 0x82, 0x13, 0xdf, 0x65, 0xe8, 0x19, 0xa4, 0x82, 0xd4, 0xb4, 0x1c,
+ 0xea, 0x0f, 0x6d, 0xae, 0x25, 0x84, 0xa7, 0xbd, 0x25, 0xb9, 0x5c, 0x15, 0x00, 0x0c, 0xbd, 0xe9,
+ 0x3a, 0xfb, 0x87, 0x02, 0x1b, 0x91, 0x34, 0x47, 0x87, 0x90, 0x12, 0xae, 0x64, 0x65, 0x84, 0x24,
+ 0x1d, 0xbc, 0xaf, 0x32, 0x8c, 0xaa, 0x3b, 0x20, 0xe1, 0xf2, 0xd5, 0x3d, 0x0c, 0xce, 0x74, 0xa7,
+ 0x13, 0x80, 0x6b, 0x5d, 0x34, 0x08, 0xe5, 0xfd, 0x41, 0xc4, 0xee, 0x10, 0x44, 0x59, 0x9d, 0xaf,
+ 0xe7, 0x3c, 0x15, 0xbf, 0xab, 0xc8, 0xbf, 0x0f, 0x3d, 0x02, 0xbd, 0x6a, 0x96, 0x5a, 0x6d, 0xab,
+ 0x65, 0xe2, 0xd3, 0x7a, 0xa3, 0x66, 0xb5, 0xbf, 0x3f, 0x36, 0xad, 0x7a, 0xe3, 0xb4, 0x74, 0x54,
+ 0xaf, 0xa8, 0xf7, 0xd0, 0x43, 0xd8, 0x5b, 0xa2, 0x6f, 0x36, 0x8e, 0xea, 0x0d, 0x53, 0x55, 0xd0,
+ 0x3e, 0x68, 0x4b, 0xd4, 0xe5, 0x52, 0xfb, 0xe5, 0x2b, 0x35, 0x96, 0x7f, 0x0a, 0x6b, 0xf2, 0xe5,
+ 0xd1, 0x36, 0xa8, 0x87, 0xcd, 0xf2, 0xfc, 0xe9, 0x1f, 0xc3, 0xfd, 0xa9, 0xb4, 0xd2, 0x7c, 0xd3,
+ 0x38, 0x6a, 0x96, 0x2a, 0xaa, 0x92, 0x3f, 0x83, 0xe4, 0x34, 0x07, 0xd0, 0x0e, 0xa0, 0x00, 0xd3,
+ 0x6a, 0x97, 0xda, 0x27, 0xad, 0x19, 0xdb, 0xa8, 0xfc, 0xd8, 0x6c, 0x54, 0xea, 0x8d, 0x9a, 0xaa,
+ 0xcc, 0xc9, 0xf1, 0x49, 0xa3, 0x11, 0xc8, 0x63, 0x68, 0x0b, 0x36, 0x67, 0xe4, 0x95, 0x66, 0xc3,
+ 0x54, 0xe3, 0xf9, 0xe7, 0x00, 0xd7, 0xf4, 0xa1, 0x5d, 0xd8, 0xaa, 0x94, 0xda, 0x25, 0xab, 0xda,
+ 0xc4, 0xaf, 0x4b, 0xed, 0x19, 0x5f, 0xdb, 0xa0, 0xce, 0x2a, 0x4a, 0xa7, 0xb8, 0xa9, 0x2a, 0xc5,
+ 0x9f, 0xe3, 0x90, 0x8e, 0x0e, 0x50, 0x68, 0x00, 0x5b, 0x4b, 0x46, 0x16, 0xf4, 0xd9, 0x62, 0xff,
+ 0xb9, 0x61, 0xea, 0xd1, 0xf3, 0xb7, 0x81, 0xca, 0x92, 0x75, 0xe0, 0xfe, 0x42, 0x27, 0x43, 0x07,
+ 0xb7, 0xfc, 0x6d, 0xe9, 0xb9, 0xdb, 0x36, 0x45, 0xd4, 0x05, 0x75, 0xbe, 0x4b, 0xa1, 0x4f, 0x17,
+ 0xad, 0x97, 0xfd, 0x93, 0xf4, 0x83, 0x0f, 0xe2, 0xa4, 0x13, 0x13, 0x12, 0x61, 0x47, 0x42, 0xfb,
+ 0x8b, 0x26, 0xd7, 0xfd, 0x4d, 0x7f, 0x78, 0x83, 0x36, 0x3c, 0xa6, 0xdc, 0x86, 0xe8, 0xf8, 0x5a,
+ 0xde, 0x94, 0xcc, 0x95, 0x8e, 0xeb, 0xc7, 0xc1, 0x14, 0xf0, 0x43, 0xb1, 0xef, 0xf2, 0xb3, 0x71,
+ 0xc7, 0xe8, 0xd2, 0x61, 0xa1, 0x4f, 0xcf, 0xc9, 0x45, 0x41, 0xce, 0xc4, 0xbd, 0x8b, 0x42, 0x9f,
+ 0x86, 0x53, 0x2c, 0x2b, 0x44, 0xe6, 0xe4, 0x4e, 0x42, 0x48, 0x9f, 0xfc, 0x13, 0x00, 0x00, 0xff,
+ 0xff, 0xb8, 0x72, 0x65, 0xdc, 0x3f, 0x0b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/sdk/go/request.go b/sdk/go/request.go
index 5ffacea2e84..9e97dffb72f 100644
--- a/sdk/go/request.go
+++ b/sdk/go/request.go
@@ -8,23 +8,30 @@ import (
)
var (
- ErrInvalidFeatureName = "invalid feature name %s provided, feature names must be in the format featureSet:version:featureName"
+ ErrInvalidFeatureName = "invalid feature ids %s provided, feature names must be in the format /:"
)
// OnlineFeaturesRequest wrapper on feast.serving.GetOnlineFeaturesRequest.
type OnlineFeaturesRequest struct {
-
- // Features is the list of features to obtain from Feast. Each feature must be given by its fully qualified ID,
- // in the format featureSet:version:featureName.
- Features []string
+ // Features is the list of features to obtain from Feast. Each feature can be given as
+ //
+ // :
+ // /
+ // /:
+ // The only required components are the feature name and project.
+ Features []string
// Entities is the list of entity rows to retrieve features on. Each row is a map of entity name to entity value.
- Entities []Row
+ Entities []Row
+
+ // Project is the default project to use when looking up features. This is only used when a project is not found
+ // within the feature id.
+ Project string
}
// Builds the feast-specified request payload from the wrapper.
func (r OnlineFeaturesRequest) buildRequest() (*serving.GetOnlineFeaturesRequest, error) {
- featureSets, err := buildFeatureSets(r.Features)
+ features, err := buildFeatures(r.Features, r.Project)
if err != nil {
return nil, err
}
@@ -33,55 +40,62 @@ func (r OnlineFeaturesRequest) buildRequest() (*serving.GetOnlineFeaturesRequest
for i := range r.Entities {
entityRows[i] = &serving.GetOnlineFeaturesRequest_EntityRow{
- Fields: r.Entities[i],
+ Fields: r.Entities[i],
}
}
return &serving.GetOnlineFeaturesRequest{
- FeatureSets: featureSets,
- EntityRows: entityRows,
+ Features: features,
+ EntityRows: entityRows,
}, nil
}
-// buildFeatureSets create a slice of FeatureSetRequest object from
-// a slice of "feature_set:version:feature_name" string.
-//
-// It returns an error when "feature_set:version:feature_name" string
-// has an invalid format.
-func buildFeatureSets(features []string) ([]*serving.FeatureSetRequest, error) {
- var requests []*serving.FeatureSetRequest
-
- // Map of "feature_set_name:version" to "FeatureSetRequest" pointer
- // to reference existing FeatureSetRequest, if any.
- fsNameVersionToRequest := make(map[string]*serving.FeatureSetRequest)
-
- for _, feature := range features {
- splits := strings.Split(feature, ":")
- if len(splits) != 3 {
- return nil, fmt.Errorf(ErrInvalidFeatureName, feature)
- }
+// buildFeatures create a slice of FeatureReferences from a slice of "/:"
+// It returns an error when the format is invalid
+func buildFeatures(featureReferences []string, defaultProject string) ([]*serving.FeatureReference, error) {
+ var features []*serving.FeatureReference
- featureSetName, featureSetVersionString, featureName := splits[0], splits[1], splits[2]
- featureSetVersion, err := strconv.Atoi(featureSetVersionString)
- if err != nil {
- return nil, fmt.Errorf(ErrInvalidFeatureName, feature)
+ for _, featureRef := range featureReferences {
+ var project string
+ var name string
+ var version int
+ var featureSplit []string
+
+ projectSplit := strings.Split(featureRef, "/")
+
+ if len(projectSplit) == 2 {
+ project = projectSplit[0]
+ featureSplit = strings.Split(projectSplit[1], ":")
+ } else if len(projectSplit) == 1 {
+ project = defaultProject
+ featureSplit = strings.Split(projectSplit[0], ":")
+ } else {
+ return nil, fmt.Errorf(ErrInvalidFeatureName, featureRef)
}
- fsNameVersion := featureSetName + ":" + featureSetVersionString
- if request, ok := fsNameVersionToRequest[fsNameVersion]; !ok {
- request = &serving.FeatureSetRequest{
- Name: featureSetName,
- Version: int32(featureSetVersion),
- FeatureNames: []string{featureName},
+ if len(featureSplit) == 2 {
+ name = featureSplit[0]
+ v, err := strconv.Atoi(featureSplit[1])
+ if err != nil {
+ return nil, fmt.Errorf(ErrInvalidFeatureName, featureRef)
}
- fsNameVersionToRequest[fsNameVersion] = request
- // Adding FeatureSetRequest in this step ensures the order of
- // FeatureSetRequest in the slice follows the order of feature sets
- // in the "features" argument in buildFeatureSets method.
- requests = append(requests, request)
+ version = v
+ } else if len(featureSplit) == 1 {
+ name = featureSplit[0]
} else {
- request.FeatureNames = append(request.FeatureNames, featureName)
+ return nil, fmt.Errorf(ErrInvalidFeatureName, featureRef)
}
+
+
+ if project == "" || name == "" || version < 0 {
+ return nil, fmt.Errorf(ErrInvalidFeatureName, featureRef)
+ }
+
+ features = append(features, &serving.FeatureReference{
+ Name: name,
+ Version: int32(version),
+ Project: project,
+ })
}
- return requests, nil
-}
\ No newline at end of file
+ return features, nil
+}
diff --git a/sdk/go/request_test.go b/sdk/go/request_test.go
index 3da4fd465b8..2e403f0bd3e 100644
--- a/sdk/go/request_test.go
+++ b/sdk/go/request_test.go
@@ -20,24 +20,40 @@ func TestGetOnlineFeaturesRequest(t *testing.T) {
{
name: "valid",
req: OnlineFeaturesRequest{
- Features: []string{"fs:1:feature1", "fs:1:feature2", "fs:2:feature1"},
+ Features: []string{"my_project_1/feature1:1", "my_project_2/feature1:1", "my_project_4/feature3", "feature2:2", "feature2"},
Entities: []Row{
{"entity1": Int64Val(1), "entity2": StrVal("bob")},
{"entity1": Int64Val(1), "entity2": StrVal("annie")},
{"entity1": Int64Val(1), "entity2": StrVal("jane")},
},
+ Project: "my_project_3",
},
want: &serving.GetOnlineFeaturesRequest{
- FeatureSets: []*serving.FeatureSetRequest{
+ Features: []*serving.FeatureReference{
{
- Name: "fs",
- Version: 1,
- FeatureNames: []string{"feature1", "feature2"},
+ Project: "my_project_1",
+ Name: "feature1",
+ Version: 1,
},
{
- Name: "fs",
- Version: 2,
- FeatureNames: []string{"feature1"},
+ Project: "my_project_2",
+ Name: "feature1",
+ Version: 1,
+ },
+ {
+ Project: "my_project_4",
+ Name: "feature3",
+ Version: 0,
+ },
+ {
+ Project: "my_project_3",
+ Name: "feature2",
+ Version: 2,
+ },
+ {
+ Project: "my_project_3",
+ Name: "feature2",
+ Version: 0,
},
},
EntityRows: []*serving.GetOnlineFeaturesRequest_EntityRow{
@@ -63,38 +79,72 @@ func TestGetOnlineFeaturesRequest(t *testing.T) {
OmitEntitiesInResponse: false,
},
wantErr: false,
- err: nil,
+ err: nil,
+ },
+ {
+ name: "valid_project_in_name",
+ req: OnlineFeaturesRequest{
+ Features: []string{"project/feature1"},
+ Entities: []Row{},
+ },
+ want: &serving.GetOnlineFeaturesRequest{
+ Features: []*serving.FeatureReference{
+ {
+ Project: "project",
+ Name: "feature1",
+ Version: 0,
+ },
+ },
+ EntityRows: []*serving.GetOnlineFeaturesRequest_EntityRow{
+ },
+ OmitEntitiesInResponse: false,
+ },
+ wantErr: false,
+ err: nil,
+ },
+ {
+ name: "no_project",
+ req: OnlineFeaturesRequest{
+ Features: []string{"feature1"},
+ Entities: []Row{},
+ },
+ wantErr: true,
+ err: fmt.Errorf(ErrInvalidFeatureName, "feature1"),
},
{
name: "invalid_feature_name/wrong_format",
req: OnlineFeaturesRequest{
- Features: []string{"fs1:feature1"},
- Entities: []Row{},
+ Features: []string{"fs1:3:feature1"},
+ Entities: []Row{},
+ Project: "my_project",
},
wantErr: true,
- err: fmt.Errorf(ErrInvalidFeatureName, "fs1:feature1"),
+ err: fmt.Errorf(ErrInvalidFeatureName, "fs1:3:feature1"),
},
{
name: "invalid_feature_name/invalid_version",
req: OnlineFeaturesRequest{
- Features: []string{"fs:a:feature1"},
- Entities: []Row{},
+ Features: []string{"project/a:feature1"},
+ Entities: []Row{},
},
wantErr: true,
- err: fmt.Errorf(ErrInvalidFeatureName, "fs:a:feature1"),
+ err: fmt.Errorf(ErrInvalidFeatureName, "project/a:feature1"),
},
}
for _, tc := range tt {
t.Run(tc.name, func(t *testing.T) {
got, err := tc.req.buildRequest()
+
if (err != nil) != tc.wantErr {
t.Errorf("error = %v, wantErr %v", err, tc.wantErr)
return
}
+
if tc.wantErr && err.Error() != tc.err.Error() {
t.Errorf("error = %v, expected err = %v", err, tc.err)
return
}
+
if !cmp.Equal(got, tc.want) {
m := json.Marshaler{}
gotJson, _ := m.MarshalToString(got)
diff --git a/sdk/go/response_test.go b/sdk/go/response_test.go
index 9975457c147..882c1695d59 100644
--- a/sdk/go/response_test.go
+++ b/sdk/go/response_test.go
@@ -13,14 +13,14 @@ RawResponse: &serving.GetOnlineFeaturesResponse{
FieldValues: []*serving.GetOnlineFeaturesResponse_FieldValues{
{
Fields: map[string]*types.Value{
- "fs:1:feature1": Int64Val(1),
- "fs:1:feature2": &types.Value{},
+ "project1/feature1": Int64Val(1),
+ "project1/feature2": &types.Value{},
},
},
{
Fields: map[string]*types.Value{
- "fs:1:feature1": Int64Val(2),
- "fs:1:feature2": Int64Val(2),
+ "project1/feature1": Int64Val(2),
+ "project1/feature2": Int64Val(2),
},
},
},
@@ -30,8 +30,8 @@ RawResponse: &serving.GetOnlineFeaturesResponse{
func TestOnlineFeaturesResponseToRow(t *testing.T) {
actual := response.Rows()
expected := []Row{
- {"fs:1:feature1": Int64Val(1), "fs:1:feature2": &types.Value{}},
- {"fs:1:feature1": Int64Val(2), "fs:1:feature2": Int64Val(2)},
+ {"project1/feature1": Int64Val(1), "project1/feature2": &types.Value{}},
+ {"project1/feature1": Int64Val(2), "project1/feature2": Int64Val(2)},
}
if !cmp.Equal(actual, expected) {
t.Errorf("expected: %v, got: %v", expected, actual)
@@ -53,7 +53,7 @@ func TestOnlineFeaturesResponseToInt64Array(t *testing.T) {
{
name: "valid",
args: args{
- order: []string{"fs:1:feature2", "fs:1:feature1"},
+ order: []string{"project1/feature2", "project1/feature1" },
fillNa: []int64{-1, -1},
},
want: [][]int64{{-1, 1}, {2, 2}},
@@ -72,12 +72,12 @@ func TestOnlineFeaturesResponseToInt64Array(t *testing.T) {
{
name: "length mismatch",
args: args{
- order: []string{"fs:1:feature2", "fs:1:feature3"},
+ order: []string{"project1/feature2", "project1/feature3" },
fillNa: []int64{-1, -1},
},
want: nil,
wantErr: true,
- err: fmt.Errorf(ErrFeatureNotFound, "fs:1:feature3"),
+ err: fmt.Errorf(ErrFeatureNotFound, "project1/feature3"),
},
}
for _, tc := range tt {
diff --git a/sdk/java/pom.xml b/sdk/java/pom.xml
index bd44d5af2cf..2c8b1d837a3 100644
--- a/sdk/java/pom.xml
+++ b/sdk/java/pom.xml
@@ -56,6 +56,12 @@
${junit.version}
test
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
org.junit.jupiter
junit-jupiter-params
@@ -85,6 +91,14 @@
true
+
+ maven-surefire-plugin
+ 2.22.2
+
+
+ maven-failsafe-plugin
+ 2.22.2
+
diff --git a/sdk/java/src/main/java/com/gojek/feast/v1alpha1/FeastClient.java b/sdk/java/src/main/java/com/gojek/feast/v1alpha1/FeastClient.java
index b7a3e78ab13..f4fac8f4c60 100644
--- a/sdk/java/src/main/java/com/gojek/feast/v1alpha1/FeastClient.java
+++ b/sdk/java/src/main/java/com/gojek/feast/v1alpha1/FeastClient.java
@@ -16,7 +16,7 @@
*/
package com.gojek.feast.v1alpha1;
-import feast.serving.ServingAPIProto.FeatureSetRequest;
+import feast.serving.ServingAPIProto.FeatureReference;
import feast.serving.ServingAPIProto.GetFeastServingInfoRequest;
import feast.serving.ServingAPIProto.GetFeastServingInfoResponse;
import feast.serving.ServingAPIProto.GetOnlineFeaturesRequest;
@@ -59,42 +59,46 @@ public GetFeastServingInfoResponse getFeastServingInfo() {
/**
* Get online features from Feast.
*
- * See {@link #getOnlineFeatures(List, List, boolean)}
+ *
See {@link #getOnlineFeatures(List, List, str)}
*
- * @param featureIds list of feature id to retrieve, feature id follows this format
- * [feature_set_name]:[version]:[feature_name]
+ * @param features list of string feature references to retrieve, feature reference follows this format
+ * [project]/[name]:[version]
* @param rows list of {@link Row} to select the entities to retrieve the features for
+ * @param defaultProject {@link String} Default project to find features in if not provided in
+ * feature reference.
* @return list of {@link Row} containing features
*/
- public List getOnlineFeatures(List featureIds, List rows) {
- return getOnlineFeatures(featureIds, rows, false);
+ public List getOnlineFeatures(List features, List rows, String defaultProject) {
+ return getOnlineFeatures(features, rows, defaultProject, false);
}
/**
* Get online features from Feast.
*
- * Example of retrieving online features for driver feature set, version 1, with features
- * driver_id and driver_name
+ *
Example of retrieving online features for the driver project, with features
+ * driver_id and driver_name, both version 1
*
*
{@code
* FeastClient client = FeastClient.create("localhost", 6566);
- * List requestedFeatureIds = Arrays.asList("driver:1:driver_id", "driver:1:driver_name");
+ * List requestedFeatureIds = Arrays.asList("driver/driver_id:1", "driver/driver_name:1");
* List requestedRows =
* Arrays.asList(Row.create().set("driver_id", 123), Row.create().set("driver_id", 456));
* List retrievedFeatures = client.getOnlineFeatures(requestedFeatureIds, requestedRows);
* retrievedFeatures.forEach(System.out::println);
* }
*
- * @param featureIds list of feature id to retrieve, feature id follows this format
- * [feature_set_name]:[version]:[feature_name]
+ * @param featureRefStrings list of feature refs to retrieve, feature refs follow this format
+ * [project]/[name]:[version]
* @param rows list of {@link Row} to select the entities to retrieve the features for
+ * @param defaultProject {@link String} Default project to find features in if not provided in
+ * feature reference.
* @param omitEntitiesInResponse if true, the returned {@link Row} will not contain field and
* value for the entity
* @return list of {@link Row} containing features
*/
public List getOnlineFeatures(
- List featureIds, List rows, boolean omitEntitiesInResponse) {
- List featureSets = RequestUtil.createFeatureSets(featureIds);
+ List featureRefStrings, List rows, String defaultProject, boolean omitEntitiesInResponse) {
+ List features = RequestUtil.createFeatureRefs(featureRefStrings, defaultProject);
List entityRows =
rows.stream()
.map(
@@ -108,7 +112,7 @@ public List getOnlineFeatures(
GetOnlineFeaturesResponse response =
stub.getOnlineFeatures(
GetOnlineFeaturesRequest.newBuilder()
- .addAllFeatureSets(featureSets)
+ .addAllFeatures(features)
.addAllEntityRows(entityRows)
.setOmitEntitiesInResponse(omitEntitiesInResponse)
.build());
diff --git a/sdk/java/src/main/java/com/gojek/feast/v1alpha1/RequestUtil.java b/sdk/java/src/main/java/com/gojek/feast/v1alpha1/RequestUtil.java
index 72fbe289f2f..912a6ea1e27 100644
--- a/sdk/java/src/main/java/com/gojek/feast/v1alpha1/RequestUtil.java
+++ b/sdk/java/src/main/java/com/gojek/feast/v1alpha1/RequestUtil.java
@@ -16,60 +16,73 @@
*/
package com.gojek.feast.v1alpha1;
-import feast.serving.ServingAPIProto.FeatureSetRequest;
+import feast.serving.ServingAPIProto.FeatureReference;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
@SuppressWarnings("WeakerAccess")
public class RequestUtil {
- public static List createFeatureSets(List featureIds) {
- if (featureIds == null) {
- throw new IllegalArgumentException("featureIds cannot be null");
+
+ public static List createFeatureRefs(List featureRefStrings,
+ String defaultProject) {
+ if (featureRefStrings == null) {
+ throw new IllegalArgumentException("featureRefs cannot be null");
}
- // featureSetMap is a map of pair of feature set name and version -> a list of feature names
- Map, List> featureSetMap = new HashMap<>();
+ List featureRefs = new ArrayList<>();
+
+ for (String featureRefString : featureRefStrings) {
+ String project;
+ String name;
+ int version = 0;
+ String[] featureSplit;
+ String[] projectSplit = featureRefString.split("/");
- for (String featureId : featureIds) {
- String[] parts = featureId.split(":");
- if (parts.length < 3) {
+ if (projectSplit.length == 2) {
+ project = projectSplit[0];
+ featureSplit = projectSplit[1].split(":");
+ } else if (projectSplit.length == 1) {
+ project = defaultProject;
+ featureSplit = projectSplit[0].split(":");
+ } else {
throw new IllegalArgumentException(
String.format(
- "Feature id '%s' has invalid format. Expected format: ::.",
- featureId));
+ "Feature id '%s' has invalid format. Expected format: ::.",
+ featureRefString));
}
- String featureSetName = parts[0];
- int featureSetVersion;
- try {
- featureSetVersion = Integer.parseInt(parts[1]);
- } catch (NumberFormatException e) {
+
+ if (featureSplit.length == 2) {
+ name = featureSplit[0];
+ try {
+ version = Integer.parseInt(featureSplit[1]);
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException(
+ String.format(
+ "Feature id '%s' contains invalid version. Expected format: /:.",
+ featureRefString));
+ }
+ } else if (projectSplit.length == 1) {
+ name = featureSplit[0];
+ } else {
throw new IllegalArgumentException(
String.format(
- "Feature id '%s' contains invalid version. Expected format: ::.",
- parts[1]));
+ "Feature id '%s' has invalid format. Expected format: /:.",
+ featureRefString));
}
- Pair key = new ImmutablePair<>(featureSetName, featureSetVersion);
- if (!featureSetMap.containsKey(key)) {
- featureSetMap.put(key, new ArrayList<>());
+ if (project.isEmpty() || name.isEmpty() || version < 0) {
+ throw new IllegalArgumentException(
+ String.format(
+ "Feature id '%s' has invalid format. Expected format: /:.",
+ featureRefString));
}
- String featureName = parts[2];
- featureSetMap.get(key).add(featureName);
+
+ featureRefs.add(
+ FeatureReference.newBuilder().setName(name).setProject(project).setVersion(version)
+ .build());
}
- return featureSetMap.entrySet().stream()
- .map(
- entry ->
- FeatureSetRequest.newBuilder()
- .setName(entry.getKey().getKey())
- .setVersion(entry.getKey().getValue())
- .addAllFeatureNames(entry.getValue())
- .build())
- .collect(Collectors.toList());
+ ; return featureRefs;
+
}
}
diff --git a/sdk/java/src/test/java/com/gojek/feast/v1alpha1/RequestUtilTest.java b/sdk/java/src/test/java/com/gojek/feast/v1alpha1/RequestUtilTest.java
index 5f87ba01535..3af0621bd8c 100644
--- a/sdk/java/src/test/java/com/gojek/feast/v1alpha1/RequestUtilTest.java
+++ b/sdk/java/src/test/java/com/gojek/feast/v1alpha1/RequestUtilTest.java
@@ -20,7 +20,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import com.google.protobuf.TextFormat;
-import feast.serving.ServingAPIProto.FeatureSetRequest;
+import feast.serving.ServingAPIProto.FeatureReference;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
@@ -36,43 +36,56 @@ class RequestUtilTest {
private static Stream provideValidFeatureIds() {
return Stream.of(
Arguments.of(
- Collections.singletonList("driver:1:driver_id"),
+ Collections.singletonList("driver_project/driver_id:1"),
Collections.singletonList(
- FeatureSetRequest.newBuilder()
- .setName("driver")
- .setVersion(1)
- .addFeatureNames("driver_id"))),
+ FeatureReference.newBuilder()
+ .setProject("driver_project")
+ .setName("driver_id")
+ .setVersion(1).build()
+ )
+ ),
Arguments.of(
- Arrays.asList("driver:1:driver_id", "driver:1:driver_name"),
- Collections.singletonList(
- FeatureSetRequest.newBuilder()
- .setName("driver")
+ Arrays.asList("driver_project/driver_id:1", "driver_project/driver_name:1"),
+ Arrays.asList(
+ FeatureReference.newBuilder()
+ .setProject("driver_project")
+ .setName("driver_id")
+ .setVersion(1)
+ .build(),
+ FeatureReference.newBuilder()
+ .setProject("driver_project")
+ .setName("driver_name")
.setVersion(1)
- .addAllFeatureNames(Arrays.asList("driver_id", "driver_name"))
- .build())),
+ .build())
+ ),
Arguments.of(
- Arrays.asList("driver:1:driver_id", "driver:1:driver_name", "booking:2:booking_id"),
+ Arrays.asList("driver_project/driver_id:1", "driver_project/driver_name:1", "booking_project/driver_name:1"),
Arrays.asList(
- FeatureSetRequest.newBuilder()
- .setName("driver")
+ FeatureReference.newBuilder()
+ .setProject("driver_project")
+ .setVersion(1)
+ .setName("driver_id")
+ .build(),
+ FeatureReference.newBuilder()
+ .setProject("driver_project")
.setVersion(1)
- .addAllFeatureNames(Arrays.asList("driver_id", "driver_name"))
+ .setName("driver_name")
.build(),
- FeatureSetRequest.newBuilder()
- .setName("booking")
- .setVersion(2)
- .addFeatureNames("booking_id")
+ FeatureReference.newBuilder()
+ .setProject("booking_project")
+ .setVersion(1)
+ .setName("driver_name")
.build())));
}
@ParameterizedTest
@MethodSource("provideValidFeatureIds")
void createFeatureSets_ShouldReturnFeatureSetsForValidFeatureIds(
- List input, List expected) {
- List actual = RequestUtil.createFeatureSets(input);
+ List input, List expected) {
+ List actual = RequestUtil.createFeatureRefs(input, "my-project");
// Order of the actual and expected featureSets do no not matter
- actual.sort(Comparator.comparing(FeatureSetRequest::getName));
- expected.sort(Comparator.comparing(FeatureSetRequest::getName));
+ actual.sort(Comparator.comparing(FeatureReference::getName));
+ expected.sort(Comparator.comparing(FeatureReference::getName));
assertEquals(expected.size(), actual.size());
for (int i = 0; i < expected.size(); i++) {
String expectedString = TextFormat.printer().printToString(expected.get(i));
@@ -81,23 +94,21 @@ void createFeatureSets_ShouldReturnFeatureSetsForValidFeatureIds(
}
}
- private static Stream provideInvalidFeatureIds() {
+ private static Stream provideInvalidFeatureRefs() {
return Stream.of(
- Arguments.of(Collections.singletonList("feature_set_only")),
- Arguments.of(Collections.singletonList("missing:feature_name")),
- Arguments.of(Collections.singletonList("invalid:version:value")),
+ Arguments.of(Collections.singletonList("missing:bad_version")),
Arguments.of(Collections.singletonList("")));
}
@ParameterizedTest
- @MethodSource("provideInvalidFeatureIds")
- void createFeatureSets_ShouldThrowExceptionForInvalidFeatureIds(List input) {
- assertThrows(IllegalArgumentException.class, () -> RequestUtil.createFeatureSets(input));
+ @MethodSource("provideInvalidFeatureRefs")
+ void createFeatureSets_ShouldThrowExceptionForInvalidFeatureRefs(List input) {
+ assertThrows(IllegalArgumentException.class, () -> RequestUtil.createFeatureRefs(input, "my-project"));
}
@ParameterizedTest
@NullSource
- void createFeatureSets_ShouldThrowExceptionForNullFeatureIds(List input) {
- assertThrows(IllegalArgumentException.class, () -> RequestUtil.createFeatureSets(input));
+ void createFeatureSets_ShouldThrowExceptionForNullFeatureRefs(List input) {
+ assertThrows(IllegalArgumentException.class, () -> RequestUtil.createFeatureRefs(input, "my-project"));
}
}
diff --git a/sdk/python/feast/core/CoreService_pb2.py b/sdk/python/feast/core/CoreService_pb2.py
index 69a5498d879..664e33f7c95 100644
--- a/sdk/python/feast/core/CoreService_pb2.py
+++ b/sdk/python/feast/core/CoreService_pb2.py
@@ -22,7 +22,7 @@
package='feast.core',
syntax='proto3',
serialized_options=_b('\n\nfeast.coreB\020CoreServiceProtoZ/github.com/gojek/feast/sdk/go/protos/feast/core'),
- serialized_pb=_b('\n\x1c\x66\x65\x61st/core/CoreService.proto\x12\nfeast.core\x1a\x1b\x66\x65\x61st/core/FeatureSet.proto\x1a\x16\x66\x65\x61st/core/Store.proto\"5\n\x14GetFeatureSetRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"H\n\x15GetFeatureSetResponse\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\"\x94\x01\n\x16ListFeatureSetsRequest\x12\x39\n\x06\x66ilter\x18\x01 \x01(\x0b\x32).feast.core.ListFeatureSetsRequest.Filter\x1a?\n\x06\x46ilter\x12\x18\n\x10\x66\x65\x61ture_set_name\x18\x01 \x01(\t\x12\x1b\n\x13\x66\x65\x61ture_set_version\x18\x02 \x01(\t\"K\n\x17ListFeatureSetsResponse\x12\x30\n\x0c\x66\x65\x61ture_sets\x18\x01 \x03(\x0b\x32\x1a.feast.core.FeatureSetSpec\"a\n\x11ListStoresRequest\x12\x34\n\x06\x66ilter\x18\x01 \x01(\x0b\x32$.feast.core.ListStoresRequest.Filter\x1a\x16\n\x06\x46ilter\x12\x0c\n\x04name\x18\x01 \x01(\t\"6\n\x12ListStoresResponse\x12 \n\x05store\x18\x01 \x03(\x0b\x32\x11.feast.core.Store\"I\n\x16\x41pplyFeatureSetRequest\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\"\xb7\x01\n\x17\x41pplyFeatureSetResponse\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\x12:\n\x06status\x18\x02 \x01(\x0e\x32*.feast.core.ApplyFeatureSetResponse.Status\"/\n\x06Status\x12\r\n\tNO_CHANGE\x10\x00\x12\x0b\n\x07\x43REATED\x10\x01\x12\t\n\x05\x45RROR\x10\x02\"\x1c\n\x1aGetFeastCoreVersionRequest\".\n\x1bGetFeastCoreVersionResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\"6\n\x12UpdateStoreRequest\x12 \n\x05store\x18\x01 \x01(\x0b\x32\x11.feast.core.Store\"\x95\x01\n\x13UpdateStoreResponse\x12 \n\x05store\x18\x01 \x01(\x0b\x32\x11.feast.core.Store\x12\x36\n\x06status\x18\x02 \x01(\x0e\x32&.feast.core.UpdateStoreResponse.Status\"$\n\x06Status\x12\r\n\tNO_CHANGE\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x32\xa0\x04\n\x0b\x43oreService\x12\x66\n\x13GetFeastCoreVersion\x12&.feast.core.GetFeastCoreVersionRequest\x1a\'.feast.core.GetFeastCoreVersionResponse\x12T\n\rGetFeatureSet\x12 .feast.core.GetFeatureSetRequest\x1a!.feast.core.GetFeatureSetResponse\x12Z\n\x0fListFeatureSets\x12\".feast.core.ListFeatureSetsRequest\x1a#.feast.core.ListFeatureSetsResponse\x12K\n\nListStores\x12\x1d.feast.core.ListStoresRequest\x1a\x1e.feast.core.ListStoresResponse\x12Z\n\x0f\x41pplyFeatureSet\x12\".feast.core.ApplyFeatureSetRequest\x1a#.feast.core.ApplyFeatureSetResponse\x12N\n\x0bUpdateStore\x12\x1e.feast.core.UpdateStoreRequest\x1a\x1f.feast.core.UpdateStoreResponseBO\n\nfeast.coreB\x10\x43oreServiceProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
+ serialized_pb=_b('\n\x1c\x66\x65\x61st/core/CoreService.proto\x12\nfeast.core\x1a\x1b\x66\x65\x61st/core/FeatureSet.proto\x1a\x16\x66\x65\x61st/core/Store.proto\"F\n\x14GetFeatureSetRequest\x12\x0f\n\x07project\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"H\n\x15GetFeatureSetResponse\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\"\xa5\x01\n\x16ListFeatureSetsRequest\x12\x0f\n\x07project\x18\x02 \x01(\t\x12\x39\n\x06\x66ilter\x18\x01 \x01(\x0b\x32).feast.core.ListFeatureSetsRequest.Filter\x1a?\n\x06\x46ilter\x12\x18\n\x10\x66\x65\x61ture_set_name\x18\x01 \x01(\t\x12\x1b\n\x13\x66\x65\x61ture_set_version\x18\x02 \x01(\t\"K\n\x17ListFeatureSetsResponse\x12\x30\n\x0c\x66\x65\x61ture_sets\x18\x01 \x03(\x0b\x32\x1a.feast.core.FeatureSetSpec\"a\n\x11ListStoresRequest\x12\x34\n\x06\x66ilter\x18\x01 \x01(\x0b\x32$.feast.core.ListStoresRequest.Filter\x1a\x16\n\x06\x46ilter\x12\x0c\n\x04name\x18\x01 \x01(\t\"6\n\x12ListStoresResponse\x12 \n\x05store\x18\x01 \x03(\x0b\x32\x11.feast.core.Store\"Z\n\x16\x41pplyFeatureSetRequest\x12\x0f\n\x07project\x18\x02 \x01(\t\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\"\xb7\x01\n\x17\x41pplyFeatureSetResponse\x12/\n\x0b\x66\x65\x61ture_set\x18\x01 \x01(\x0b\x32\x1a.feast.core.FeatureSetSpec\x12:\n\x06status\x18\x02 \x01(\x0e\x32*.feast.core.ApplyFeatureSetResponse.Status\"/\n\x06Status\x12\r\n\tNO_CHANGE\x10\x00\x12\x0b\n\x07\x43REATED\x10\x01\x12\t\n\x05\x45RROR\x10\x02\"\x1c\n\x1aGetFeastCoreVersionRequest\".\n\x1bGetFeastCoreVersionResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\"6\n\x12UpdateStoreRequest\x12 \n\x05store\x18\x01 \x01(\x0b\x32\x11.feast.core.Store\"\x95\x01\n\x13UpdateStoreResponse\x12 \n\x05store\x18\x01 \x01(\x0b\x32\x11.feast.core.Store\x12\x36\n\x06status\x18\x02 \x01(\x0e\x32&.feast.core.UpdateStoreResponse.Status\"$\n\x06Status\x12\r\n\tNO_CHANGE\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"$\n\x14\x43reateProjectRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x17\n\x15\x43reateProjectResponse\"%\n\x15\x41rchiveProjectRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x18\n\x16\x41rchiveProjectResponse\"\x15\n\x13ListProjectsRequest\"(\n\x14ListProjectsResponse\x12\x10\n\x08projects\x18\x01 \x03(\t2\xa2\x06\n\x0b\x43oreService\x12\x66\n\x13GetFeastCoreVersion\x12&.feast.core.GetFeastCoreVersionRequest\x1a\'.feast.core.GetFeastCoreVersionResponse\x12T\n\rGetFeatureSet\x12 .feast.core.GetFeatureSetRequest\x1a!.feast.core.GetFeatureSetResponse\x12Z\n\x0fListFeatureSets\x12\".feast.core.ListFeatureSetsRequest\x1a#.feast.core.ListFeatureSetsResponse\x12K\n\nListStores\x12\x1d.feast.core.ListStoresRequest\x1a\x1e.feast.core.ListStoresResponse\x12Z\n\x0f\x41pplyFeatureSet\x12\".feast.core.ApplyFeatureSetRequest\x1a#.feast.core.ApplyFeatureSetResponse\x12N\n\x0bUpdateStore\x12\x1e.feast.core.UpdateStoreRequest\x1a\x1f.feast.core.UpdateStoreResponse\x12T\n\rCreateProject\x12 .feast.core.CreateProjectRequest\x1a!.feast.core.CreateProjectResponse\x12W\n\x0e\x41rchiveProject\x12!.feast.core.ArchiveProjectRequest\x1a\".feast.core.ArchiveProjectResponse\x12Q\n\x0cListProjects\x12\x1f.feast.core.ListProjectsRequest\x1a .feast.core.ListProjectsResponseBO\n\nfeast.coreB\x10\x43oreServiceProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
,
dependencies=[feast_dot_core_dot_FeatureSet__pb2.DESCRIPTOR,feast_dot_core_dot_Store__pb2.DESCRIPTOR,])
@@ -49,8 +49,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=821,
- serialized_end=868,
+ serialized_start=872,
+ serialized_end=919,
)
_sym_db.RegisterEnumDescriptor(_APPLYFEATURESETRESPONSE_STATUS)
@@ -71,8 +71,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1118,
- serialized_end=1154,
+ serialized_start=1169,
+ serialized_end=1205,
)
_sym_db.RegisterEnumDescriptor(_UPDATESTORERESPONSE_STATUS)
@@ -85,14 +85,21 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='name', full_name='feast.core.GetFeatureSetRequest.name', index=0,
+ name='project', full_name='feast.core.GetFeatureSetRequest.project', index=0,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='feast.core.GetFeatureSetRequest.name', index=1,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='version', full_name='feast.core.GetFeatureSetRequest.version', index=1,
+ name='version', full_name='feast.core.GetFeatureSetRequest.version', index=2,
number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
@@ -111,7 +118,7 @@
oneofs=[
],
serialized_start=97,
- serialized_end=150,
+ serialized_end=167,
)
@@ -141,8 +148,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=152,
- serialized_end=224,
+ serialized_start=169,
+ serialized_end=241,
)
@@ -179,8 +186,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=312,
- serialized_end=375,
+ serialized_start=346,
+ serialized_end=409,
)
_LISTFEATURESETSREQUEST = _descriptor.Descriptor(
@@ -191,7 +198,14 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='filter', full_name='feast.core.ListFeatureSetsRequest.filter', index=0,
+ name='project', full_name='feast.core.ListFeatureSetsRequest.project', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='filter', full_name='feast.core.ListFeatureSetsRequest.filter', index=1,
number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
@@ -209,8 +223,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=227,
- serialized_end=375,
+ serialized_start=244,
+ serialized_end=409,
)
@@ -240,8 +254,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=377,
- serialized_end=452,
+ serialized_start=411,
+ serialized_end=486,
)
@@ -271,8 +285,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=529,
- serialized_end=551,
+ serialized_start=563,
+ serialized_end=585,
)
_LISTSTORESREQUEST = _descriptor.Descriptor(
@@ -301,8 +315,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=454,
- serialized_end=551,
+ serialized_start=488,
+ serialized_end=585,
)
@@ -332,8 +346,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=553,
- serialized_end=607,
+ serialized_start=587,
+ serialized_end=641,
)
@@ -345,7 +359,14 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='feature_set', full_name='feast.core.ApplyFeatureSetRequest.feature_set', index=0,
+ name='project', full_name='feast.core.ApplyFeatureSetRequest.project', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='feature_set', full_name='feast.core.ApplyFeatureSetRequest.feature_set', index=1,
number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
@@ -363,8 +384,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=609,
- serialized_end=682,
+ serialized_start=643,
+ serialized_end=733,
)
@@ -402,8 +423,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=685,
- serialized_end=868,
+ serialized_start=736,
+ serialized_end=919,
)
@@ -426,8 +447,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=870,
- serialized_end=898,
+ serialized_start=921,
+ serialized_end=949,
)
@@ -457,8 +478,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=900,
- serialized_end=946,
+ serialized_start=951,
+ serialized_end=997,
)
@@ -488,8 +509,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=948,
- serialized_end=1002,
+ serialized_start=999,
+ serialized_end=1053,
)
@@ -527,8 +548,173 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1005,
- serialized_end=1154,
+ serialized_start=1056,
+ serialized_end=1205,
+)
+
+
+_CREATEPROJECTREQUEST = _descriptor.Descriptor(
+ name='CreateProjectRequest',
+ full_name='feast.core.CreateProjectRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='feast.core.CreateProjectRequest.name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1207,
+ serialized_end=1243,
+)
+
+
+_CREATEPROJECTRESPONSE = _descriptor.Descriptor(
+ name='CreateProjectResponse',
+ full_name='feast.core.CreateProjectResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1245,
+ serialized_end=1268,
+)
+
+
+_ARCHIVEPROJECTREQUEST = _descriptor.Descriptor(
+ name='ArchiveProjectRequest',
+ full_name='feast.core.ArchiveProjectRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='feast.core.ArchiveProjectRequest.name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1270,
+ serialized_end=1307,
+)
+
+
+_ARCHIVEPROJECTRESPONSE = _descriptor.Descriptor(
+ name='ArchiveProjectResponse',
+ full_name='feast.core.ArchiveProjectResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1309,
+ serialized_end=1333,
+)
+
+
+_LISTPROJECTSREQUEST = _descriptor.Descriptor(
+ name='ListProjectsRequest',
+ full_name='feast.core.ListProjectsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1335,
+ serialized_end=1356,
+)
+
+
+_LISTPROJECTSRESPONSE = _descriptor.Descriptor(
+ name='ListProjectsResponse',
+ full_name='feast.core.ListProjectsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='projects', full_name='feast.core.ListProjectsResponse.projects', index=0,
+ number=1, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1358,
+ serialized_end=1398,
)
_GETFEATURESETRESPONSE.fields_by_name['feature_set'].message_type = feast_dot_core_dot_FeatureSet__pb2._FEATURESETSPEC
@@ -558,6 +744,12 @@
DESCRIPTOR.message_types_by_name['GetFeastCoreVersionResponse'] = _GETFEASTCOREVERSIONRESPONSE
DESCRIPTOR.message_types_by_name['UpdateStoreRequest'] = _UPDATESTOREREQUEST
DESCRIPTOR.message_types_by_name['UpdateStoreResponse'] = _UPDATESTORERESPONSE
+DESCRIPTOR.message_types_by_name['CreateProjectRequest'] = _CREATEPROJECTREQUEST
+DESCRIPTOR.message_types_by_name['CreateProjectResponse'] = _CREATEPROJECTRESPONSE
+DESCRIPTOR.message_types_by_name['ArchiveProjectRequest'] = _ARCHIVEPROJECTREQUEST
+DESCRIPTOR.message_types_by_name['ArchiveProjectResponse'] = _ARCHIVEPROJECTRESPONSE
+DESCRIPTOR.message_types_by_name['ListProjectsRequest'] = _LISTPROJECTSREQUEST
+DESCRIPTOR.message_types_by_name['ListProjectsResponse'] = _LISTPROJECTSRESPONSE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
GetFeatureSetRequest = _reflection.GeneratedProtocolMessageType('GetFeatureSetRequest', (_message.Message,), {
@@ -660,6 +852,48 @@
})
_sym_db.RegisterMessage(UpdateStoreResponse)
+CreateProjectRequest = _reflection.GeneratedProtocolMessageType('CreateProjectRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _CREATEPROJECTREQUEST,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.CreateProjectRequest)
+ })
+_sym_db.RegisterMessage(CreateProjectRequest)
+
+CreateProjectResponse = _reflection.GeneratedProtocolMessageType('CreateProjectResponse', (_message.Message,), {
+ 'DESCRIPTOR' : _CREATEPROJECTRESPONSE,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.CreateProjectResponse)
+ })
+_sym_db.RegisterMessage(CreateProjectResponse)
+
+ArchiveProjectRequest = _reflection.GeneratedProtocolMessageType('ArchiveProjectRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _ARCHIVEPROJECTREQUEST,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.ArchiveProjectRequest)
+ })
+_sym_db.RegisterMessage(ArchiveProjectRequest)
+
+ArchiveProjectResponse = _reflection.GeneratedProtocolMessageType('ArchiveProjectResponse', (_message.Message,), {
+ 'DESCRIPTOR' : _ARCHIVEPROJECTRESPONSE,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.ArchiveProjectResponse)
+ })
+_sym_db.RegisterMessage(ArchiveProjectResponse)
+
+ListProjectsRequest = _reflection.GeneratedProtocolMessageType('ListProjectsRequest', (_message.Message,), {
+ 'DESCRIPTOR' : _LISTPROJECTSREQUEST,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.ListProjectsRequest)
+ })
+_sym_db.RegisterMessage(ListProjectsRequest)
+
+ListProjectsResponse = _reflection.GeneratedProtocolMessageType('ListProjectsResponse', (_message.Message,), {
+ 'DESCRIPTOR' : _LISTPROJECTSRESPONSE,
+ '__module__' : 'feast.core.CoreService_pb2'
+ # @@protoc_insertion_point(class_scope:feast.core.ListProjectsResponse)
+ })
+_sym_db.RegisterMessage(ListProjectsResponse)
+
DESCRIPTOR._options = None
@@ -669,8 +903,8 @@
file=DESCRIPTOR,
index=0,
serialized_options=None,
- serialized_start=1157,
- serialized_end=1701,
+ serialized_start=1401,
+ serialized_end=2203,
methods=[
_descriptor.MethodDescriptor(
name='GetFeastCoreVersion',
@@ -726,6 +960,33 @@
output_type=_UPDATESTORERESPONSE,
serialized_options=None,
),
+ _descriptor.MethodDescriptor(
+ name='CreateProject',
+ full_name='feast.core.CoreService.CreateProject',
+ index=6,
+ containing_service=None,
+ input_type=_CREATEPROJECTREQUEST,
+ output_type=_CREATEPROJECTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ArchiveProject',
+ full_name='feast.core.CoreService.ArchiveProject',
+ index=7,
+ containing_service=None,
+ input_type=_ARCHIVEPROJECTREQUEST,
+ output_type=_ARCHIVEPROJECTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListProjects',
+ full_name='feast.core.CoreService.ListProjects',
+ index=8,
+ containing_service=None,
+ input_type=_LISTPROJECTSREQUEST,
+ output_type=_LISTPROJECTSRESPONSE,
+ serialized_options=None,
+ ),
])
_sym_db.RegisterServiceDescriptor(_CORESERVICE)
diff --git a/sdk/python/feast/core/CoreService_pb2.pyi b/sdk/python/feast/core/CoreService_pb2.pyi
index 0bf897000bc..eb0a8fb6362 100644
--- a/sdk/python/feast/core/CoreService_pb2.pyi
+++ b/sdk/python/feast/core/CoreService_pb2.pyi
@@ -15,6 +15,7 @@ from google.protobuf.descriptor import (
from google.protobuf.internal.containers import (
RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+ RepeatedScalarFieldContainer as google___protobuf___internal___containers___RepeatedScalarFieldContainer,
)
from google.protobuf.message import (
@@ -37,11 +38,13 @@ from typing_extensions import (
class GetFeatureSetRequest(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ project = ... # type: typing___Text
name = ... # type: typing___Text
version = ... # type: int
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
name : typing___Optional[typing___Text] = None,
version : typing___Optional[int] = None,
) -> None: ...
@@ -50,9 +53,9 @@ class GetFeatureSetRequest(google___protobuf___message___Message):
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
- def ClearField(self, field_name: typing_extensions___Literal[u"name",u"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",u"project",u"version"]) -> None: ...
else:
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"version",b"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"project",b"project",u"version",b"version"]) -> None: ...
class GetFeatureSetResponse(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -96,12 +99,14 @@ class ListFeatureSetsRequest(google___protobuf___message___Message):
else:
def ClearField(self, field_name: typing_extensions___Literal[u"feature_set_name",b"feature_set_name",u"feature_set_version",b"feature_set_version"]) -> None: ...
+ project = ... # type: typing___Text
@property
def filter(self) -> ListFeatureSetsRequest.Filter: ...
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
filter : typing___Optional[ListFeatureSetsRequest.Filter] = None,
) -> None: ...
@classmethod
@@ -110,10 +115,10 @@ class ListFeatureSetsRequest(google___protobuf___message___Message):
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"filter"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"filter"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"filter",u"project"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"filter",b"filter"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"filter",b"filter"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"filter",b"filter",u"project",b"project"]) -> None: ...
class ListFeatureSetsResponse(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -193,12 +198,14 @@ class ListStoresResponse(google___protobuf___message___Message):
class ApplyFeatureSetRequest(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ project = ... # type: typing___Text
@property
def feature_set(self) -> feast___core___FeatureSet_pb2___FeatureSetSpec: ...
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
feature_set : typing___Optional[feast___core___FeatureSet_pb2___FeatureSetSpec] = None,
) -> None: ...
@classmethod
@@ -207,10 +214,10 @@ class ApplyFeatureSetRequest(google___protobuf___message___Message):
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"feature_set"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature_set"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"feature_set",u"project"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"feature_set",b"feature_set"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature_set",b"feature_set"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"feature_set",b"feature_set",u"project",b"project"]) -> None: ...
class ApplyFeatureSetResponse(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -341,3 +348,84 @@ class UpdateStoreResponse(google___protobuf___message___Message):
else:
def HasField(self, field_name: typing_extensions___Literal[u"store",b"store"]) -> bool: ...
def ClearField(self, field_name: typing_extensions___Literal[u"status",b"status",u"store",b"store"]) -> None: ...
+
+class CreateProjectRequest(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ name = ... # type: typing___Text
+
+ def __init__(self,
+ *,
+ name : typing___Optional[typing___Text] = None,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> CreateProjectRequest: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ if sys.version_info >= (3,):
+ def ClearField(self, field_name: typing_extensions___Literal[u"name"]) -> None: ...
+ else:
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> None: ...
+
+class CreateProjectResponse(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ def __init__(self,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> CreateProjectResponse: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+
+class ArchiveProjectRequest(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ name = ... # type: typing___Text
+
+ def __init__(self,
+ *,
+ name : typing___Optional[typing___Text] = None,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> ArchiveProjectRequest: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ if sys.version_info >= (3,):
+ def ClearField(self, field_name: typing_extensions___Literal[u"name"]) -> None: ...
+ else:
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> None: ...
+
+class ArchiveProjectResponse(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ def __init__(self,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> ArchiveProjectResponse: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+
+class ListProjectsRequest(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ def __init__(self,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> ListProjectsRequest: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+
+class ListProjectsResponse(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ projects = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
+
+ def __init__(self,
+ *,
+ projects : typing___Optional[typing___Iterable[typing___Text]] = None,
+ ) -> None: ...
+ @classmethod
+ def FromString(cls, s: bytes) -> ListProjectsResponse: ...
+ def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
+ if sys.version_info >= (3,):
+ def ClearField(self, field_name: typing_extensions___Literal[u"projects"]) -> None: ...
+ else:
+ def ClearField(self, field_name: typing_extensions___Literal[u"projects",b"projects"]) -> None: ...
diff --git a/sdk/python/feast/core/CoreService_pb2_grpc.py b/sdk/python/feast/core/CoreService_pb2_grpc.py
index c4d28087791..0e17d0552a2 100644
--- a/sdk/python/feast/core/CoreService_pb2_grpc.py
+++ b/sdk/python/feast/core/CoreService_pb2_grpc.py
@@ -44,6 +44,21 @@ def __init__(self, channel):
request_serializer=feast_dot_core_dot_CoreService__pb2.UpdateStoreRequest.SerializeToString,
response_deserializer=feast_dot_core_dot_CoreService__pb2.UpdateStoreResponse.FromString,
)
+ self.CreateProject = channel.unary_unary(
+ '/feast.core.CoreService/CreateProject',
+ request_serializer=feast_dot_core_dot_CoreService__pb2.CreateProjectRequest.SerializeToString,
+ response_deserializer=feast_dot_core_dot_CoreService__pb2.CreateProjectResponse.FromString,
+ )
+ self.ArchiveProject = channel.unary_unary(
+ '/feast.core.CoreService/ArchiveProject',
+ request_serializer=feast_dot_core_dot_CoreService__pb2.ArchiveProjectRequest.SerializeToString,
+ response_deserializer=feast_dot_core_dot_CoreService__pb2.ArchiveProjectResponse.FromString,
+ )
+ self.ListProjects = channel.unary_unary(
+ '/feast.core.CoreService/ListProjects',
+ request_serializer=feast_dot_core_dot_CoreService__pb2.ListProjectsRequest.SerializeToString,
+ response_deserializer=feast_dot_core_dot_CoreService__pb2.ListProjectsResponse.FromString,
+ )
class CoreServiceServicer(object):
@@ -108,6 +123,32 @@ def UpdateStore(self, request, context):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
+ def CreateProject(self, request, context):
+ """Creates a project. Projects serve as namespaces within which resources like features will be
+ created. Both feature set names as well as field names must be unique within a project. Project
+ names themselves must be globally unique.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def ArchiveProject(self, request, context):
+ """Archives a project. Archived projects will continue to exist and function, but won't be visible
+ through the Core API. Any existing ingestion or serving requests will continue to function,
+ but will result in warning messages being logged. It is not possible to unarchive a project
+ through the Core API
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def ListProjects(self, request, context):
+ """Lists all projects active projects.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
def add_CoreServiceServicer_to_server(servicer, server):
rpc_method_handlers = {
@@ -141,6 +182,21 @@ def add_CoreServiceServicer_to_server(servicer, server):
request_deserializer=feast_dot_core_dot_CoreService__pb2.UpdateStoreRequest.FromString,
response_serializer=feast_dot_core_dot_CoreService__pb2.UpdateStoreResponse.SerializeToString,
),
+ 'CreateProject': grpc.unary_unary_rpc_method_handler(
+ servicer.CreateProject,
+ request_deserializer=feast_dot_core_dot_CoreService__pb2.CreateProjectRequest.FromString,
+ response_serializer=feast_dot_core_dot_CoreService__pb2.CreateProjectResponse.SerializeToString,
+ ),
+ 'ArchiveProject': grpc.unary_unary_rpc_method_handler(
+ servicer.ArchiveProject,
+ request_deserializer=feast_dot_core_dot_CoreService__pb2.ArchiveProjectRequest.FromString,
+ response_serializer=feast_dot_core_dot_CoreService__pb2.ArchiveProjectResponse.SerializeToString,
+ ),
+ 'ListProjects': grpc.unary_unary_rpc_method_handler(
+ servicer.ListProjects,
+ request_deserializer=feast_dot_core_dot_CoreService__pb2.ListProjectsRequest.FromString,
+ response_serializer=feast_dot_core_dot_CoreService__pb2.ListProjectsResponse.SerializeToString,
+ ),
}
generic_handler = grpc.method_handlers_generic_handler(
'feast.core.CoreService', rpc_method_handlers)
diff --git a/sdk/python/feast/core/FeatureSet_pb2.py b/sdk/python/feast/core/FeatureSet_pb2.py
index 8c331db16b1..6473c823ebc 100644
--- a/sdk/python/feast/core/FeatureSet_pb2.py
+++ b/sdk/python/feast/core/FeatureSet_pb2.py
@@ -23,7 +23,7 @@
package='feast.core',
syntax='proto3',
serialized_options=_b('\n\nfeast.coreB\017FeatureSetProtoZ/github.com/gojek/feast/sdk/go/protos/feast/core'),
- serialized_pb=_b('\n\x1b\x66\x65\x61st/core/FeatureSet.proto\x12\nfeast.core\x1a\x17\x66\x65\x61st/types/Value.proto\x1a\x17\x66\x65\x61st/core/Source.proto\x1a\x1egoogle/protobuf/duration.proto\"\xd4\x01\n\x0e\x46\x65\x61tureSetSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12(\n\x08\x65ntities\x18\x03 \x03(\x0b\x32\x16.feast.core.EntitySpec\x12)\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0b\x32\x17.feast.core.FeatureSpec\x12*\n\x07max_age\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\"\n\x06source\x18\x06 \x01(\x0b\x32\x12.feast.core.Source\"K\n\nEntitySpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\nvalue_type\x18\x02 \x01(\x0e\x32\x1b.feast.types.ValueType.Enum\"L\n\x0b\x46\x65\x61tureSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\nvalue_type\x18\x02 \x01(\x0e\x32\x1b.feast.types.ValueType.EnumBN\n\nfeast.coreB\x0f\x46\x65\x61tureSetProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
+ serialized_pb=_b('\n\x1b\x66\x65\x61st/core/FeatureSet.proto\x12\nfeast.core\x1a\x17\x66\x65\x61st/types/Value.proto\x1a\x17\x66\x65\x61st/core/Source.proto\x1a\x1egoogle/protobuf/duration.proto\"\xe5\x01\n\x0e\x46\x65\x61tureSetSpec\x12\x0f\n\x07project\x18\x07 \x01(\t\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12(\n\x08\x65ntities\x18\x03 \x03(\x0b\x32\x16.feast.core.EntitySpec\x12)\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0b\x32\x17.feast.core.FeatureSpec\x12*\n\x07max_age\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\"\n\x06source\x18\x06 \x01(\x0b\x32\x12.feast.core.Source\"K\n\nEntitySpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\nvalue_type\x18\x02 \x01(\x0e\x32\x1b.feast.types.ValueType.Enum\"L\n\x0b\x46\x65\x61tureSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\nvalue_type\x18\x02 \x01(\x0e\x32\x1b.feast.types.ValueType.EnumBN\n\nfeast.coreB\x0f\x46\x65\x61tureSetProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
,
dependencies=[feast_dot_types_dot_Value__pb2.DESCRIPTOR,feast_dot_core_dot_Source__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])
@@ -38,42 +38,49 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='name', full_name='feast.core.FeatureSetSpec.name', index=0,
+ name='project', full_name='feast.core.FeatureSetSpec.project', index=0,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='feast.core.FeatureSetSpec.name', index=1,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='version', full_name='feast.core.FeatureSetSpec.version', index=1,
+ name='version', full_name='feast.core.FeatureSetSpec.version', index=2,
number=2, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='entities', full_name='feast.core.FeatureSetSpec.entities', index=2,
+ name='entities', full_name='feast.core.FeatureSetSpec.entities', index=3,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='features', full_name='feast.core.FeatureSetSpec.features', index=3,
+ name='features', full_name='feast.core.FeatureSetSpec.features', index=4,
number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='max_age', full_name='feast.core.FeatureSetSpec.max_age', index=4,
+ name='max_age', full_name='feast.core.FeatureSetSpec.max_age', index=5,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='source', full_name='feast.core.FeatureSetSpec.source', index=5,
+ name='source', full_name='feast.core.FeatureSetSpec.source', index=6,
number=6, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
@@ -92,7 +99,7 @@
oneofs=[
],
serialized_start=126,
- serialized_end=338,
+ serialized_end=355,
)
@@ -129,8 +136,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=340,
- serialized_end=415,
+ serialized_start=357,
+ serialized_end=432,
)
@@ -167,8 +174,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=417,
- serialized_end=493,
+ serialized_start=434,
+ serialized_end=510,
)
_FEATURESETSPEC.fields_by_name['entities'].message_type = _ENTITYSPEC
diff --git a/sdk/python/feast/core/FeatureSet_pb2.pyi b/sdk/python/feast/core/FeatureSet_pb2.pyi
index 5d93721fe16..3368fac91f4 100644
--- a/sdk/python/feast/core/FeatureSet_pb2.pyi
+++ b/sdk/python/feast/core/FeatureSet_pb2.pyi
@@ -37,6 +37,7 @@ from typing_extensions import (
class FeatureSetSpec(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ project = ... # type: typing___Text
name = ... # type: typing___Text
version = ... # type: int
@@ -54,6 +55,7 @@ class FeatureSetSpec(google___protobuf___message___Message):
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
name : typing___Optional[typing___Text] = None,
version : typing___Optional[int] = None,
entities : typing___Optional[typing___Iterable[EntitySpec]] = None,
@@ -67,10 +69,10 @@ class FeatureSetSpec(google___protobuf___message___Message):
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"max_age",u"source"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"entities",u"features",u"max_age",u"name",u"source",u"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"entities",u"features",u"max_age",u"name",u"project",u"source",u"version"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"max_age",b"max_age",u"source",b"source"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"entities",b"entities",u"features",b"features",u"max_age",b"max_age",u"name",b"name",u"source",b"source",u"version",b"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"entities",b"entities",u"features",b"features",u"max_age",b"max_age",u"name",b"name",u"project",b"project",u"source",b"source",u"version",b"version"]) -> None: ...
class EntitySpec(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
diff --git a/sdk/python/feast/core/Store_pb2.py b/sdk/python/feast/core/Store_pb2.py
index c7f9e07d871..716a597b9a3 100644
--- a/sdk/python/feast/core/Store_pb2.py
+++ b/sdk/python/feast/core/Store_pb2.py
@@ -20,7 +20,7 @@
package='feast.core',
syntax='proto3',
serialized_options=_b('\n\nfeast.coreB\nStoreProtoZ/github.com/gojek/feast/sdk/go/protos/feast/core'),
- serialized_pb=_b('\n\x16\x66\x65\x61st/core/Store.proto\x12\nfeast.core\"\xb9\x04\n\x05Store\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.feast.core.Store.StoreType\x12\x35\n\rsubscriptions\x18\x04 \x03(\x0b\x32\x1e.feast.core.Store.Subscription\x12\x35\n\x0credis_config\x18\x0b \x01(\x0b\x32\x1d.feast.core.Store.RedisConfigH\x00\x12;\n\x0f\x62igquery_config\x18\x0c \x01(\x0b\x32 .feast.core.Store.BigQueryConfigH\x00\x12=\n\x10\x63\x61ssandra_config\x18\r \x01(\x0b\x32!.feast.core.Store.CassandraConfigH\x00\x1a)\n\x0bRedisConfig\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\x1a\x38\n\x0e\x42igQueryConfig\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x12\n\ndataset_id\x18\x02 \x01(\t\x1a-\n\x0f\x43\x61ssandraConfig\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\x1a-\n\x0cSubscription\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"@\n\tStoreType\x12\x0b\n\x07INVALID\x10\x00\x12\t\n\x05REDIS\x10\x01\x12\x0c\n\x08\x42IGQUERY\x10\x02\x12\r\n\tCASSANDRA\x10\x03\x42\x08\n\x06\x63onfigBI\n\nfeast.coreB\nStoreProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
+ serialized_pb=_b('\n\x16\x66\x65\x61st/core/Store.proto\x12\nfeast.core\"\xca\x04\n\x05Store\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.feast.core.Store.StoreType\x12\x35\n\rsubscriptions\x18\x04 \x03(\x0b\x32\x1e.feast.core.Store.Subscription\x12\x35\n\x0credis_config\x18\x0b \x01(\x0b\x32\x1d.feast.core.Store.RedisConfigH\x00\x12;\n\x0f\x62igquery_config\x18\x0c \x01(\x0b\x32 .feast.core.Store.BigQueryConfigH\x00\x12=\n\x10\x63\x61ssandra_config\x18\r \x01(\x0b\x32!.feast.core.Store.CassandraConfigH\x00\x1a)\n\x0bRedisConfig\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\x1a\x38\n\x0e\x42igQueryConfig\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x12\n\ndataset_id\x18\x02 \x01(\t\x1a-\n\x0f\x43\x61ssandraConfig\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\x1a>\n\x0cSubscription\x12\x0f\n\x07project\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"@\n\tStoreType\x12\x0b\n\x07INVALID\x10\x00\x12\t\n\x05REDIS\x10\x01\x12\x0c\n\x08\x42IGQUERY\x10\x02\x12\r\n\tCASSANDRA\x10\x03\x42\x08\n\x06\x63onfigBI\n\nfeast.coreB\nStoreProtoZ/github.com/gojek/feast/sdk/go/protos/feast/coreb\x06proto3')
)
@@ -50,8 +50,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=534,
- serialized_end=598,
+ serialized_start=551,
+ serialized_end=615,
)
_sym_db.RegisterEnumDescriptor(_STORE_STORETYPE)
@@ -175,14 +175,21 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='name', full_name='feast.core.Store.Subscription.name', index=0,
+ name='project', full_name='feast.core.Store.Subscription.project', index=0,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='feast.core.Store.Subscription.name', index=1,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='version', full_name='feast.core.Store.Subscription.version', index=1,
+ name='version', full_name='feast.core.Store.Subscription.version', index=2,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
@@ -201,7 +208,7 @@
oneofs=[
],
serialized_start=487,
- serialized_end=532,
+ serialized_end=549,
)
_STORE = _descriptor.Descriptor(
@@ -270,7 +277,7 @@
index=0, containing_type=None, fields=[]),
],
serialized_start=39,
- serialized_end=608,
+ serialized_end=625,
)
_STORE_REDISCONFIG.containing_type = _STORE
diff --git a/sdk/python/feast/core/Store_pb2.pyi b/sdk/python/feast/core/Store_pb2.pyi
index 726a9d5443e..541bcd329bb 100644
--- a/sdk/python/feast/core/Store_pb2.pyi
+++ b/sdk/python/feast/core/Store_pb2.pyi
@@ -109,11 +109,13 @@ class Store(google___protobuf___message___Message):
class Subscription(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ project = ... # type: typing___Text
name = ... # type: typing___Text
version = ... # type: typing___Text
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
name : typing___Optional[typing___Text] = None,
version : typing___Optional[typing___Text] = None,
) -> None: ...
@@ -122,9 +124,9 @@ class Store(google___protobuf___message___Message):
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
- def ClearField(self, field_name: typing_extensions___Literal[u"name",u"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",u"project",u"version"]) -> None: ...
else:
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"version",b"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"project",b"project",u"version",b"version"]) -> None: ...
name = ... # type: typing___Text
type = ... # type: Store.StoreType
diff --git a/sdk/python/feast/serving/ServingService_pb2.py b/sdk/python/feast/serving/ServingService_pb2.py
index e7258f5a7d5..283ec358da9 100644
--- a/sdk/python/feast/serving/ServingService_pb2.py
+++ b/sdk/python/feast/serving/ServingService_pb2.py
@@ -24,7 +24,7 @@
package='feast.serving',
syntax='proto3',
serialized_options=_b('\n\rfeast.servingB\017ServingAPIProtoZ2github.com/gojek/feast/sdk/go/protos/feast/serving'),
- serialized_pb=_b('\n\"feast/serving/ServingService.proto\x12\rfeast.serving\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x17\x66\x65\x61st/types/Value.proto\"\x1c\n\x1aGetFeastServingInfoRequest\"{\n\x1bGetFeastServingInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.feast.serving.FeastServingType\x12\x1c\n\x14job_staging_location\x18\n \x01(\t\"u\n\x11\x46\x65\x61tureSetRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x15\n\rfeature_names\x18\x03 \x03(\t\x12*\n\x07max_age\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x93\x03\n\x18GetOnlineFeaturesRequest\x12\x36\n\x0c\x66\x65\x61ture_sets\x18\x01 \x03(\x0b\x32 .feast.serving.FeatureSetRequest\x12\x46\n\x0b\x65ntity_rows\x18\x02 \x03(\x0b\x32\x31.feast.serving.GetOnlineFeaturesRequest.EntityRow\x12!\n\x19omit_entities_in_response\x18\x03 \x01(\x08\x1a\xd3\x01\n\tEntityRow\x12\x34\n\x10\x65ntity_timestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12M\n\x06\x66ields\x18\x02 \x03(\x0b\x32=.feast.serving.GetOnlineFeaturesRequest.EntityRow.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.feast.types.Value:\x02\x38\x01\"\x87\x01\n\x17GetBatchFeaturesRequest\x12\x36\n\x0c\x66\x65\x61ture_sets\x18\x01 \x03(\x0b\x32 .feast.serving.FeatureSetRequest\x12\x34\n\x0e\x64\x61taset_source\x18\x02 \x01(\x0b\x32\x1c.feast.serving.DatasetSource\"\x8c\x02\n\x19GetOnlineFeaturesResponse\x12J\n\x0c\x66ield_values\x18\x01 \x03(\x0b\x32\x34.feast.serving.GetOnlineFeaturesResponse.FieldValues\x1a\xa2\x01\n\x0b\x46ieldValues\x12P\n\x06\x66ields\x18\x01 \x03(\x0b\x32@.feast.serving.GetOnlineFeaturesResponse.FieldValues.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.feast.types.Value:\x02\x38\x01\";\n\x18GetBatchFeaturesResponse\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"0\n\rGetJobRequest\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"1\n\x0eGetJobResponse\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"\xb3\x01\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.feast.serving.JobType\x12(\n\x06status\x18\x03 \x01(\x0e\x32\x18.feast.serving.JobStatus\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x11\n\tfile_uris\x18\x05 \x03(\t\x12.\n\x0b\x64\x61ta_format\x18\x06 \x01(\x0e\x32\x19.feast.serving.DataFormat\"\xb2\x01\n\rDatasetSource\x12>\n\x0b\x66ile_source\x18\x01 \x01(\x0b\x32\'.feast.serving.DatasetSource.FileSourceH\x00\x1aO\n\nFileSource\x12\x11\n\tfile_uris\x18\x01 \x03(\t\x12.\n\x0b\x64\x61ta_format\x18\x02 \x01(\x0e\x32\x19.feast.serving.DataFormatB\x10\n\x0e\x64\x61taset_source*o\n\x10\x46\x65\x61stServingType\x12\x1e\n\x1a\x46\x45\x41ST_SERVING_TYPE_INVALID\x10\x00\x12\x1d\n\x19\x46\x45\x41ST_SERVING_TYPE_ONLINE\x10\x01\x12\x1c\n\x18\x46\x45\x41ST_SERVING_TYPE_BATCH\x10\x02*6\n\x07JobType\x12\x14\n\x10JOB_TYPE_INVALID\x10\x00\x12\x15\n\x11JOB_TYPE_DOWNLOAD\x10\x01*h\n\tJobStatus\x12\x16\n\x12JOB_STATUS_INVALID\x10\x00\x12\x16\n\x12JOB_STATUS_PENDING\x10\x01\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x02\x12\x13\n\x0fJOB_STATUS_DONE\x10\x03*;\n\nDataFormat\x12\x17\n\x13\x44\x41TA_FORMAT_INVALID\x10\x00\x12\x14\n\x10\x44\x41TA_FORMAT_AVRO\x10\x01\x32\x92\x03\n\x0eServingService\x12l\n\x13GetFeastServingInfo\x12).feast.serving.GetFeastServingInfoRequest\x1a*.feast.serving.GetFeastServingInfoResponse\x12\x66\n\x11GetOnlineFeatures\x12\'.feast.serving.GetOnlineFeaturesRequest\x1a(.feast.serving.GetOnlineFeaturesResponse\x12\x63\n\x10GetBatchFeatures\x12&.feast.serving.GetBatchFeaturesRequest\x1a\'.feast.serving.GetBatchFeaturesResponse\x12\x45\n\x06GetJob\x12\x1c.feast.serving.GetJobRequest\x1a\x1d.feast.serving.GetJobResponseBT\n\rfeast.servingB\x0fServingAPIProtoZ2github.com/gojek/feast/sdk/go/protos/feast/servingb\x06proto3')
+ serialized_pb=_b('\n\"feast/serving/ServingService.proto\x12\rfeast.serving\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x17\x66\x65\x61st/types/Value.proto\"\x1c\n\x1aGetFeastServingInfoRequest\"{\n\x1bGetFeastServingInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.feast.serving.FeastServingType\x12\x1c\n\x14job_staging_location\x18\n \x01(\t\"n\n\x10\x46\x65\x61tureReference\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x12*\n\x07max_age\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x8e\x03\n\x18GetOnlineFeaturesRequest\x12\x31\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0b\x32\x1f.feast.serving.FeatureReference\x12\x46\n\x0b\x65ntity_rows\x18\x02 \x03(\x0b\x32\x31.feast.serving.GetOnlineFeaturesRequest.EntityRow\x12!\n\x19omit_entities_in_response\x18\x03 \x01(\x08\x1a\xd3\x01\n\tEntityRow\x12\x34\n\x10\x65ntity_timestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12M\n\x06\x66ields\x18\x02 \x03(\x0b\x32=.feast.serving.GetOnlineFeaturesRequest.EntityRow.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.feast.types.Value:\x02\x38\x01\"\x82\x01\n\x17GetBatchFeaturesRequest\x12\x31\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0b\x32\x1f.feast.serving.FeatureReference\x12\x34\n\x0e\x64\x61taset_source\x18\x02 \x01(\x0b\x32\x1c.feast.serving.DatasetSource\"\x8c\x02\n\x19GetOnlineFeaturesResponse\x12J\n\x0c\x66ield_values\x18\x01 \x03(\x0b\x32\x34.feast.serving.GetOnlineFeaturesResponse.FieldValues\x1a\xa2\x01\n\x0b\x46ieldValues\x12P\n\x06\x66ields\x18\x01 \x03(\x0b\x32@.feast.serving.GetOnlineFeaturesResponse.FieldValues.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.feast.types.Value:\x02\x38\x01\";\n\x18GetBatchFeaturesResponse\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"0\n\rGetJobRequest\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"1\n\x0eGetJobResponse\x12\x1f\n\x03job\x18\x01 \x01(\x0b\x32\x12.feast.serving.Job\"\xb3\x01\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x04type\x18\x02 \x01(\x0e\x32\x16.feast.serving.JobType\x12(\n\x06status\x18\x03 \x01(\x0e\x32\x18.feast.serving.JobStatus\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x11\n\tfile_uris\x18\x05 \x03(\t\x12.\n\x0b\x64\x61ta_format\x18\x06 \x01(\x0e\x32\x19.feast.serving.DataFormat\"\xb2\x01\n\rDatasetSource\x12>\n\x0b\x66ile_source\x18\x01 \x01(\x0b\x32\'.feast.serving.DatasetSource.FileSourceH\x00\x1aO\n\nFileSource\x12\x11\n\tfile_uris\x18\x01 \x03(\t\x12.\n\x0b\x64\x61ta_format\x18\x02 \x01(\x0e\x32\x19.feast.serving.DataFormatB\x10\n\x0e\x64\x61taset_source*o\n\x10\x46\x65\x61stServingType\x12\x1e\n\x1a\x46\x45\x41ST_SERVING_TYPE_INVALID\x10\x00\x12\x1d\n\x19\x46\x45\x41ST_SERVING_TYPE_ONLINE\x10\x01\x12\x1c\n\x18\x46\x45\x41ST_SERVING_TYPE_BATCH\x10\x02*6\n\x07JobType\x12\x14\n\x10JOB_TYPE_INVALID\x10\x00\x12\x15\n\x11JOB_TYPE_DOWNLOAD\x10\x01*h\n\tJobStatus\x12\x16\n\x12JOB_STATUS_INVALID\x10\x00\x12\x16\n\x12JOB_STATUS_PENDING\x10\x01\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x02\x12\x13\n\x0fJOB_STATUS_DONE\x10\x03*;\n\nDataFormat\x12\x17\n\x13\x44\x41TA_FORMAT_INVALID\x10\x00\x12\x14\n\x10\x44\x41TA_FORMAT_AVRO\x10\x01\x32\x92\x03\n\x0eServingService\x12l\n\x13GetFeastServingInfo\x12).feast.serving.GetFeastServingInfoRequest\x1a*.feast.serving.GetFeastServingInfoResponse\x12\x66\n\x11GetOnlineFeatures\x12\'.feast.serving.GetOnlineFeaturesRequest\x1a(.feast.serving.GetOnlineFeaturesResponse\x12\x63\n\x10GetBatchFeatures\x12&.feast.serving.GetBatchFeaturesRequest\x1a\'.feast.serving.GetBatchFeaturesResponse\x12\x45\n\x06GetJob\x12\x1c.feast.serving.GetJobRequest\x1a\x1d.feast.serving.GetJobResponseBT\n\rfeast.servingB\x0fServingAPIProtoZ2github.com/gojek/feast/sdk/go/protos/feast/servingb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,feast_dot_types_dot_Value__pb2.DESCRIPTOR,])
@@ -49,8 +49,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1757,
- serialized_end=1868,
+ serialized_start=1740,
+ serialized_end=1851,
)
_sym_db.RegisterEnumDescriptor(_FEASTSERVINGTYPE)
@@ -72,8 +72,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1870,
- serialized_end=1924,
+ serialized_start=1853,
+ serialized_end=1907,
)
_sym_db.RegisterEnumDescriptor(_JOBTYPE)
@@ -103,8 +103,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1926,
- serialized_end=2030,
+ serialized_start=1909,
+ serialized_end=2013,
)
_sym_db.RegisterEnumDescriptor(_JOBSTATUS)
@@ -126,8 +126,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=2032,
- serialized_end=2091,
+ serialized_start=2015,
+ serialized_end=2074,
)
_sym_db.RegisterEnumDescriptor(_DATAFORMAT)
@@ -215,36 +215,36 @@
)
-_FEATURESETREQUEST = _descriptor.Descriptor(
- name='FeatureSetRequest',
- full_name='feast.serving.FeatureSetRequest',
+_FEATUREREFERENCE = _descriptor.Descriptor(
+ name='FeatureReference',
+ full_name='feast.serving.FeatureReference',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='name', full_name='feast.serving.FeatureSetRequest.name', index=0,
+ name='project', full_name='feast.serving.FeatureReference.project', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='version', full_name='feast.serving.FeatureSetRequest.version', index=1,
- number=2, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
+ name='name', full_name='feast.serving.FeatureReference.name', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='feature_names', full_name='feast.serving.FeatureSetRequest.feature_names', index=2,
- number=3, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
+ name='version', full_name='feast.serving.FeatureReference.version', index=2,
+ number=3, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='max_age', full_name='feast.serving.FeatureSetRequest.max_age', index=3,
+ name='max_age', full_name='feast.serving.FeatureReference.max_age', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
@@ -263,7 +263,7 @@
oneofs=[
],
serialized_start=298,
- serialized_end=415,
+ serialized_end=408,
)
@@ -300,8 +300,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=756,
- serialized_end=821,
+ serialized_start=744,
+ serialized_end=809,
)
_GETONLINEFEATURESREQUEST_ENTITYROW = _descriptor.Descriptor(
@@ -337,8 +337,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=610,
- serialized_end=821,
+ serialized_start=598,
+ serialized_end=809,
)
_GETONLINEFEATURESREQUEST = _descriptor.Descriptor(
@@ -349,8 +349,8 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='feature_sets', full_name='feast.serving.GetOnlineFeaturesRequest.feature_sets', index=0,
- number=1, type=11, cpp_type=10, label=3,
+ name='features', full_name='feast.serving.GetOnlineFeaturesRequest.features', index=0,
+ number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@@ -381,8 +381,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=418,
- serialized_end=821,
+ serialized_start=411,
+ serialized_end=809,
)
@@ -394,8 +394,8 @@
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='feature_sets', full_name='feast.serving.GetBatchFeaturesRequest.feature_sets', index=0,
- number=1, type=11, cpp_type=10, label=3,
+ name='features', full_name='feast.serving.GetBatchFeaturesRequest.features', index=0,
+ number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@@ -419,8 +419,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=824,
- serialized_end=959,
+ serialized_start=812,
+ serialized_end=942,
)
@@ -457,8 +457,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=756,
- serialized_end=821,
+ serialized_start=744,
+ serialized_end=809,
)
_GETONLINEFEATURESRESPONSE_FIELDVALUES = _descriptor.Descriptor(
@@ -487,8 +487,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1068,
- serialized_end=1230,
+ serialized_start=1051,
+ serialized_end=1213,
)
_GETONLINEFEATURESRESPONSE = _descriptor.Descriptor(
@@ -517,8 +517,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=962,
- serialized_end=1230,
+ serialized_start=945,
+ serialized_end=1213,
)
@@ -548,8 +548,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1232,
- serialized_end=1291,
+ serialized_start=1215,
+ serialized_end=1274,
)
@@ -579,8 +579,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1293,
- serialized_end=1341,
+ serialized_start=1276,
+ serialized_end=1324,
)
@@ -610,8 +610,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1343,
- serialized_end=1392,
+ serialized_start=1326,
+ serialized_end=1375,
)
@@ -676,8 +676,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1395,
- serialized_end=1574,
+ serialized_start=1378,
+ serialized_end=1557,
)
@@ -714,8 +714,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1658,
- serialized_end=1737,
+ serialized_start=1641,
+ serialized_end=1720,
)
_DATASETSOURCE = _descriptor.Descriptor(
@@ -747,20 +747,20 @@
name='dataset_source', full_name='feast.serving.DatasetSource.dataset_source',
index=0, containing_type=None, fields=[]),
],
- serialized_start=1577,
- serialized_end=1755,
+ serialized_start=1560,
+ serialized_end=1738,
)
_GETFEASTSERVINGINFORESPONSE.fields_by_name['type'].enum_type = _FEASTSERVINGTYPE
-_FEATURESETREQUEST.fields_by_name['max_age'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
+_FEATUREREFERENCE.fields_by_name['max_age'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
_GETONLINEFEATURESREQUEST_ENTITYROW_FIELDSENTRY.fields_by_name['value'].message_type = feast_dot_types_dot_Value__pb2._VALUE
_GETONLINEFEATURESREQUEST_ENTITYROW_FIELDSENTRY.containing_type = _GETONLINEFEATURESREQUEST_ENTITYROW
_GETONLINEFEATURESREQUEST_ENTITYROW.fields_by_name['entity_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_GETONLINEFEATURESREQUEST_ENTITYROW.fields_by_name['fields'].message_type = _GETONLINEFEATURESREQUEST_ENTITYROW_FIELDSENTRY
_GETONLINEFEATURESREQUEST_ENTITYROW.containing_type = _GETONLINEFEATURESREQUEST
-_GETONLINEFEATURESREQUEST.fields_by_name['feature_sets'].message_type = _FEATURESETREQUEST
+_GETONLINEFEATURESREQUEST.fields_by_name['features'].message_type = _FEATUREREFERENCE
_GETONLINEFEATURESREQUEST.fields_by_name['entity_rows'].message_type = _GETONLINEFEATURESREQUEST_ENTITYROW
-_GETBATCHFEATURESREQUEST.fields_by_name['feature_sets'].message_type = _FEATURESETREQUEST
+_GETBATCHFEATURESREQUEST.fields_by_name['features'].message_type = _FEATUREREFERENCE
_GETBATCHFEATURESREQUEST.fields_by_name['dataset_source'].message_type = _DATASETSOURCE
_GETONLINEFEATURESRESPONSE_FIELDVALUES_FIELDSENTRY.fields_by_name['value'].message_type = feast_dot_types_dot_Value__pb2._VALUE
_GETONLINEFEATURESRESPONSE_FIELDVALUES_FIELDSENTRY.containing_type = _GETONLINEFEATURESRESPONSE_FIELDVALUES
@@ -781,7 +781,7 @@
_DATASETSOURCE.fields_by_name['file_source'].containing_oneof = _DATASETSOURCE.oneofs_by_name['dataset_source']
DESCRIPTOR.message_types_by_name['GetFeastServingInfoRequest'] = _GETFEASTSERVINGINFOREQUEST
DESCRIPTOR.message_types_by_name['GetFeastServingInfoResponse'] = _GETFEASTSERVINGINFORESPONSE
-DESCRIPTOR.message_types_by_name['FeatureSetRequest'] = _FEATURESETREQUEST
+DESCRIPTOR.message_types_by_name['FeatureReference'] = _FEATUREREFERENCE
DESCRIPTOR.message_types_by_name['GetOnlineFeaturesRequest'] = _GETONLINEFEATURESREQUEST
DESCRIPTOR.message_types_by_name['GetBatchFeaturesRequest'] = _GETBATCHFEATURESREQUEST
DESCRIPTOR.message_types_by_name['GetOnlineFeaturesResponse'] = _GETONLINEFEATURESRESPONSE
@@ -810,12 +810,12 @@
})
_sym_db.RegisterMessage(GetFeastServingInfoResponse)
-FeatureSetRequest = _reflection.GeneratedProtocolMessageType('FeatureSetRequest', (_message.Message,), {
- 'DESCRIPTOR' : _FEATURESETREQUEST,
+FeatureReference = _reflection.GeneratedProtocolMessageType('FeatureReference', (_message.Message,), {
+ 'DESCRIPTOR' : _FEATUREREFERENCE,
'__module__' : 'feast.serving.ServingService_pb2'
- # @@protoc_insertion_point(class_scope:feast.serving.FeatureSetRequest)
+ # @@protoc_insertion_point(class_scope:feast.serving.FeatureReference)
})
-_sym_db.RegisterMessage(FeatureSetRequest)
+_sym_db.RegisterMessage(FeatureReference)
GetOnlineFeaturesRequest = _reflection.GeneratedProtocolMessageType('GetOnlineFeaturesRequest', (_message.Message,), {
@@ -924,8 +924,8 @@
file=DESCRIPTOR,
index=0,
serialized_options=None,
- serialized_start=2094,
- serialized_end=2496,
+ serialized_start=2077,
+ serialized_end=2479,
methods=[
_descriptor.MethodDescriptor(
name='GetFeastServingInfo',
diff --git a/sdk/python/feast/serving/ServingService_pb2.pyi b/sdk/python/feast/serving/ServingService_pb2.pyi
index d03fa6568fa..e10245d6c7a 100644
--- a/sdk/python/feast/serving/ServingService_pb2.pyi
+++ b/sdk/python/feast/serving/ServingService_pb2.pyi
@@ -147,32 +147,32 @@ class GetFeastServingInfoResponse(google___protobuf___message___Message):
else:
def ClearField(self, field_name: typing_extensions___Literal[u"job_staging_location",b"job_staging_location",u"type",b"type",u"version",b"version"]) -> None: ...
-class FeatureSetRequest(google___protobuf___message___Message):
+class FeatureReference(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ project = ... # type: typing___Text
name = ... # type: typing___Text
version = ... # type: int
- feature_names = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
@property
def max_age(self) -> google___protobuf___duration_pb2___Duration: ...
def __init__(self,
*,
+ project : typing___Optional[typing___Text] = None,
name : typing___Optional[typing___Text] = None,
version : typing___Optional[int] = None,
- feature_names : typing___Optional[typing___Iterable[typing___Text]] = None,
max_age : typing___Optional[google___protobuf___duration_pb2___Duration] = None,
) -> None: ...
@classmethod
- def FromString(cls, s: bytes) -> FeatureSetRequest: ...
+ def FromString(cls, s: bytes) -> FeatureReference: ...
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"max_age"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature_names",u"max_age",u"name",u"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"max_age",u"name",u"project",u"version"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"max_age",b"max_age"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature_names",b"feature_names",u"max_age",b"max_age",u"name",b"name",u"version",b"version"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"max_age",b"max_age",u"name",b"name",u"project",b"project",u"version",b"version"]) -> None: ...
class GetOnlineFeaturesRequest(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@@ -227,14 +227,14 @@ class GetOnlineFeaturesRequest(google___protobuf___message___Message):
omit_entities_in_response = ... # type: bool
@property
- def feature_sets(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FeatureSetRequest]: ...
+ def features(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FeatureReference]: ...
@property
def entity_rows(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[GetOnlineFeaturesRequest.EntityRow]: ...
def __init__(self,
*,
- feature_sets : typing___Optional[typing___Iterable[FeatureSetRequest]] = None,
+ features : typing___Optional[typing___Iterable[FeatureReference]] = None,
entity_rows : typing___Optional[typing___Iterable[GetOnlineFeaturesRequest.EntityRow]] = None,
omit_entities_in_response : typing___Optional[bool] = None,
) -> None: ...
@@ -243,22 +243,22 @@ class GetOnlineFeaturesRequest(google___protobuf___message___Message):
def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
- def ClearField(self, field_name: typing_extensions___Literal[u"entity_rows",u"feature_sets",u"omit_entities_in_response"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"entity_rows",u"features",u"omit_entities_in_response"]) -> None: ...
else:
- def ClearField(self, field_name: typing_extensions___Literal[u"entity_rows",b"entity_rows",u"feature_sets",b"feature_sets",u"omit_entities_in_response",b"omit_entities_in_response"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"entity_rows",b"entity_rows",u"features",b"features",u"omit_entities_in_response",b"omit_entities_in_response"]) -> None: ...
class GetBatchFeaturesRequest(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
@property
- def feature_sets(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FeatureSetRequest]: ...
+ def features(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FeatureReference]: ...
@property
def dataset_source(self) -> DatasetSource: ...
def __init__(self,
*,
- feature_sets : typing___Optional[typing___Iterable[FeatureSetRequest]] = None,
+ features : typing___Optional[typing___Iterable[FeatureReference]] = None,
dataset_source : typing___Optional[DatasetSource] = None,
) -> None: ...
@classmethod
@@ -267,10 +267,10 @@ class GetBatchFeaturesRequest(google___protobuf___message___Message):
def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
if sys.version_info >= (3,):
def HasField(self, field_name: typing_extensions___Literal[u"dataset_source"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dataset_source",u"feature_sets"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"dataset_source",u"features"]) -> None: ...
else:
def HasField(self, field_name: typing_extensions___Literal[u"dataset_source",b"dataset_source"]) -> bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dataset_source",b"dataset_source",u"feature_sets",b"feature_sets"]) -> None: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"dataset_source",b"dataset_source",u"features",b"features"]) -> None: ...
class GetOnlineFeaturesResponse(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...