Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Boto3를 활용해 AWS Glue 데이터 카탈로그에서 특정 버전의 테이블 삭제하기

문제 상황

Python의 boto3 라이브러리를 사용하여 본인 계정의 AWS Glue 데이터 카탈로그에 생성된 테이블 중 특정 버전만 삭제하는 방법을 알아보겠습니다.

예시 — 계정 내 'test' 데이터베이스에 생성된 'security' 테이블의 1번 버전을 삭제합니다.

해결 접근 방식 및 알고리즘

1단계 — boto3와 botocore의 예외 처리 모듈(ClientError)을 임포트합니다.

2단계 — 삭제할 대상 정보인 database_name(데이터베이스 이름), table_name(테이블 이름), version_id(버전 ID)를 파라미터로 전달합니다.

3단계 — boto3 라이브러리를 이용해 AWS 세션을 생성합니다. 기본 프로파일에 region_name이 설정되어 있지 않다면, 세션 생성 시 region_name을 명시적으로 지정해야 합니다.

4단계 — Glue 서비스를 위한 AWS 클라이언트를 생성합니다.

5단계delete_table_version 함수를 호출하면서 DatabaseName에는 데이터베이스 이름을, TableName에는 테이블 이름을, VersionId에는 버전 ID를 각각 전달합니다. 주의할 점은 두 가지입니다. 첫째, VersionId는 문자열 타입이므로 반드시 따옴표(' ')로 감싸 전달해야 합니다. 둘째, 테이블의 최신 버전은 삭제할 수 없으며 오래된 버전만 제거 가능합니다. 만약 최신 버전까지 통째로 삭제하고 싶다면 delete_table 함수를 사용해 테이블 자체를 드롭(drop)해야 합니다.

6단계 — 함수가 정상적으로 실행되면 해당 특정 버전의 테이블이 삭제되고, 응답 메타데이터(response metadata)가 반환됩니다.

7단계 — 작업 수행 중 오류가 발생할 경우를 대비해 일반 예외(generic exception)도 함께 처리합니다.

코드 예제

AWS Glue 데이터베이스에서 특정 버전의 테이블을 삭제하려면 아래 코드를 사용하세요.

import boto3
from botocore.exceptions import ClientError

def delete_a_table_version_from_database(database_name, table_name, version_id: str):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.delete_table_version(DatabaseName=database_name,
                                                    TableName=table_name,
                                                    VersionId=version_id)
        return response
    except ClientError as e:
        raise Exception("boto3 client error in delete_a_table_version_from_database: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in delete_a_table_version_from_database: " + e.__str__())

print(delete_a_table_version_from_database("test", "security", "1"))

실행 결과

{'ResponseMetadata': {'RequestId': '7aa7c3cb…………….-……….8a238c',
'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sun, 21 Feb 2021
04:58:04 GMT', 'content-type': 'application/x-amz-json-1.1', 'contentlength': '2', 'connection': 'keep-alive', 'x-amzn-requestid': '7aa7c3cbf611-494e-b923-8610318a238c'}, 'RetryAttempts': 0}}

출력 결과에서 HTTPStatusCode가 200으로 반환되면, 요청한 테이블 버전이 성공적으로 삭제된 것입니다.