# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: tecton_proto/api/featureservice/feature_service.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2
from tecton_proto.api.featureservice import feature_service_request_pb2 as tecton__proto_dot_api_dot_featureservice_dot_feature__service__request__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n5tecton_proto/api/featureservice/feature_service.proto\x12 tecton_proto.api.feature_service\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a=tecton_proto/api/featureservice/feature_service_request.proto\"\xaf\x02\n\x0bNameAndType\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12[\n\tdata_type\x18\x03 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x08\x64\x61taType\x12O\n\x04type\x18\x02 \x01(\x0e\x32\x37.tecton_proto.api.feature_service.FeatureServerDataTypeB\x02\x18\x01R\x04type:^\x92\x41[\n\r*\x0bNameAndType2J{\"name\":\"string\",\"dataType\": \"#/definitions/FeatureServerComplexDataType\"}\"\xe8\x01\n\x11GetFeaturesResult\x12\x32\n\x08\x66\x65\x61tures\x18\x05 \x03(\x0b\x32\x16.google.protobuf.ValueR\x08\x66\x65\x61tures\x12\x33\n\tjoin_keys\x18\x06 \x03(\x0b\x32\x16.google.protobuf.ValueR\x08joinKeys:R\x92\x41O\n\x13*\x11GetFeaturesResult28{\"result\":{\"features\":[\"object\"],\"joinKeys\":[\"object\"]}}J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05\"\xf0\x06\n\x1c\x46\x65\x61tureServerComplexDataType\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.tecton_proto.api.feature_service.FeatureServerDataTypeR\x04type\x12\x61\n\x0c\x65lement_type\x18\x02 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x0b\x65lementType\x12R\n\x06\x66ields\x18\x03 \x03(\x0b\x32:.tecton_proto.api.feature_service.FeatureServerStructFieldR\x06\x66ields\x12Y\n\x08key_type\x18\x04 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x07keyType\x12]\n\nvalue_type\x18\x05 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\tvalueType:\x91\x03\x92\x41\x8d\x03\n\x1e*\x1c\x46\x65\x61tureServerComplexDataType2\xea\x02{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]}\"\xb8\x04\n\x18\x46\x65\x61tureServerStructField\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12[\n\tdata_type\x18\x02 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x08\x64\x61taType:\xaa\x03\x92\x41\xa6\x03\n\x1a*\x18\x46\x65\x61tureServerStructField2\x87\x03{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]}}\"\xf9\x05\n\x07SloInfo\x12!\n\x0cslo_eligible\x18\x01 \x01(\x08R\x0bsloEligible\x12\x35\n\x17slo_server_time_seconds\x18\x05 \x01(\x01R\x14sloServerTimeSeconds\x12t\n\x19slo_ineligibility_reasons\x18\x02 \x03(\x0e\x32\x38.tecton_proto.api.feature_service.SloIneligibilityReasonR\x17sloIneligibilityReasons\x12?\n\x1c\x64ynamodb_response_size_bytes\x18\x03 \x01(\x05R\x19\x64ynamodbResponseSizeBytes\x12.\n\x13server_time_seconds\x18\x04 \x01(\x01R\x11serverTimeSeconds\x12,\n\x12store_time_seconds\x18\x06 \x01(\x01R\x10storeTimeSeconds\x12*\n\x11store_max_latency\x18\x07 \x01(\x01R\x0fstoreMaxLatency\x12\x39\n\x19store_response_size_bytes\x18\x08 \x01(\x05R\x16storeResponseSizeBytes:\x97\x02\x92\x41\x93\x02\n\t*\x07SloInfo2\x85\x02{\"sloEligible\":\"boolean\",\"sloServerTimeSeconds\":\"number(double)\",\"sloIneligibilityReasons\":[\"string\"],\"dynamodbResponseSizeBytes\":\"integer(int32)\",\"serverTimeSeconds\":\"number(double)\",\"storeMaxLatency\":\"number(double)\",\"storeResponseSizeBytes\":\"integer(int32)\"}\"\xa6\x12\n\x08Metadata\x12K\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32/.tecton_proto.api.feature_service.Metadata.ItemR\x08\x66\x65\x61tures\x12L\n\tjoin_keys\x18\x02 \x03(\x0b\x32/.tecton_proto.api.feature_service.Metadata.ItemR\x08joinKeys\x12\x44\n\x08slo_info\x18\x03 \x01(\x0b\x32).tecton_proto.api.feature_service.SloInfoR\x07sloInfo\x12\'\n\x0fpartial_results\x18\x04 \x01(\x08R\x0epartialResults\x1a\xaa\x06\n\x04Item\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x41\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\reffectiveTime\x12O\n\x04type\x18\x03 \x01(\x0e\x32\x37.tecton_proto.api.feature_service.FeatureServerDataTypeB\x02\x18\x01R\x04type\x12[\n\tdata_type\x18\x04 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x08\x64\x61taType\x12@\n\x06status\x18\x06 \x01(\x0e\x32(.tecton_proto.api.feature_service.StatusR\x06status:\xd4\x03\x92\x41\xd0\x03\n\x0e*\x0cMetadataItem2\xbd\x03{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}J\x04\x08\x05\x10\x06:\xe2\t\x92\x41\xde\t\n\n*\x08Metadata2\xcf\t{\"metadata\":{\"features\":[{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}],\"joinKeys\":[{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}],\"sloInfo\":{\"sloEligible\":\"boolean\",\"sloServerTimeSeconds\":\"number(double)\",\"sloIneligibilityReasons\":[\"string\"],\"dynamodbResponseSizeBytes\":\"integer(int32)\",\"serverTimeSeconds\":\"number(double)\",\"storeMaxLatency\":\"number(double)\",\"storeResponseSizeBytes\":\"integer(int32)\"},\"partialResults\":\"boolean\"}}\"\xaa\x01\n\x13GetFeaturesResponse\x12K\n\x06result\x18\x02 \x01(\x0b\x32\x33.tecton_proto.api.feature_service.GetFeaturesResultR\x06result\x12\x46\n\x08metadata\x18\x03 \x01(\x0b\x32*.tecton_proto.api.feature_service.MetadataR\x08metadata\"\xba\x01\n\x18GetFeaturesBatchResponse\x12K\n\x06result\x18\x02 \x03(\x0b\x32\x33.tecton_proto.api.feature_service.GetFeaturesResultR\x06result\x12K\n\x08metadata\x18\x04 \x01(\x0b\x32/.tecton_proto.api.feature_service.BatchMetadataR\x08metadataJ\x04\x08\x03\x10\x04\"\xba\x02\n\x0c\x42\x61tchSloInfo\x12!\n\x0cslo_eligible\x18\x01 \x01(\x08R\x0bsloEligible\x12\x35\n\x17slo_server_time_seconds\x18\x02 \x01(\x01R\x14sloServerTimeSeconds\x12t\n\x19slo_ineligibility_reasons\x18\x03 \x03(\x0e\x32\x38.tecton_proto.api.feature_service.SloIneligibilityReasonR\x17sloIneligibilityReasons\x12.\n\x13server_time_seconds\x18\x04 \x01(\x01R\x11serverTimeSeconds\x12*\n\x11store_max_latency\x18\x05 \x01(\x01R\x0fstoreMaxLatency\"\xd5\x04\n\rBatchMetadata\x12P\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x34.tecton_proto.api.feature_service.BatchMetadata.ItemR\x08\x66\x65\x61tures\x12Q\n\tjoin_keys\x18\x02 \x03(\x0b\x32\x34.tecton_proto.api.feature_service.BatchMetadata.ItemR\x08joinKeys\x12\x44\n\x08slo_info\x18\x03 \x03(\x0b\x32).tecton_proto.api.feature_service.SloInfoR\x07sloInfo\x12T\n\x0e\x62\x61tch_slo_info\x18\x04 \x01(\x0b\x32..tecton_proto.api.feature_service.BatchSloInfoR\x0c\x62\x61tchSloInfo\x1a\x82\x02\n\x04Item\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x41\n\x0e\x65\x66\x66\x65\x63tive_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\reffectiveTime\x12[\n\tdata_type\x18\x03 \x01(\x0b\x32>.tecton_proto.api.feature_service.FeatureServerComplexDataTypeR\x08\x64\x61taType\x12@\n\x06status\x18\x05 \x03(\x0e\x32(.tecton_proto.api.feature_service.StatusR\x06statusJ\x04\x08\x04\x10\x05\"i\n\x16ServiceMetadataRequest\x12O\n\x06params\x18\x01 \x01(\x0b\x32\x37.tecton_proto.api.feature_service.FeatureServiceLocatorR\x06params\"\xfa\x05\n\x17ServiceMetadataResponse\x12\x66\n\x14\x66\x65\x61ture_service_type\x18\x01 \x01(\x0e\x32\x34.tecton_proto.api.feature_service.FeatureServiceTypeR\x12\x66\x65\x61tureServiceType\x12U\n\x0finput_join_keys\x18\x02 \x03(\x0b\x32-.tecton_proto.api.feature_service.NameAndTypeR\rinputJoinKeys\x12j\n\x1ainput_request_context_keys\x18\x03 \x03(\x0b\x32-.tecton_proto.api.feature_service.NameAndTypeR\x17inputRequestContextKeys\x12W\n\x10output_join_keys\x18\x04 \x03(\x0b\x32-.tecton_proto.api.feature_service.NameAndTypeR\x0eoutputJoinKeys\x12T\n\x0e\x66\x65\x61ture_values\x18\x05 \x03(\x0b\x32-.tecton_proto.api.feature_service.NameAndTypeR\rfeatureValues:\x84\x02\x92\x41\x80\x02\n\x19*\x17ServiceMetadataResponse2\xe2\x01{\"featureServiceType\":\"string\",\"inputJoinKeys\":[\"#/definitions/NameAndType\"],\"inputRequestContextKeys\":[\"#/definitions/NameAndType\"],\"outputJoinKeys\":[\"#/definitions/NameAndType\"],\"featureValues\":[\"#/definitions/NameAndType\"]}\"g\n\x14QueryFeaturesRequest\x12O\n\x06params\x18\x01 \x01(\x0b\x32\x37.tecton_proto.api.feature_service.GetFeaturesParametersR\x06params\"\xae\x01\n\x15QueryFeaturesResponse\x12M\n\x07results\x18\x01 \x03(\x0b\x32\x33.tecton_proto.api.feature_service.GetFeaturesResultR\x07results\x12\x46\n\x08metadata\x18\x02 \x01(\x0b\x32*.tecton_proto.api.feature_service.MetadataR\x08metadata\"\xc2\x03\n\x15\x46\x65\x61tureServiceLocator\x12.\n\x12\x66\x65\x61ture_service_id\x18\x01 \x01(\tH\x00R\x10\x66\x65\x61tureServiceId\x12\x32\n\x14\x66\x65\x61ture_service_name\x18\x02 \x01(\tH\x00R\x12\x66\x65\x61tureServiceName\x12.\n\x12\x66\x65\x61ture_package_id\x18\x04 \x01(\tH\x00R\x10\x66\x65\x61turePackageId\x12\x32\n\x14\x66\x65\x61ture_package_name\x18\x05 \x01(\tH\x00R\x12\x66\x65\x61turePackageName\x12(\n\x0f\x66\x65\x61ture_view_id\x18\x06 \x01(\tH\x00R\rfeatureViewId\x12,\n\x11\x66\x65\x61ture_view_name\x18\x07 \x01(\tH\x00R\x0f\x66\x65\x61tureViewName\x12%\n\x0eworkspace_name\x18\x03 \x01(\tR\rworkspaceName:W\x92\x41T2R{\"featureServiceName\": \"fraud_detection_feature_service\", \"workspaceName\": \"prod\"}B\t\n\x07locator\"\x90\x01\n\x1dGetFeatureServiceStateRequest\x12o\n\x17\x66\x65\x61ture_service_locator\x18\x01 \x01(\x0b\x32\x37.tecton_proto.api.feature_service.FeatureServiceLocatorR\x15\x66\x65\x61tureServiceLocator\"&\n\x1eGetFeatureServiceStateResponseJ\x04\x08\x01\x10\x02*/\n\x12\x46\x65\x61tureServiceType\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0c\n\x08WILDCARD\x10\x01*\x99\x01\n\x15\x46\x65\x61tureServerDataType\x12\x10\n\x0cmissing_type\x10\x00\x12\x0b\n\x07\x62oolean\x10\x01\x12\x0b\n\x07\x66loat64\x10\x02\x12\t\n\x05int64\x10\x03\x12\n\n\x06string\x10\x04\x12\x10\n\x0cstring_array\x10\x05\x12\t\n\x05\x61rray\x10\x06\x12\x0b\n\x07\x66loat32\x10\x07\x12\n\n\x06struct\x10\x08\x12\x07\n\x03map\x10\t*G\n\x06Status\x12\x0b\n\x07PRESENT\x10\x00\x12\x10\n\x0cMISSING_DATA\x10\x01\x12\x12\n\x0eUNKNOWN_STATUS\x10\x02\x12\n\n\x06\x43\x41\x43HED\x10\x03*\x9a\x01\n\x16SloIneligibilityReason\x12\x0b\n\x07UNKNOWN\x10\x00\x12)\n%DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED\x10\x01\x12&\n\"REDIS_RESPONSE_SIZE_LIMIT_EXCEEDED\x10\x02\x12 \n\x1cREDIS_LATENCY_LIMIT_EXCEEDED\x10\x03\x32\x85\xdd\x01\n\x0e\x46\x65\x61tureService\x12\xdbS\n\x0bGetFeatures\x12\x34.tecton_proto.api.feature_service.GetFeaturesRequest\x1a\x35.tecton_proto.api.feature_service.GetFeaturesResponse\"\xdeR\x82\xd3\xe4\x93\x02%\" /v1/feature-service/get-features:\x01*\x92\x41\xafR\n\x0f\x46\x65\x61ture Service\x12\x0bGetFeatures\x1a\x46Get Features API to retrieve feature values from Tecton\'s online storeJ\xa6\x12\n\x03\x32\x30\x30\x12\x9e\x12\n\x02OK\"\x97\x12\n\x10\x61pplication/json\x12\x82\x12{\"result\":{\"features\":[true,null,null,null,\"669\",58.349395161290275,40.13619047619047,59.59825688073392,28941.299999999977,842.8599999999999,90946.93999999996,[\"892054b9598370dce846bb6e4b5805a1\",\"cc9f13814a736160984bc9896222e4d9\",\"43a9799c961de6ebb22c122d8c7eb340\"]]},\"metadata\":{\"features\":[{\"name\":\"transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average\",\"dataType\":{\"type\":\"boolean\"},\"status\":\"PRESENT\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_1d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_30d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_90d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d\",\"effectiveTime\":\"2023-05-04T00:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_1d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_1h_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_3d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_1d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_1h_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_3d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_counts.transaction_id_last_3_1d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"array\",\"elementType\":{\"type\":\"string\"}},\"status\":\"PRESENT\"}],\"sloInfo\":{\"sloEligible\":true,\"sloServerTimeSeconds\":0.015835683,\"dynamodbResponseSizeBytes\":23722,\"serverTimeSeconds\":0.016889888,\"storeMaxLatency\":0.02687345,\"storeResponseSizeBytes\":23722}}}J\xf1\x0b\n\x03\x34\x30\x30\x12\xe9\x0b\n\xe0\nBad Request\n\n1. **Error**: `Missing required join key: user_id` \n - This error indicates that the request is missing one or more of the required join keys for your feature service. To resolve this, ensure that the `join_key_map` in your request includes a union of all join keys across all feature views in the feature service.\n2. **Error**: `Expected key not found: [amount] in requestContextMap` \n - This error indicates that an expected key `amount` was not found in the query\'s `requestContextMap` for an On Demand Feature View (ODFV). Please verify that the `requestContextMap` includes a union of all request context keys across all ODFVs in the feature service. \n3. **Error**: `Unexpected JSON type for content_id in joinKeyMap. Expected int64 or null.`\n - This error indicates that your feature service expects a join_key `content_id` of type int64 but your request contains a join_key `content_id` of type string. Please ensure that the join_key types in the request match the data types for the corresponding join keys in your feature view definitions.\n4. **Error**: `Unknown join key: join_key, expected one of: [user_id ad_id]`\n - This error indicates that your feature service expects join keys `user_id` and `ad_id` but received an unknown join key.  Please ensure that the join keys in your request matches the entity key strings defined for your feature views.\"\x83\x01\n\x10\x61pplication/json\x12o{\"error\": \"Missing required join key: `user_id`\", \"message\": \"Missing required join key: `user_id`\", \"code\": 3}J\x9d\x07\n\x03\x34\x30\x31\x12\x95\x07\n\xe6\x04Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\xa9\x02\n\x10\x61pplication/json\x12\x94\x02{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\xf5\x06\n\x03\x34\x30\x33\x12\xed\x06\n\x83\x05\x46orbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the feature service. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query a feature service in that workspace. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\xe4\x01\n\x10\x61pplication/json\x12\xcf\x01{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\xa7\x0f\n\x03\x34\x30\x34\x12\x9f\x0f\n\xff\x0bNot Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n2. **Error**: `Cannot retrieve features. FeatureView: my_feature_view has no materialized data in the online store.`\n- Check that your materialization jobs have completed successfully so that the feature view has materialized data in the online store.\n3. **Error**: `Cannot retrieve features. An input for FeatureView: my_odfv has no materialized data in the online store.` \n - This error indicates that one or more of the Feature Views that the ODFV `my_odfv` depends on has no materialized data in the online store. Verify that all Feature Views that `my_odfv` depends on have online materialization enabled and have successfully completed materialization jobs.\n4. **Error**: `The DynamoDB table was not found. If this package was newly created and is serving in multiple regions, you may need to wait for DynamoDB Global Tables to finish creating a replica table.`\n - This error occurs when using DynamoDB as the Online Store and indicates that Tecton was unable to find or read from the DynamoDB Table for one or more Feature Views in the Feature Service. Please review any permission changes in DynamoDB Tables on your end and if this issue persists, please contact Tecton Support for assistance.\"\x9a\x03\n\x10\x61pplication/json\x12\x85\x03{\"error\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"message\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"code\": 5}J\xfd\r\n\x03\x34\x32\x39\x12\xf5\r\n\xa9\x0cResources Exhausted.\n\n1. **Error**: `GetFeatures exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\n2. **Error**: `DynamoDB throttled the request. The request rate exceeds the aws account\'s throughput limit, or you may be requesting a hot key.`\n - Tecton uses DynamoDB as the Online Store in OnDemand mode which autoscales the DynamoDB Tables based on workloads. This error indicates that the current rate of requests exceeds the allowed throughput for your AWS account and the DynamoDB Tables cannot be scaled further. Please reduce your request rate or contact AWS Support to request a limit increase for your account. For more information on Throughput Default Quotas please refer to the [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ServiceQuotas.html)\n3. **Error**: `DynamoDB throttled the request. The request rate exceeds the provisioned throughput settings for your DynamoDB table or index.`\n - In DynamoDB, each partition on a table can serve up to 3000 Read Request Units and this error indicates that the traffic to a partition exceeds this limit. Please reduce your request rate and retry your request.\"\xc6\x01\n\x10\x61pplication/json\x12\xb1\x01{\"error\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"message\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"code\": 8}J\x87\x04\n\x03\x35\x30\x33\x12\xff\x03\n\xf7\x02Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\x82\x01\n\x10\x61pplication/json\x12n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\xdd\x03\n\x03\x35\x30\x34\x12\xd5\x03\n\x83\x03Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\x10\x61pplication/json\x12\x39{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}\x12\xafV\n\x10GetFeaturesBatch\x12\x39.tecton_proto.api.feature_service.GetFeaturesBatchRequest\x1a:.tecton_proto.api.feature_service.GetFeaturesBatchResponse\"\xa3U\x82\xd3\xe4\x93\x02+\"&/v1/feature-service/get-features-batch:\x01*\x92\x41\xeeT\n\x0f\x46\x65\x61ture Service\x12\x10GetFeaturesBatch\x1a\xde\x01\x42\x61tch GetFeatures API to retrieve feature values in batch from Tecton\'s online store. The maximum batch size for a single batch request is 10.\n **NOTE: This endpoint is only for feature services with Redis feature views.**J\xef\x11\n\x03\x32\x30\x30\x12\xe7\x11\n\x02OK\"\xe0\x11\n\x10\x61pplication/json\x12\xcb\x11{\"result\":[{\"features\":[null,null,null,\"37\",\"3\",\"138\",\"307\",\"37\",\"3\",\"138\"]},{\"features\":[null,null,null,\"43\",null,\"128\",\"254\",\"43\",null,\"128\"]}],\"metadata\":{\"features\":[{\"name\":\"user_ad_impression_counts.impression_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_ad_impression_counts.impression_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_ad_impression_counts.impression_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_click_counts.clicked_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_click_counts.clicked_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"MISSING_DATA\"]},{\"name\":\"user_click_counts.clicked_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_distinct_ad_count_7d.distinct_ad_count\",\"effectiveTime\":\"2023-05-26T00:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_impression_counts.impression_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_impression_counts.impression_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"MISSING_DATA\"]},{\"name\":\"user_impression_counts.impression_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]}],\"sloInfo\":[{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001231726,\"dynamodbResponseSizeBytes\":1873,\"serverTimeSeconds\":0.001231726,\"storeMaxLatency\":0.000877174,\"storeResponseSizeBytes\":1873},{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001329688,\"dynamodbResponseSizeBytes\":1937,\"serverTimeSeconds\":0.001329688,\"storeMaxLatency\":0.000791104,\"storeResponseSizeBytes\":1937}],\"batchSloInfo\":{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001329688,\"serverTimeSeconds\":0.00181146,\"storeMaxLatency\":0.000877174}}}J\xc9\r\n\x03\x34\x30\x30\x12\xc1\r\n\xb8\x0c\x42\x61\x64 Request\n\n1. **Error**: `Missing required join key: user_id` \n - This error indicates that the request is missing one or more of the required join keys for your feature service. To resolve this, ensure that the `join_key_map` in your request includes a union of all join keys across all feature views in the feature service.\n2. **Error**: `Expected key not found: [amount] in requestContextMap` \n - This error indicates that an expected key `amount` was not found in the query\'s `requestContextMap` for an On Demand Feature View (ODFV). Please verify that the `requestContextMap` includes a union of all request context keys across all ODFVs in the feature service. \n3. **Error**: `Unexpected JSON type for content_id in joinKeyMap. Expected int64 or null.`\n - This error indicates that your feature service expects a join_key `content_id` of type int64 but your request contains a join_key `content_id` of type string. Please ensure that the join_key types in the request match the data types for the corresponding join keys in your feature view definitions.\n4. **Error**: `Unknown join key: join_key, expected one of: [user_id ad_id]`\n - This error indicates that your feature service expects join keys `user_id` and `ad_id` but received an unknown join key.  Please ensure that the join keys in your request matches the entity key strings defined for your feature views.\n5. **Error**: `Batch size 11 exceeds maximum of 10.`\n - This error indicates that you are batching too many feature requests in a single batch request. The maximum number of feature requests per batch request is 10.\"\x83\x01\n\x10\x61pplication/json\x12o{\"error\": \"Missing required join key: `user_id`\", \"message\": \"Missing required join key: `user_id`\", \"code\": 3}J\x9d\x07\n\x03\x34\x30\x31\x12\x95\x07\n\xe6\x04Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\xa9\x02\n\x10\x61pplication/json\x12\x94\x02{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\xf5\x06\n\x03\x34\x30\x33\x12\xed\x06\n\x83\x05\x46orbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the feature service. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query a feature service in that workspace. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\xe4\x01\n\x10\x61pplication/json\x12\xcf\x01{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\xa7\x0f\n\x03\x34\x30\x34\x12\x9f\x0f\n\xff\x0bNot Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n2. **Error**: `Cannot retrieve features. FeatureView: my_feature_view has no materialized data in the online store.`\n- Check that your materialization jobs have completed successfully so that the feature view has materialized data in the online store.\n3. **Error**: `Cannot retrieve features. An input for FeatureView: my_odfv has no materialized data in the online store.` \n - This error indicates that one or more of the Feature Views that the ODFV `my_odfv` depends on has no materialized data in the online store. Verify that all Feature Views that `my_odfv` depends on have online materialization enabled and have successfully completed materialization jobs.\n4. **Error**: `The DynamoDB table was not found. If this package was newly created and is serving in multiple regions, you may need to wait for DynamoDB Global Tables to finish creating a replica table.`\n - This error occurs when using DynamoDB as the Online Store and indicates that Tecton was unable to find or read from the DynamoDB Table for one or more Feature Views in the Feature Service. Please review any permission changes in DynamoDB Tables on your end and if this issue persists, please contact Tecton Support for assistance.\"\x9a\x03\n\x10\x61pplication/json\x12\x85\x03{\"error\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"message\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"code\": 5}J\xfd\r\n\x03\x34\x32\x39\x12\xf5\r\n\xa9\x0cResources Exhausted.\n\n1. **Error**: `GetFeatures exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\n2. **Error**: `DynamoDB throttled the request. The request rate exceeds the aws account\'s throughput limit, or you may be requesting a hot key.`\n - Tecton uses DynamoDB as the Online Store in OnDemand mode which autoscales the DynamoDB Tables based on workloads. This error indicates that the current rate of requests exceeds the allowed throughput for your AWS account and the DynamoDB Tables cannot be scaled further. Please reduce your request rate or contact AWS Support to request a limit increase for your account. For more information on Throughput Default Quotas please refer to the [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ServiceQuotas.html)\n3. **Error**: `DynamoDB throttled the request. The request rate exceeds the provisioned throughput settings for your DynamoDB table or index.`\n - In DynamoDB, each partition on a table can serve up to 3000 Read Request Units and this error indicates that the traffic to a partition exceeds this limit. Please reduce your request rate and retry your request.\"\xc6\x01\n\x10\x61pplication/json\x12\xb1\x01{\"error\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"message\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"code\": 8}J\x87\x04\n\x03\x35\x30\x33\x12\xff\x03\n\xf7\x02Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\x82\x01\n\x10\x61pplication/json\x12n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\xdd\x03\n\x03\x35\x30\x34\x12\xd5\x03\n\x83\x03Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\x10\x61pplication/json\x12\x39{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}\x12\xaf\x01\n\rQueryFeatures\x12\x36.tecton_proto.api.feature_service.QueryFeaturesRequest\x1a\x37.tecton_proto.api.feature_service.QueryFeaturesResponse\"-\x82\xd3\xe4\x93\x02\'\"\"/v1/feature-service/query-features:\x01*\x12\xd5\x01\n\x16GetFeatureServiceState\x12?.tecton_proto.api.feature_service.GetFeatureServiceStateRequest\x1a@.tecton_proto.api.feature_service.GetFeatureServiceStateResponse\"8\x82\xd3\xe4\x93\x02\x32\"-/v1/feature-service/get-feature-service-state:\x01*\x12\xfd,\n\x0fServiceMetadata\x12\x38.tecton_proto.api.feature_service.ServiceMetadataRequest\x1a\x39.tecton_proto.api.feature_service.ServiceMetadataResponse\"\xf4+\x82\xd3\xe4\x93\x02!\"\x1c/v1/feature-service/metadata:\x01*\x92\x41\xc9+\n\x0f\x46\x65\x61ture Service\x12\x08Metadata\x1a\x32Get Metadata about the feature service from TectonJ\x8e\x0b\n\x03\x32\x30\x30\x12\x86\x0b\n\x02OK\"\xff\n\n\x10\x61pplication/json\x12\xea\n{\"featureServiceType\":\"DEFAULT\",\"inputJoinKeys\":[{\"name\":\"user_id\",\"dataType\":{\"type\":\"string\"}},{\"name\":\"merchant\",\"dataType\":{\"type\":\"string\"}}],\"inputRequestContextKeys\":[{\"name\":\"amt\",\"dataType\":{\"type\":\"float64\"}}],\"featureValues\":[{\"name\":\"transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average\",\"dataType\":{\"type\":\"boolean\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_1d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_30d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_90d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d\",\"dataType\":{\"type\":\"int64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_1d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_1h_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_3d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_1d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_1h_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_3d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_counts.transaction_id_last_3_1d_1d\",\"dataType\":{\"type\":\"array\",\"elementType\":{\"type\":\"string\"}}}]}J\x9d\x07\n\x03\x34\x30\x31\x12\x95\x07\n\xe6\x04Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\xa9\x02\n\x10\x61pplication/json\x12\x94\x02{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\xe0\x06\n\x03\x34\x30\x33\x12\xd8\x06\n\xee\x04\x46orbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the metadata endpoint. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query the endpoint. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\xe4\x01\n\x10\x61pplication/json\x12\xcf\x01{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\xa0\x04\n\x03\x34\x30\x34\x12\x98\x04\n\xce\x02Not Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n\"\xc4\x01\n\x10\x61pplication/json\x12\xaf\x01{\"error\": \"Unknown feature_service_name: my_feature_service for workspace: prod\", \"message\": \"Unknown feature_service_name: my_feature_service for workspace: prod\", \"code\": 5}J\xd6\x05\n\x03\x34\x32\x39\x12\xce\x05\n\x88\x04Resources Exhausted.\n\n1. **Error**: `Metadata exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\"\xc0\x01\n\x10\x61pplication/json\x12\xab\x01{\"error\": \"Metadata exceeded the concurrent request limit, please retry later\", \"message\": \"Metadata exceeded the concurrent request limit, please retry later\", \"code\": 8}J\x87\x04\n\x03\x35\x30\x33\x12\xff\x03\n\xf7\x02Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\x82\x01\n\x10\x61pplication/json\x12n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\xdd\x03\n\x03\x35\x30\x34\x12\xd5\x03\n\x83\x03Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\x10\x61pplication/json\x12\x39{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}\x1a\xd8\x02\x92\x41\xd4\x02\n\x0f\x46\x65\x61ture Service\x12\xc0\x02Tecton provides a low-latency feature server that exposes HTTP endpoints to retrieve feature values and metadata from the online store. These endpoints are typically used during model predictions. The feature servers retrieve data from the online store and perform any additional aggregations and filtering as necessary.B6Z4github.com/tecton-ai/tecton_proto/api/featureservice')

_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tecton_proto.api.featureservice.feature_service_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z4github.com/tecton-ai/tecton_proto/api/featureservice'
  _NAMEANDTYPE.fields_by_name['type']._options = None
  _NAMEANDTYPE.fields_by_name['type']._serialized_options = b'\030\001'
  _NAMEANDTYPE._options = None
  _NAMEANDTYPE._serialized_options = b'\222A[\n\r*\013NameAndType2J{\"name\":\"string\",\"dataType\": \"#/definitions/FeatureServerComplexDataType\"}'
  _GETFEATURESRESULT._options = None
  _GETFEATURESRESULT._serialized_options = b'\222AO\n\023*\021GetFeaturesResult28{\"result\":{\"features\":[\"object\"],\"joinKeys\":[\"object\"]}}'
  _FEATURESERVERCOMPLEXDATATYPE._options = None
  _FEATURESERVERCOMPLEXDATATYPE._serialized_options = b'\222A\215\003\n\036*\034FeatureServerComplexDataType2\352\002{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]}'
  _FEATURESERVERSTRUCTFIELD._options = None
  _FEATURESERVERSTRUCTFIELD._serialized_options = b'\222A\246\003\n\032*\030FeatureServerStructField2\207\003{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]}}'
  _SLOINFO._options = None
  _SLOINFO._serialized_options = b'\222A\223\002\n\t*\007SloInfo2\205\002{\"sloEligible\":\"boolean\",\"sloServerTimeSeconds\":\"number(double)\",\"sloIneligibilityReasons\":[\"string\"],\"dynamodbResponseSizeBytes\":\"integer(int32)\",\"serverTimeSeconds\":\"number(double)\",\"storeMaxLatency\":\"number(double)\",\"storeResponseSizeBytes\":\"integer(int32)\"}'
  _METADATA_ITEM.fields_by_name['type']._options = None
  _METADATA_ITEM.fields_by_name['type']._serialized_options = b'\030\001'
  _METADATA_ITEM._options = None
  _METADATA_ITEM._serialized_options = b'\222A\320\003\n\016*\014MetadataItem2\275\003{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}'
  _METADATA._options = None
  _METADATA._serialized_options = b'\222A\336\t\n\n*\010Metadata2\317\t{\"metadata\":{\"features\":[{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}],\"joinKeys\":[{\"name\":\"string\",\"effectiveTime\":\"string(date-time)\",\"dataType\":{\"type\":\"string\",\"elementType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[{\"name\":\"string\",\"dataType\":\"#/definitions/FeatureServerComplexDataType\"}]},\"fields\":[{\"name\":\"string\",\"dataType\":{\"type\":\"string\",\"elementType\":\"#/definitions/FeatureServerComplexDataType\",\"fields\":[\"#/definitions/FeatureServerStructField\"]}}]},\"status\":\"string\"}],\"sloInfo\":{\"sloEligible\":\"boolean\",\"sloServerTimeSeconds\":\"number(double)\",\"sloIneligibilityReasons\":[\"string\"],\"dynamodbResponseSizeBytes\":\"integer(int32)\",\"serverTimeSeconds\":\"number(double)\",\"storeMaxLatency\":\"number(double)\",\"storeResponseSizeBytes\":\"integer(int32)\"},\"partialResults\":\"boolean\"}}'
  _SERVICEMETADATARESPONSE._options = None
  _SERVICEMETADATARESPONSE._serialized_options = b'\222A\200\002\n\031*\027ServiceMetadataResponse2\342\001{\"featureServiceType\":\"string\",\"inputJoinKeys\":[\"#/definitions/NameAndType\"],\"inputRequestContextKeys\":[\"#/definitions/NameAndType\"],\"outputJoinKeys\":[\"#/definitions/NameAndType\"],\"featureValues\":[\"#/definitions/NameAndType\"]}'
  _FEATURESERVICELOCATOR._options = None
  _FEATURESERVICELOCATOR._serialized_options = b'\222AT2R{\"featureServiceName\": \"fraud_detection_feature_service\", \"workspaceName\": \"prod\"}'
  _FEATURESERVICE._options = None
  _FEATURESERVICE._serialized_options = b'\222A\324\002\n\017Feature Service\022\300\002Tecton provides a low-latency feature server that exposes HTTP endpoints to retrieve feature values and metadata from the online store. These endpoints are typically used during model predictions. The feature servers retrieve data from the online store and perform any additional aggregations and filtering as necessary.'
  _FEATURESERVICE.methods_by_name['GetFeatures']._options = None
  _FEATURESERVICE.methods_by_name['GetFeatures']._serialized_options = b'\202\323\344\223\002%\" /v1/feature-service/get-features:\001*\222A\257R\n\017Feature Service\022\013GetFeatures\032FGet Features API to retrieve feature values from Tecton\'s online storeJ\246\022\n\003200\022\236\022\n\002OK\"\227\022\n\020application/json\022\202\022{\"result\":{\"features\":[true,null,null,null,\"669\",58.349395161290275,40.13619047619047,59.59825688073392,28941.299999999977,842.8599999999999,90946.93999999996,[\"892054b9598370dce846bb6e4b5805a1\",\"cc9f13814a736160984bc9896222e4d9\",\"43a9799c961de6ebb22c122d8c7eb340\"]]},\"metadata\":{\"features\":[{\"name\":\"transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average\",\"dataType\":{\"type\":\"boolean\"},\"status\":\"PRESENT\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_1d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_30d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"merchant_fraud_rate.is_fraud_mean_90d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"MISSING_DATA\"},{\"name\":\"user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d\",\"effectiveTime\":\"2023-05-04T00:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_1d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_1h_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_mean_3d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_1d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_1h_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_amount_metrics.amt_sum_3d_10m\",\"effectiveTime\":\"2023-05-04T15:50:00Z\",\"dataType\":{\"type\":\"float64\"},\"status\":\"PRESENT\"},{\"name\":\"user_transaction_counts.transaction_id_last_3_1d_1d\",\"effectiveTime\":\"2023-05-03T00:00:00Z\",\"dataType\":{\"type\":\"array\",\"elementType\":{\"type\":\"string\"}},\"status\":\"PRESENT\"}],\"sloInfo\":{\"sloEligible\":true,\"sloServerTimeSeconds\":0.015835683,\"dynamodbResponseSizeBytes\":23722,\"serverTimeSeconds\":0.016889888,\"storeMaxLatency\":0.02687345,\"storeResponseSizeBytes\":23722}}}J\361\013\n\003400\022\351\013\n\340\nBad Request\n\n1. **Error**: `Missing required join key: user_id` \n - This error indicates that the request is missing one or more of the required join keys for your feature service. To resolve this, ensure that the `join_key_map` in your request includes a union of all join keys across all feature views in the feature service.\n2. **Error**: `Expected key not found: [amount] in requestContextMap` \n - This error indicates that an expected key `amount` was not found in the query\'s `requestContextMap` for an On Demand Feature View (ODFV). Please verify that the `requestContextMap` includes a union of all request context keys across all ODFVs in the feature service. \n3. **Error**: `Unexpected JSON type for content_id in joinKeyMap. Expected int64 or null.`\n - This error indicates that your feature service expects a join_key `content_id` of type int64 but your request contains a join_key `content_id` of type string. Please ensure that the join_key types in the request match the data types for the corresponding join keys in your feature view definitions.\n4. **Error**: `Unknown join key: join_key, expected one of: [user_id ad_id]`\n - This error indicates that your feature service expects join keys `user_id` and `ad_id` but received an unknown join key.  Please ensure that the join keys in your request matches the entity key strings defined for your feature views.\"\203\001\n\020application/json\022o{\"error\": \"Missing required join key: `user_id`\", \"message\": \"Missing required join key: `user_id`\", \"code\": 3}J\235\007\n\003401\022\225\007\n\346\004Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\251\002\n\020application/json\022\224\002{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\365\006\n\003403\022\355\006\n\203\005Forbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the feature service. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query a feature service in that workspace. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\344\001\n\020application/json\022\317\001{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\247\017\n\003404\022\237\017\n\377\013Not Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n2. **Error**: `Cannot retrieve features. FeatureView: my_feature_view has no materialized data in the online store.`\n- Check that your materialization jobs have completed successfully so that the feature view has materialized data in the online store.\n3. **Error**: `Cannot retrieve features. An input for FeatureView: my_odfv has no materialized data in the online store.` \n - This error indicates that one or more of the Feature Views that the ODFV `my_odfv` depends on has no materialized data in the online store. Verify that all Feature Views that `my_odfv` depends on have online materialization enabled and have successfully completed materialization jobs.\n4. **Error**: `The DynamoDB table was not found. If this package was newly created and is serving in multiple regions, you may need to wait for DynamoDB Global Tables to finish creating a replica table.`\n - This error occurs when using DynamoDB as the Online Store and indicates that Tecton was unable to find or read from the DynamoDB Table for one or more Feature Views in the Feature Service. Please review any permission changes in DynamoDB Tables on your end and if this issue persists, please contact Tecton Support for assistance.\"\232\003\n\020application/json\022\205\003{\"error\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"message\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"code\": 5}J\375\r\n\003429\022\365\r\n\251\014Resources Exhausted.\n\n1. **Error**: `GetFeatures exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\n2. **Error**: `DynamoDB throttled the request. The request rate exceeds the aws account\'s throughput limit, or you may be requesting a hot key.`\n - Tecton uses DynamoDB as the Online Store in OnDemand mode which autoscales the DynamoDB Tables based on workloads. This error indicates that the current rate of requests exceeds the allowed throughput for your AWS account and the DynamoDB Tables cannot be scaled further. Please reduce your request rate or contact AWS Support to request a limit increase for your account. For more information on Throughput Default Quotas please refer to the [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ServiceQuotas.html)\n3. **Error**: `DynamoDB throttled the request. The request rate exceeds the provisioned throughput settings for your DynamoDB table or index.`\n - In DynamoDB, each partition on a table can serve up to 3000 Read Request Units and this error indicates that the traffic to a partition exceeds this limit. Please reduce your request rate and retry your request.\"\306\001\n\020application/json\022\261\001{\"error\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"message\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"code\": 8}J\207\004\n\003503\022\377\003\n\367\002Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\202\001\n\020application/json\022n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\335\003\n\003504\022\325\003\n\203\003Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\020application/json\0229{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}'
  _FEATURESERVICE.methods_by_name['GetFeaturesBatch']._options = None
  _FEATURESERVICE.methods_by_name['GetFeaturesBatch']._serialized_options = b'\202\323\344\223\002+\"&/v1/feature-service/get-features-batch:\001*\222A\356T\n\017Feature Service\022\020GetFeaturesBatch\032\336\001Batch GetFeatures API to retrieve feature values in batch from Tecton\'s online store. The maximum batch size for a single batch request is 10.\n **NOTE: This endpoint is only for feature services with Redis feature views.**J\357\021\n\003200\022\347\021\n\002OK\"\340\021\n\020application/json\022\313\021{\"result\":[{\"features\":[null,null,null,\"37\",\"3\",\"138\",\"307\",\"37\",\"3\",\"138\"]},{\"features\":[null,null,null,\"43\",null,\"128\",\"254\",\"43\",null,\"128\"]}],\"metadata\":{\"features\":[{\"name\":\"user_ad_impression_counts.impression_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_ad_impression_counts.impression_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_ad_impression_counts.impression_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"MISSING_DATA\",\"MISSING_DATA\"]},{\"name\":\"user_click_counts.clicked_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_click_counts.clicked_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"MISSING_DATA\"]},{\"name\":\"user_click_counts.clicked_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_distinct_ad_count_7d.distinct_ad_count\",\"effectiveTime\":\"2023-05-26T00:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_impression_counts.impression_count_1d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]},{\"name\":\"user_impression_counts.impression_count_1h_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"MISSING_DATA\"]},{\"name\":\"user_impression_counts.impression_count_3d_1h\",\"effectiveTime\":\"2023-05-26T18:00:00Z\",\"dataType\":{\"type\":\"int64\"},\"status\":[\"PRESENT\",\"PRESENT\"]}],\"sloInfo\":[{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001231726,\"dynamodbResponseSizeBytes\":1873,\"serverTimeSeconds\":0.001231726,\"storeMaxLatency\":0.000877174,\"storeResponseSizeBytes\":1873},{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001329688,\"dynamodbResponseSizeBytes\":1937,\"serverTimeSeconds\":0.001329688,\"storeMaxLatency\":0.000791104,\"storeResponseSizeBytes\":1937}],\"batchSloInfo\":{\"sloEligible\":true,\"sloServerTimeSeconds\":0.001329688,\"serverTimeSeconds\":0.00181146,\"storeMaxLatency\":0.000877174}}}J\311\r\n\003400\022\301\r\n\270\014Bad Request\n\n1. **Error**: `Missing required join key: user_id` \n - This error indicates that the request is missing one or more of the required join keys for your feature service. To resolve this, ensure that the `join_key_map` in your request includes a union of all join keys across all feature views in the feature service.\n2. **Error**: `Expected key not found: [amount] in requestContextMap` \n - This error indicates that an expected key `amount` was not found in the query\'s `requestContextMap` for an On Demand Feature View (ODFV). Please verify that the `requestContextMap` includes a union of all request context keys across all ODFVs in the feature service. \n3. **Error**: `Unexpected JSON type for content_id in joinKeyMap. Expected int64 or null.`\n - This error indicates that your feature service expects a join_key `content_id` of type int64 but your request contains a join_key `content_id` of type string. Please ensure that the join_key types in the request match the data types for the corresponding join keys in your feature view definitions.\n4. **Error**: `Unknown join key: join_key, expected one of: [user_id ad_id]`\n - This error indicates that your feature service expects join keys `user_id` and `ad_id` but received an unknown join key.  Please ensure that the join keys in your request matches the entity key strings defined for your feature views.\n5. **Error**: `Batch size 11 exceeds maximum of 10.`\n - This error indicates that you are batching too many feature requests in a single batch request. The maximum number of feature requests per batch request is 10.\"\203\001\n\020application/json\022o{\"error\": \"Missing required join key: `user_id`\", \"message\": \"Missing required join key: `user_id`\", \"code\": 3}J\235\007\n\003401\022\225\007\n\346\004Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\251\002\n\020application/json\022\224\002{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\365\006\n\003403\022\355\006\n\203\005Forbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the feature service. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query a feature service in that workspace. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\344\001\n\020application/json\022\317\001{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\247\017\n\003404\022\237\017\n\377\013Not Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n2. **Error**: `Cannot retrieve features. FeatureView: my_feature_view has no materialized data in the online store.`\n- Check that your materialization jobs have completed successfully so that the feature view has materialized data in the online store.\n3. **Error**: `Cannot retrieve features. An input for FeatureView: my_odfv has no materialized data in the online store.` \n - This error indicates that one or more of the Feature Views that the ODFV `my_odfv` depends on has no materialized data in the online store. Verify that all Feature Views that `my_odfv` depends on have online materialization enabled and have successfully completed materialization jobs.\n4. **Error**: `The DynamoDB table was not found. If this package was newly created and is serving in multiple regions, you may need to wait for DynamoDB Global Tables to finish creating a replica table.`\n - This error occurs when using DynamoDB as the Online Store and indicates that Tecton was unable to find or read from the DynamoDB Table for one or more Feature Views in the Feature Service. Please review any permission changes in DynamoDB Tables on your end and if this issue persists, please contact Tecton Support for assistance.\"\232\003\n\020application/json\022\205\003{\"error\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"message\": \"Unable to query FeatureService `fs` for workspace `ws`. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.\", \"code\": 5}J\375\r\n\003429\022\365\r\n\251\014Resources Exhausted.\n\n1. **Error**: `GetFeatures exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\n2. **Error**: `DynamoDB throttled the request. The request rate exceeds the aws account\'s throughput limit, or you may be requesting a hot key.`\n - Tecton uses DynamoDB as the Online Store in OnDemand mode which autoscales the DynamoDB Tables based on workloads. This error indicates that the current rate of requests exceeds the allowed throughput for your AWS account and the DynamoDB Tables cannot be scaled further. Please reduce your request rate or contact AWS Support to request a limit increase for your account. For more information on Throughput Default Quotas please refer to the [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ServiceQuotas.html)\n3. **Error**: `DynamoDB throttled the request. The request rate exceeds the provisioned throughput settings for your DynamoDB table or index.`\n - In DynamoDB, each partition on a table can serve up to 3000 Read Request Units and this error indicates that the traffic to a partition exceeds this limit. Please reduce your request rate and retry your request.\"\306\001\n\020application/json\022\261\001{\"error\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"message\": \"GetFeatures exceeded the concurrent request limit, please retry later\", \"code\": 8}J\207\004\n\003503\022\377\003\n\367\002Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\202\001\n\020application/json\022n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\335\003\n\003504\022\325\003\n\203\003Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\020application/json\0229{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}'
  _FEATURESERVICE.methods_by_name['QueryFeatures']._options = None
  _FEATURESERVICE.methods_by_name['QueryFeatures']._serialized_options = b'\202\323\344\223\002\'\"\"/v1/feature-service/query-features:\001*'
  _FEATURESERVICE.methods_by_name['GetFeatureServiceState']._options = None
  _FEATURESERVICE.methods_by_name['GetFeatureServiceState']._serialized_options = b'\202\323\344\223\0022\"-/v1/feature-service/get-feature-service-state:\001*'
  _FEATURESERVICE.methods_by_name['ServiceMetadata']._options = None
  _FEATURESERVICE.methods_by_name['ServiceMetadata']._serialized_options = b'\202\323\344\223\002!\"\034/v1/feature-service/metadata:\001*\222A\311+\n\017Feature Service\022\010Metadata\0322Get Metadata about the feature service from TectonJ\216\013\n\003200\022\206\013\n\002OK\"\377\n\n\020application/json\022\352\n{\"featureServiceType\":\"DEFAULT\",\"inputJoinKeys\":[{\"name\":\"user_id\",\"dataType\":{\"type\":\"string\"}},{\"name\":\"merchant\",\"dataType\":{\"type\":\"string\"}}],\"inputRequestContextKeys\":[{\"name\":\"amt\",\"dataType\":{\"type\":\"float64\"}}],\"featureValues\":[{\"name\":\"transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average\",\"dataType\":{\"type\":\"boolean\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_1d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_30d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"merchant_fraud_rate.is_fraud_mean_90d_1d\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d\",\"dataType\":{\"type\":\"int64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_1d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_1h_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_mean_3d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_1d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_1h_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_amount_metrics.amt_sum_3d_10m\",\"dataType\":{\"type\":\"float64\"}},{\"name\":\"user_transaction_counts.transaction_id_last_3_1d_1d\",\"dataType\":{\"type\":\"array\",\"elementType\":{\"type\":\"string\"}}}]}J\235\007\n\003401\022\225\007\n\346\004Unauthorized.\n\n1. **Error**: `invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.`\n - Tecton does not recognize the API Key in your request. Please refer to the [API Key Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information on how to create a Service Account with an API Key. Note that it may take upto 60 seconds for newly created API Keys to be accepted by the API\"\251\002\n\020application/json\022\224\002{\"error\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"message\": \"invalid \'Tecton-key\' authorization header. Note that newly created credentials may take up to 60 seconds to be usable.\", \"code\": 16}J\340\006\n\003403\022\330\006\n\356\004Forbidden\n\n:\n1. **Error**: `Not Authorized. Note that access control changes may take up to 60 seconds to apply.`\n - The Service Account associated with your API Key does not have the necessary permissions to query the metadata endpoint. Note that the Service Account needs to have at least Consumer privileges for a workspace in order to query the endpoint. Please refer to the [Tecton Documentation](https://docs.tecton.ai/docs/beta/reading-feature-data/reading-feature-data-for-inference/reading-online-features-for-inference-using-the-http-api#creating-an-api-key-to-authenticate-to-the-http-api) for more information\n\"\344\001\n\020application/json\022\317\001{\"error\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"message\": \"Not Authorized. Note that access control changes may take up to 60 seconds to apply.\", \"code\": 7}J\240\004\n\003404\022\230\004\n\316\002Not Found\n\n1. **Error**: `Unable to query FeatureService my_feature_service for workspace my_workspace. Newly created feature services may take up to 60 seconds to query. Also, ensure that the workspace is a live workspace.`\n - Please ensure that the workspace is a **Live** workspace and the feature service exists in the workspace.\n\"\304\001\n\020application/json\022\257\001{\"error\": \"Unknown feature_service_name: my_feature_service for workspace: prod\", \"message\": \"Unknown feature_service_name: my_feature_service for workspace: prod\", \"code\": 5}J\326\005\n\003429\022\316\005\n\210\004Resources Exhausted.\n\n1. **Error**: `Metadata exceeded the concurrent request limit, please retry later`\n - This error indicates that you have exceeded the concurrent request limit for your deployment and you need to either reduce your request rate or scale up your feature server deployment. Please refer to the [Scaling Documentation](https://docs.tecton.ai/docs/beta/running-in-production/production-best-practices#scale-tecton-serving-capacity) for more information and contact Tecton support for further assistance\n\"\300\001\n\020application/json\022\253\001{\"error\": \"Metadata exceeded the concurrent request limit, please retry later\", \"message\": \"Metadata exceeded the concurrent request limit, please retry later\", \"code\": 8}J\207\004\n\003503\022\377\003\n\367\002Service Unavailable\n\n1. **Error**: `503 Service Temporarily Unavailable`\n - This error indicates that Tecton is currently unable to process your request because either the Online Store is unavailable or Tecton\'s feature server deployment is down. Please check the Online Store availability on your end and if the error persists, please contact Tecton Support for assistance.\n\"\202\001\n\020application/json\022n{\"error\": \"503 Service Temporarily Unavailable\", \"message\": \"503 Service Temporarily Unavailable\", \"code\": 14}J\335\003\n\003504\022\325\003\n\203\003Gateway Timeout\n\n1. **Error**: `Timed out` \n - This error indicates that processing the request exceeded the 2 seconds timeout limit set by Tecton, because either the Online Store did not respond or Tecton was unable to process the response within the time limit. Please verify availability of your Online Store and if the problem persists, please contact Tecton Support for assistance.\n\"M\n\020application/json\0229{\"error\": \"Timed out\", \"message\": \"Timed out\", \"code\": 4}'
  _FEATURESERVICETYPE._serialized_start=8472
  _FEATURESERVICETYPE._serialized_end=8519
  _FEATURESERVERDATATYPE._serialized_start=8522
  _FEATURESERVERDATATYPE._serialized_end=8675
  _STATUS._serialized_start=8677
  _STATUS._serialized_end=8748
  _SLOINELIGIBILITYREASON._serialized_start=8751
  _SLOINELIGIBILITYREASON._serialized_end=8905
  _NAMEANDTYPE._serialized_start=296
  _NAMEANDTYPE._serialized_end=599
  _GETFEATURESRESULT._serialized_start=602
  _GETFEATURESRESULT._serialized_end=834
  _FEATURESERVERCOMPLEXDATATYPE._serialized_start=837
  _FEATURESERVERCOMPLEXDATATYPE._serialized_end=1717
  _FEATURESERVERSTRUCTFIELD._serialized_start=1720
  _FEATURESERVERSTRUCTFIELD._serialized_end=2288
  _SLOINFO._serialized_start=2291
  _SLOINFO._serialized_end=3052
  _METADATA._serialized_start=3055
  _METADATA._serialized_end=5397
  _METADATA_ITEM._serialized_start=3334
  _METADATA_ITEM._serialized_end=4144
  _GETFEATURESRESPONSE._serialized_start=5400
  _GETFEATURESRESPONSE._serialized_end=5570
  _GETFEATURESBATCHRESPONSE._serialized_start=5573
  _GETFEATURESBATCHRESPONSE._serialized_end=5759
  _BATCHSLOINFO._serialized_start=5762
  _BATCHSLOINFO._serialized_end=6076
  _BATCHMETADATA._serialized_start=6079
  _BATCHMETADATA._serialized_end=6676
  _BATCHMETADATA_ITEM._serialized_start=6418
  _BATCHMETADATA_ITEM._serialized_end=6676
  _SERVICEMETADATAREQUEST._serialized_start=6678
  _SERVICEMETADATAREQUEST._serialized_end=6783
  _SERVICEMETADATARESPONSE._serialized_start=6786
  _SERVICEMETADATARESPONSE._serialized_end=7548
  _QUERYFEATURESREQUEST._serialized_start=7550
  _QUERYFEATURESREQUEST._serialized_end=7653
  _QUERYFEATURESRESPONSE._serialized_start=7656
  _QUERYFEATURESRESPONSE._serialized_end=7830
  _FEATURESERVICELOCATOR._serialized_start=7833
  _FEATURESERVICELOCATOR._serialized_end=8283
  _GETFEATURESERVICESTATEREQUEST._serialized_start=8286
  _GETFEATURESERVICESTATEREQUEST._serialized_end=8430
  _GETFEATURESERVICESTATERESPONSE._serialized_start=8432
  _GETFEATURESERVICESTATERESPONSE._serialized_end=8470
  _FEATURESERVICE._serialized_start=8909
  _FEATURESERVICE._serialized_end=37202
# @@protoc_insertion_point(module_scope)
