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 và botocore các ngoại lệ để xử lý các ngoại lệ.
-
Bước 2: max_items , page_size và started_token là các tham số tùy chọn cho hàm này, trong khi database_name và 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 và 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 và 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}}