{"id":18271,"date":"2026-08-31T00:56:18","date_gmt":"2026-08-31T00:56:18","guid":{"rendered":"https:\/\/techtrendfeed.com\/?p=18271"},"modified":"2026-08-31T00:56:19","modified_gmt":"2026-08-31T00:56:19","slug":"batch-write-and-uncover-data-in-amazon-sagemaker-characteristic-retailer","status":"publish","type":"post","link":"https:\/\/techtrendfeed.com\/?p=18271","title":{"rendered":"Batch write and uncover data in Amazon SageMaker Characteristic Retailer"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"\">\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/sagemaker\/ai\/feature-store\/\" target=\"_blank\" rel=\"noopener\">Amazon SageMaker Characteristic Retailer<\/a> is a totally managed, purpose-built repository to retailer, share, and handle options for machine studying (ML) fashions. It offers low-latency on-line serving for real-time inference, an offline retailer for historic retention and coaching characteristic knowledge, and helps each <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/machine-learning\/using-streaming-ingestion-with-amazon-sagemaker-feature-store-to-make-ml-backed-decisions-in-near-real-time\/\" target=\"_blank\" rel=\"noopener\">streaming<\/a> and <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/machine-learning\/scale-ml-feature-ingestion-using-amazon-sagemaker-feature-store\/\" target=\"_blank\" rel=\"noopener\">batch<\/a> ingestion patterns.<\/p>\n<p>As ML platforms mature, two operational gaps floor repeatedly. First, groups operating high-throughput characteristic pipelines should name <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_PutRecord.html\" target=\"_blank\" rel=\"noopener\">PutRecord<\/a> (which writes a single characteristic file to the web retailer) in a loop. This implies one API name per file, per characteristic group, which creates connection overhead and poor throughput. A fraud-detection pipeline ingesting 10,000 data per second throughout 5 characteristic teams should maintain 50,000 particular person API calls per second solely to maintain options present. A second problem is that groups utilizing the In-Reminiscence storage tier haven&#8217;t any strategy to browse or enumerate data saved within the on-line retailer. If file identifiers are misplaced by way of a bug or pipeline failure, these data turn into completely unrecoverable. There isn&#8217;t any offline retailer for the In-Reminiscence tier to fall again on, no <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/athena\/\" target=\"_blank\" rel=\"noopener\">Amazon Athena<\/a> question to run, and no API to find what exists.<\/p>\n<p>As we speak, we&#8217;re saying <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_Operations_Amazon_SageMaker_Feature_Store_Runtime.html\" target=\"_blank\" rel=\"noopener\">two new APIs<\/a> for Amazon SageMaker Characteristic Retailer:<\/p>\n<ol type=\"1\">\n<li><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html\" target=\"_blank\" rel=\"noopener\">BatchWriteRecord<\/a> \u2014 Write as much as 25 data throughout a number of characteristic teams in a single API name, with partial-success semantics, per-record time-to-live (TTL) management, and the identical EventTime-based ordering ensures as PutRecord.<\/li>\n<li><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_ListRecords.html\" target=\"_blank\" rel=\"noopener\">ListRecords<\/a> \u2014 Enumerate file identifiers inside a characteristic group utilizing pagination. Works with each Normal (<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/dynamodb\/\" target=\"_blank\" rel=\"noopener\">Amazon DynamoDB<\/a>-backed) and In-Reminiscence (<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/elasticache\/\" target=\"_blank\" rel=\"noopener\">Redis<\/a>-backed) storage tiers.<\/li>\n<\/ol>\n<p>On this put up, we stroll by way of every API with code examples you should utilize to get began.<\/p>\n<h2 id=\"prerequisites\">Stipulations<\/h2>\n<p>To comply with together with the examples on this put up, you want:<\/p>\n<h2 id=\"batchwriterecord\">BatchWriteRecord<\/h2>\n<p>The BatchWriteRecord API tackles the throughput limits of single-record ingestion. The next sections clarify the issue it solves and the way it works.<\/p>\n<h3 id=\"the-challenge-with-single-record-ingestion\">The problem with single-record ingestion<\/h3>\n<p>The present <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_PutRecord.html\" target=\"_blank\" rel=\"noopener\">PutRecord<\/a> API in Characteristic Retailer writes one file to 1 characteristic group per name. Every name performs a conditional write: the file is continued because the \u201cnewest\u201d model provided that its EventTime, included within the request, is newer than the present file. If the situation fails, the file remains to be written as a historic model for the offline retailer.<\/p>\n<p>This design offers robust ordering ensures, however at scale it forces an N\u00d7M calling sample (N data \u00d7 M characteristic teams), creating connection overhead and tail latency that restrict throughput.<\/p>\n<h3 id=\"how-batchwriterecord-works\">How BatchWriteRecord works<\/h3>\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html\" target=\"_blank\" rel=\"noopener\">BatchWriteRecord<\/a> accepts as much as 25 entries in a single request, focusing on a number of characteristic teams concurrently. Every file succeeds or fails independently. It is a partial-success API, which means particular person file failures don&#8217;t fail your complete request.<\/p>\n<p>The API preserves the identical EventTime-based ordering as <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_PutRecord.html\" target=\"_blank\" rel=\"noopener\">PutRecord<\/a>:<\/p>\n<ul>\n<li>If the incoming file\u2019s EventTime is newer than the present file, it turns into the newest model within the on-line retailer.<\/li>\n<li>If not, the file is written as a historic model to the offline retailer (for characteristic teams with offline storage).<\/li>\n<li>Information that fail for different causes (authentication\/validation errors, service throttling) are returned within the response with error particulars and the unique file.<\/li>\n<li>The requests which are unprocessed will probably be returned in response as <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html#API_feature_store_BatchWriteRecord_ResponseSyntax\" target=\"_blank\" rel=\"noopener\">UnprocessedEntries<\/a> which will be retried.<\/li>\n<\/ul>\n<h3 id=\"request-structure\">Request construction<\/h3>\n<div class=\"hide-language\">\n<pre><code class=\"language-json\">{\n    \"Entries\": [\n        {\n            \"FeatureGroupName\": \"click-features\",\n            \"Record\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-123\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:00Z\"},\n                {\"FeatureName\": \"click_count\", \"ValueAsString\": \"42\"}\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"],\n            \"TtlDuration\": {\"Unit\": \"Days\", \"Worth\": 7}\n        },\n        {\n            \"FeatureGroupName\": \"login-features\",\n            \"Report\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-456\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:01Z\"},\n                {\"FeatureName\": \"login_count\", \"ValueAsString\": \"18\"}\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"]\n        }\n    ]\n}<\/code><\/pre>\n<\/p><\/div>\n<p>The response returns solely the data that failed:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-json\">{\n    \"Errors\": [\n        {\n            \"Entry\": {\n                \"FeatureGroupName\": \"string\",\n                \"Record\": [\n                    {\n                        \"FeatureName\": \"string\",\n                        \"ValueAsString\": \"string\",\n                        \"ValueAsStringList\": [\"string\"]\n                    }\n                ],\n                \"TargetStores\": [\"string\"],\n                \"TtlDuration\": {\n                    \"Unit\": \"string\",\n                    \"Worth\": quantity\n                }\n            },\n            \"ErrorCode\": \"string\",\n            \"ErrorMessage\": \"string\"\n        }\n    ],\n    \"UnprocessedEntries\": [\n        {\n            \"FeatureGroupName\": \"string\",\n            \"Record\": [\n                {\n                    \"FeatureName\": \"string\",\n                    \"ValueAsString\": \"string\",\n                    \"ValueAsStringList\": [\"string\"]\n                }\n            ],\n            \"TargetStores\": [\"string\"],\n            \"TtlDuration\": {\n                \"Unit\": \"string\",\n                \"Worth\": quantity\n            }\n        }\n    ]\n}<\/code><\/pre>\n<\/p><\/div>\n<p>Information not listed in <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html#API_feature_store_BatchWriteRecord_ResponseSyntax\" target=\"_blank\" rel=\"noopener\">Errors<\/a> or <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html#API_feature_store_BatchWriteRecord_ResponseSyntax\" target=\"_blank\" rel=\"noopener\">UnprocessedEntries<\/a> succeeded. Your software ought to retry solely the failed data utilizing exponential backoff for retriable errors.<\/p>\n<h3 id=\"code-example-batch-ingestion-with-boto3\">Code instance: Batch ingestion with Boto3<\/h3>\n<div class=\"hide-language\">\n<pre><code class=\"language-python\">import boto3\n\nfeaturestore_runtime = boto3.consumer(\"sagemaker-featurestore-runtime\")\n\nresponse = featurestore_runtime.batch_write_record(\n    Entries=[\n        {\n            \"FeatureGroupName\": \"click-features\",\n            \"Record\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-123\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:00Z\"},\n                {\"FeatureName\": \"click_count\", \"ValueAsString\": \"42\"},\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"],\n        },\n        {\n            \"FeatureGroupName\": \"login-features\",\n            \"Report\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-456\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:01Z\"},\n                {\"FeatureName\": \"login_count\", \"ValueAsString\": \"18\"},\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"],\n        },\n    ]\n)\n\nif response[\"Errors\"]:\n    for error in response[\"Errors\"]:\n        print(f\"Report {error['Entry']}, ErrorCode: {error['ErrorCode']} Failed: {error['ErrorMessage']}\")\n\nif response[\"UnprocessedEntries\"]:\n    for unprocessed in response[\"UnprocessedEntries\"]:\n        print(f\"Unprocessed: {unprocessed['FeatureGroupName']}\")\n\nif not response[\"Errors\"] and never response[\"UnprocessedEntries\"]:\n    print(\"All data written efficiently.\")<\/code><\/pre>\n<\/p><\/div>\n<h3 id=\"code-example-writing-across-multiple-feature-groups\">Code instance: Writing throughout a number of characteristic teams<\/h3>\n<p>You possibly can goal a number of characteristic teams in a single request. Information are grouped by characteristic group and processed independently:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-python\">featurestore_runtime = boto3.consumer(\"sagemaker-featurestore-runtime\")\n\nresponse = featurestore_runtime.batch_write_record(\n    Entries=[\n        {\n            \"FeatureGroupName\": \"user-profile-features\",\n            \"Record\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-123\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:00Z\"},\n                {\"FeatureName\": \"age\", \"ValueAsString\": \"34\"},\n                {\"FeatureName\": \"region\", \"ValueAsString\": \"us-west-2\"},\n            ],\n            \"TargetStores\": [\"OnlineStore\"],\n        },\n        {\n            \"FeatureGroupName\": \"click-features\",\n            \"Report\": [\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": \"user-123\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T12:00:00Z\"},\n                {\"FeatureName\": \"click_count\", \"ValueAsString\": \"42\"},\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"],\n        },\n    ]\n)<\/code><\/pre>\n<\/p><\/div>\n<p>A failure in a single characteristic group doesn&#8217;t have an effect on data destined for different characteristic teams.<\/p>\n<h3 id=\"ttl-time-to-live-support\">TTL (Time-to-Stay) assist<\/h3>\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html\" target=\"_blank\" rel=\"noopener\">BatchWriteRecord<\/a> helps <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/dg\/feature-store-time-to-live.html\" target=\"_blank\" rel=\"noopener\">TTL<\/a> at three ranges of priority, proven within the following precedence order:<\/p>\n<ol type=\"1\">\n<li>Report-level TTL \u2014 Set with TtlDuration on particular person entries. Takes highest precedence.<\/li>\n<li>Request-level TTL \u2014 A default TtlDuration on the prime degree of the request, utilized to entries and not using a record-level TTL.<\/li>\n<li>Characteristic-group-level TTL \u2014 The TTL configured on the characteristic group itself, utilized when neither record-level nor request-level TTL is about.<\/li>\n<\/ol>\n<h3 id=\"key-considerations\">Key concerns<\/h3>\n<p>Most 25 entries per request. This restrict applies to the whole variety of entries throughout all characteristic teams in a single request.<\/p>\n<p>Partial-success semantics: Not like transactional APIs, BatchWriteRecord doesn&#8217;t roll again profitable writes if some data fail. Design your retry logic to re-submit solely the data returned in Errors.<\/p>\n<p>Comparable IAM mannequin as PutRecord: The caller will need to have sagemaker:BatchWriteRecord and sagemaker:PutRecord permission on the Amazon Useful resource Identify (ARN) of every goal characteristic group. Per-feature-group authorization is checked earlier than processing.<\/p>\n<p>EventTime ordering is preserved: BatchWriteRecord makes use of conditional writes to keep up the identical latest-record-wins semantics as PutRecord. A stale file can&#8217;t overwrite a more moderen one within the on-line retailer.<\/p>\n<p>TargetStores flexibility: Every entry can independently goal OnlineStore, OfflineStore, or each (defaults to the characteristic group\u2019s enabled shops), providing you with fine-grained management over the place every file lands.<\/p>\n<h2 id=\"listrecords\">ListRecords<\/h2>\n<p>The ListRecords API closes the hole in file discovery for each storage tiers. The next sections clarify the issue it solves and the way it works.<\/p>\n<h3 id=\"the-challenge-with-record-discovery\">The problem with file discovery<\/h3>\n<p>Characteristic Retailer helps <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_PutRecord.html\" target=\"_blank\" rel=\"noopener\">PutRecord<\/a>, <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_GetRecord.html\" target=\"_blank\" rel=\"noopener\">GetRecord<\/a>, and <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_DeleteRecord.html\" target=\"_blank\" rel=\"noopener\">DeleteRecord<\/a>, however all require the caller to know the precise file identifier. There isn&#8217;t any API to browse or enumerate data inside a characteristic group.<\/p>\n<p>For the Normal tier, the workaround is querying the offline retailer through the use of <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/athena\/\" target=\"_blank\" rel=\"noopener\">Amazon Athena<\/a>. This requires offline retailer configuration, provides value, and isn&#8217;t real-time.<\/p>\n<p>For the In-Reminiscence tier, the state of affairs is crucial. There isn&#8217;t any corresponding offline retailer by default. If file identifiers are misplaced, these data are fully unrecoverable. You can&#8217;t uncover them, and you can not delete them. This results in phantom knowledge, wasted storage prices, and potential compliance dangers when knowledge topics request deletion.<\/p>\n<h3 id=\"how-listrecords-works\">How ListRecords works<\/h3>\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_ListRecords.html\" target=\"_blank\" rel=\"noopener\">ListRecords<\/a> enumerates file identifiers inside a characteristic group utilizing pagination. It returns solely energetic, non-deleted, non-expired data which are prepared for use with <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_GetRecord.html\" target=\"_blank\" rel=\"noopener\">GetRecord<\/a> or <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_DeleteRecord.html\" target=\"_blank\" rel=\"noopener\">DeleteRecord<\/a>.<\/p>\n<p>The API works with each storage tiers:<\/p>\n<ul>\n<li>Normal tier (<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/dynamodb\/\" target=\"_blank\" rel=\"noopener\">Amazon DynamoDB<\/a>): Scans the web retailer, returning identifier of the newest model of every file. Comfortable-deleted and expired data are robotically excluded.<\/li>\n<li>In-Reminiscence tier (<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/elasticache\/\" target=\"_blank\" rel=\"noopener\">Redis<\/a>): Scans keys and filters out soft-deleted data and inner system keys. Returns file identifiers extracted from key names.<\/li>\n<\/ul>\n<h3 id=\"request-and-response-structure\">Request and response construction<\/h3>\n<div class=\"hide-language\">\n<pre><code class=\"language-plaintext\">POST \/FeatureGroup\/{FeatureGroupName}\/ListRecords<\/code><\/pre>\n<\/p><\/div>\n<p>Request physique:<\/p>\n<p>Preliminary name<\/p>\n<p>Or<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-json\">{\n    \"MaxResults\": 50,\n    \"NextToken\": \"eyJjdXJzb3IiOi4uLn0=\"\n}<\/code><\/pre>\n<\/p><\/div>\n<p>Response:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-json\">{\n    \"RecordIdentifiers\": [\n        \"user-001\",\n        \"user-002\",\n        \"user-003\"\n    ],\n    \"NextToken\": \"eyJuZXh0IjoiLi4ufQ==\"\n}<\/code><\/pre>\n<\/p><\/div>\n<p>When NextToken is absent within the response, pagination is full.<\/p>\n<h3 id=\"code-example-enumerate-all-records-in-a-feature-group\">Code instance: Enumerate all data in a characteristic group<\/h3>\n<div class=\"hide-language\">\n<pre><code class=\"language-python\">import boto3\n\nfeaturestore_runtime = boto3.consumer(\"sagemaker-featurestore-runtime\")\n\nall_identifiers = []\nnext_token = None\n\nwhereas True:\n    params = {\n        \"FeatureGroupName\": \"user-profile-features\",\n        \"MaxResults\": 100,\n    }\n    if next_token:\n        params[\"NextToken\"] = next_token\n\n    response = featurestore_runtime.list_records(**params)\n    all_identifiers.prolong(response[\"RecordIdentifiers\"])\n\n    next_token = response.get(\"NextToken\")\n    if not next_token:\n        break\n\nprint(f\"Discovered {len(all_identifiers)} energetic data.\")<\/code><\/pre>\n<\/p><\/div>\n<h3 id=\"code-example-clean-up-orphaned-records\">Code instance: Clear up orphaned data<\/h3>\n<p>A typical use case is figuring out and deleting data which are now not wanted. That is crucial for In-Reminiscence tier characteristic teams, the place orphaned data persist indefinitely:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-python\">import boto3\n\nfeaturestore_runtime = boto3.consumer(\"sagemaker-featurestore-runtime\")\n\n# Step 1: Enumerate all file identifiers\nall_ids = []\nnext_token = None\nwhereas True:\n    params = {\"FeatureGroupName\": \"session-features\", \"MaxResults\": 100}\n    if next_token:\n        params[\"NextToken\"] = next_token\n    response = featurestore_runtime.list_records(**params)\n    all_ids.prolong(response[\"RecordIdentifiers\"])\n    next_token = response.get(\"NextToken\")\n    if not next_token:\n        break\n\n# Step 2: Examine towards your software's energetic session checklist\nactive_sessions = get_active_sessions()  # Your software logic\norphaned = [rid for rid in all_ids if rid not in active_sessions]\n\n# Step 3: Delete orphaned data\nfor record_id in orphaned:\n    featurestore_runtime.delete_record(\n        FeatureGroupName=\"session-features\",\n        RecordIdentifierValueAsString=record_id,\n        EventTime=\"2026-06-05T12:00:00Z\",\n    )\n\nprint(f\"Deleted {len(orphaned)} orphaned data.\")<\/code><\/pre>\n<\/p><\/div>\n<ul>\n<li>Web page measurement: Configurable by way of MaxResults (default 10, most 100).<\/li>\n<li>Token format: Opaque, encrypted string. Don&#8217;t parse or assemble tokens. Move them by way of unchanged.<\/li>\n<li>Ordering: Outcomes are usually not assured to be in any specific order.<\/li>\n<li>Concurrent writes: If data are written or deleted throughout pagination, chances are you&#8217;ll observe duplicates or gaps. That is documented conduct.<\/li>\n<li>Token scope: Tokens are tied to a selected characteristic group and account and can&#8217;t be reused throughout both.<\/li>\n<\/ul>\n<h3 id=\"key-considerations-1\">Key concerns<\/h3>\n<p>Report identifiers solely. The present launch returns file identifiers with out characteristic values. Use <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_GetRecord.html\" target=\"_blank\" rel=\"noopener\">GetRecord<\/a> or <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchGetRecord.html\" target=\"_blank\" rel=\"noopener\">BatchGetRecord<\/a> to retrieve full data for the identifiers you want.<\/p>\n<p>Automated filtering. The API excludes soft-deleted data, expired data (Normal tier TTL), and inner system keys (In-Reminiscence tier). You see solely energetic, retrievable data.<\/p>\n<p>IAM permission. The caller will need to have sagemaker:ListRecords permission on the characteristic group ARN.<\/p>\n<p>Each tiers supported. ListRecords works identically from the caller\u2019s perspective no matter whether or not the characteristic group makes use of Normal or In-Reminiscence storage.<\/p>\n<h2 id=\"putting-it-together\">Placing it collectively<\/h2>\n<p>These two APIs complement one another naturally. Think about a compliance workflow that verifies full knowledge deletion for a person throughout a number of characteristic teams:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"language-python\">import boto3\n\nfeaturestore_runtime = boto3.consumer(\"sagemaker-featurestore-runtime\")\n\nfeature_groups = [\"user-profiles\", \"click-history\", \"purchase-signals\"]\nuser_to_delete = \"user-789\"\n\n# Step 1: Discover and delete the person throughout all characteristic teams\nfor fg_name in feature_groups:\n    all_ids = []\n    next_token = None\n    whereas True:\n        params = {\"FeatureGroupName\": fg_name, \"MaxResults\": 100}\n        if next_token:\n            params[\"NextToken\"] = next_token\n        response = featurestore_runtime.list_records(**params)\n        all_ids.prolong(response[\"RecordIdentifiers\"])\n        next_token = response.get(\"NextToken\")\n        if not next_token:\n            break\n\n    if user_to_delete in all_ids:\n        featurestore_runtime.delete_record(\n            FeatureGroupName=fg_name,\n            RecordIdentifierValueAsString=user_to_delete,\n            EventTime=\"2026-06-05T23:59:59Z\",\n        )\n        print(f\"Deleted '{user_to_delete}' from {fg_name}\")\n\n# Step 2: Log the deletion occasion utilizing BatchWriteRecord\nfeaturestore_runtime.batch_write_record(\n    Entries=[\n        {\n            \"FeatureGroupName\": \"deletion-audit-log\",\n            \"Record\": [\n                {\"FeatureName\": \"request_id\", \"ValueAsString\": \"del-001\"},\n                {\"FeatureName\": \"event_time\", \"ValueAsString\": \"2026-06-05T23:59:59Z\"},\n                {\"FeatureName\": \"user_id\", \"ValueAsString\": user_to_delete},\n                {\"FeatureName\": \"status\", \"ValueAsString\": \"completed\"},\n                {\"FeatureName\": \"feature_groups_cleaned\", \"ValueAsString\": \"3\"},\n            ],\n            \"TargetStores\": [\"OnlineStore\", \"OfflineStore\"],\n        }\n    ]\n)<\/code><\/pre>\n<\/p><\/div>\n<h2 id=\"cleanup\">Cleanup<\/h2>\n<p>To keep away from ongoing costs, delete characteristic teams you created whereas following this walkthrough. For In-Reminiscence tier characteristic teams, use <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_ListRecords.html\" target=\"_blank\" rel=\"noopener\">ListRecords<\/a> to enumerate data and <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_DeleteRecord.html\" target=\"_blank\" rel=\"noopener\">DeleteRecord<\/a> to take away them earlier than deleting the characteristic group.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_BatchWriteRecord.html\" target=\"_blank\" rel=\"noopener\">BatchWriteRecord<\/a> and <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_feature_store_ListRecords.html\" target=\"_blank\" rel=\"noopener\">ListRecords<\/a> present key enhancements within the knowledge aircraft of Amazon SageMaker Characteristic Retailer. BatchWriteRecord reduces the API name quantity for high-throughput ingestion by as much as 25x whereas preserving the EventTime-based ordering ensures that hold your on-line retailer appropriate. ListRecords unlocks file discovery and lifecycle administration. That is crucial for In-Reminiscence tier prospects who beforehand had no strategy to enumerate or clear up their knowledge.<\/p>\n<p>Collectively, these APIs assist patterns that have been beforehand tough or unimaginable: bulk ingestion pipelines with fewer connections and decrease latency, compliance workflows that may confirm full knowledge deletion, and operational tooling that may browse characteristic group contents in actual time.<\/p>\n<p>For extra data, see the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/dg\/feature-store.html\" target=\"_blank\" rel=\"noopener\">Characteristic Retailer documentation<\/a>, the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_Operations_Amazon_SageMaker_Feature_Store_Runtime.html\" target=\"_blank\" rel=\"noopener\">Characteristic Retailer API reference<\/a>, the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/sagemaker\/latest\/APIReference\/API_OfflineStoreConfig.html#sagemaker-Type-OfflineStoreConfig-DisableGlueTableCreation\" target=\"_blank\" rel=\"noopener\">offline retailer configuration documentation<\/a>, and the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2026\/07\/amzn-sgm-feature-store-batch-write-list\/\" target=\"_blank\" rel=\"noopener\">What\u2019s New announcement<\/a>.<\/p>\n<p>For background on Characteristic Retailer capabilities, discover these associated posts:<\/p>\n<hr style=\"width: 100%\"\/>\n<h2>Concerning the authors<\/h2>\n<footer>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/08\/27\/ML-21718-1.jpg\" alt=\"Harshil Shah\" width=\"100\" height=\"100\"\/><\/p>\n<\/p><\/div>\n<h3 class=\"lb-h4\">Harshil Shah<\/h3>\n<p>Harshil is a Senior Options Architect at AWS with a deep ardour for modernizing buyer purposes. He works with media and leisure prospects to assist them construct and combine AI into their present tech stacks.<\/p>\n<\/p><\/div>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/08\/27\/ML-21718-2.jpg\" alt=\"Dhaval Shah\" width=\"100\" height=\"100\"\/><\/p>\n<\/p><\/div>\n<h3 class=\"lb-h4\">Dhaval Shah<\/h3>\n<p>Dhaval is a Senior Options Architect at AWS. He works with prospects to design and construct manufacturing ML methods, with a deal with characteristic engineering, generative AI, and scalable knowledge architectures.<\/p>\n<\/p><\/div>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/08\/27\/ML-21718-3.jpg\" alt=\"Chirag Pandey\" width=\"100\" height=\"100\"\/><\/p>\n<\/p><\/div>\n<h3 class=\"lb-h4\">Chirag Pandey<\/h3>\n<p>Chirag is a software program engineer at AWS enthusiastic about constructing dependable and scalable infrastructure for AI\/ML workloads.<\/p>\n<\/p><\/div>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/08\/27\/ML-21718-4.jpg\" alt=\"Siamak Nariman\" width=\"100\" height=\"100\"\/><\/p>\n<\/p><\/div>\n<h3 class=\"lb-h4\">Siamak Nariman<\/h3>\n<p>Siamak is a Senior Product Supervisor at AWS. He&#8217;s targeted on AI\/ML know-how, ML mannequin administration, and ML governance to enhance general organizational effectivity and productiveness. He has in depth expertise automating processes and deploying varied applied sciences.<\/p>\n<\/p><\/div>\n<\/footer>\n<p><!-- '\"` -->\n      <\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Amazon SageMaker Characteristic Retailer is a totally managed, purpose-built repository to retailer, share, and handle options for machine studying (ML) fashions. It offers low-latency on-line serving for real-time inference, an offline retailer for historic retention and coaching characteristic knowledge, and helps each streaming and batch ingestion patterns. As ML platforms mature, two operational gaps floor [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":18273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[387,5303,1216,1063,2561,388,1567,1196],"class_list":["post-18271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-machine-learning","tag-amazon","tag-batch","tag-discover","tag-feature","tag-records","tag-sagemaker","tag-store","tag-write"],"_links":{"self":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18271"}],"version-history":[{"count":1,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18271\/revisions"}],"predecessor-version":[{"id":18272,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18271\/revisions\/18272"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/media\/18273"}],"wp:attachment":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}