GlueのクローラでAthenaのテーブルを更新しているのですが、タイミングによってpart_xxxxが大量に作られるため、複数テーブルを一括で削除できる関数を作りました。
Lambda関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import sys import boto3 import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) DBNAME='データベース名' glue = boto3.client('glue') def tabledel(res): tableList = res['TableList'] for tableDict in tableList: tableName = tableDict['Name'] print( 'tableName: '+tableName) ret=glue.delete_table(DatabaseName=DBNAME,Name=tableName) print(ret) def lambda_handler(event, context): response = glue.get_tables(DatabaseName=DBNAME,Expression='part_*') # logger.info(response) tabledel(response) while 'NextToken' in response: response = glue.get_tables(DatabaseName=DBNAME,Expression='part_*', NextToken=response['NextToken'] ) # logger.info(response) tabledel(response) |
Athenaテーブル一覧を取得するPythonコード
1 2 3 4 5 6 7 | response = glue.get_tables(DatabaseName=DBNAME,Expression='part_*') tabledel(response) while 'NextToken' in response: response = glue.get_tables(DatabaseName=DBNAME,Expression='part_*', NextToken=response['NextToken'] ) tabledel(response) |
次回テーブル一覧を取得する際も、「DatabaseName」を設定し、「Expression」を指定している場合は再度設定する必要があります。
Athenaテーブルを削除するPythonコード
1 2 3 4 5 | def tabledel(res): tableList = res['TableList'] for tableDict in tableList: tableName = tableDict['Name'] ret=glue.delete_table(DatabaseName=DBNAME,Name=tableName) |