Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Boto3를 사용하여 AWS Glue Data Catalog에서 데이터베이스의 테이블 정의를 가져오는 방법은 무엇입니까?

<시간/>

문제 설명 − Python에서 boto3 라이브러리를 사용하여 데이터베이스의 테이블 정의를 검색합니다.

− 데이터베이스 'QA-test' 및 테이블의 테이블 정의를 'security'로 검색합니다.

이 문제를 해결하기 위한 접근 방식/알고리즘

1단계 − boto3 및 botocore 예외를 가져와 예외를 처리합니다.

2단계 - database_nametable_name 필수 매개변수입니다. 주어진 테이블의 정의를 가져옵니다.

3단계 − boto3 라이브러리를 사용하여 AWS 세션을 생성합니다. region_name을(를) 확인하십시오. 기본 프로필에 언급되어 있습니다. 언급되지 않은 경우 region_name을 명시적으로 전달합니다. 세션을 만드는 동안.

4단계 − 글루용 AWS 클라이언트를 생성합니다.

5단계 − 이제 get_table 함수를 사용하고 database_name을 전달합니다. DatabaseName 및 table_name으로 이름 매개변수로.

6단계 - 주어진 테이블의 정의를 반환합니다. 테이블에 여러 버전이 있는 경우 항상 현재/최신 버전의 테이블에서 세부 정보를 가져옵니다.

7단계 − 작업을 확인하는 동안 문제가 발생한 경우 일반 예외를 처리합니다.

다음 코드를 사용하여 데이터베이스의 테이블 정의를 검색하십시오 -

 botocore.exceptions에서 boto3 가져오기 가져오기 ClientErrordef retrieves_table_details(database_name, table_name) 세션 =boto3.session.Session() glue_client =session.client('glue') 시도:응답 =glue_client.get_table(DatabaseName =database_name, 이름 =table_name ) e:raise Exception("boto3 client error in retrieves_table_details:" + e.__str__()) 제외 e:raise Exception("retrieves_table_details의 예기치 않은 오류:" + e.__str__())print( retrieves_table_details('QA-테스트', '보안'))

출력

{'Table':{'Name':'security', 'DatabaseName':'QA-test', 'Owner':'owner', 'CreateTime':datetime.datetime(2020, 9, 10, 22 , 27, 24,tzinfo=tzlocal()), 'UpdateTime':datetime.datetime(2021, 2, 28, 10, 37,33, tzinfo=tzlocal()), 'LastAccessTime':datetime.datetime(2020, 9 , 10,22, 27, 24, tzinfo=tzlocal()), 'Retention':0, 'StorageDescriptor':{'Columns':[{'Name':'assettypecode', 'Type':'string'}, {'이름':'산업 부문', '유형':'문자열'}, {'이름':'보안 코드', '유형':'char'}, {'이름':'계약 크기', '유형':' string'}, {'이름':'conversionperiodenddate', '유형':'문자열'}, {'이름':'conversionperiodstartdate', '유형':'문자열'}, {'이름':'만료일', ' Type':'string'}, {'Name':'issuercountrycode','Type':'string'}, {'Name':'issuercountrydesc', 'Type':'string'},{'Name':' originalissuedate', '유형':'문자열'}, {'이름':'securitynamelong', '유형':'문자열'}, {'이름':'issueshortname','유형':'문자열'}, {' 이름':'gicssector', '유형':'문자열'}, {'이름':'maturitydate', '유형':' 문자열'}, {'이름':'옵션 코드', '유형':'문자열'}, {'이름':'옵션 유형 이름', '유형':'문자열'}, {'이름':'파라마운트', ' 유형':'문자열'}, {'이름':'가격 인덱스', '유형':'문자열'}, {'이름':'국가 코드 위험', '유형':'문자열'}, {'이름':' 국가 설명', '유형':'문자열'}, {'이름':'국가 코드', '유형':'문자열'}], '위치':'s3://test/security/', '입력 형식':'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat','OutputFormat':'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat','압축':False, 'NumberOfBuckets':-1, 'SerdeInfo':{'SerializationLibrary':'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe','매개변수':{'serialization.format':'1'}}, ' BucketColumns':[],'SortColumns':[], '매개변수':{'CrawlerSchemaDeserializerVersion':'1.0', 'CrawlerSchemaSerializerVersion':'1.0', 'UPDATED_BY_CRAWLER':'security', 'averageRecordSize',' '분류':'마루', 'compressionType':'없음', 'objectCount':'5', 'recordCount':'154800','sizeKey ':'20337230', 'typeOfData':'파일'}, 'StoredAsSubDirectories':False}, 'PartitionKeys':[], 'TableType':'EXTERNAL_TABLE','매개변수':{'CrawlerSchemaDeserializerVersion':'1.0', 'CrawlerSchemaSerializerVersion':'1.0', 'UPDATED_BY_CRAWLER':'security', 'averageRecordSize':'181', 'classification':'parquet', 'compressionType':'none', 'objectCount':'5', 'record ':'154800', 'sizeKey':'20337230', 'typeOfData':'파일'}, 'CreatedBy':'arn:aws:sts::************:가정- role/glue-role/AWS-Crawler'},'ResponseMetadata':{'RequestId':'4c108dd5-********************76ac','HTTPStatusCode':200, 'HTTPHeaders ':{'date':'Mon, 01 Mar 202106:04:58 GMT', 'content-type':'application/x-amz-json-1.1', 'contentlength':'3882', 'connection':'연결 유지', 'x-amzn-requestid':'4c108dd5-************************676ac'}, 'RetryAttempts':0}}