Amazon Athena – интерактивный сервис запросов, позволяющий анализировать данные в Amazon S3 стандартными средствами SQL. Athena – это бессерверный сервис, поэтому не нужно управлять архитектурой, а плата начисляется только за выполненные запросы.
О сервисе – тут>>>.
Документация – тут>>>.
Начало работы – тут>>>.
Видео – тут>>> (первая часть, знакомство с Athena), тут>>> (вторая часть – S3), тут>>> (третья часть – работа с Athena) (видео немного устарело, ему год, но отлично демонстрирует работу и возможности Athena).
Содержание
Начало работы
Логинимся в консоль AWS, переходим на страницу сервиса Athena, кликаем Get started.
Если это первый запуск Athena – AWS запустит ознакомительный сценарий:
> In this tutorial we will take raw logs in text format on Amazon S3, and create a table.
Следуем указаниям помощника, создаём базу, таблицу и указываем путь к корзине, в которой будут данные для обработки:
Обратите внимание на документацию по указанию Input Data:
Use:
s3://bucketname/keyname/
- Do not use filenames, wildcards, or glob patterns for specifying file locations.
- Do not add the full HTTP notation, such as
s3.amazon.com
to the Amazon S3 bucket path.
Do not use:
s3://path_to_bucket
s3://path_to_bucket/*
s3://path_to_bucket/mySpecialFile.dat
s3://bucketname/keyname/filename.csv
s3://test-bucket.s3.amazon.com
arn:aws:s3:::bucketname/keyname
Указываем формат данных, в данном случае используем Apache logs:
Описываем содержимое базы – колонки и типы данных в них (в Wizard-е кликаем на here – Click here to fill in corresponding column names and types in the form.):
Запускаем создание таблицы:
(язык запросов см. ниже)
Получаем данные из таблицы – Preview table:
Результат:
Запросы к Data Source
Для работы с данными – используем SQL и HDDL (Hive Data Definition Language) запросы.
Документация – тут>>>.
Например – список баз:
Таблицы:
Результаты запросов
Документация – тут>>>.
Все запросы, которые мы выполняем к Athena, сохраняются в S3 корзине, по умолчанию имя aws-athena-query-results-<AWSUSERID>-<AWSREGION>/Unsaved/<YEAR>/<MONTH>/<DAY>:
Изменить корзину можно в настройках:
Пример работы
Попробуем создать реальный пример.
Далее выполним:
- добавим S3 корзину и каталог в ней, в которой будут исходные данные
- загрузим тестовый файл с данными в корзину (при использовании нескольких файлов имейте ввиду, что файлы в одном каталоге корзины должны иметь один формат)
- создадим новую базу в Athena с исходными данными из созданной корзины
- и выполним несколько запросов, что бы создать файлы с результатами в корзине
Создание S3
Создаём корзину:
В корзине создаём каталог:
Загружаем файл с тестовыми данными, например отсюда>>> – файл addresses.csv:
Аналогично создаём корзину setevoy-athena-test-results
(или не создаём – она будет добавлена после обновления настроек в Anthena, см. ниже).
Athena
Перед созданием базы – проверяем содержимое файла, т.к. понадобятся колонки для будущей таблицы в новой базе:
[simterm]
$ cat addresses.csv John,Doe,120 jefferson st.,Riverside, NJ, 08075 Jack,McGinnis,220 hobo Av.,Phila, PA,09119 "John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075 Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234 ,Blankman,,SomeTown, SD, 00298 "Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123
[/simterm]
Следовательно, в таблице будут колонки:
Name
тип stringSurname
тип stringAddress
тип stringCity
тип stringState
тип stringPostcode
тип int
В поле Location of Input Data Set потребуется URL корзины и каталога, находим их:
Копируем путь https://s3-eu-west-1.amazonaws.com/setevoy-athena-test/fold1/, переходим в Athena, создаём новую базу, и в пути указываем s3://setevoy-athena-test/fold1/:
Указываем тип данных CSV:
Создаём колонки. Для удобства – можно кликнуть на Bulk add columns и добавить всё одной строкой:
Partitions – сейчас не надо, пропускаем, жмём Create table – база и таблица готовы:
В настройка Athena – укажем новую корзину для результатов:
Выполнение запросов
И для примера – несколько запросов.
При написании запроса – можно использовать Ctrl+пробел для подстановки имён:
Выполняем запрос – Run query или Ctrl+Enter:
Проверяем содержимое корзины с результатами:
Загружаем файл, проверяем содержимое:
[simterm]
$ cat fdf49166-7483-4c79-828b-d6ffe2846caa.csv "name","surname","address","city","state","postcode" "John","Doe","120 jefferson st.","Riverside"," NJ", "Jack","McGinnis","220 hobo Av.","Phila"," PA","9119" """John """"Da Man""""""","Repici","120 Jefferson St.","Riverside"," NJ","8075" "Stephen","Tyler","""7452 Terrace """"At the Plaza"""" road""","SomeTown","SD", "","Blankman","","SomeTown"," SD", """Joan """"the bone"""""," Anne""","Jet","""9th"," at Terrace plc""",
[/simterm]
Аналогично используем любое форматирование.
Например – исключить строку, где поле Name
пустое:
SELECT * FROM setevoy_athena_test_db_1.addresses WHERE name <>''
А дальше полученные данные можно использовать например в Tableau сервере с помощью Athena connector.