Athenaクエリーの結果から別の処理を行いたいため、作成しました。
Lambda pythonコード
import os
import time
import boto3
S3_OUTPUT = 's3://バケット名'
S3_BUCKET ='バケット名'
DATABASE = 'DB名'
TABLE = 'テーブル名'
# create query
# number of retries
RETRY_COUNT = 300
# main
def lambda_handler(event, context):
query = "SELECT * FROM %s.%s where a=b;" % (DATABASE, TABLE)
print(query)
client = boto3.client('athena')
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': DATABASE
},
ResultConfiguration={
'OutputLocation': S3_OUTPUT,
}
)
query_execution_id = response['QueryExecutionId']
print(query_execution_id)
for i in range(1, 1 + RETRY_COUNT):
# get query execution
query_status = client.get_query_execution(QueryExecutionId=query_execution_id)
query_execution_status = query_status['QueryExecution']['Status']['State']
if query_execution_status == 'SUCCEEDED':
print("STATUS:" + query_execution_status)
break
if query_execution_status == 'FAILED':
raise Exception("STATUS:" + query_execution_status)
else:
print("STATUS:" + query_execution_status)
time.sleep(i)
else:
client.stop_query_execution(QueryExecutionId=query_execution_id)
raise Exception('TIME OVER')
# query file name
QUERY_OUT_FILE = query_execution_id + ".csv"
print(QUERY_OUT_FILE)
response = s3c.get_object(Bucket = S3_BUCKET, Key = QUERY_OUT_FILE)
ans = str(response['Body'].read().decode('utf-8'))
lines=ans.splitlines()
i=0
for line in lines:
i=i+1
print(line)

