本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以透過 Amazon SageMaker Feature Store API 從特徵群組中刪除記錄。特徵群組是包含機器學習 (ML) 資料的物件,其中資料欄由特徵描述,而您的資料則包含在記錄中。記錄包含與特定記錄識別符相關聯的特徵值。
特徵群組有兩種儲存組態:線上儲存和離線儲存。線上儲存只會保留最新事件時間的記錄,通常用於機器學習 (ML) 推論的即時查詢。離線儲存會保留所有記錄,並做為歷史資料庫,通常用於特徵探索、機器學習 (ML) 訓練和批次推論。
若要取得有關特徵商店概念的更多資訊,請參閱擷取圖。
有兩種方法可以從特徵群組中刪除記錄,並且行為會根據儲存組態而有所不同。在下列主題中,我們將說明如何從線上和離線儲存軟刪除和硬刪除記錄,並提供範例。
從線上儲存刪除記錄
您可以使用 DeletionMode
要求參數來指定 SoftDelete
(預設) 或 HardDelete
,以便使用 DeleteRecord
API 從線上儲存中軟刪除或實硬刪除記錄。如需 DeleteRecord
API 的詳細資訊,請參閱 Amazon SageMaker API 參考中的 DeleteRecord
。
使用線上儲存:
-
當您軟刪除 (預設) 時,GetRecord 或 BatchGetRecord 無法再擷取記錄,且除了
RecordIdentifer
和EventTime
特徵值以外,特徵欄值會設定為null
。 -
當您硬刪除時,記錄會從線上儲存中完全移除。
在這兩種情況下,特徵商店都會將已刪除的記錄標記附加至 OfflineStore
。刪除的記錄標記是與原始記錄 RecordIdentifer
相同的記錄,但 is_deleted
值設定為 True
,EventTime
設定為刪除輸入 EventTime
,其他特徵值設定為 null
。
請注意,在 DeleteRecord
中指定的 EventTime
應設定晚於相同 RecordIdentifer
的 OnlineStore
記錄中的現有記錄的 EventTime
。如果不這樣設定,則不會發生刪除:
-
對於
SoftDelete
,現有 (未刪除) 記錄會保留在OnlineStore
中,不過刪除記錄標記仍會寫入OfflineStore
。 -
HardDelete
返回EventTime
:400 ValidationException
表示刪除操作失敗。不會將刪除記錄標記寫入OfflineStore
。
下列範例會使用適用於 Python 的 SDK (Boto3) delete_record
-
特徵群組名稱 (
)feature-group-name
-
記錄標識符值作為字串 (
)record-identifier-value
-
刪除事件時間 (
)deletion-event-time
刪除事件時間應晚於您要刪除的記錄的事件時間。
線上儲存軟刪除範例
對於軟刪除,您將需要使用 DeleteRecord
API,並且可以使用預設 DeletionMode
或將 DeletionMode
設定為 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' )
線上儲存硬刪除範例
對於硬刪除,您需要使用 DeleteRecord
API 並將 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 資料表名稱
。以下指示假設您已使用 Feature Store,使用 Iceberg 資料表格式 iceberg-table-name
DisableGlueTableCreation = False
(預設) 透過離線儲存儲存組態來建立特徵群組。如需建立特徵群組的詳細資訊,請參閱開始使用 Amazon SageMaker Feature Store。
若要取得您的
,請使用 iceberg-table-name
DescribeFeatureGroup
API 來取得 DataCatalogConfig
。這包含 Glue 資料表的中繼資料,作為 OfflineStore
的資料型錄。DataCatalogConfig
中的 TableName
是您的
。iceberg-table-name
Amazon Athena 離線儲存軟刪除和硬刪除範例
以下指示如何使用 Amazon Athena 進行軟刪除,然後從 OfflineStore
Iceberg 資料表中硬刪除記錄。這假設您要在 OfflineStore
中刪除的記錄是已刪除的記錄標記。如需有關 OfflineStore
中已刪除記錄標記的資訊,請參閱從線上儲存刪除記錄。
-
取得您的 Iceberg 資料表名稱
。如需如何取得 Iceberg 資料表名稱的相關資訊,請參閱取得您的 Iceberg 資料表名稱。iceberg-table-name
-
執行
DELETE
指令以軟刪除OfflineStore
上的記錄,以便 Iceberg 資料表的最新版本 (或快照) 不會包含記錄。下列範例會刪除其中is_deleted
為'True'
的記錄,以及這些記錄的先前事件時間版本。您可以根據其他特徵新增其他條件來限制刪除。如需有關透過 Athena 使用DELETE
的詳細資訊,請參閱 Athena 使用者指南中的DELETE
。DELETE FROM
iceberg-table-name
WHERErecord-id-feature-name
IS IN ( SELECTrecord-id-feature-name
FROMiceberg-table-name
WHERE is_deleted = 'True')軟刪除的記錄仍然可以透過執行歷程在以前的檔案版本中檢視。如需執行時間歷程的相關資訊,請參閱 Athena 使用者指南中的查詢 Iceberg 資料表資料和執行時間歷程。
-
從以前版本的 Iceberg 資料表中刪除記錄以便從
OfflineStore
中硬刪除記錄:-
執行
OPTIMIZE
指令,根據相關 delete 檔案的大小和數量,將資料檔案重寫成更好的版面配置。如需有關最佳化 Iceberg 資料表和語法的詳細資訊,請參閱 Athena 使用者指南中的最佳化處理 Iceberg 資料表。OPTIMIZE
iceberg-table-name
REWRITE DATA USING BIN_PACK -
(可選,只需執行一次) 執行
ALTER TABLE
指令以變更 Iceberg 資料表設定值,並根據您的規格設定何時硬刪除以前的檔案版本。這可以透過將值指派給vacuum_min_snapshots_to_keep
和vacuum_max_snapshot_age_seconds
屬性來完成。如需有關變更 Iceberg 資料表集屬性的詳細資訊,請參閱 Athena 使用者指南中的 ALTER TABLE SET PROPERTIES。如需有關 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
' ) -
執行
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
程序。
-