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)

