

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 特徴量グループからレコードを削除する


特徴量グループからレコードを削除するには、Amazon SageMaker 特徴量ストア API を使用できます。特徴量グループは、機械学習 (ML) データを含むオブジェクトであり、データの列は特徴量によって記述され、データはレコードに含まれます。レコードには、特定のレコード識別子に関連付けられている特徴量の値が含まれています。

特徴量グループには、オンラインストアとオフラインストアの 2 つのストレージ設定があります。オンラインストアは、最新のイベント時刻のレコードのみを保持し、通常、ML 推論のリアルタイム検索に使用されます。オフラインストアは、すべてのレコードを保存し、履歴データベースとして機能します。通常、特徴量の探索、ML トレーニング、バッチ推論に使用されます。

特徴量ストアの概念の詳細については、「[取り込みの図](feature-store-concepts.md#feature-store-concepts-ingestion)」を参照してください。

特徴量グループからレコードを削除する方法は 2 つあり、動作はストレージ設定によって異なります。次のトピックでは、オンラインストアとオフラインストアからレコードをソフト削除する方法とハード削除する方法、およびそれぞれの例を説明します。

**Topics**
+ [

## オンラインストアからレコードを削除する
](#feature-store-delete-records-online-store)
+ [

## オフラインストアからレコードを削除する
](#feature-store-delete-records-offline-store)

## オンラインストアからレコードを削除する


`DeleteRecord` API を使用してオンラインストアからレコードをソフト削除またはハード削除するには、`DeletionMode` リクエストパラメータを使用して `SoftDelete` (デフォルト) または `HardDelete` を指定します。`DeleteRecord` API の詳細については、「Amazon SageMaker API リファレンス」の「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html)」を参照してください。

オンラインストアの場合:
+ ソフト削除 (デフォルト) を実行すると、レコードは 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) の [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-featurestore-runtime/client/delete_record.html#delete-record](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-featurestore-runtime/client/delete_record.html#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 テーブルデータをクエリする」と「タイムトラベルを実行する」](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-table-data.html)を参照してください。
+ レコードをハード削除すると、レコードを含む Iceberg テーブルの以前のバージョンが削除されます。この場合、削除する Iceberg テーブルのバージョンを指定する必要があります。

### Iceberg テーブル名を取得する


`OfflineStore` Iceberg テーブルからソフトやハード削除を実行するには、Iceberg テーブル名 `iceberg-table-name` を取得する必要があります。以下の手順では、既に特徴量ストアを使用して、`DisableGlueTableCreation = False` (デフォルト) で Iceberg テーブル形式でのオフラインストアのストレージ設定で特徴量グループを作成していることを前提としています。特徴量グループの作成の詳細については、「[Amazon SageMaker Feature Store の使用を開始する](feature-store-getting-started.md)」を参照してください。

`iceberg-table-name` を取得するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeFeatureGroup.html.title](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeFeatureGroup.html.title) API を使用して、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCatalogConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCatalogConfig.html) を取得します。これには、`OfflineStore` のデータカタログとして機能する Glue テーブルのメタデータが含まれています。`DataCatalogConfig` 内の `TableName` が `iceberg-table-name` です。

### Amazon Athena オフラインストアのソフト削除とハード削除の例


次の手順では、Amazon Athena を使用して、`OfflineStore` の Iceberg テーブルからレコードをソフト削除してからハード削除します。これは、`OfflineStore` で削除するレコードが削除済みのレコードマーカーであることを前提としています。`OfflineStore` での削除済みのレコードマーカーの詳細については、「[オンラインストアからレコードを削除する](#feature-store-delete-records-online-store)」を参照してください。

1. Iceberg テーブル名 `iceberg-table-name` を取得します。Iceberg テーブル名を取得する方法の詳細については、「[Iceberg テーブル名を取得する](#feature-store-delete-records-offline-store-get-iceberg-table-name)」を参照してください。

1. `DELETE` コマンドを実行して、Iceberg テーブルの最新バージョン (またはスナップショット) にレコードが含まれないように、`OfflineStore` のレコードをソフト削除します。次の例では、`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 テーブルデータをクエリする」と「タイムトラベルを実行する」](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-table-data.html)を参照してください。

1. `OfflineStore` からレコードをハード削除するには、次のとおり Iceberg テーブルの以前のバージョンからレコードを削除します。

   1. `OPTIMIZE` コマンドを実行して、データファイルのサイズと関連する削除ファイルの数に基づいて、データファイルをより最適化されたレイアウトに書き換えます。Iceberg テーブルと構文の最適化の詳細については、「Athena ユーザーガイド」の「[Iceberg テーブルを最適化する](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-data-optimization.html)」を参照してください。

      ```
      OPTIMIZE iceberg-table-name REWRITE DATA USING BIN_PACK
      ```

   1. (オプション、実行する必要があるのは一度のみ) `ALTER TABLE` コマンドを実行して Iceberg テーブルセットの値を変更し、仕様に従って以前のファイルバージョンをハード削除するタイミングを設定します。これを実行するには、`vacuum_min_snapshots_to_keep` プロパティと `vacuum_max_snapshot_age_seconds` プロパティに値を割り当てます。Iceberg テーブルセットのプロパティの変更の詳細については、「Athena ユーザーガイド」の「[ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-managing-tables.html#querying-iceberg-alter-table-set-properties)」を参照してください。Iceberg テーブルプロパティのキー値のペアの詳細については、「Athena ユーザーガイド」の「[テーブルプロパティ](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-creating-tables.html#querying-iceberg-table-properties)」を参照してください。

      ```
      ALTER TABLE iceberg-table-name SET TBLPROPERTIES (
        'vacuum_min_snapshots_to_keep'='your-specified-value',
        'vacuum_max_snapshot_age_seconds'='your-specified-value'
      )
      ```

   1. `VACUUM` コマンドを実行すると、現在のバージョンで参照されていない Iceberg テーブルの不要になったデータファイルを削除できます。この `VACUUM` コマンドは、削除済みのレコードが現在のスナップショットで参照されなくなった後に実行する必要があります。例えば、削除後の `vacuum_max_snapshot_age_seconds` などです。Athena での `VACUUM` と構文の詳細については、「[https://docs.aws.amazon.com/athena/latest/ug/vacuum-statement.html](https://docs.aws.amazon.com/athena/latest/ug/vacuum-statement.html)」を参照してください。

      ```
      VACUUM iceberg-table-name
      ```

### Apache Spark オフラインストアのソフト削除とハード削除の例


Apache Spark を使用して `OfflineStore` Iceberg テーブルからレコードをソフト削除してからハード削除するには、Spark プロシージャを使用して、上記の「[Amazon Athena オフラインストアのソフト削除とハード削除の例](#feature-store-delete-records-offline-store-athena)」と同じ手順を実行します。プロシージャの完全なリストについては、「Apache Iceberg ドキュメント」の[「Spark Procedures](https://iceberg.apache.org/docs/1.3.1/spark-procedures/)」を参照してください。
+ `OfflineStore` からソフト削除する場合: Athena で `DELETE` コマンドを使用する代わりに、Apache Spark で [https://iceberg.apache.org/docs/latest/spark-writes/#delete-from](https://iceberg.apache.org/docs/latest/spark-writes/#delete-from) コマンドを使用します。
+ 以前のバージョンの Iceberg テーブルからレコードを削除して `OfflineStore` からレコードをハード削除するには:
  + Iceberg テーブル設定を変更する場合: Athena から `ALTER TABLE` コマンドを使用する代わりに、[https://iceberg.apache.org/docs/1.3.1/spark-procedures/#expire_snapshots](https://iceberg.apache.org/docs/1.3.1/spark-procedures/#expire_snapshots) プロシージャを使用します。
  + Iceberg テーブルから不要になったデータファイルを削除するには: Athena で `VACUUM` コマンドを使用する代わりに、 [https://iceberg.apache.org/docs/1.3.1/spark-procedures/#remove_orphan_files](https://iceberg.apache.org/docs/1.3.1/spark-procedures/#remove_orphan_files) プロシージャを使用します。