Trong bài viết này, chúng ta sẽ xem cách phân trang qua tất cả các Database (cơ sở dữ liệu) có mặt trong AWS Glue.
Ví dụ
Đề bài: Sử dụng thư viện boto3 trong Python để phân trang qua tất cả Database từ AWS Glue Data Catalog được tạo trong tài khoản của bạn.
Cách tiếp cận / Thuật toán
Bước 1: Import boto3 và botocore.exceptions để xử lý ngoại lệ.
Bước 2: max_items, page_size và starting_token là tham số cho hàm này.
max_items chỉ định tổng số bản ghi trả về. Nếu số bản ghi có sẵn > max_items, một NextToken sẽ được cung cấp để tiếp tục phân trang.
page_size chỉ định kích thước mỗi trang.
starting_token giúp phân trang, sử dụng NextToken từ phản hồi trước.
Bước 3: Tạo phiên làm việc AWS bằng boto3. Đảm bảo region_name được cấu hình; nếu không, truyền rõ ràng.
Bước 4: Tạo client AWS cho dịch vụ glue.
Bước 5: Tạo đối tượng paginator chứa chi tiết tất cả Database bằng get_databases.
Bước 6: Gọi hàm paginate và truyền max_items, page_size, starting_token như PaginationConfig.
Bước 7: Trả về số bản ghi dựa trên max_items và page_size.
Bước 8: Xử lý ngoại lệ chung nếu có lỗi khi phân trang.
Mã ví dụ
Sử dụng mã sau để phân trang qua tất cả Database:
import boto3
from botocore.exceptions import ClientError
def paginate_through_databases(max_items=None, page_size=None, starting_token=None):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
paginator = glue_client.get_paginator('get_databases')
response = paginator.paginate(
PaginationConfig={
'MaxItems': max_items,
'PageSize': page_size,
'StartingToken': starting_token
}
)
return response
except ClientError as e:
raise Exception("Lỗi client boto3 trong paginate_through_databases: " + e.__str__())
except Exception as e:
raise Exception("Lỗi không mong muốn trong paginate_through_databases: " + e.__str__())
a = paginate_through_databases(2, 5)
print(*a)
Kết quả
{'DatabaseList': [{'Name': 'aurora_glue_catalog', 'CreateTime': datetime.datetime(2020, 11, 18, 14, 24, 46, tzinfo=tzlocal())}, {'Name': 'custdb', 'CreateTime': datetime.datetime(2020, 8, 31, 20, 30, 9, tzinfo=tzlocal())}], 'NextToken': 'eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJuLjc4MjI1ODQ4NTg0MSJ9LCJSQU5HRV9LRVkiOnsic3MiOiJkZXYtZnJlYV9lZGxfZ2x1ZV9kYXRhYmFzZSJ9fSwiZXhwaXJhdGlvbiI6eyJzZWNvbmRzIjoxNjE3NDUwNDQxLCJuYW5vcyI6ODcwMDAwMDB9LCJzaGFyZWRDb250ZXh0IjpmYWxzZSwidGFnQ29udGV4dCI6ZmFsc2V9', 'ResponseMetadata': {'RequestId': '3e1c4f54-d573-4ba9-9948-832273ecca02', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 11:47:21 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1617', 'connection': 'keep-alive', 'x-amzn-requestid': '3e1c4f54-d573-4ba9-9948-832273ecca02'}, 'RetryAttempts': 0}}