삭제
이 문서에서는 Bigtable 테이블에 저장된 데이터를 삭제하는 방법과 각 방식을 사용해야 하는 경우를 논의하고 예시를 제공합니다. 이 페이지를 읽기 전에 Bigtable 개요에 익숙하고 스키마 설계에 포함된 개념을 이해하고 있어야 합니다.
일관성을 위해 이 페이지의 설명에서는 각 요청 유형에 사용되는 API 메서드를 참조합니다. 그러나 REST 또는 RPC를 사용하는 대신 항상 Bigtable 클라이언트 라이브러리 중 하나를 사용하여 Bigtable API에 액세스하는 것이 좋습니다.
이 페이지의 예시에서는 Bigtable에 저장할 수 있는 데이터와 비슷한 샘플 데이터를 사용합니다.
매일 이 페이지에 설명된 작업을 사용할 수 있는 횟수는 할당량 및 한도를 참조하세요.
Bigtable의 데이터 삭제 방법
삭제 요청을 전송하면 셀이 삭제용으로 표시되고 셀을 읽을 수 없습니다. 테이블을 지속적으로 최적화하는 백그라운드 프로세스인 압축이 수행되는 최대 1주 후까지 데이터가 삭제됩니다. 삭제 메타데이터로 인해 다음 압축이 수행될 때까지 삭제 요청을 전송한 후 며칠 동안은 데이터가 행당 몇 kb 정도로 약간 더 많은 공간을 차지할 수 있습니다.
클러스터가 스토리지 한도를 초과하고 읽기 및 쓰기가 차단되더라도 항상 삭제 요청을 전송할 수 있습니다.
행 범위 삭제
연속된 행에 저장된 대량의 데이터를 삭제하려면 dropRowRange
를 사용합니다. 이 작업은 시작 및 종료 행 또는 row key 프리픽스로 식별된 행 범위의 모든 행을 삭제합니다.
행 범위를 삭제할 때 제공하는 row key 값은 서비스 데이터로 취급됩니다. 서비스 데이터 처리 방법에 대한 자세한 내용은 Google Cloud 개인정보처리방침을 참조하세요.
삭제가 성공적으로 완료되고 응답이 수신되면 데이터를 동일한 행 범위에 안전하게 작성할 수 있습니다.
dropRowRange
작업에는 다음과 같은 제한사항이 있습니다.
- 승인된 뷰에서 행 범위를 삭제할 수 없습니다.
dropRowRange
메서드는 비동기적으로 호출할 수 없습니다. 다른 요청이 진행되는 동안 테이블에dropRowRange
요청을 보내면 Bigtable은A DropRowRange operation is already ongoing
메시지와 함께UNAVAILABLE
오류를 반환합니다. 오류를 해결하려면 요청을 다시 보내세요.- 복제를 사용하는 인스턴스의 경우 복제 지연 시간 및 CPU 사용량 증가로 인해 Bigtable이 작업을 완료하는 데 시간이 오래 걸릴 수 있습니다. 복제를 사용하는 인스턴스에서 데이터를 삭제하려면 Data API를 사용하여 데이터를 읽은 후 삭제합니다.
다음 코드 샘플은 row key 프리픽스 phone#5c10102
로 시작하는 행 범위를 삭제하는 방법을 보여줍니다.
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Data API 메서드를 사용하여 데이터 삭제
연속적이지 않은 소량의 데이터를 삭제해야 할 경우에는 Cloud Bigtable API(Data API)를 호출하는 메서드를 사용하여 데이터를 삭제하는 것이 가장 좋은 방법인 경우가 많습니다. 요청에서 GB가 아닌 MB 단위로 데이터를 삭제하는 경우 이 방법을 사용합니다. 열에서 데이터를 삭제하기 위해서는 Data API를 사용하는 것이 유일한 방법입니다(column family가 아님).
세 가지 변형 유형 중 하나를 포함하는 Data API 메서드 호출 MutateRows
:
- DeleteFromColumn
- DeleteFromFamily
- DeleteFromRow
Data API를 사용하는 삭제 요청은 원자적입니다. 요청이 성공하고 모든 데이터가 삭제되거나 요청이 실패하고 데이터가 삭제되지 않습니다.
대부분의 경우 데이터 삭제를 위해 CheckAndMutate
메서드를 사용하지 않는 것이 좋습니다. strong consistency가 필요한 드문 경우에는 이 접근 방식을 사용할 수 있지만 리소스 소비가 높고 성능에 영향을 줄 수 있음을 알고 있어야 합니다.
MutateRows
를 사용하여 데이터를 삭제하려면 필터와 함께 readRows
요청을 전송하여 삭제할 대상을 확인한 후 대상 요청을 전송합니다. 사용 가능한 필터 목록은 필터를 참조하세요.
이 섹션의 샘플에서는 삭제할 데이터가 이미 결정되었다고 가정합니다.
열에서 삭제
다음 코드 샘플은 행의 열에서 모든 셀을 삭제하는 방법을 보여줍니다.
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
column family에서 삭제
다음 코드 샘플은 행의 column family에서 셀을 삭제하는 방법을 보여줍니다.
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
행에서 삭제
다음 코드 스니펫은 행에서 모든 셀을 삭제하는 방법을 보여줍니다.
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
스트리밍 및 일괄 처리로 삭제
대량의 데이터를 삭제할 때는 삭제 요청을 스트리밍 및 일괄 처리하는 것이 가장 좋은 방법인 경우가 많습니다. 이 전략은 가비지 수집 정책 허용보다 데이터 보관 요구사항을 미세 조정한 경우에 유용할 수 있습니다.
다음 코드 스니펫은 데이터 스트림(행 읽기)을 시작하고, 이를 일괄 처리하고, 일괄 처리를 진행하고 cell_plan
column family에서 data_plan_01gb1
열의 모든 셀을 삭제합니다.
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
Bigtable에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
승인된 뷰에서 데이터 삭제
승인된 뷰에 삭제 요청을 전송하여 테이블 데이터를 삭제할 수 있습니다. 다음 중 하나를 사용해야 합니다.
- gcloud CLI
- Java용 Bigtable 클라이언트
승인된 뷰에서 데이터를 삭제할 때는 테이블 ID 외에 승인된 뷰 ID를 제공합니다.
승인된 뷰에서 삭제할 수 있는 데이터는 승인된 뷰 정의에 의해 제한됩니다. 승인된 뷰에 포함된 데이터만 삭제할 수 있습니다. 승인된 뷰 정의를 벗어나거나 다음 규칙이 적용되는 데이터를 삭제하려고 하면 PERMISSION_DENIED
오류가 반환됩니다.
- Admin API의
DropRowRange
를 사용하여 승인된 뷰에서 행 범위를 삭제할 수 없습니다. - 행에서 삭제는 지원되지 않습니다.
- 열에서 삭제는 승인된 뷰에 있는 행의 경우에만 지원됩니다.
- 지정된 column family가 승인된 뷰의 모든 column qualifier 프리픽스(
qualifier_prefixes=""
)를 허용하도록 구성된 경우에만 column family에서 삭제가 허용됩니다.
예를 들어 지정된 행에서 삭제를 시도하고 해당 행에 승인된 뷰에 없는 기본 테이블의 열이 포함된 경우 요청이 실패합니다.