本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从特征组中删除记录
您可以使用 Amazon F SageMaker eature Stor API e 从您的功能组中删除记录。特征组是一个包含机器学习 (ML) 数据的对象,其中数据列由特征描述,数据包含在记录中。一条记录包含与特定记录标识符关联的特征值。
特征组有两种存储配置:在线存储和离线存储。在线存储仅保留最新事件时间的记录,通常用于实时查找以进行机器学习推理。离线存储保留所有记录并充当历史数据库,通常用于特征探索、机器学习训练和批量推理。
有关 Feature Store 概念的更多信息,请参阅摄取示意图。
有两种方法可以从特征组中删除记录,其行为因存储配置而异。在以下主题中,我们将介绍如何软删除和硬删除在线和离线存储中的记录,并提供示例。
从在线存储删除记录
您可以使用DeletionMode
请求参数指定SoftDelete
(默认)或,DeleteRecord
API使用软或硬删除在线商店中的记录HardDelete
。有关更多信息 DeleteRecord
API,请参阅 Amazon SageMaker API 参考DeleteRecord
中的。
通过在线存储:
-
软删除(默认)时,将无法再通过 GetRecord 或检索记录, BatchGetRecord 并且要素列的值设置为
null
,但RecordIdentifer
和要EventTime
素值除外。 -
硬删除记录后,将从在线存储中完全删除该记录。
在这两种情况下,Feature Store 都会将已删除的记录标记附加到 OfflineStore
。已删除的记录标记是与原始记录具有相同 RecordIdentifer
的记录,但 is_deleted
值设置为 True
,EventTime
设置为删除输入 EventTime
,其他特征值设置为 null
。
请注意,DeleteRecord
中指定的 EventTime
应设置为晚于同一 RecordIdentifer
在 OnlineStore
中现有记录的 EventTime
。否则不会进行删除:
-
对于
SoftDelete
,现有(未删除)记录仍保留在OnlineStore
中,但删除记录标记仍写入到OfflineStore
。 -
HardDelete
返回EventTime
:400 ValidationException
表示删除操作失败。没有向OfflineStore
中写入任何删除记录标记。
以下示例使用 for SDK Python (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' )
从离线存储删除记录
借助 A SageMaker mazon Feature Store,你可以软硬删除OfflineStore
冰山表格式中的记录。使用 OfflineStore
Iceberg 表格式:
-
软删除记录时,最新版本的 Iceberg 表文件将不包含该记录,但以前的版本仍将包含该记录,并可使用时间旅行进行访问。有关时间旅行的信息,请参阅《Athena 用户指南》中的查询 Iceberg 表数据并执行时间旅行。
-
硬删除一条记录时,将删除包含该记录的 Iceberg 表的先前版本。在这种情况下,您应指定要删除哪些版本的 Iceberg 表。
获取 Iceberg 表名
要从 OfflineStore
Iceberg 表进行软删除和硬删除,您需要获取 Iceberg 表名
。以下说明假设您已使用 Feature Store 创建了一个特征组,该特征组使用 Iceberg 表格式的离线存储配置,且 iceberg-table-name
DisableGlueTableCreation = False
(默认)。有关创建特征组的更多信息,请参阅开始使用 Amazon Feature SageMaker Store。
要获取您的
,请使用iceberg-table-name
DescribeFeatureGroup
API获取DataCatalogConfig
。这包含用作 OfflineStore
的数据目录的 Glue 表的元数据。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
命令以根据数据文件的大小和相关删除文件的数量将数据文件重写为更优化的布局。有关优化 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 用户指南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
' ) -
运行
VACUUM
命令以删除 Iceberg 表中不再需要的数据文件,这些文件未被当前版本引用。应在当前快照中不再引用已删除的记录后运行VACUUM
命令。例如,删除之后的vacuum_max_snapshot_age_seconds
。有关 Athena 的VACUUM
和语法的更多信息,请参阅VACUUM
。VACUUM
iceberg-table-name
-
Apache Spark 离线存储软删除和硬删除示例
要使用 Apache Spark 从 OfflineStore
Iceberg 表软删除然后硬删除记录,可以按照与上述 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
过程。
-