Python
 Computer >> コンピューター >  >> プログラミング >> Python

Boto3を使ってAWS Glue Data Catalogのテーブルバージョンをページネーションで取得する方法

課題

Pythonのboto3ライブラリを使用して、自分のアカウントに作成されたAWS Glue Data Catalog内のテーブルについて、そのテーブルバージョンをページネーション(ページ分割)しながら取得します。

解決のためのアプローチとアルゴリズム

  • ステップ1: 例外処理のために、boto3botocoreの例外クラスをインポートします。

  • ステップ2: database_nametable_nameは必須パラメータです。一方、max_itemspage_sizestarting_tokenは任意のパラメータです。

    • max_items:返されるレコードの総数を表します。利用可能なレコード数がmax_itemsを超える場合、レスポンスにはページネーションを再開するためのNextTokenが含まれます。

    • page_size:1ページあたりのサイズを表します。

    • starting_token:ページネーションを開始する位置を指定するためのもので、前回のレスポンスから取得したNextTokenを使用します。

  • ステップ3: boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを渡す必要があります。

  • ステップ4: Glue用のAWSクライアントを作成します。

  • ステップ5: get_table_versionsを使用して、テーブルのすべてのバージョン情報を含むpaginator(ページネーター)オブジェクトを作成します。

  • ステップ6: paginate関数を呼び出し、DatabaseNameとしてdatabase_name、TableNameとしてtable_nameを渡し、さらにmax_itemspage_sizestarting_tokenPaginationConfigパラメータとして指定します。

  • ステップ7: max_sizepage_sizeの設定に基づいた件数のレコードが返されます。

  • ステップ8: ページネーション中に問題が発生した場合は、汎用例外を適切にハンドリングします。

サンプルコード

以下のコードを使用すると、ユーザーアカウントに作成されたテーブルのバージョンをページネーションで取得できます。

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: " + str(e))
    except Exception as e:
        raise Exception("Unexpected error in paginate_through_table_versions: " + str(e))

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

まとめ

boto3のpaginator機能を活用することで、AWS Glue Data Catalog上のテーブルバージョンを効率的に少量ずつ取得できます。大規模なデータカタログを扱う際に、APIレート制限やメモリ消費を抑えながら安定した操作を実現できるため、実務でのデータパイプライン構築にも役立つテクニックです。

  1. Boto3を使ってAWS Glue Data Catalogからテーブルを削除する方法

    はじめにPythonのboto3ライブラリを使用すると、AWS Glue Data Catalogに作成したテーブルをプログラムから簡単に削除できます。本記事では、boto3を使ってアカウント内のデータベースからテーブルを削除する手順を、サンプルコードとともにわかりやすく解説します。課題Pythonのboto3ライブラリを使って、自分のアカウントに作成されたテーブルを削除します。例: アカウント内のデータベース「test」から、「security」という名前のテーブルを削除します。解決のためのアプローチとアルゴリズム以下の手順でテーブルを削除できます。ステップ1: boto3と、例外処理のため

  2. Boto3を使ってAWS Glueのジョブを削除する方法を徹底解説

    AWS Glueは、ETL(抽出・変換・ロード)処理を簡単に実行できるサーバーレスのデータ統合サービスです。本記事では、Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成済みのGlueジョブを削除する方法を、ステップごとにわかりやすく解説します。 課題 Pythonのboto3ライブラリを使って、AWSアカウント内に作成されたGlueジョブを削除します。 例: アカウント内に作成された「transfer_from_s3」というGlueジョブを削除します。 解決のためのアプローチとアルゴリズム ステップ1: 例外処理のために、boto3とbotocoreの例外モジュール