특성 그룹에서 레코드를 삭제합니다. - Amazon SageMaker

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

특성 그룹에서 레코드를 삭제합니다.

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

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

특성 저장소 개념에 대한 자세한 내용은 수집 다이어그램섹션을 참조하세요.

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

온라인 저장소에서 레코드 삭제

DeletionMode 요청 파라미터를 사용하여 SoftDelete (기본값) 또는 를 지정DeleteRecordAPI하여 를 사용하여 온라인 스토어에서 레코드를 소프트 또는 하드 삭제할 수 있습니다HardDelete. 에 대한 자세한 내용은 Amazon SageMaker API 참조DeleteRecordDeleteRecord API섹션을 참조하세요.

온라인 저장소 사용 시:

  • 소프트 삭제(기본값)를 사용하면 GetRecord 또는 에서 레코드를 더 이상 검색할 수 없으며 BatchGetRecord 및 특성 값을 null제외하고 RecordIdentifer EventTime 특성 열 값이 로 설정됩니다.

  • 하드 삭제 시 온라인 저장소에서 해당 레코드가 완전히 제거됩니다.

두 경우 모두 특성 저장소는 삭제된 레코드 마커를 OfflineStore에 추가합니다. 삭제된 레코드 마커는 원본과 RecordIdentifer는 동일하지만 is_deleted값이 True로, EventTime값이 삭제 입력 EventTime으로, 다른 특성 값이 null로 설정됩니다.

동일한 RecordIdentifer의 경우 DeleteRecord에 지정한 EventTimeOnlineStore에 있는 기존 레코드의 EventTime이후로 설정되어야 한다는 점에 유의하세요. 그렇지 않으면 삭제되지 않습니다.

  • SoftDelete의 경우, 기존(삭제되지 않은) 레코드는 OnlineStore에 남아 있으며, 레코드 삭제 마커는 여전히 OfflineStore에 기록됩니다.

  • HardDelete 반환값 EventTime: 삭제 작업이 실패했음을 나타내는 400 ValidationException. 레코드 삭제 마커가 OfflineStore에 기록되지 않습니다.

다음 예제에서는 SDK Python용(Boto3) delete_record 작업을 사용하여 특성 그룹에서 레코드를 삭제합니다. 특성 그룹에서 레코드를 삭제하려면 다음이 필요합니다.

  • 특성 그룹 이름 (feature-group-name)

  • 식별자 값을 문자열로 레코드 (record-identifier-value)

  • 삭제 이벤트 시간 (deletion-event-time)

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

온라인 저장소 소프트 삭제 예제

소프트 삭제의 경우 를 사용해야 DeleteRecord API 하며 기본값을 사용하거나 를 DeletionModeDeletionMode 설정할 수 있습니다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 Feature Store를 사용하면 OfflineStore Iceberg 테이블 형식에서 레코드를 소프트 및 하드 삭제할 수 있습니다. OfflineStore Iceberg 테이블 형식 사용 시:

  • 레코드를 소프트 삭제하면 최신 버전의 Iceberg 테이블 파일에는 레코드가 포함되지 않지만 이전 버전에는 여전히 레코드가 포함되며 타임 트래블을 사용하여 액세스할 수 있습니다. 타임 트래블에 대한 자세한 내용은 Athena 사용 설명서의 Iceberg 테이블 데이터 쿼리 및 타임 트래블 실행을 참조하세요.

  • 레코드를 하드 삭제하면 해당 레코드가 포함된 이전 버전의 Iceberg 테이블이 제거됩니다. 이 경우 삭제하려는 Iceberg 테이블의 버전을 지정해야 합니다.

Iceberg 테이블 이름을 확인합니다.

OfflineStore Iceberg 테이블을 소프트 삭제하거나 하드 삭제하려면 Iceberg 테이블 이름 iceberg-table-name을 확인해야 합니다. 다음 지침은 이미 특성 저장소를 사용하여 DisableGlueTableCreation = False(기본값)으로 Iceberg 테이블 형식을 사용하여 오프라인 저장소 스토리지 구성을 통해 특성 그룹을 생성했다고 가정합니다. 특성 그룹 생성에 대한 자세한 내용은 Amazon SageMaker Feature Store 시작하기섹션을 참조하세요.

를 가져오려면 를 iceberg-table-name사용하여 DescribeFeatureGroupAPI를 가져옵니다DataCatalogConfig. 이것은 OfflineStore의 데이터 카탈로그 역할을 하는 Glue 테이블의 메타데이터를 포함합니다. DataCatalogConfig 내의 TableName은 사용자의 iceberg-table-name입니다.

Amazon Athena 오프라인 저장소 소프트 삭제 및 하드 삭제 예제

다음 지침은 Amazon Athena를 사용하여 OfflineStoreIceberg 테이블에서 레코드를 소프트 삭제한 다음 하드 삭제합니다. 여기서는 삭제하려는 OfflineStore레코드가 삭제된 레코드 마커라고 가정합니다. OfflineStore의 삭제된 레코드 마커에 대한 자세한 내용은 온라인 저장소에서 레코드 삭제섹션을 참조하세요.

  1. iceberg-table-name Iceberg 테이블 이름을 확인합니다. 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_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' )
    3. VACUUM 명령을 실행하여 현재 버전에서 참조하지 않는 Iceberg 테이블에 더 이상 필요하지 않은 데이터 파일을 제거합니다. 삭제된 레코드가 현재 스냅샷에서 더 이상 참조되지 않은 후에 VACUUM명령을 실행해야 합니다. 예 : 삭제 후 vacuum_max_snapshot_age_seconds. Athena VACUUM및 구문에 대한 자세한 내용은 VACUUM섹션을 참조하세요.

      VACUUM iceberg-table-name

Apache Spark 오프라인 저장소 소프트 삭제 및 하드 삭제 예제

Apache Spark를 사용하여 OfflineStoreIceberg 테이블에서 레코드를 소프트 삭제한 다음 하드 삭제하려면 Spark 절차를 사용하여 위의 Amazon Athena 오프라인 저장소 소프트 삭제 및 하드 삭제 예제지침을 따르세요. 전체 절차 목록은 Apache Iceberg 설명서의 Spark 절차를 참조하세요.

  • OfflineStore에서 소프트 삭제 시 Athena에서 DELETE명령을 사용하는 대신 Apache Spark에서 DELETE FROM명령을 사용합니다.

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