AWS Glue Data Catalog는 데이터베이스와 테이블뿐만 아니라 사용자가 등록한 사용자 정의 함수(UDF)의 메타데이터도 관리할 수 있습니다. 이 글에서는 Python의 boto3 라이브러리를 사용하여 Glue Data Catalog에 저장된 여러 함수 정의의 세부 정보를 한 번에 조회하는 방법을 살펴보겠습니다.
문제 상황
Python의 boto3 라이브러리를 사용하여 AWS Glue Data Catalog의 특정 데이터베이스(들)에 존재하는 여러 함수 정의에 대한 세부 정보를 가져오려고 합니다.
해결 방식/알고리즘
1단계: 예외 처리를 위해 boto3 및 botocore 예외 클래스를 임포트합니다.
2단계: database_name과 regular_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'
},
]
}]
}