Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Boto3 का उपयोग करके AWS Glue में मौजूद सभी जॉब्स के माध्यम से पेजिनेट करना


इस लेख में, हम देखेंगे कि AWS Glue में मौजूद सभी जॉब्स के माध्यम से कैसे पेजिनेट करें।

उदाहरण

समस्या कथन: आपके खाते में बनाए गए AWS Glue Data Catalog से जॉब्स के माध्यम से पेजिनेट करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।

समस्या हल करने का दृष्टिकोण/एल्गोरिदम

  • चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।

  • चरण 2: max_items, page_size और starting_token इस फ़ंक्शन के लिए वैकल्पिक पैरामीटर हैं।

    • max_items वापस लौटने वाले कुल रिकॉर्ड की संख्या दर्शाता है। यदि उपलब्ध रिकॉर्ड की संख्या > max_items तो पेजिनेशन फिर से शुरू करने के लिए रिस्पांस में NextToken प्रदान किया जाएगा।

    • page_size प्रत्येक पृष्ठ का आकार दर्शाता है।

    • starting_token पेजिनेट करने में मदद करता है, और यह पिछले रिस्पांस से NextToken का उपयोग करता है।

  • चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं। सुनिश्चित करें कि डिफ़ॉल्ट प्रोफ़ाइल में region_name उल्लिखित है। यदि नहीं, तो सत्र बनाते समय स्पष्ट रूप से region_name पास करें।

  • चरण 4: Glue के लिए AWS क्लाइंट बनाएं।

  • चरण 5: get_jobs का उपयोग करके सभी क्रॉलर्स का विवरण रखने वाला एक paginator ऑब्जेक्ट बनाएं।

  • चरण 6: paginate फ़ंक्शन कॉल करें और max_items, page_size और starting_token को PaginationConfig पैरामीटर के रूप में पास करें।

  • चरण 7: यह max_size और page_size के आधार पर रिकॉर्ड की संख्या लौटाता है।

  • चरण 8: पेजिनेट करते समय यदि कुछ गलत होता है तो सामान्य एक्सेप्शन को संभालें।

उदाहरण कोड

उपयोगकर्ता खाते में बनाए गए सभी जॉब्स के माध्यम से पेजिनेट करने के लिए निम्न कोड का उपयोग करें:

import boto3
from botocore.exceptions import ClientError

def paginate_through_jobs(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_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)

आउटपुट

{'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}}

महत्वपूर्ण सुधार नोट

मूल कोड में टाइपो: टिप्पणी में "crawlers" लिखा है लेकिन कोड get_jobs का उपयोग करता है। यह सही है - get_jobs जॉब्स के लिए है।

Glue जॉब मुख्य फ़ील्ड

  • Name: जॉब नाम

  • Role: IAM भूमिका ARN

  • Command: जॉब कमांड (Name: glueetl, pythonshell, ray; ScriptLocation, PythonVersion)

  • DefaultArguments: डिफ़ॉल्ट जॉब आर्ग्यूमेंट्स (--job-bookmark-option, --enable-glue-datacatalog, आदि)

  • MaxRetries: अधिकतम पुनर्प्रयास

  • Timeout: मिनटों में टाइमआउट

  • MaxCapacity/WorkerType/NumberOfWorkers: क्षमता कॉन्फ़िगरेशन

  • GlueVersion: Glue संस्करण (1.0, 2.0, 3.0, 4.0)

जॉब प्रकार

  • Spark (glueetl): Apache Spark ETL जॉब्स

  • Python Shell (pythonshell): Python स्क्रिप्ट चलाने के लिए

  • Ray (ray): Ray वर्कलोड के लिए (Glue 4.0+)

IAM अनुमति

glue:GetJobs अनुमति आवश्यक है।


  1. - Boto3 का उपयोग करके AWS Glue डेटा कैटलॉग में उपलब्ध सभी कनेक्शन का विवरण कैसे प्राप्त करें?

    समस्या विवरण - Python में boto3 लाइब्रेरी का उपयोग करके AWS Glue डेटा कैटलॉग में मौजूद सभी कनेक्शन का विवरण प्राप्त करें।उदाहरण - सभी कनेक्शन परिभाषा का विवरण प्राप्त करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदमचरण 1 - अपवादों को संभालने के लिए boto3 और botocore एक्सेप्शन्स आयात करें।चरण 2 - कोई

  1. - Boto3 का उपयोग करके AWS Glue डेटा कैटलॉग में उपलब्ध सभी क्लासिफायर का विवरण कैसे प्राप्त करें?

    समस्या विवरण: Python में boto3 लाइब्रेरी का उपयोग करके AWS Glue डेटा कैटलॉग में मौजूद सभी क्लासिफायर का विवरण प्राप्त करें। उदाहरण के लिए, यूज़र के अकाउंट से सभी क्लासिफायर का विवरण प्राप्त करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदमचरण 1 - अपवादों को संभालने के लिए boto3 और botocore एक्सेप्शन्

  1. - Boto3 का उपयोग करके AWS Glue से Glue जॉब कैसे डिलीट करें?

    समस्या विवरण - Python में boto3 लाइब्रेरी का उपयोग करके अपने अकाउंट में बने Glue जॉब को डिलीट करें।उदाहरण - अपने अकाउंट में बने Glue जॉब transfer_from_s3 को डिलीट करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदमचरण 1 - अपवादों को संभालने के लिए boto3 और botocore एक्सेप्शन्स आयात करें।चरण 2 - पैरामीट