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

Boto3를 사용하여 AWS Glue Data Catalog에서 데이터베이스의 여러 함수 정의 세부 정보 조회하기

AWS Glue Data Catalog는 데이터베이스와 테이블뿐만 아니라 사용자가 등록한 사용자 정의 함수(UDF)의 메타데이터도 관리할 수 있습니다. 이 글에서는 Python의 boto3 라이브러리를 사용하여 Glue Data Catalog에 저장된 여러 함수 정의의 세부 정보를 한 번에 조회하는 방법을 살펴보겠습니다.

문제 상황

Python의 boto3 라이브러리를 사용하여 AWS Glue Data Catalog의 특정 데이터베이스(들)에 존재하는 여러 함수 정의에 대한 세부 정보를 가져오려고 합니다.

해결 방식/알고리즘

  • 1단계: 예외 처리를 위해 boto3botocore 예외 클래스를 임포트합니다.

  • 2단계: database_nameregular_pattern은 선택적 매개변수입니다. 두 값을 모두 지정하지 않으면 AWS 계정에 등록된 모든 함수의 정의를 가져옵니다. database_name만 지정하면 해당 데이터베이스의 모든 함수를 가져오고, 두 매개변수를 모두 지정하면 regular_pattern에 일치하는 함수의 정의만 가져옵니다. regular_pattern만 지정하면 AWS 계정 전체에서 해당 패턴과 일치하는 모든 함수를 가져옵니다.

  • 3단계: boto3 라이브러리를 사용하여 AWS 세션을 생성합니다. 기본 프로필에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 명시적으로 region_name을 전달해야 합니다.

  • 4단계: glue 서비스용 AWS 클라이언트를 생성합니다.

  • 5단계: get_multiple_function_definition 함수를 호출하면서 database_name은 DatabaseName으로, regular_pattern은 Pattern 파라미터로 각각 전달합니다.

  • 6단계: 지정된 매개변수 조건에 따라 여러 함수의 정의가 반환됩니다.

  • 7단계: 함수 조회 과정에서 문제가 발생한 경우 일반 예외(generic exception)를 처리합니다.

코드 예제

다음 코드는 여러 함수의 정의를 조회합니다.

import boto3
from botocore.exceptions import ClientError

def get_multiple_function_definition(database_name =None, regular_pattern = None):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.get_user_defined_functions(DatabaseName=database_name,Pattern= regular_pattern)
        return response
    except ClientError as e:
        raise Exception("boto3 client error in get_multiple_function_definition: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_multiple_function_definition: " + e.__str__())
a = get_multiple_function_definition('employee')
print(a)

출력 결과

{
    'UserDefinedFunctions': [{
        'FunctionName': 'insert_employee_record',
        'DatabaseName': 'employee',
        'ClassName': 'InsertEmployee',
        'OwnerName': 'string',
        'OwnerType': 'USER'|'ROLE'|'GROUP',
        'CreateTime': datetime(2021,03,15),
        'ResourceUris': [
            {
                'ResourceType': 'JAR'|'FILE'|'ARCHIVE',
                'Uri': 'string'
            },
        ]
    }]
}