从特征组中删除记录 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从特征组中删除记录

您可以使用 Amazon F SageMaker eature Stor API e 从您的功能组中删除记录。特征组是一个包含机器学习 (ML) 数据的对象,其中数据列由特征描述,数据包含在记录中。一条记录包含与特定记录标识符关联的特征值。

特征组有两种存储配置:在线存储和离线存储。在线存储仅保留最新事件时间的记录,通常用于实时查找以进行机器学习推理。离线存储保留所有记录并充当历史数据库,通常用于特征探索、机器学习训练和批量推理。

有关 Feature Store 概念的更多信息,请参阅摄取示意图

有两种方法可以从特征组中删除记录,其行为因存储配置而异。在以下主题中,我们将介绍如何软删除和硬删除在线和离线存储中的记录,并提供示例。

从在线存储删除记录

您可以使用DeletionMode请求参数指定SoftDelete(默认)或,DeleteRecordAPI使用软或硬删除在线商店中的记录HardDelete。有关更多信息 DeleteRecordAPI,请参阅 Amazon SageMaker API 参考DeleteRecord中的。

通过在线存储:

  • 软删除(默认)时,将无法再通过 GetRecord 或检索记录, BatchGetRecord 并且要素列的值设置为null,但RecordIdentifer和要EventTime素值除外。

  • 硬删除记录后,将从在线存储中完全删除该记录。

在这两种情况下,Feature Store 都会将已删除的记录标记附加到 OfflineStore。已删除的记录标记是与原始记录具有相同 RecordIdentifer 的记录,但 is_deleted 值设置为 TrueEventTime 设置为删除输入 EventTime,其他特征值设置为 null

请注意,DeleteRecord 中指定的 EventTime 应设置为晚于同一 RecordIdentiferOnlineStore 中现有记录的 EventTime。否则不会进行删除:

  • 对于 SoftDelete,现有(未删除)记录仍保留在 OnlineStore 中,但删除记录标记仍写入到 OfflineStore

  • HardDelete 返回 EventTime: 400 ValidationException 表示删除操作失败。没有向 OfflineStore 中写入任何删除记录标记。

以下示例使用 for SDK Python (Boto3) delete_record操作从要素组中删除记录。要从特征组删除记录,您将需要:

  • 特征组名称 (feature-group-name)

  • 字符串形式的记录标识符值 (record-identifier-value)

  • 删除事件时间 (deletion-event-time)

    删除事件时间应晚于要删除的记录的事件时间。

在线存储软删除示例

要进行软删除,则需要使用DeleteRecordAPI并可以使用默认值DeletionMode或将设置DeletionModeSoftDelete

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并将设置DeletionModeHardDelete

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 表名 iceberg-table-name。以下说明假设您已使用 Feature Store 创建了一个特征组,该特征组使用 Iceberg 表格式的离线存储配置,且 DisableGlueTableCreation = False(默认)。有关创建特征组的更多信息,请参阅开始使用 Amazon Feature SageMaker Store

要获取您的iceberg-table-name,请使用DescribeFeatureGroupAPI获取DataCatalogConfig。这包含用作 OfflineStore 的数据目录的 Glue 表的元数据。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 命令以根据数据文件的大小和相关删除文件的数量将数据文件重写为更优化的布局。有关优化 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。有关 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 过程。