Computer >> Máy Tính >  >> Lập trình >> Python

Cách sử dụng Boto3 để phân trang thông qua các phiên bản bảng của bảng có trong AWS Glue

Tuyên bố sự cố: Sử dụng boto3 thư viện bằng Python để phân trang thông qua các phiên bản bảng của bảng từ Danh mục dữ liệu keo AWS được tạo trong tài khoản của bạn

Phương pháp tiếp cận / Thuật toán để giải quyết vấn đề này

  • Bước 1: Nhập boto3 botocore các ngoại lệ để xử lý các ngoại lệ.

  • Bước 2: max_items , page_size started_token là các tham số tùy chọn cho hàm này, trong khi database_name table_name là bắt buộc.

    • max_items biểu thị tổng số bản ghi cần trả về. Nếu số lượng bản ghi có sẵn> max_items sau đó là NextToken sẽ được cung cấp trong câu trả lời để tiếp tục phân trang.

    • page_size biểu thị kích thước của mỗi trang.

    • started_token giúp phân trang và nó sử dụng NextToken từ một phản hồi trước đó.

  • Bước 3: Tạo phiên AWS bằng boto3 lib . Đảm bảo rằng region_name được đề cập trong hồ sơ mặc định. Nếu nó không được đề cập, thì hãy chuyển region_name một cách rõ ràng trong khi tạo phiên.

  • Bước 4: Tạo ứng dụng AWS cho keo dán.

  • Bước 5: Tạo bộ phân trang đối tượng chứa thông tin chi tiết về tất cả các phiên bản bảng của bảng sử dụng get_table_versions

  • Bước 6: Gọi hàm phân trang và chuyển database_name dưới dạng DatabaseName, TableName là table_name, max_items , page_size started_token dưới dạng PaginationConfig tham số

  • Bước 7: Nó trả về số lượng bản ghi dựa trên max_size page_size .

  • Bước 8: Xử lý ngoại lệ chung nếu có sự cố trong khi phân trang.

Mã mẫu

Sử dụng mã sau để phân trang thông qua các phiên bản bảng của bảng được tạo trong tài khoản người dùng -

import boto3
from botocore.exceptions import ClientError

def paginate_through_table_versions(database_name, table_name, max_items=None:int,page_size=None:int, starting_token=None:string):
   session = boto3.session.Session()
   glue_client = session.client('glue')
   try:
   paginator = glue_client.get_paginator('get_table_versions')
      response = paginator.paginate(DatabaseName=database_name, TableName=table_name, PaginationConfig={
      'MaxItems':max_items,
      'PageSize':page_size,
      'StartingToken':starting_token}
      )
   return response
   except ClientError as e:
      raise Exception("boto3 client error in paginate_through_table_versions: " + e.__str__())
   except Exception as e:
      raise Exception("Unexpected error in paginate_through_table_versions: " + e.__str__())
a = paginate_through_table_versions("test_db","qa_table",2,5)
print(*a)

Đầu ra

{'TableVersions': [
{'Table': {'Name': 'qa_table', 'DatabaseName': 'test_db', 'Owner': 'owner', 'CreateTime': datetime.datetime(2018, 9, 24, 20, 43, 3, tzinfo=tzlocal()), 'UpdateTime': datetime.datetime(2018, 9, 24, 20, 43, 3, tzinfo=tzlocal()), 'LastAccessTime': datetime.datetime(2018, 9, 24, 20, 43, 3, tzinfo=tzlocal()), 'Retention': 0, 'StorageDescriptor':
{'Columns': [{'Name': 'accounnumber', 'Type': 'int'}, {'Name': 'country', 'Type': 'string'}, {'Name': 'currency', 'Type': 'string'}, {'Name': 'date', 'Type': 'bigint'}, {'Name': 'securitynumber', 'Type': 'string'}, {'Name': 'crossxreferencexcode', 'Type': 'string'}, {'Name': 'securityxdescriptionxxlongx1x', 'Type': 'string'}, 'Location': 's3://qa/success/', 'InputFormat': 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat', 'OutputFormat': 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat', 'Compressed': False, 'NumberOfBuckets': -1, 'SerdeInfo': {'SerializationLibrary': },'VersionId': '0'}], 'ResponseMetadata': {'RequestId': '931c99f8-c473-4421-9f0f-1ca33b313e67', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 13:29:04 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '16718', 'connection': 'keep-alive', 'x-amzn-requestid': '931c99f8-c473-4421-9f0f-1ca33b313e67'}, 'RetryAttempts': 0}}