Сводка
Я пытаюсь создать таблицу базы данных, чтобы иметь возможность запрашивать журналы, повернутые из среды AWS Elastic Beanstalk.Когда выполняется запрос на создание таблицы, в таблицу не вводятся никакие результаты, поэтому никакие запросы не могут быть выполнены (любого значения).
Подробности
выполняется конкретный запрос:
CREATE EXTERNAL TABLE IF NOT EXISTS access_logs (
request_timestamp string,
elb_name string,
request_ip string,
request_port int,
backend_ip string,
backend_port int,
request_processing_time double,
backend_processing_time double,
response_processing_time double,
elb_response_code string,
backend_response_code string,
received_bytes bigint,
sent_bytes bigint,
request_verb string,
url string,
protocol string,
user_agent string,
ssl_cipher string,
ssl_protocol string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:\-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$' )
LOCATION 's3://elasticbeanstalk-us-east-1-000000000000/resources/environments/logs/publish/e-0x0x0x0x0x0/i-0f0101010100101/';
Единственными изменениями в вышеприведенном запросе являются запутывание местоположения корзины S3.Сам запрос основан на документации AWS (https://docs.aws.amazon.com/athena/latest/ug/elasticloadbalancer-classic-logs.html). Я знаю, что это не классический балансировщик нагрузки, но это был ближайший аналог приведенных примеров.
Когда запрос выполняется, он быстро завершается и возвращает:
(Run time: 0.39 seconds, Data scanned: 0 KB)
Ясно, что не удается найти правильные данные для импорта. Я неоднократно проверял расположение контейнера S3 - даже вырезая и вставляя символы, чтобы предотвратить опечатки.
S3 Log Details
Когда EBS вращает журналы, они делают это каждый час. Журналы доступа распаковываются и имеют формат s3://elasticbeanstalk-us-east-1-000000000000/resources/environments/logs/publish/e-0x0x0x0x0x0/i-0f0101010100101/_var_log_httpd_rotated_access_log-1541120461.gz
Thisозначает, что этот конкретный каталог в S3 имеет месяцы небольших фрагментов журнала доступа. Это то, что я пытаюсь прочитать в AWS Athena, но запрос на создание явно не отформатирован правильно для чтения этих файлов.
Данные вфайлы представляют собой стандартные журналы HTTP-доступа. Пример ввода данных:
172.31.33.100 (45.249.01.01) - - [05/Oct/2018:07:46:50 +0000] "POST /v1/process/contact HTTP/1.1" 400 51 "https://example.com/page" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
Вопросы:
Может ли это быть разрешениемНс проблема? Кажется маловероятным, поскольку запрос успешно завершен, но я точно не знаю.
Связано ли это со структурой данных в S3ведро? Поскольку это автоматизированный процесс AWS, я не могу контролировать форматирование данных, но могут ли быть какие-либо спецификации форматирования данных, отсутствующие в запросе?
Что-то еще целиком? Будучи новичком в Афине, там может быть какая-то конфигурация / тонкость, которую я просто не вижу.Может ли это быть связано с выражением регулярного выражения сериализации?
Спасибо за чтение - любая помощь будет оценена.Пожалуйста, дайте мне знать, если я могу предоставить любую дополнительную информацию.