如何使用 Boto3 从 AWS Glue 数据目录获取数据库的指定版本表定义?

问题陈述- 在 Python 中使用 boto3 库来检索数据库的表定义。

示例- 检索数据库“QA-test”的表定义,并将表作为版本 2 的“安全”。

解决这个问题的方法/算法

步骤 1 - 导入 boto3 和 botocore 异常以处理异常。

第 2 步- database_name、table_name和version_id是必需参数。它获取指定版本的给定表的定义。

步骤 3 - 使用 boto3 库创建 AWS 会话。确保在默认配置文件中提到region_name。如果未提及,则在创建会话时显式传递region_name。

第 4 步- 为胶水创建一个 AWS 客户端。

第 5 步- 现在使用get_table_version函数并将database_name作为 DatabaseName、table_name作为 TableName 和version_id作为 VersionId 参数传递。请注意 version_id 是字符串,因此整数值应作为字符串以引号形式传递。

步骤 6 - 它返回指定版本的给定表的定义。

第 7 步- 如果检查作业时出现问题,则处理通用异常。

示例

使用以下代码检索指定版本的表定义 -

import boto3

frombotocore.exceptionsimport ClientError

def retrieves_table_version_details(database_name, table_name, version_id)

   session = boto3.session.Session()

   glue_client = session.client('glue')

   try:

      response = glue_client.get_table_version(DatabaseName = database_name, TableName = table_name, VersionId = version_id)

      return response

   except ClientError as e:

      raise Exception("boto3 client error in retrieves_table_version_details: " + e.__str__())

   except Exception as e:

      raise Exception("Unexpected error in retrieves_table_version_details: " + e.__str__())

print(retrieves_table_version_details('QA-test', 'security', '2'))

输出结果
{'TableVersion': {'Table': {'Name': 'security', 'DatabaseName': 'QAtest', 'Owner': 'owner', 'CreateTime': datetime.datetime(2020, 9, 10,

22, 27, 24, tzinfo=tzlocal()), 'UpdateTime': datetime.datetime(2021, 3,

1, 11, 43, 49, tzinfo=tzlocal()), 'LastAccessTime':

datetime.datetime(2020, 9, 10, 22, 27, 24, tzinfo=tzlocal()),

'Retention': 0, 'StorageDescriptor': {'Columns': [{'Name':

'assettypecode', 'Type': 'string'}, {'Name': 'industrysector', 'Type':

'varchar'}, {'Name': 'securitycode', 'Type': 'char'}, {'Name':

'contractsize', 'Type': 'string'}, {'Name': 'conversionperiodenddate',

'Type': 'string'}, {'Name': 'conversionperiodstartdate', 'Type':

'string'}, {'Name': 'expirationdate', 'Type': 'string'}, {'Name':

'issuercountrycode', 'Type': 'string'}, {'Name': 'issuercountrydesc',

'Type': 'string'}, {'Name': 'originalissuedate', 'Type': 'string'},

{'Name': 'securitynamelong', 'Type': 'string'}, {'Name':

'issueshortname', 'Type': 'string'}, {'Name': 'gicssector', 'Type':

'string'}, {'Name': 'maturitydate', 'Type': 'string'}, {'Name':

'optioncode', 'Type': 'string'}, {'Name': 'optiontypename', 'Type':

'string'}, {'Name': 'paramount', 'Type': 'string'}, {'Name':

'priceindex', 'Type': 'string'}, {'Name': 'countrycoderisk', 'Type':

'string'}, {'Name': 'countrydescrisk', 'Type': 'string'}, {'Name':

'countrycode', 'Type': 'string'}], 'Location': 's3://test/security/',

'InputFormat':

'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat',

'OutputFormat':

'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat',

'Compressed': False, 'NumberOfBuckets': -1, 'SerdeInfo':

{'SerializationLibrary':

'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe',

'Parameters': {'serialization.format': '1'}}, 'BucketColumns': [],

'SortColumns': [], 'Parameters': {'CrawlerSchemaDeserializerVersion':

'1.0', 'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER':

'security', 'averageRecordSize': '181', 'classification': 'parquet',

'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800',

'sizeKey': '20337230', 'typeOfData': 'file'}, 'StoredAsSubDirectories':

False}, 'PartitionKeys': [], 'TableType': 'EXTERNAL_TABLE',

'Parameters': {'CrawlerSchemaDeserializerVersion': '1.0',

'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER':

'security', 'averageRecordSize': '181', 'classification': 'parquet',

'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800',

'sizeKey': '20337230', 'typeOfData': 'file'}, 'CreatedBy':

'arn:aws:sts::*********:assumed-role/glue-role/AWS-Crawler'},

'VersionId': '2'}, 'ResponseMetadata': {'RequestId': '431db171-

*******************0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date':

'Mon, 01 Mar 2021 06:15:30 GMT', 'content-type': 'application/x-amzjson-1.1', 'content-length': '3916', 'connection': 'keep-alive', 'xamzn-requestid': '431db171-*****************0'}, 'RetryAttempts': 0}}

以上是 如何使用 Boto3 从 AWS Glue 数据目录获取数据库的指定版本表定义? 的全部内容, 来源链接: utcz.com/z/351639.html

回到顶部