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

Boto3 का उपयोग करके AWS Glue डेटा कैटलॉग से डेटाबेस में टेबल परिभाषा प्राप्त करना


आइए देखें कि उपयोगकर्ता AWS Glue डेटा कैटलॉग से डेटाबेस में सभी टेबल या कुछ टेबल की परिभाषा कैसे प्राप्त कर सकता है जो नियमित अभिव्यक्ति के अनुसार मेल खाते हैं।

उदाहरण

डेटाबेस 'QA-test' में सभी टेबल की परिभाषा प्राप्त करें और टेबल 'security' और 'employee' के रूप में।

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

  • चरण 1: अपवादों को संभालने के लिए boto3 और botocore अपवाद आयात करें।

  • चरण 2: database_name अनिवार्य पैरामीटर है जबकि regular_expression_for_table_name वैकल्पिक पैरामीटर है। यदि उपयोगकर्ता सभी टेबल का विवरण प्राप्त करना चाहता है, तो नियमित अभिव्यक्ति प्रदान करने की आवश्यकता नहीं है। हालांकि, यदि केवल सीमित टेबल प्राप्त करने की आवश्यकता है, तो एक नियमित अभिव्यक्ति आवश्यक है। नियमित अभिव्यक्ति लिखते समय सावधान रहें क्योंकि यदि यह सही ढंग से नहीं लिखी गई है तो परिणाम बदल सकता है।

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

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

  • चरण 5: अब get_tables फ़ंक्शन का उपयोग करें और database_name को DatabaseName और regular_expression_for_table_name को Expression पैरामीटर के रूप में पास करें।

  • चरण 6: यह दिए गए डेटाबेस में सभी या मिलान वाली टेबल की परिभाषा लौटाता है।

  • चरण 7: जॉब की जांच करते समय यदि कुछ गलत हुआ तो सामान्य अपवाद को संभालें।

उदाहरण कोड

निम्न कोड दिए गए डेटाबेस से सभी टेबल परिभाषाएं प्राप्त करता है -

import boto3
from botocore.exceptions import ClientError

def retrieves_tables_detail(database_name, regular_expression_for_table_name=None):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.get_tables(DatabaseName=database_name, Expression=regular_expression_for_table_name)
        return response
    except ClientError as e:
        raise Exception("boto3 client error in retrieves_tables_detail: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in retrieves_tables_detail: " + e.__str__())

print(retrieves_tables_detail('QA-test'))

आउटपुट

{'TableList': [{'Name': 'security', 'DatabaseName': 'QA-test', 'Owner': 'owner', 'CreateTime': datetime.datetime(2020, 9, 10, 22, 27, 24, tzinfo=tzlocal()), 'UpdateTime': datetime.datetime(2021, 3, 1, 11, 43, 49, tzinfo=tzlocal()), 'LastAccessTime': datetime.datetime(2020, 9, 10, 22, 27, 24, tzinfo=tzlocal()), 'Retention': 0, 'StorageDescriptor': {'Columns': [{'Name': 'assettypecode', 'Type': 'string'}, {'Name': 'industrysector', 'Type': 'varchar'}, {'Name': 'securitycode', 'Type': 'char'}, {'Name': 'contractsize', 'Type': 'string'}, {'Name': 'conversionperiodenddate', 'Type': 'string'}, {'Name': 'conversionperiodstartdate', 'Type': 'string'}, {'Name': 'expirationdate', 'Type': 'string'}, {'Name': 'issuercountrycode', 'Type': 'string'}, {'Name': 'issuercountrydesc', 'Type': 'string'}, {'Name': 'originalissuedate', 'Type': 'string'}, {'Name': 'securitynamelong', 'Type': 'string'}, {'Name': 'issueshortname', 'Type': 'string'}, {'Name': 'gicssector', 'Type': 'string'}, {'Name': 'maturitydate', 'Type': 'string'}, {'Name': 'optioncode', 'Type': 'string'}, {'Name': 'optiontypename', 'Type': 'string'}, {'Name': 'paramount', 'Type': 'string'}, {'Name': 'priceindex', 'Type': 'string'}, {'Name': 'countrycoderisk', 'Type': 'string'}, {'Name': 'countrydescrisk', 'Type': 'string'}, {'Name': 'countrycode', 'Type': 'string'}], 'Location': 's3://test/security/', 'InputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat', 'OutputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat', 'Compressed': False, 'NumberOfBuckets': -1, 'SerdeInfo': {'SerializationLibrary': 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe', 'Parameters': {'serialization.format': '1'}}, 'BucketColumns': [], 'SortColumns': [], 'Parameters': {'CrawlerSchemaDeserializerVersion': '1.0', 'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER': 'security', 'averageRecordSize': '181', 'classification': 'parquet', 'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800', 'sizeKey': '20337230', 'typeOfData': 'file'}, 'StoredAsSubDirectories': False}, 'PartitionKeys': [], 'TableType': 'EXTERNAL_TABLE', 'Parameters': {'CrawlerSchemaDeserializerVersion': '1.0', 'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER': 'security', 'averageRecordSize': '181', 'classification': 'parquet', 'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800', 'sizeKey': '20337230', 'typeOfData': 'file'}, 'CreatedBy': 'arn:aws:sts::*********:assumed-role/glue-role/AWS-Crawler'}, 'VersionId': '2'}, {'Name': 'employee', 'DatabaseName': 'QA-test', 'Owner': 'owner', 'CreateTime': datetime.datetime(2020, 9, 10, 22, 27, 24, tzinfo=tzlocal()), 'UpdateTime': datetime.datetime(2021, 3, 1, 11, 43, 49, tzinfo=tzlocal()), 'LastAccessTime': datetime.datetime(2020, 9, 10, 22, 27, 24, tzinfo=tzlocal()), 'Retention': 0, 'StorageDescriptor': {'Columns': [{'Name': 'assettypecode', 'Type': 'string'}, {'Name': 'industrysector', 'Type': 'varchar'}, {'Name': 'code', 'Type': 'char'}, {'Name': 'size', 'Type': 'string'}, {'Name': 'countrycode', 'Type': 'string'}, {'Name': 'countrydesc', 'Type': 'string'}], 'Location': 's3://test/security/', 'InputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat', 'OutputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat', 'Compressed': False, 'NumberOfBuckets': -1, 'SerdeInfo': {'SerializationLibrary': 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe', 'Parameters': {'serialization.format': '1'}}, 'BucketColumns': [], 'SortColumns': [], 'Parameters': {'CrawlerSchemaDeserializerVersion': '1.0', 'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER': 'security', 'averageRecordSize': '181', 'classification': 'parquet', 'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800', 'sizeKey': '20337230', 'typeOfData': 'file'}, 'StoredAsSubDirectories': False}, 'PartitionKeys': [], 'TableType': 'EXTERNAL_TABLE', 'Parameters': {'CrawlerSchemaDeserializerVersion': '1.0', 'CrawlerSchemaSerializerVersion': '1.0', 'UPDATED_BY_CRAWLER': 'employee', 'averageRecordSize': '181', 'classification': 'parquet', 'compressionType': 'none', 'objectCount': '5', 'recordCount': '154800', 'sizeKey': '20337230', 'typeOfData': 'file'}, 'CreatedBy': 'arn:aws:sts::*********:assumed-role/glue-role/AWS-Crawler'}, 'VersionId': '2'}], 'ResponseMetadata': {'RequestId': '431db171-*******************0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Mon, 01 Mar 2021 06:15:30 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '3916', 'connection': 'keep-alive', 'x-amzn-requestid': '431db171-*****************0'}, 'RetryAttempts': 0}}

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

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

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

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

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

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