이 글에서는 AWS Glue Data Catalog에서 지정된 함수 정의에 대한 세부 정보를 조회하는 방법을 알아보겠습니다.
예시 개요
데이터베이스 employee에 등록된 insert_employee_record라는 이름의 함수 정의 세부 정보를 가져오는 것이 목표입니다.
문제 정의
Python의 boto3 라이브러리를 사용하여 AWS Glue Data Catalog에서 특정 함수 정의의 세부 정보를 조회합니다.
해결 접근 방식 및 알고리즘
1단계: 예외 처리를 위해 boto3와 botocore 예외 모듈을 임포트합니다.
2단계: database_name과 function_name은 필수 매개변수입니다. 이 함수는 주어진 데이터베이스 내에서 해당 function_name의 정의를 조회합니다.
3단계: boto3 라이브러리를 사용해 AWS 세션을 생성합니다. 기본 프로필에 region_name이 설정되어 있는지 확인하세요. 설정되어 있지 않다면, 세션 생성 시 명시적으로 region_name을 전달해야 합니다.
4단계: glue 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계: get_user_defined_function 메서드를 호출하면서 database_name은 DatabaseName으로, function_name은 FunctionName 파라미터로 전달합니다.
6단계: 해당 함수의 정의가 반환됩니다. 만약 함수를 찾지 못하면 오류가 발생합니다.
7단계: 함수 조회 과정에서 문제가 발생했을 경우 일반 예외(generic exception)를 처리합니다.
예제 코드
아래 코드는 지정된 함수의 정의를 조회합니다.
import boto3
from botocore.exceptions import ClientError
def get_function_definition(database_name, function_name):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.get_user_defined_function(DatabaseName=database_name, FunctionName=function_name)
return response
except ClientError as e:
raise Exception("boto3 client error in get_function_definition: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_function_definition: " + e.__str__())
a = get_function_definition('employee', 'insert_employee_record')
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'
},
],
}
}추가 설명
get_user_defined_function API는 AWS Glue Data Catalog에 등록된 사용자 정의 함수(UDF)의 메타데이터를 반환합니다. 응답에는 함수 이름, 소속 데이터베이스, 구현 클래스명, 소유자 정보, 생성 시각, 그리고 JAR·FILE·ARCHIVE 형태의 리소스 URI 목록이 포함됩니다. 존재하지 않는 함수를 조회하면 EntityNotFoundException과 같은 ClientError가 발생하므로, 위 예제 코드처럼 try-except 블록으로 예외를 적절히 처리하는 것이 좋습니다.