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

Cách sử dụng Boto3 để phân trang thông qua tất cả các công việc có trong AWS Glue

Trong bài viết này, chúng ta sẽ xem cách phân trang thông qua tất cả các công việc có trong AWS Glue.

Ví dụ

Tuyên bố sự cố: Sử dụng boto3 thư viện bằng Python để phân trang thông qua các công việc từ Danh mục dữ liệu AWS Glue đượ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 chức năng này.

    • 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 của tất cả các trình thu thập thông tin bằng cách sử dụng get_jobs

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

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

  • Bước 7: 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 tất cả các công việc được tạo trong tài khoản người dùng -

import boto3
from botocore.exceptions import ClientError

def paginate_through_jobs(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_jobs')
      response = paginator.paginate(PaginationConfig={
         'MaxItems':max_items,
         'PageSize':page_size,
         'StartingToken':starting_token}
       )
   return response
   except ClientError as e:
      raise Exception("boto3 client error in paginate_through_jobs: " + e.__str__())
   except Exception as e:
      raise Exception("Unexpected error in paginate_through_jobs: " + e.__str__())
a = paginate_through_jobs(2,5)
print(*a)

Đầu ra

{'Jobs': [{'Name': 'PythonShellTest1', 'Role': 'arn:aws:iam::7***********:role/dev-edl-glue-role', 'CreatedOn': datetime.datetime(2021, 1, 6, 19, 59, 19, 387000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 2, 9, 21, 47, 31, 614000, tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1}, 'Command':
{'Name': 'pythonshell', 'ScriptLocation': s3://pythonShellTest/test1/*', 'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option': 'job-bookmark-disable', '--job-language': 'python'}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}, {'Name': 'pythonSHELL_14012021', 'Role': 'arn:aws:iam::7*************:role/dev-edl-glue-role', 'CreatedOn': datetime.datetime(2021, 1, 14, 20, 22, 40, 965000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 1, 14, 20, 22, 40, 965000, tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1}, 'Command': {'Name': 'pythonshell', 'DefaultArguments': {'--job-bookmark-option': 'job-bookmark-disable'}, 'MaxRetries': 0, 'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}],
'NextToken': 'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTc0NTUzOTYsIm5hbm9zIjo1MjUwMDAwMDB9LCJsYXN0RXZhbHVhdGVkS2V5Ijp7ImpvYk5hbWUiOnsicyI6IlRpY2tkYXRhLXBlcmZvcm1hbmNldGVzdC1qZXR0ZWxhIn0sImFjY291bnRJZCI6eyJzIjoiNzgyMjU4NDg1ODQxIn0sImpvYklkIjp7InMiOiJqXzkyZGQ5ZDNhMWRkOGY2NTJkYzA4MzNmMTM0ZTRiNDRhNmE0YzEzNWY0ZTYwZTkwNmYyOTBhY2NiZDZiMWIxZTcifX19',
'ResponseMetadata': {'RequestId': '3be6708e-*************-389', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 13:09:56 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '3182', 'connection': 'keep-alive', 'x-amzn-requestid': '3be6708e-*************-8389'}, 'RetryAttempts': 0}}