AWS Lambda pythonでGlueを使用して複数のAthenaテーブルを一括で削除する方法

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)