Поиск по сайту:

Запрашивайте данные S3 как базу данных с помощью AWS Athena


Athena — это сервис AWS, который может сканировать данные, хранящиеся в S3, и возвращать результаты на основе запросов, используя стандартные операторы SQL, которые вы использовали бы для традиционной базы данных. Это особенно полезно для извлечения данных из CSV и больших текстовых файлов.

Сколько стоит Афина?

У Athena есть только один заряд: ГБ обработанных данных. Текущая ставка составляет 5 долларов за ТБ или около 0,005 доллара за ГБ. Это уже довольно дешево, если только вы не обрабатываете гигантские файлы (что, безусловно, может сделать Athena), но есть несколько способов еще больше снизить эту стоимость.

Во-первых, Athena поддерживает сжатие gzip, и вы должны воспользоваться им. Текстовые файлы сжимаются на удивление хорошо, и нередко можно увидеть усиление сжатия 3:1 или даже 4:1. Если Athena должна сканировать весь файл, вы сэкономите 70-80% средств, если он будет заархивирован.

Athena также поддерживает столбчатый формат с Apache Parquet. Если вы используете Parquet вместо CSV, Athena может ограничить поиск определенными столбцами, сэкономив при этом много денег.

На самом деле, Athena довольно дешевая, но ее стоимость заключается в том, чтобы побудить людей использовать Parquet и gzip. Если вы хотите научиться автоматически преобразовывать файлы CSV в формат Parquet, вы можете сделать это с помощью AWS Glue.

С чего начать

Перейдите к консоли Athena и выберите «Начать». Вы попадете в редактор запросов, где для вас уже созданы образец базы данных и таблица. Вы можете поиграть с этим, если хотите, но как только вы закончите, продолжайте и создайте новую базу данных:

CREATE DATABASE PRIMARY

Выберите базу данных на боковой панели после ее создания. Нажмите «Создать таблицу» и выберите «Из данных корзины S3»:

Загрузите свои данные на S3 и выберите «Копировать путь», чтобы получить ссылку на него. Вы захотите создать новую папку для хранения файла, даже если у вас есть только один файл, поскольку Athena ожидает, что он будет находиться как минимум в одной папке.

Вернувшись в консоль Athena, введите путь к папке, содержащей ваши данные (не прямой путь к файлу), и дайте вашей таблице имя. Убедитесь, что он импортируется в ту же базу данных, которую вы создали ранее.

Далее выберите тип данных. Athena поддерживает ряд параметров, таких как стандартные журналы веб-сервера, CSV и TSV, JSON и настраиваемые разделители.

Затем вы сообщите Athena, как структурированы ваши данные, добавив имена для каждого столбца. Вы можете добавлять столбцы вручную или массово (более простой вариант).

Чтобы добавить столбцы массово, вам нужно создать пары ключ-значение с именем столбца и типом данных, например:

emailaddress string

Если в вашем CSV-файле есть заголовки столбцов, вы можете передать файл в head, чтобы получить заголовок, и в sed, чтобы добавить значение. Следующий скрипт устанавливает для каждого столбца тип «String»:

cat search.csv | head -n1 | sed  's/([^,]*)/1 string/g'

Вы можете изменить его на правильный тип в консоли Athena, но он должен быть отформатирован таким образом, чтобы Athena вообще его приняла.

Когда вы закончите настройку столбцов, создайте таблицу, и вы вернетесь в редактор запросов и увидите запрос, использованный для создания таблицы. Вы также увидите вновь созданную таблицу на боковой панели.

Если все работает правильно, теперь вы сможете получить доступ к данным таблицы из Athena.

Athena использует стандартный синтаксис SQL, поэтому вы можете запрашивать эту виртуальную базу данных и таблицу точно так же, как и любую другую базу данных:

SELECT * FROM mtg WHERE cmc > 4

Вы можете добавить несколько таблиц, которые извлекают данные из разных папок S3, и запрашивать их аналогичным образом.