Я пишу скрипт Python, который запускает запрос через Athena, выводит его на S3 и загружает в компьютер. Я могу запустить мой запрос через Athena и вывести результат в S3. Итак, мой следующий шаг, который я не могу понять, как загрузить его на компьютер без знания имени ключа?
Есть ли способ найти ключ объекта в моем скрипте python после вывода его в Athena?
Что я завершил:
# Output location and DB
s3_output = ‘s3_output_here
database = ‘database_here
# Function to run Athena query
def run_query(query, database, s3_output):
while True:
try:
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': s3_output,
}
)
return response
break
except client.exceptions.TooManyRequestsException as e:
print('Too many requests, trying again after sleep')
time.sleep(100)
# Our SQL Query
query = """
SELECT *
FROM test
"""
print("Running query to Athena...")
res = run_query(query, database, s3_output)
Я понимаю, как загрузить файл с помощью этого кода:
try:
s3.Bucket(BUCKET_NAME).download_file(KEY, ‘KEY_HERE)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
Итак, как я могу прочитать имя ключа после запуска моего первого кода?
Вы можете получить ключ, используя команду get_key, предоставленную библиотекой boto. Вот как я загружаю вещи из s3:
with open("path/aws-credentials.json") as f:
data= json.load(f)
conn = boto.connect_s3(data["accessKeyId"], data["secretAccessKey"])
bucket = conn.get_bucket('your_bucket')
file_path = bucket.get_key('path/to/s3/file')
file_path.get_contents_to_filename('path/on/local/computer/filename')
Вы можете жестко кодировать свои учетные данные в коде, если вы просто что-то тестируете, но если вы планируете внедрить это в производство, лучше хранить ваши учетные данные извне в чем-то вроде json файла.
filename = file_getter_function(args) file_path.get_contents_to_filename('path/on/local/computer/%s' %filename)
Трудно сказать, не зная, как определяется файл, но где-то кто-то должен ввести имя файла или программа должна выбрать одно или что-то, и вы можете использовать эту информацию для вызова базы данных.