

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 특성 그룹에서 레코드를 삭제합니다.
<a name="feature-store-delete-records"></a>

Amazon SageMaker 특성 저장소 API를 사용하여 특성 그룹에서 레코드를 삭제할 수 있습니다. 특성 그룹은 기계 학습(ML) 데이터를 포함하는 객체입니다.여기서 데이터 열은 특성별로 설명되고 데이터는 레코드에 포함됩니다. 레코드에는 특정 레코드 식별자와 관련된 특성의 값이 포함됩니다.

특성 그룹에는 온라인 저장소와 오프라인 저장소라는 두 가지 스토리지 구성이 있습니다. 온라인 저장소는 최신 이벤트 시간만 기록하며, 일반적으로 ML 추론을 위한 실시간 검색에 사용됩니다. 오프라인 저장소는 모든 레코드를 보관하고 과거 데이터베이스 역할을 하며 일반적으로 특성 탐색, ML 훈련 및 일괄 추론에 사용됩니다.

특성 저장소 개념에 대한 자세한 내용은 [수집 다이어그램](feature-store-concepts.md#feature-store-concepts-ingestion)섹션을 참조하세요.

특성 그룹에서 레코드를 삭제하는 방법은 두 가지가 있으며 스토리지 구성에 따라 동작이 달라집니다. 다음 항목에서는 온라인 및 오프라인 저장소에서 레코드를 소프트 삭제 및 하드 삭제하는 방법을 설명하고 예제를 제공합니다.

**Topics**
+ [온라인 저장소에서 레코드 삭제](#feature-store-delete-records-online-store)
+ [오프라인 저장소에서 레코드 삭제](#feature-store-delete-records-offline-store)

## 온라인 저장소에서 레코드 삭제
<a name="feature-store-delete-records-online-store"></a>

`DeletionMode` 요청 파라미터를 사용하여 `SoftDelete`(기본값) 또는 `HardDelete`를 지정함으로써 `DeleteRecord`API를 통해 온라인 저장소에서 레코드를 소프트 삭제하거나 하드 삭제할 수 있습니다. `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`로 설정됩니다.

동일한 `RecordIdentifer`의 경우 `DeleteRecord`에 지정한 `EventTime`이 `OnlineStore`에 있는 기존 레코드의 `EventTime`이후로 설정되어야 한다는 점에 유의하세요. 그렇지 않으면 삭제되지 않습니다.
+ `SoftDelete`의 경우, 기존(삭제되지 않은) 레코드는 `OnlineStore`에 남아 있으며, 레코드 삭제 마커는 여전히 `OfflineStore`에 기록됩니다.
+ `HardDelete` 반환값 `EventTime`: 삭제 작업이 실패했음을 나타내는 `400 ValidationException`. 레코드 삭제 마커가 `OfflineStore`에 기록되지 않습니다.

다음 예제에서는 Python의 SDK (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`)

  삭제 이벤트 시간은 삭제하려는 레코드의 이벤트 시간보다 이후여야 합니다.

### 온라인 저장소 소프트 삭제 예제
<a name="feature-store-delete-records-online-store-soft-delete"></a>

소프트 삭제의 경우 `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'
)
```

### 온라인 저장소 하드 삭제 예제
<a name="feature-store-delete-records-online-store-hard-delete"></a>

하드 삭제의 경우 `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 name="feature-store-delete-records-offline-store"></a>

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 테이블 이름을 확인합니다.
<a name="feature-store-delete-records-offline-store-get-iceberg-table-name"></a>

`OfflineStore` Iceberg 테이블을 소프트 삭제하거나 하드 삭제하려면 Iceberg 테이블 이름 `iceberg-table-name`을 확인해야 합니다. 다음 지침은 이미 특성 저장소를 사용하여 `DisableGlueTableCreation = False`(기본값)으로 Iceberg 테이블 형식을 사용하여 오프라인 저장소 스토리지 구성을 통해 특성 그룹을 생성했다고 가정합니다. 특성 그룹 생성에 대한 자세한 내용은 [Amazon SageMaker 특성 저장소 시작하기](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 오프라인 저장소 소프트 삭제 및 하드 삭제 예제
<a name="feature-store-delete-records-offline-store-athena"></a>

다음 지침은 Amazon Athena를 사용하여 `OfflineStore`Iceberg 테이블에서 레코드를 소프트 삭제한 다음 하드 삭제합니다. 여기서는 삭제하려는 `OfflineStore`레코드가 삭제된 레코드 마커라고 가정합니다. `OfflineStore`의 삭제된 레코드 마커에 대한 자세한 내용은 [온라인 저장소에서 레코드 삭제](#feature-store-delete-records-online-store)섹션을 참조하세요.

1. `iceberg-table-name` Iceberg 테이블 이름을 확인합니다. Iceberg 테이블 이름을 확인하는 방법에 대한 자세한 내용은 [Iceberg 테이블 이름을 확인합니다.](#feature-store-delete-records-offline-store-get-iceberg-table-name)섹션을 참조하세요.

1. `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 테이블 데이터 쿼리 및 타임 트래블 실행](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-table-data.html)을 참조하세요.

1. 이전 버전의 Iceberg 테이블에서 레코드를 삭제하여 `OfflineStore`에서 레코코드를 하드 삭제합니다.

   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 사용 설명서의 [테이블 세트 속성 변경](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 오프라인 저장소 소프트 삭제 및 하드 삭제 예제
<a name="feature-store-delete-records-offline-store-spark"></a>

Apache Spark를 사용하여 `OfflineStore`Iceberg 테이블에서 레코드를 소프트 삭제한 다음 하드 삭제하려면 Spark 절차를 사용하여 위의 [Amazon Athena 오프라인 저장소 소프트 삭제 및 하드 삭제 예제](#feature-store-delete-records-offline-store-athena)지침을 따르세요. 전체 절차 목록은 Apache Iceberg 설명서의 [Spark 절차](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)`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)절차를 사용합니다.