翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
特徴量グループからレコードを削除する
特徴量グループからレコードを削除するには、Amazon SageMaker 特徴量ストア API を使用できます。特徴量グループは、機械学習 (ML) データを含むオブジェクトであり、データの列は特徴量によって記述され、データはレコードに含まれます。レコードには、特定のレコード識別子に関連付けられている特徴量の値が含まれています。
特徴量グループには、オンラインストアとオフラインストアの 2 つのストレージ設定があります。オンラインストアは、最新のイベント時刻のレコードのみを保持し、通常、ML 推論のリアルタイム検索に使用されます。オフラインストアは、すべてのレコードを保存し、履歴データベースとして機能します。通常、特徴量の探索、ML トレーニング、バッチ推論に使用されます。
特徴量ストアの概念の詳細については、「取り込みの図」を参照してください。
特徴量グループからレコードを削除する方法は 2 つあり、動作はストレージ設定によって異なります。次のトピックでは、オンラインストアとオフラインストアからレコードをソフト削除する方法とハード削除する方法、およびそれぞれの例を説明します。
オンラインストアからレコードを削除する
DeleteRecord API を使用してオンラインストアからレコードをソフト削除またはハード削除するには、DeletionMode リクエストパラメータを使用して SoftDelete (デフォルト) または HardDelete を指定します。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には書き込まれません。
次の例では、SDK for 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' )
オフラインストアからレコードを削除する
Amazon SageMaker 特徴量ストアを使用すると、OfflineStore の Iceberg テーブル形式からレコードをソフト削除したりハード削除したりできます。OfflineStore の Iceberg テーブル形式の場合:
-
レコードをソフト削除すると、Iceberg テーブルファイルの最新バージョンにはレコードが含まれなくなります。ただし、以前のバージョンにはレコードが含まれたままであり、タイムトラベルを使用してアクセスできます。タイムトラベルの詳細については、「Athena ユーザーガイド」の「Iceberg テーブルデータをクエリする」と「タイムトラベルを実行する」を参照してください。
-
レコードをハード削除すると、レコードを含む Iceberg テーブルの以前のバージョンが削除されます。この場合、削除する Iceberg テーブルのバージョンを指定する必要があります。
Iceberg テーブル名を取得する
OfflineStore Iceberg テーブルからソフトやハード削除を実行するには、Iceberg テーブル名 を取得する必要があります。以下の手順では、既に特徴量ストアを使用して、iceberg-table-nameDisableGlueTableCreation = False (デフォルト) で Iceberg テーブル形式でのオフラインストアのストレージ設定で特徴量グループを作成していることを前提としています。特徴量グループの作成の詳細については、「Amazon SageMaker Feature Store の使用を開始する」を参照してください。
を取得するには、iceberg-table-nameDescribeFeatureGroup API を使用して、DataCatalogConfig を取得します。これには、OfflineStore のデータカタログとして機能する Glue テーブルのメタデータが含まれています。DataCatalogConfig 内の TableName が です。iceberg-table-name
Amazon Athena オフラインストアのソフト削除とハード削除の例
次の手順では、Amazon Athena を使用して、OfflineStore の Iceberg テーブルからレコードをソフト削除してからハード削除します。これは、OfflineStore で削除するレコードが削除済みのレコードマーカーであることを前提としています。OfflineStore での削除済みのレコードマーカーの詳細については、「オンラインストアからレコードを削除する」を参照してください。
-
Iceberg テーブル名
を取得します。Iceberg テーブル名を取得する方法の詳細については、「Iceberg テーブル名を取得する」を参照してください。iceberg-table-name -
DELETEコマンドを実行して、Iceberg テーブルの最新バージョン (またはスナップショット) にレコードが含まれないように、OfflineStoreのレコードをソフト削除します。次の例では、is_deletedが'True'であるレコードと、それらのレコードの以前のイベント時刻バージョンを削除します。削除を制限するために、その他の特徴量に基づいて条件を追加することができます。Athena でのDELETEの使用の詳細については、「Athena ユーザーガイド」の「DELETE」を参照してください。DELETE FROMiceberg-table-nameWHERErecord-id-feature-nameIS IN ( SELECTrecord-id-feature-nameFROMiceberg-table-nameWHERE is_deleted = 'True')ソフト削除したレコードは、タイムトラベルを実行することで、以前のファイルバージョンで引き続き表示できます。タイムトラベルの実行の詳細については、「Athena ユーザーガイド」の「Iceberg テーブルデータをクエリする」と「タイムトラベルを実行する」を参照してください。
-
OfflineStoreからレコードをハード削除するには、次のとおり Iceberg テーブルの以前のバージョンからレコードを削除します。-
OPTIMIZEコマンドを実行して、データファイルのサイズと関連する削除ファイルの数に基づいて、データファイルをより最適化されたレイアウトに書き換えます。Iceberg テーブルと構文の最適化の詳細については、「Athena ユーザーガイド」の「Iceberg テーブルを最適化する」を参照してください。OPTIMIZEiceberg-table-nameREWRITE 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 TABLEiceberg-table-nameSET 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」を参照してください。VACUUMiceberg-table-name
-
Apache Spark オフラインストアのソフト削除とハード削除の例
Apache Spark を使用して OfflineStore Iceberg テーブルからレコードをソフト削除してからハード削除するには、Spark プロシージャを使用して、上記の「Amazon Athena オフラインストアのソフト削除とハード削除の例」と同じ手順を実行します。プロシージャの完全なリストについては、「Apache Iceberg ドキュメント」の「Spark Procedures
-
OfflineStoreからソフト削除する場合: Athena でDELETEコマンドを使用する代わりに、Apache Spark でDELETE FROMコマンドを使用します。 -
以前のバージョンの Iceberg テーブルからレコードを削除して
OfflineStoreからレコードをハード削除するには:-
Iceberg テーブル設定を変更する場合: Athena から
ALTER TABLEコマンドを使用する代わりに、expire_snapshotsプロシージャを使用します。 -
Iceberg テーブルから不要になったデータファイルを削除するには: Athena で
VACUUMコマンドを使用する代わりに、remove_orphan_filesプロシージャを使用します。
-