Python
 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'))

出力結果

上記のコードを実行すると、以下のようなレスポンスが返されます。各テーブルについて、カラム名と型、S3上のロケーション、入出力フォーマット、クローラーによる更新情報などが含まれた詳細な定義が確認できます。

{'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()),
 'StorageDescriptor': {
     'Columns': [
         {'Name': 'assettypecode', 'Type': 'string'},
         {'Name': 'industrysector', 'Type': 'varchar'},
         {'Name': 'securitycode', 'Type': 'char'},
         ...],
     'Location': 's3://test/security/',
     'InputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat',
     'OutputFormat': 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat',
     'Compressed': False,
     'SerdeInfo': {
         'SerializationLibrary': 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'}},
 'TableType': 'EXTERNAL_TABLE',
 'Parameters': {
     'classification': 'parquet',
     'compressionType': 'none',
     'recordCount': '154800',
     'sizeKey': '20337230',
     'typeOfData': 'file'},
 'CreatedBy': 'arn:aws:sts::*********:assumed-role/glue-role/AWS-Crawler',
 'VersionId': '2'},
{'Name': 'employee', 'DatabaseName': 'QA-test', ...
 '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'}],
 ...},'ResponseMetadata': {
    'RequestId': '431db171-*******************0',
    'HTTPStatusCode': 200,
    'RetryAttempts': 0}}

まとめ

boto3の get_tables 関数を使えば、DatabaseName にデータベース名を指定するだけで全テーブルの定義を一括取得できます。Expression パラメータに正規表現を指定すれば、特定のテーブルのみを絞り込むことも可能です。データカタログのスキーマ情報をプログラムから参照・管理したい場合に非常に便利な手法なので、ぜひ活用してください。

  1. Boto3を使ってAWS Glueデータカタログからデータベースを削除する方法

    課題Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成されたデータベースを削除します。例 − アカウントに作成された「Portfolio」というデータベースを削除します。解決のためのアプローチとアルゴリズムステップ1 − 例外をハンドリングするために、boto3とbotocoreの例外モジュールをインポートします。ステップ2 − AWS Glue Catalogから削除したいデータベース名を database_name パラメータとして渡します。ステップ3 − boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルに region_name

  2. Boto3を使ってAWS Glueデータカタログからクローラーを削除する方法

    本記事では、Pythonのboto3ライブラリを使用して、AWSアカウント内に作成されたGlueクローラーを削除する手順を解説します。AWS Glueのクローラーは、S3などのデータソースをスキャンしてデータカタログにテーブル定義を作成する重要なコンポーネントですが、不要になったクローラーは適切に削除することでリソースを整理できます。 課題 − Pythonのboto3ライブラリを使って、自分のアカウントに作成されたクローラーを削除する。 例 − アカウントに作成された「Portfolio」という名前のクローラーを削除する。 問題解決のアプローチとアルゴリズム ステップ1 − 例外処理のため