GlueのクローラでAthenaのテーブルを更新しているのですが、タイミングによってpart_xxxxが大量に作られるため、複数テーブルを一括で削除できる関数を作りました。
Lambda関数
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コード
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)
レスポンスに「NextToken」がある場合、NextTokenを指定して「NextToken」がなくなるまでリストを取得する必要があります。
次回テーブル一覧を取得する際も、「DatabaseName」を設定し、「Expression」を指定している場合は再度設定する必要があります。
Athenaテーブルを削除するPythonコード
def tabledel(res): tableList = res['TableList'] for tableDict in tableList: tableName = tableDict['Name'] ret=glue.delete_table(DatabaseName=DBNAME,Name=tableName)