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

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

示例- 检索数据库“QA-test”和表的表定义为“security”。

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

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

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

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

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

第 5 步- 现在使用 get_table 函数并将database_name作为 DatabaseName 和table_name作为 Name 参数传递。

步骤 6 - 它返回给定表的定义。如果表有多个版本,它总是从当前/最新版本的表中获取详细信息。

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

示例

使用以下代码检索数据库的表定义 -

import boto3

frombotocore.exceptionsimport ClientError

def retrieves_table_details(database_name, table_name)

   session = boto3.session.Session()

   glue_client = session.client('glue')

   try:

      response = glue_client.get_table(DatabaseName = database_name, Name = table_name)

      return response

   except ClientError as e:

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

   except Exception as e:

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

print(retrieves_table_details('QA-test', 'security'))

输出结果
{'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'}, {'Name':

'industrysector', 'Type': 'string'}, {'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'},

'ResponseMetadata': {'RequestId': '4c108dd5-***************76ac',

'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Mon, 01 Mar 2021

06:04:58 GMT', 'content-type': 'application/x-amz-json-1.1', 'contentlength': '3882', 'connection': 'keep-alive', 'x-amzn-requestid':

'4c108dd5-*********************676ac'}, 'RetryAttempts': 0}}

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

回到顶部