কম্পিউটার টিউটোরিয়াল

Boto3 ব্যবহার করে AWS Glue-এ থাকা টেবিলের টেবিল ভার্সন পেজিনেট করা


সমস্যা: পাইথনে boto3 লাইব্রেরি ব্যবহার করে আপনার অ্যাকাউন্টে তৈরি AWS Glue Data Catalog-এ থেকে একটি টেবিলের টেবিল ভার্সন পেজিনেট করা।

পদ্ধতি/অ্যালগরিদম

  • ধাপ ১: boto3 এবং botocore এক্সেপশন ইম্পোর্ট করুন এক্সেপশন হ্যান্ডল করার জন্য।

  • ধাপ ২: max_items, page_size এবং starting_token এই ফাংশনের জন্য অপশনাল প্যারামিটার, তবে database_name এবং table_name আবশ্যিক।

    • max_items নির্দেশ করে মোট কতগুলো রেকর্ড রিটার্ন করতে হবে। যদি উপলব্ধ রেকর্ড max_items-এর চেয়ে বেশি হয়, তবে পেজিনেশন রিজিউম করার জন্য রেসপন্সে NextToken দেওয়া হবে।

    • page_size প্রতিটি পেজের সাইজ নির্দেশ করে।

    • starting_token পেজিনেশনে সাহায্য করে এবং এটি পূর্বের রেসপন্স থেকে NextToken ব্যবহার করে।

  • ধাপ ৩: boto3 লাইব্রেরি ব্যবহার করে AWS সেশন তৈরি করুন। নিশ্চিত করুন region_name ডিফল্ট প্রোফাইলে আছে। না থাকলে সেশন তৈরি করার সময় সিদ্ধা region_name পাস করুন।

  • ধাপ ৪: glue-এর জন্য AWS ক্লায়েন্ট তৈরি করুন।

  • ধাপ ৫: get_table_versions ব্যবহার করে একটি টেবিলের সকল টেবিল ভার্সনের ডিটেইলস ধারণকারী একটি paginator অবজেক্ট তৈরি করুন।

  • ধাপ ৬: paginate ফাংশন কল করুন এবং database_name কে DatabaseName, TableName কে table_name, max_items, page_size এবং starting_token কে PaginationConfig প্যারামিটার হিসেবে পাস করুন।

  • ধাপ ৭: এটি max_size এবং page_size অনুযায়ী রেকর্ডের সংখ্যা রিটার্ন করে।

  • ধাপ ৮: পেজিনেশনের সময় যদি কোনো সমস্যা হয় তবে জেনেরিক এক্সেপশন হ্যান্ডল করুন।

উদাহরণ কোড

ইউজার অ্যাকাউন্টে তৈরি একটি টেবিলের টেবিল ভার্সন পেজিনেট করতে নিচের কোডটি ব্যবহার করুন:

import boto3
from botocore.exceptions import ClientError

def paginate_through_table_versions(database_name, table_name, 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_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)

আউটপুট

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

  1. Boto3 ব্যবহার করে AWS Glue Security-এ নির্দিষ্ট সিকিউরিটি কনফিগারেশনের ডিটেইলস পাওয়া

  2. Boto3 ব্যবহার করে AWS Glue Data Catalog থেকে একটি টেবিলের নির্দিষ্ট ভার্সন ডিলিট করা

  3. Boto3 ব্যবহার করে AWS Glue Data Catalog থেকে একটি টেবিল ডিলিট করা

  4. Boto3 ব্যবহার করে AWS Glue থেকে একটি Glue Job ডিলিট করা