समस्या कथन: आपके खाते में बनाए गए AWS Glue Data Catalog से S3 बकेट के मल्टी-पार्ट अपलोड ऑब्जेक्ट्स के माध्यम से पेजिनेट करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।
समस्या हल करने का दृष्टिकोण/एल्गोरिदम
चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।
चरण 2: prefix_name, max_items, page_size और starting_token इस फ़ंक्शन के लिए वैकल्पिक पैरामीटर हैं जबकि bucket_name आवश्यक पैरामीटर है।
Prefix_name विशिष्ट सबफोल्डर हैं जहां उपयोगकर्ता पेजिनेट करना चाहता है।
max_items वापस लौटने वाले कुल रिकॉर्ड की संख्या दर्शाता है। यदि उपलब्ध रिकॉर्ड की संख्या > max_items, तो पेजिनेशन फिर से शुरू करने के लिए रिस्पांस में NextToken प्रदान किया जाएगा।
page_size प्रत्येक पृष्ठ का आकार दर्शाता है।
starting_token पेजिनेट करने में मदद करता है, और यह पिछले रिस्पांस से मार्कर का उपयोग करता है।
चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं। सुनिश्चित करें कि डिफ़ॉल्ट प्रोफ़ाइल में region_name उल्लिखित है। यदि नहीं, तो सत्र बनाते समय स्पष्ट रूप से region_name पास करें।
चरण 4: S3 के लिए AWS क्लाइंट बनाएं।
चरण 5: list_multipart_uploads का उपयोग करके S3 बकेट के ऑब्जेक्ट संस्करणों का विवरण रखने वाला एक paginator ऑब्जेक्ट बनाएं।
चरण 6: paginate फ़ंक्शन कॉल करें और max_items, page_size और starting_token को PaginationConfig पैरामीटर के रूप में पास करें जबकि bucket_name को Bucket पैरामीटर और prefix_name को Prefix के रूप में पास करें।
चरण 7: यह max_size और page_size के आधार पर रिकॉर्ड की संख्या लौटाता है।
चरण 8: पेजिनेट करते समय यदि कुछ गलत होता है तो सामान्य एक्सेप्शन को संभालें।
उदाहरण कोड
उपयोगकर्ता खाते में बनाए गए S3 बकेट के मल्टीपार्ट अपलोड के माध्यम से पेजिनेट करने के लिए निम्न कोड का उपयोग करें:
import boto3
from botocore.exceptions import ClientError
def paginate_through_multipart_upload_s3_bucket(bucket_name, prefix_name=None, max_items=None, page_size=None, starting_token=None):
session = boto3.session.Session()
s3_client = session.client('s3')
try:
paginator = s3_client.get_paginator('list_multipart_uploads')
response = paginator.paginate(Bucket=bucket_name, Prefix=prefix_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_multipart_upload_s3_bucket: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in paginate_through_multipart_upload_s3_bucket: " + e.__str__())
a = paginate_through_multipart_upload_s3_bucket('s3-test-bucket', 'testfolder', 2, 5)
print(*a)
आउटपुट
{'ResponseMetadata': {'RequestId': 'YA9CGTAAX', 'HostId': '8dqJW******************', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '8dqJW*********************', 'x-amz-request-id': 'YA9CGTAAX', 'date': 'Sat, 03 Apr 2021 08:16:05 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'Bucket': 's3-test-bucket', 'KeyMarker': '', 'UploadIdMarker': '', 'NextKeyMarker': '', 'Prefix': 'testfolder', 'NextUploadIdMarker': '', 'MaxUploads': 5, 'IsTruncated': False, 'Uploads': [{'UploadId': 'YADF**************LK25', 'Key': 'testfolder/testfilemultiupload.csv', 'Initiated': datetime(2021,1,2), 'StorageClass': 'STANDARD', 'Owner': {'DisplayName': 'AmazonServicesJob', 'Id': '********************'}}], 'CommonPrefixes': None}
महत्वपूर्ण सुधार नोट
मूल कोड में त्रुटि: उदाहरण कोड में get_paginator('list_objects') का उपयोग किया गया है, लेकिन मल्टीपार्ट अपलोड के लिए get_paginator('list_multipart_uploads') होना चाहिए। उपरोक्त कोड में इसे ठीक कर दिया गया है।
मल्टीपार्ट अपलोड मुख्य अवधारणाएं
UploadId: मल्टीपार्ट अपलोड का अद्वितीय पहचानकर्ता
Key: ऑब्जेक्ट कुंजी (पथ)
Initiated: अपलोड शुरू होने का समय
StorageClass: स्टोरेज क्लास
Owner: ऑब्जेक्ट स्वामी जानकारी
उपयोग के मामले
अधूरे मल्टीपार्ट अपलोड की पहचान और सफाई (लागत बचत)
बड़े अपलोड की प्रगति निगरानी
असफल अपलोड का समस्या निवारण