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 パラメータに正規表現を指定すれば、特定のテーブルのみを絞り込むことも可能です。データカタログのスキーマ情報をプログラムから参照・管理したい場合に非常に便利な手法なので、ぜひ活用してください。
-
Boto3を使ってAWS Glueデータカタログからデータベースを削除する方法
課題Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成されたデータベースを削除します。例 − アカウントに作成された「Portfolio」というデータベースを削除します。解決のためのアプローチとアルゴリズムステップ1 − 例外をハンドリングするために、boto3とbotocoreの例外モジュールをインポートします。ステップ2 − AWS Glue Catalogから削除したいデータベース名を database_name パラメータとして渡します。ステップ3 − boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルに region_name
-
Boto3を使ってAWS Glueデータカタログからクローラーを削除する方法
本記事では、Pythonのboto3ライブラリを使用して、AWSアカウント内に作成されたGlueクローラーを削除する手順を解説します。AWS Glueのクローラーは、S3などのデータソースをスキャンしてデータカタログにテーブル定義を作成する重要なコンポーネントですが、不要になったクローラーは適切に削除することでリソースを整理できます。 課題 − Pythonのboto3ライブラリを使って、自分のアカウントに作成されたクローラーを削除する。 例 − アカウントに作成された「Portfolio」という名前のクローラーを削除する。 問題解決のアプローチとアルゴリズム ステップ1 − 例外処理のため