#python #amazon-s3 #amazon-athena
#питон #amazon-s3 #amazon-athena #python
Вопрос:
Я запускаю скрипт на Python для получения журналов ошибок из журналов доступа CloudFront, которые я мог бы использовать для выполнения из службы Lambda после успешного завершения. Когда я пытаюсь выполнить запрос, я вижу, что имя таблицы существует в базе данных AWS Athena, я не могу перезаписать. Итак, я не получаю ожидаемый результат. Ниже приведен скрипт, который я пытаюсь выполнить.
Есть ли другой способ? есть предложения?
#Athena configuration
s3_ouput = 's3://athena/athenatest/'
database = 's3_accesslog'
table = 'test_output1'
#Athena database and table definition
create_database = "CREATE DATABASE IF NOT EXISTS %s;" % (database)
create_table =
"""CREATE EXTERNAL TABLE IF NOT EXISTS %s.%s (
`Date` DATE,
Time STRING,
Location STRING,
SCBytes BIGINT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
UserAgent STRING,
UriQS STRING,
Cookie STRING,
ResultType STRING,
RequestId STRING,
HostHeader STRING,
Protocol STRING,
CSBytes BIGINT,
TimeTaken FLOAT,
XForwardFor STRING,
SSLProtocol STRING,
SSLCipher STRING,
ResponseResultType STRING,
CSProtocolVersion STRING,
FleStatus STRING,
FleEncryptedFields INT,
CPort INT,
TimeToFirstByte FLOAT,
XEdgeDetailedResult STRING,
ScContent STRING,
ScContentLen BIGINT,
ScRangeStart BIGINT,
ScRangeEnd BIGINT
)
PARTITIONED BY (
`l_shipdate` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
LOCATION '%s'
TBLPROPERTIES ('skip.header.line.count' = '2');""" % ( database, table, s3_input )
#Query definitions
query_1 = "SELECT * FROM %s.%s where CAST(status AS VARCHAR) like '404';" % (database, table)
Ответ №1:
Я вижу, что ваша таблица в вашем запросе разделена на l_shipdate
. Итак, чтобы ваша таблица предоставляла вам последние данные, она должна быть обновлена метаданными раздела.
В вашем случае этого можно достичь, запустив либо таблицу восстановления MSCK, либо раздел ALTER TABLE ADD непосредственно перед запуском ……….. query_1
Это обновит test_output1
определение вашей таблицы с использованием последних разделов.
Если это не так, и вы все еще хотите перезаписать свою таблицу, вы можете просто запустить DROP TABLE перед запуском инструкции CREATE TABLE.