從特徵群組中刪除記錄 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從特徵群組中刪除記錄

您可以使用 Amazon SageMaker Feature Store API從您的功能群組中刪除記錄。特徵群組是包含機器學習 (ML) 資料的物件,其中資料欄由特徵描述,而您的資料則包含在記錄中。記錄包含與特定記錄識別符相關聯的特徵值。

特徵群組有兩種儲存組態:線上儲存和離線儲存。線上儲存只會保留最新事件時間的記錄,通常用於機器學習 (ML) 推論的即時查詢。離線儲存會保留所有記錄,並做為歷史資料庫,通常用於特徵探索、機器學習 (ML) 訓練和批次推論。

若要取得有關特徵商店概念的更多資訊,請參閱擷取圖

有兩種方法可以從特徵群組中刪除記錄,並且行為會根據儲存組態而有所不同。在下列主題中,我們將說明如何從線上和離線儲存軟刪除和硬刪除記錄,並提供範例。

從線上儲存刪除記錄

您可以使用DeletionMode請求參數指定 SoftDelete(預設) 或 ,以軟式或硬DeleteRecordAPI式方式從線上商店刪除記錄HardDelete。如需 DeleteRecord 的詳細資訊API,請參閱 Amazon SageMaker API 參考DeleteRecord中的 。

使用線上儲存:

  • 當您軟刪除 (預設) 時, GetRecord 或 無法再擷取記錄, BatchGetRecord 且功能欄值設定為 null,但 RecordIdentiferEventTime 功能值除外。

  • 當您硬刪除時,記錄會從線上儲存中完全移除。

在這兩種情況下,特徵商店都會將已刪除的記錄標記附加至 OfflineStore。刪除的記錄標記是與原始記錄 RecordIdentifer 相同的記錄,但 is_deleted 值設定為 TrueEventTime 設定為刪除輸入 EventTime,其他特徵值設定為 null

請注意,在 DeleteRecord 中指定的 EventTime 應設定晚於相同 RecordIdentiferOnlineStore 記錄中的現有記錄的 EventTime。如果不這樣設定,則不會發生刪除:

  • 對於 SoftDelete,現有 (未刪除) 記錄會保留在 OnlineStore 中,不過刪除記錄標記仍會寫入 OfflineStore

  • HardDelete 返回 EventTime400 ValidationException 表示刪除操作失敗。不會將刪除記錄標記寫入 OfflineStore

下列範例使用 SDK for Python (Boto3) delete_record操作,從功能群組中刪除記錄。若要從特徵群組中刪除記錄,您將需要:

  • 特徵群組名稱 (feature-group-name)

  • 記錄標識符值作為字串 (record-identifier-value)

  • 刪除事件時間 (deletion-event-time)

    刪除事件時間應晚於您要刪除的記錄的事件時間。

線上儲存軟刪除範例

對於軟刪除,您將需要使用 DeleteRecordAPI,並且可以使用預設值DeletionModeDeletionMode將 設定為 SoftDelete

import boto3 client = boto3.client('sagemaker-featurestore-runtime') client.delete_record( FeatureGroupName='feature-group-name', RecordIdentifierValueAsString='record-identifier-value', EventTime='deletion-event-time', TargetStores=[ 'OnlineStore', ], DeletionMode='SoftDelete' )

線上儲存硬刪除範例

對於硬刪除,您將需要使用 DeleteRecordAPI,並將 DeletionMode設定為 HardDelete

import boto3 client = boto3.client('sagemaker-featurestore-runtime') client.delete_record( FeatureGroupName='feature-group-name', RecordIdentifierValueAsString='record-identifier-value', EventTime='deletion-event-timestamp', TargetStores=[ 'OnlineStore', ], DeletionMode='HardDelete' )

從離線儲存刪除記錄

使用 Amazon SageMaker Feature Store,您可以從 OfflineStore Iceberg 資料表格式軟式和硬式刪除記錄。使用 OfflineStore Iceberg 資料表格式:

  • 當您軟刪除記錄時,Iceberg 資料表檔案的最新版本將不包含該記錄,但以前的版本仍將包含該記錄,並且可以使用時間歷程存取。如需時間歷程的相關資訊,請參閱 Athena 使用者指南中的查詢 Iceberg 資料表資料和執行時間歷程

  • 當您硬刪除記錄時,您將刪除包含該記錄的先前版本的 Iceberg 資料表。在這種情況下,您應該指定要刪除的 Iceberg 資料表的版本。

取得您的 Iceberg 資料表名稱

要從 OfflineStore Iceberg 資料表中軟刪除,您需要取得您的 Iceberg 資料表名稱 iceberg-table-name。以下指示假設您已使用 Feature Store,使用 Iceberg 資料表格式 DisableGlueTableCreation = False (預設) 透過離線儲存儲存組態來建立特徵群組。如需建立特徵群組的詳細資訊,請參閱開始使用 Amazon SageMaker Feature Store

若要取得您的 iceberg-table-name,請使用 DescribeFeatureGroupAPI取得 DataCatalogConfig。這包含 Glue 資料表的中繼資料,作為 OfflineStore 的資料型錄。DataCatalogConfig 中的 TableName 是您的 iceberg-table-name

Amazon Athena 離線儲存軟刪除和硬刪除範例

以下指示如何使用 Amazon Athena 進行軟刪除,然後從 OfflineStore Iceberg 資料表中硬刪除記錄。這假設您要在 OfflineStore 中刪除的記錄是已刪除的記錄標記。如需有關 OfflineStore 中已刪除記錄標記的資訊,請參閱從線上儲存刪除記錄

  1. 取得您的 Iceberg 資料表名稱 iceberg-table-name。如需如何取得 Iceberg 資料表名稱的相關資訊,請參閱取得您的 Iceberg 資料表名稱

  2. 執行 DELETE 指令以軟刪除 OfflineStore 上的記錄,以便 Iceberg 資料表的最新版本 (或快照) 不會包含記錄。下列範例會刪除其中 is_deleted'True' 的記錄,以及這些記錄的先前事件時間版本。您可以根據其他特徵新增其他條件來限制刪除。如需有關透過 Athena 使用 DELETE 的詳細資訊,請參閱 Athena 使用者指南中的 DELETE

    DELETE FROM iceberg-table-name WHERE record-id-feature-name IS IN ( SELECT record-id-feature-name FROM iceberg-table-name WHERE is_deleted = 'True')

    軟刪除的記錄仍然可以透過執行歷程在以前的檔案版本中檢視。如需執行時間歷程的相關資訊,請參閱 Athena 使用者指南中的查詢 Iceberg 資料表資料和執行時間歷程

  3. 從以前版本的 Iceberg 資料表中刪除記錄以便從 OfflineStore 中硬刪除記錄:

    1. 執行 OPTIMIZE 指令,根據相關 delete 檔案的大小和數量,將資料檔案重寫成更好的版面配置。如需有關最佳化 Iceberg 資料表和語法的詳細資訊,請參閱 Athena 使用者指南中的最佳化處理 Iceberg 資料表

      OPTIMIZE iceberg-table-name REWRITE DATA USING BIN_PACK
    2. (可選,只需執行一次) 執行 ALTER TABLE 指令以變更 Iceberg 資料表設定值,並根據您的規格設定何時硬刪除以前的檔案版本。這可以透過將值指派給 vacuum_min_snapshots_to_keepvacuum_max_snapshot_age_seconds 屬性來完成。如需變更 Iceberg 資料表集屬性的詳細資訊,請參閱 Athena 使用者指南ALTERTABLESETPROPERTIES中的 。如需有關 Iceberg 資料表屬性鍵值對的詳細資訊,請參閱 Athena 使用者指南中的資料表屬性

      ALTER TABLE iceberg-table-name SET TBLPROPERTIES ( 'vacuum_min_snapshots_to_keep'='your-specified-value', 'vacuum_max_snapshot_age_seconds'='your-specified-value' )
    3. 執行 VACUUM 指令以刪除 Iceberg 資料表中不再需要的資料檔案,而不是當前版本引用的資料檔案。VACUUM 指令應在當前快照中不再引用已删除的記錄後執行。例如,刪除之後執行 vacuum_max_snapshot_age_seconds。如需有關 VACUUM 與 Athena 和語法的詳細資訊,請參閱 VACUUM

      VACUUM iceberg-table-name

Apache Spark 離線儲存軟刪除和硬刪除範例

使用 Apache Spark 從 OfflineStore 中軟刪除記錄,然後再硬刪除記錄,您可以按照如上 Amazon Athena 離線儲存軟刪除和硬刪除範例 中的相同指示操作,但請使用 Spark 程序。如需程序的完整清單,請參閱 Apache Iceberg 文件中的 Spark 程序

  • OfflineStore 進行軟刪除:不使用 Athena 中的 DELETE 指令,而應使用 Apache Spark 中的 DELETE FROM 指令。

  • 從以前版本的 Iceberg 資料表中刪除記錄以便從 OfflineStore 中硬刪除記錄:

    • 變更您的 Iceberg 資料表組態時:請勿使用 Athena 的 ALTER TABLE 指令,而應使用 expire_snapshots 程序。

    • 若要從您的 Iceberg 資料表移除不再需要的資料檔案:請勿使用 Athena 中的 VACUUM 指令,而應使用 remove_orphan_files 程序。