1{ 2 "version":"2.0", 3 "metadata":{ 4 "apiVersion":"2020-07-01", 5 "endpointPrefix":"featurestore-runtime.sagemaker", 6 "jsonVersion":"1.1", 7 "protocol":"rest-json", 8 "serviceFullName":"Amazon SageMaker Feature Store Runtime", 9 "serviceId":"SageMaker FeatureStore Runtime", 10 "signatureVersion":"v4", 11 "signingName":"sagemaker", 12 "uid":"sagemaker-featurestore-runtime-2020-07-01" 13 }, 14 "operations":{ 15 "BatchGetRecord":{ 16 "name":"BatchGetRecord", 17 "http":{ 18 "method":"POST", 19 "requestUri":"/BatchGetRecord" 20 }, 21 "input":{"shape":"BatchGetRecordRequest"}, 22 "output":{"shape":"BatchGetRecordResponse"}, 23 "errors":[ 24 {"shape":"ValidationError"}, 25 {"shape":"InternalFailure"}, 26 {"shape":"ServiceUnavailable"}, 27 {"shape":"AccessForbidden"} 28 ], 29 "documentation":"<p>Retrieves a batch of <code>Records</code> from a <code>FeatureGroup</code>.</p>" 30 }, 31 "DeleteRecord":{ 32 "name":"DeleteRecord", 33 "http":{ 34 "method":"DELETE", 35 "requestUri":"/FeatureGroup/{FeatureGroupName}" 36 }, 37 "input":{"shape":"DeleteRecordRequest"}, 38 "errors":[ 39 {"shape":"ValidationError"}, 40 {"shape":"InternalFailure"}, 41 {"shape":"ServiceUnavailable"}, 42 {"shape":"AccessForbidden"} 43 ], 44 "documentation":"<p>Deletes a <code>Record</code> from a <code>FeatureGroup</code> in the <code>OnlineStore</code>. Feature Store supports both <code>SoftDelete</code> and <code>HardDelete</code>. For <code>SoftDelete</code> (default), feature columns are set to <code>null</code> and the record is no longer retrievable by <code>GetRecord</code> or <code>BatchGetRecord</code>. For <code>HardDelete</code>, the complete <code>Record</code> is removed from the <code>OnlineStore</code>. In both cases, Feature Store appends the deleted record marker to the <code>OfflineStore</code>. The deleted record marker is a record with the same <code>RecordIdentifer</code> as the original, but with <code>is_deleted</code> value set to <code>True</code>, <code>EventTime</code> set to the delete input <code>EventTime</code>, and other feature values set to <code>null</code>.</p> <p>Note that the <code>EventTime</code> specified in <code>DeleteRecord</code> should be set later than the <code>EventTime</code> of the existing record in the <code>OnlineStore</code> for that <code>RecordIdentifer</code>. If it is not, the deletion does not occur:</p> <ul> <li> <p>For <code>SoftDelete</code>, the existing (not deleted) record remains in the <code>OnlineStore</code>, though the delete record marker is still written to the <code>OfflineStore</code>.</p> </li> <li> <p> <code>HardDelete</code> returns <code>EventTime</code>: <code>400 ValidationException</code> to indicate that the delete operation failed. No delete record marker is written to the <code>OfflineStore</code>.</p> </li> </ul> <p>When a record is deleted from the <code>OnlineStore</code>, the deleted record marker is appended to the <code>OfflineStore</code>. If you have the Iceberg table format enabled for your <code>OfflineStore</code>, you can remove all history of a record from the <code>OfflineStore</code> using Amazon Athena or Apache Spark. For information on how to hard delete a record from the <code>OfflineStore</code> with the Iceberg table format enabled, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-delete-records-offline-store.html#feature-store-delete-records-offline-store\">Delete records from the offline store</a>.</p>" 45 }, 46 "GetRecord":{ 47 "name":"GetRecord", 48 "http":{ 49 "method":"GET", 50 "requestUri":"/FeatureGroup/{FeatureGroupName}" 51 }, 52 "input":{"shape":"GetRecordRequest"}, 53 "output":{"shape":"GetRecordResponse"}, 54 "errors":[ 55 {"shape":"ValidationError"}, 56 {"shape":"ResourceNotFound"}, 57 {"shape":"InternalFailure"}, 58 {"shape":"ServiceUnavailable"}, 59 {"shape":"AccessForbidden"} 60 ], 61 "documentation":"<p>Use for <code>OnlineStore</code> serving from a <code>FeatureStore</code>. Only the latest records stored in the <code>OnlineStore</code> can be retrieved. If no Record with <code>RecordIdentifierValue</code> is found, then an empty result is returned. </p>" 62 }, 63 "PutRecord":{ 64 "name":"PutRecord", 65 "http":{ 66 "method":"PUT", 67 "requestUri":"/FeatureGroup/{FeatureGroupName}" 68 }, 69 "input":{"shape":"PutRecordRequest"}, 70 "errors":[ 71 {"shape":"ValidationError"}, 72 {"shape":"InternalFailure"}, 73 {"shape":"ServiceUnavailable"}, 74 {"shape":"AccessForbidden"} 75 ], 76 "documentation":"<p>The <code>PutRecord</code> API is used to ingest a list of <code>Records</code> into your feature group. </p> <p>If a new record’s <code>EventTime</code> is greater, the new record is written to both the <code>OnlineStore</code> and <code>OfflineStore</code>. Otherwise, the record is a historic record and it is written only to the <code>OfflineStore</code>. </p> <p>You can specify the ingestion to be applied to the <code>OnlineStore</code>, <code>OfflineStore</code>, or both by using the <code>TargetStores</code> request parameter. </p> <p>You can set the ingested record to expire at a given time to live (TTL) duration after the record’s event time, <code>ExpiresAt</code> = <code>EventTime</code> + <code>TtlDuration</code>, by specifying the <code>TtlDuration</code> parameter. A record level <code>TtlDuration</code> is set when specifying the <code>TtlDuration</code> parameter using the <code>PutRecord</code> API call. If the input <code>TtlDuration</code> is <code>null</code> or unspecified, <code>TtlDuration</code> is set to the default feature group level <code>TtlDuration</code>. A record level <code>TtlDuration</code> supersedes the group level <code>TtlDuration</code>.</p>" 77 } 78 }, 79 "shapes":{ 80 "AccessForbidden":{ 81 "type":"structure", 82 "members":{ 83 "Message":{"shape":"Message"} 84 }, 85 "documentation":"<p>You do not have permission to perform an action.</p>", 86 "error":{"httpStatusCode":403}, 87 "exception":true, 88 "synthetic":true 89 }, 90 "BatchGetRecordError":{ 91 "type":"structure", 92 "required":[ 93 "FeatureGroupName", 94 "RecordIdentifierValueAsString", 95 "ErrorCode", 96 "ErrorMessage" 97 ], 98 "members":{ 99 "FeatureGroupName":{ 100 "shape":"ValueAsString", 101 "documentation":"<p>The name of the feature group that the record belongs to.</p>" 102 }, 103 "RecordIdentifierValueAsString":{ 104 "shape":"ValueAsString", 105 "documentation":"<p>The value for the <code>RecordIdentifier</code> in string format of a Record from a <code>FeatureGroup</code> that is causing an error when attempting to be retrieved.</p>" 106 }, 107 "ErrorCode":{ 108 "shape":"ValueAsString", 109 "documentation":"<p>The error code of an error that has occurred when attempting to retrieve a batch of Records. For more information on errors, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_GetRecord.html#API_feature_store_GetRecord_Errors\">Errors</a>.</p>" 110 }, 111 "ErrorMessage":{ 112 "shape":"Message", 113 "documentation":"<p>The error message of an error that has occurred when attempting to retrieve a record in the batch.</p>" 114 } 115 }, 116 "documentation":"<p>The error that has occurred when attempting to retrieve a batch of Records.</p>" 117 }, 118 "BatchGetRecordErrors":{ 119 "type":"list", 120 "member":{"shape":"BatchGetRecordError"}, 121 "min":0 122 }, 123 "BatchGetRecordIdentifier":{ 124 "type":"structure", 125 "required":[ 126 "FeatureGroupName", 127 "RecordIdentifiersValueAsString" 128 ], 129 "members":{ 130 "FeatureGroupName":{ 131 "shape":"FeatureGroupNameOrArn", 132 "documentation":"<p>The name or Amazon Resource Name (ARN) of the <code>FeatureGroup</code> containing the records you are retrieving in a batch.</p>" 133 }, 134 "RecordIdentifiersValueAsString":{ 135 "shape":"RecordIdentifiers", 136 "documentation":"<p>The value for a list of record identifiers in string format.</p>" 137 }, 138 "FeatureNames":{ 139 "shape":"FeatureNames", 140 "documentation":"<p>List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned.</p>" 141 } 142 }, 143 "documentation":"<p>The identifier that identifies the batch of Records you are retrieving in a batch.</p>" 144 }, 145 "BatchGetRecordIdentifiers":{ 146 "type":"list", 147 "member":{"shape":"BatchGetRecordIdentifier"}, 148 "max":100, 149 "min":1 150 }, 151 "BatchGetRecordRequest":{ 152 "type":"structure", 153 "required":["Identifiers"], 154 "members":{ 155 "Identifiers":{ 156 "shape":"BatchGetRecordIdentifiers", 157 "documentation":"<p>A list containing the name or Amazon Resource Name (ARN) of the <code>FeatureGroup</code>, the list of names of <code>Feature</code>s to be retrieved, and the corresponding <code>RecordIdentifier</code> values as strings.</p>" 158 }, 159 "ExpirationTimeResponse":{ 160 "shape":"ExpirationTimeResponse", 161 "documentation":"<p>Parameter to request <code>ExpiresAt</code> in response. If <code>Enabled</code>, <code>BatchGetRecord</code> will return the value of <code>ExpiresAt</code>, if it is not null. If <code>Disabled</code> and null, <code>BatchGetRecord</code> will return null.</p>" 162 } 163 } 164 }, 165 "BatchGetRecordResponse":{ 166 "type":"structure", 167 "required":[ 168 "Records", 169 "Errors", 170 "UnprocessedIdentifiers" 171 ], 172 "members":{ 173 "Records":{ 174 "shape":"BatchGetRecordResultDetails", 175 "documentation":"<p>A list of Records you requested to be retrieved in batch.</p>" 176 }, 177 "Errors":{ 178 "shape":"BatchGetRecordErrors", 179 "documentation":"<p>A list of errors that have occurred when retrieving a batch of Records.</p>" 180 }, 181 "UnprocessedIdentifiers":{ 182 "shape":"UnprocessedIdentifiers", 183 "documentation":"<p>A unprocessed list of <code>FeatureGroup</code> names, with their corresponding <code>RecordIdentifier</code> value, and Feature name.</p>" 184 } 185 } 186 }, 187 "BatchGetRecordResultDetail":{ 188 "type":"structure", 189 "required":[ 190 "FeatureGroupName", 191 "RecordIdentifierValueAsString", 192 "Record" 193 ], 194 "members":{ 195 "FeatureGroupName":{ 196 "shape":"ValueAsString", 197 "documentation":"<p>The <code>FeatureGroupName</code> containing Records you retrieved in a batch.</p>" 198 }, 199 "RecordIdentifierValueAsString":{ 200 "shape":"ValueAsString", 201 "documentation":"<p>The value of the record identifier in string format.</p>" 202 }, 203 "Record":{ 204 "shape":"Record", 205 "documentation":"<p>The <code>Record</code> retrieved.</p>" 206 }, 207 "ExpiresAt":{ 208 "shape":"ExpiresAt", 209 "documentation":"<p>The <code>ExpiresAt</code> ISO string of the requested record.</p>" 210 } 211 }, 212 "documentation":"<p>The output of records that have been retrieved in a batch.</p>" 213 }, 214 "BatchGetRecordResultDetails":{ 215 "type":"list", 216 "member":{"shape":"BatchGetRecordResultDetail"}, 217 "min":0 218 }, 219 "DeleteRecordRequest":{ 220 "type":"structure", 221 "required":[ 222 "FeatureGroupName", 223 "RecordIdentifierValueAsString", 224 "EventTime" 225 ], 226 "members":{ 227 "FeatureGroupName":{ 228 "shape":"FeatureGroupNameOrArn", 229 "documentation":"<p>The name or Amazon Resource Name (ARN) of the feature group to delete the record from. </p>", 230 "location":"uri", 231 "locationName":"FeatureGroupName" 232 }, 233 "RecordIdentifierValueAsString":{ 234 "shape":"ValueAsString", 235 "documentation":"<p>The value for the <code>RecordIdentifier</code> that uniquely identifies the record, in string format. </p>", 236 "location":"querystring", 237 "locationName":"RecordIdentifierValueAsString" 238 }, 239 "EventTime":{ 240 "shape":"ValueAsString", 241 "documentation":"<p>Timestamp indicating when the deletion event occurred. <code>EventTime</code> can be used to query data at a certain point in time.</p>", 242 "location":"querystring", 243 "locationName":"EventTime" 244 }, 245 "TargetStores":{ 246 "shape":"TargetStores", 247 "documentation":"<p>A list of stores from which you're deleting the record. By default, Feature Store deletes the record from all of the stores that you're using for the <code>FeatureGroup</code>.</p>", 248 "location":"querystring", 249 "locationName":"TargetStores" 250 }, 251 "DeletionMode":{ 252 "shape":"DeletionMode", 253 "documentation":"<p>The name of the deletion mode for deleting the record. By default, the deletion mode is set to <code>SoftDelete</code>.</p>", 254 "location":"querystring", 255 "locationName":"DeletionMode" 256 } 257 } 258 }, 259 "DeletionMode":{ 260 "type":"string", 261 "enum":[ 262 "SoftDelete", 263 "HardDelete" 264 ] 265 }, 266 "ExpirationTimeResponse":{ 267 "type":"string", 268 "enum":[ 269 "Enabled", 270 "Disabled" 271 ] 272 }, 273 "ExpiresAt":{"type":"string"}, 274 "FeatureGroupNameOrArn":{ 275 "type":"string", 276 "max":150, 277 "min":1, 278 "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:feature-group/)?([a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63})" 279 }, 280 "FeatureName":{ 281 "type":"string", 282 "max":64, 283 "min":1, 284 "pattern":"^[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63}" 285 }, 286 "FeatureNames":{ 287 "type":"list", 288 "member":{"shape":"FeatureName"}, 289 "min":1 290 }, 291 "FeatureValue":{ 292 "type":"structure", 293 "required":["FeatureName"], 294 "members":{ 295 "FeatureName":{ 296 "shape":"FeatureName", 297 "documentation":"<p>The name of a feature that a feature value corresponds to.</p>" 298 }, 299 "ValueAsString":{ 300 "shape":"ValueAsString", 301 "documentation":"<p>The value in string format associated with a feature. Used when your <code>CollectionType</code> is <code>None</code>. Note that features types can be <code>String</code>, <code>Integral</code>, or <code>Fractional</code>. This value represents all three types as a string.</p>" 302 }, 303 "ValueAsStringList":{ 304 "shape":"ValueAsStringList", 305 "documentation":"<p>The list of values in string format associated with a feature. Used when your <code>CollectionType</code> is a <code>List</code>, <code>Set</code>, or <code>Vector</code>. Note that features types can be <code>String</code>, <code>Integral</code>, or <code>Fractional</code>. These values represents all three types as a string.</p>" 306 } 307 }, 308 "documentation":"<p>The value associated with a feature.</p>" 309 }, 310 "GetRecordRequest":{ 311 "type":"structure", 312 "required":[ 313 "FeatureGroupName", 314 "RecordIdentifierValueAsString" 315 ], 316 "members":{ 317 "FeatureGroupName":{ 318 "shape":"FeatureGroupNameOrArn", 319 "documentation":"<p>The name or Amazon Resource Name (ARN) of the feature group from which you want to retrieve a record.</p>", 320 "location":"uri", 321 "locationName":"FeatureGroupName" 322 }, 323 "RecordIdentifierValueAsString":{ 324 "shape":"ValueAsString", 325 "documentation":"<p>The value that corresponds to <code>RecordIdentifier</code> type and uniquely identifies the record in the <code>FeatureGroup</code>. </p>", 326 "location":"querystring", 327 "locationName":"RecordIdentifierValueAsString" 328 }, 329 "FeatureNames":{ 330 "shape":"FeatureNames", 331 "documentation":"<p>List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned.</p>", 332 "location":"querystring", 333 "locationName":"FeatureName" 334 }, 335 "ExpirationTimeResponse":{ 336 "shape":"ExpirationTimeResponse", 337 "documentation":"<p>Parameter to request <code>ExpiresAt</code> in response. If <code>Enabled</code>, <code>GetRecord</code> will return the value of <code>ExpiresAt</code>, if it is not null. If <code>Disabled</code> and null, <code>GetRecord</code> will return null.</p>", 338 "location":"querystring", 339 "locationName":"ExpirationTimeResponse" 340 } 341 } 342 }, 343 "GetRecordResponse":{ 344 "type":"structure", 345 "members":{ 346 "Record":{ 347 "shape":"Record", 348 "documentation":"<p>The record you requested. A list of <code>FeatureValues</code>.</p>" 349 }, 350 "ExpiresAt":{ 351 "shape":"ExpiresAt", 352 "documentation":"<p>The <code>ExpiresAt</code> ISO string of the requested record.</p>" 353 } 354 } 355 }, 356 "InternalFailure":{ 357 "type":"structure", 358 "members":{ 359 "Message":{"shape":"Message"} 360 }, 361 "documentation":"<p>An internal failure occurred. Try your request again. If the problem persists, contact Amazon Web Services customer support.</p>", 362 "error":{"httpStatusCode":500}, 363 "exception":true, 364 "fault":true, 365 "synthetic":true 366 }, 367 "Message":{ 368 "type":"string", 369 "max":2048 370 }, 371 "PutRecordRequest":{ 372 "type":"structure", 373 "required":[ 374 "FeatureGroupName", 375 "Record" 376 ], 377 "members":{ 378 "FeatureGroupName":{ 379 "shape":"FeatureGroupNameOrArn", 380 "documentation":"<p>The name or Amazon Resource Name (ARN) of the feature group that you want to insert the record into.</p>", 381 "location":"uri", 382 "locationName":"FeatureGroupName" 383 }, 384 "Record":{ 385 "shape":"Record", 386 "documentation":"<p>List of FeatureValues to be inserted. This will be a full over-write. If you only want to update few of the feature values, do the following:</p> <ul> <li> <p>Use <code>GetRecord</code> to retrieve the latest record.</p> </li> <li> <p>Update the record returned from <code>GetRecord</code>. </p> </li> <li> <p>Use <code>PutRecord</code> to update feature values.</p> </li> </ul>" 387 }, 388 "TargetStores":{ 389 "shape":"TargetStores", 390 "documentation":"<p>A list of stores to which you're adding the record. By default, Feature Store adds the record to all of the stores that you're using for the <code>FeatureGroup</code>.</p>" 391 }, 392 "TtlDuration":{ 393 "shape":"TtlDuration", 394 "documentation":"<p>Time to live duration, where the record is hard deleted after the expiration time is reached; <code>ExpiresAt</code> = <code>EventTime</code> + <code>TtlDuration</code>. For information on HardDelete, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html\">DeleteRecord</a> API in the Amazon SageMaker API Reference guide.</p>" 395 } 396 } 397 }, 398 "Record":{ 399 "type":"list", 400 "member":{"shape":"FeatureValue"}, 401 "min":1 402 }, 403 "RecordIdentifiers":{ 404 "type":"list", 405 "member":{"shape":"ValueAsString"}, 406 "max":100, 407 "min":1 408 }, 409 "ResourceNotFound":{ 410 "type":"structure", 411 "members":{ 412 "Message":{"shape":"Message"} 413 }, 414 "documentation":"<p>A resource that is required to perform an action was not found.</p>", 415 "error":{"httpStatusCode":404}, 416 "exception":true 417 }, 418 "ServiceUnavailable":{ 419 "type":"structure", 420 "members":{ 421 "Message":{"shape":"Message"} 422 }, 423 "documentation":"<p>The service is currently unavailable.</p>", 424 "error":{"httpStatusCode":503}, 425 "exception":true, 426 "fault":true, 427 "synthetic":true 428 }, 429 "TargetStore":{ 430 "type":"string", 431 "enum":[ 432 "OnlineStore", 433 "OfflineStore" 434 ] 435 }, 436 "TargetStores":{ 437 "type":"list", 438 "member":{"shape":"TargetStore"}, 439 "max":2, 440 "min":1 441 }, 442 "TtlDuration":{ 443 "type":"structure", 444 "required":[ 445 "Unit", 446 "Value" 447 ], 448 "members":{ 449 "Unit":{ 450 "shape":"TtlDurationUnit", 451 "documentation":"<p> <code>TtlDuration</code> time unit.</p>" 452 }, 453 "Value":{ 454 "shape":"TtlDurationValue", 455 "documentation":"<p> <code>TtlDuration</code> time value.</p>" 456 } 457 }, 458 "documentation":"<p>Time to live duration, where the record is hard deleted after the expiration time is reached; <code>ExpiresAt</code> = <code>EventTime</code> + <code>TtlDuration</code>. For information on HardDelete, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html\">DeleteRecord</a> API in the Amazon SageMaker API Reference guide.</p>" 459 }, 460 "TtlDurationUnit":{ 461 "type":"string", 462 "enum":[ 463 "Seconds", 464 "Minutes", 465 "Hours", 466 "Days", 467 "Weeks" 468 ] 469 }, 470 "TtlDurationValue":{ 471 "type":"integer", 472 "min":1 473 }, 474 "UnprocessedIdentifiers":{ 475 "type":"list", 476 "member":{"shape":"BatchGetRecordIdentifier"}, 477 "min":0 478 }, 479 "ValidationError":{ 480 "type":"structure", 481 "members":{ 482 "Message":{"shape":"Message"} 483 }, 484 "documentation":"<p>There was an error validating your request.</p>", 485 "error":{"httpStatusCode":400}, 486 "exception":true, 487 "synthetic":true 488 }, 489 "ValueAsString":{ 490 "type":"string", 491 "max":358400, 492 "pattern":".*" 493 }, 494 "ValueAsStringList":{ 495 "type":"list", 496 "member":{"shape":"ValueAsString"}, 497 "max":358400, 498 "min":0 499 } 500 }, 501 "documentation":"<p>Contains all data plane API operations and data types for the Amazon SageMaker Feature Store. Use this API to put, delete, and retrieve (get) features from a feature store.</p> <p>Use the following operations to configure your <code>OnlineStore</code> and <code>OfflineStore</code> features, and to create and manage feature groups:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateFeatureGroup.html\">CreateFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html\">DeleteFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeFeatureGroup.html\">DescribeFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListFeatureGroups.html\">ListFeatureGroups</a> </p> </li> </ul>" 502} 503