ভূমিকা
AWS Glue ডেটা ক্যাটালগে টেবিল মেটাডেটা (স্কিমা, লোকেশন, ফরম্যাট, পার্টিশন কী, ইত্যাদি) সংরক্ষিত থাকে। get_tables API ব্যবহার করে একটি ডেটাবেসের সব টেবিল বা রেগুলার এক্সপ্রেশন অনুযায়ী ফিল্টার করা টেবিলের ডেফিনিশন পাওয়া যায়।
সমস্যা বিবরণ
পাইথনে boto3 লাইব্রেরি ব্যবহার করে একটি ডেটাবেস (উদাহরণ: 'QA-test') থেকে টেবিল ডেফিনিশন পাওয়া (রেগুলার এক্সপ্রেশন ঐচ্ছিক)।
অ্যালগরিদম / ধাপসমূহ
- boto3 এবং botocore.exceptions ইম্পোর্ট করুন।
- ফাংশনটি বাধ্যতামূলক database_name এবং ঐচ্ছিক regular_expression_for_table_name প্যারামিটার নেবে।
- AWS সেশন এবং Glue ক্লায়েন্ট তৈরি করুন।
glue_client.get_tables(DatabaseName=database_name, Expression=regular_expression_for_table_name)কল করুন।- রেসপন্সে
TableList(টেবিল অবজেক্টের লিস্ট) এবংResponseMetadataথাকবে। - এক্সেপশন হ্যান্ডল করুন।
উদাহরণ কোড
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': ..., 'UpdateTime': ..., 'LastAccessTime': ..., 'Retention': 0, 'StorageDescriptor': {'Columns': [{'Name': 'assettypecode', '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': {...}}, 'PartitionKeys': [], 'TableType': 'EXTERNAL_TABLE', 'Parameters': {...}, 'CreatedBy': 'arn:aws:sts::*********:assumed-role/glue-role/AWS-Crawler', 'VersionId': '2'},
{'Name': 'employee', ...}
], 'ResponseMetadata': {...}}
ব্যাখ্যা
প্রতিটি টেবিল অবজেক্টে বিস্তারিত মেটাডেটা থাকে: কলাম স্কিমা, S3 লোকেশন, ফাইল ফরম্যাট (Parquet), সারডি (SerDe) ইনফো, পার্টিশন কী, টেবিল টাইপ (EXTERNAL_TABLE), এবং ক্রলার মেটাডেটা।
Expressionপ্যারামিটার দিয়ে টেবিল নাম ফিল্টার করা যায় (SQL LIKE সিনট্যাক্স)।বড় ডেটাবেসের জন্য পেজিনেশন (
NextToken) ব্যবহার করুন।