AWS: Amazon Athena – serverless сервис аналитики, примеры

Автор: | 24/01/2018

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-е кликаем на hereClick 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>:

Изменить корзину можно в настройках:

Пример работы

Попробуем создать реальный пример.

Далее выполним:

  1. добавим S3 корзину и каталог в ней, в которой будут исходные данные
  2. загрузим тестовый файл с данными в корзину (при использовании нескольких файлов имейте ввиду, что файлы в одном каталоге корзины должны иметь один формат)
  3. создадим новую базу в Athena с исходными данными из созданной корзины
  4. и выполним несколько запросов, что бы создать файлы с результатами в корзине

Создание 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]

Следовательно, в таблице будут колонки:

  1. Name тип string
  2. Surname тип string
  3. Address тип string
  4. City тип string
  5. State тип string
  6. Postcode тип 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.