0Pricing
AWS Solutions Architect · Урок

Amazon Athena: бессерверный SQL в S3

Запрашивайте данные S3 непосредственно в Athena с помощью стандартного SQL, оптимизируйте их с помощью колоночных форматов, таких как Parquet и ORC, и используйте разделение для контроля затрат.

«Amazon Athena: бессерверный SQL в S3» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Что такое Amazon Athena

Amazon Athena — это бессерверная интерактивная служба запросов, позволяющая выполнять стандартные SQL-запросы непосредственно к данным, хранящимся в Amazon S3. Вам не нужно подготавливать серверы или управлять кластерами, а плата взимается только за данные, просканированные в рамках запроса (примерно 5 долларов США за 1 ТБ просканированных данных). Athena использует Presto и нативно интегрируется с Glue Data Catalogue для работы с метаданными таблиц.

Настройка Athena: рабочие группы и расположение результатов

Перед выполнением запросов настройте рабочую группу Athena и укажите путь в S3 для сохранения результатов запросов. Рабочие группы позволяют разделять историю запросов и отслеживание расходов между командами, принудительно включать шифрование результатов и устанавливать ограничения на объём данных, сканируемых одним запросом, чтобы предотвратить неконтролируемый рост расходов. Результат каждого запроса записывается в формате CSV в настроенное выходное хранилище S3.

# Create a workgroup with an encrypted output location
aws athena create-work-group \
  --name analytics-team \
  --configuration '{
    "ResultConfiguration": {
      "OutputLocation": "s3://athena-results-123/analytics-team/",
      "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}
    },
    "EnforceWorkGroupConfiguration": true,
    "PublishCloudWatchMetricsEnabled": true,
    "BytesScannedCutoffPerQuery": 10737418240
  }'

Выполнение первого запроса

Укажите для Athena базу данных Glue Data Catalogue и выполняйте запросы на ANSI SQL. Athena поддерживает SELECT, JOIN, GROUP BY, оконные функции и CTE. Также можно использовать CREATE TABLE AS SELECT (CTAS), чтобы сохранить результаты запроса в виде новой таблицы в формате Parquet и фактически материализовать промежуточные результаты для ускорения последующих запросов.

-- Query total sales by month from partitioned S3 data
SELECT
  year,
  month,
  SUM(order_total) AS monthly_revenue
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year, month
ORDER BY month;

-- CTAS: materialise result as Parquet for reuse
CREATE TABLE my_db.monthly_revenue
WITH (format = 'PARQUET', external_location = 's3://my-data-lake-123/curated/monthly_revenue/')
AS
SELECT year, month, SUM(order_total) AS revenue
FROM my_db.curated_sales
GROUP BY year, month;

Оптимизация расходов: отсечение разделов

Athena взимает плату за каждый ТБ просканированных данных. Наиболее эффективный способ снизить расходы — отсечение разделов: всегда включайте столбцы разделов в предложение WHERE. Если данные разделены по year/month/day, фильтрация по этим столбцам не позволяет Athena сканировать остальные разделы. Без фильтра по разделам в таблице петабайтного масштаба даже простой запрос может стоить сотни долларов.

-- EXPENSIVE: No partition filter -> scans all data
SELECT * FROM my_db.curated_sales WHERE customer_id = '12345';

-- CHEAP: Partition filter applied -> scans only Jan 2024
SELECT * FROM my_db.curated_sales
WHERE year = '2024' AND month = '01' AND customer_id = '12345';

Оптимизация расходов: колоночный формат

Хранение данных в формате Apache Parquet или ORC вместо CSV или JSON значительно уменьшает объём данных, которые Athena сканирует в каждом запросе. Колоночный запрос, использующий 3 из 50 столбцов, сканирует на диске данные только этих 3 столбцов. В сочетании со встроенным сжатием (Snappy, Zstd) файлы Parquet обычно в 5–10 раз меньше эквивалентных файлов CSV, что многократно снижает расходы.

-- After converting raw CSV to Parquet:
-- CSV version: 500 GB table, query scans 500 GB -> $2.50
-- Parquet version: same data compressed to 50 GB,
--   query reads only 2 columns -> scans ~2 GB -> $0.01

-- Verify table format in Glue Catalogue
SHOW CREATE TABLE my_db.curated_sales;

Федеративные запросы с коннекторами источников данных

Федеративные запросы Athena расширяют возможности Athena за пределы S3: Вы можете запрашивать данные в RDS, DynamoDB, Redshift, Elasticsearch и пользовательских источниках с помощью работающих на Lambda коннекторов источников данных. Разверните функцию-коннектор Lambda из Serverless Application Repository, зарегистрируйте её как источник данных Athena, а затем выполняйте запросы одновременно к таблицам S3 и рабочим базам данных с помощью одного SQL JOIN — без предварительного перемещения данных.

-- Federated query: join S3 Parquet with live RDS table
SELECT s.order_id, s.total, c.email
FROM my_db.curated_sales s
JOIN rds_lambda.prod_db.customers c
  ON s.customer_id = c.id
WHERE s.year = '2024' AND s.month = '01';

Интеграция Athena и QuickSight

Amazon QuickSight напрямую подключается к Athena как к источнику данных и позволяет бизнес-аналитикам создавать интерактивные панели на основе данных из S3 без промежуточной базы данных. QuickSight использует SPICE (Super-fast, Parallel, In-memory Calculation Engine) для кэширования результатов запросов Athena и ускорения отображения панелей. Этот бессерверный стек BI (S3 + Glue + Athena + QuickSight) часто встречается в экзаменационных вопросах об экономичной аналитике.

Оптимизация производительности запросов Athena

Помимо разделения и колоночного формата, дополнительно оптимизируйте запросы Athena следующим образом: разделяйте большие файлы (для параллельной обработки рекомендуется размер от 128 МБ до 1 ГБ на файл), используйте бакетирование для столбцов, по которым часто выполняется соединение, избегайте SELECT * и применяйте приближённые агрегатные функции, такие как approx_distinct() и approx_percentile(), когда точные значения не требуются. Эти методы снижают и расходы, и задержку.

-- Use approx_distinct for fast cardinality estimate
SELECT
  year,
  approx_distinct(customer_id) AS approx_unique_customers
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year;

Управление доступом к Athena

Athena интегрируется с IAM для управления доступом: пользователям нужны разрешения на выполнение запросов Athena (athena:StartQueryExecution), доступ к выходному хранилищу S3 и чтение исходных данных в S3. Для детального управления доступом к столбцам и строкам объедините Athena с Lake Formation. Также можно ограничить рабочую группу определёнными базами данных с помощью ключей условий IAM для ARN рабочей группы.

# Minimum IAM policy for an Athena analyst
{
  "Effect": "Allow",
  "Action": [
    "athena:StartQueryExecution",
    "athena:GetQueryExecution",
    "athena:GetQueryResults",
    "athena:StopQueryExecution",
    "glue:GetDatabase",
    "glue:GetTable",
    "glue:GetPartitions",
    "s3:GetObject",
    "s3:PutObject"
  ],
  "Resource": "*"
}

Сохранение результатов запросов и запланированные запросы

Результаты запросов Athena хранятся в S3 в виде файлов CSV и кэшируются на 7 дней, поэтому повторный запуск идентичного запроса в течение этого периода не сканирует данные заново. Для регулярной отчётности используйте запланированные запросы Athena, чтобы выполнять запрос по расписанию cron и сохранять результаты в новом расположении S3 или непосредственно в таблице. Другой вариант — запускать запрос Athena из конечного автомата Step Functions или правила EventBridge.

# Start an Athena query via CLI and retrieve results
QUERY_ID=$(aws athena start-query-execution \
  --query-string 'SELECT COUNT(*) FROM my_db.curated_sales WHERE year=2024' \
  --work-group analytics-team \
  --query 'QueryExecutionId' --output text)

# Wait and fetch results
aws athena get-query-results --query-execution-id $QUERY_ID

Athena и Redshift: выбор подходящего инструмента

Для экзамена SAA-C03 важно знать, когда рекомендовать Athena, а когда Redshift. Выбирайте Athena для нерегулярных запросов по требованию к данным в S3, если не требуется управлять инфраструктурой. Выбирайте Redshift, когда необходимы ответы менее чем за секунду для сложных соединений, выделенная команда аналитики выполняет сотни одновременных запросов или Вы хотите использовать Redshift Spectrum для расширения хранилища данных данными из S3. Главный критерий — частота и сложность запросов.

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили концепции AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что Athena взимает плату за каждый просканированный ТБ, поэтому отсечение разделов и формат Parquet необходимы для контроля расходов, федеративные запросы Athena расширяют SQL на источники данных, отличные от S3, с помощью коннекторов Lambda, а Athena лучше всего подходит для запросов по требованию, тогда как Redshift — для аналитики с высокой параллельностью. Далее мы рассмотрим Kinesis для потоковой передачи и аналитики данных в реальном времени.

Часто задаваемые вопросы

Урок «Amazon Athena: бессерверный SQL в S3» бесплатный?

Да — полный текст урока «Amazon Athena: бессерверный SQL в S3» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Amazon Athena: бессерверный SQL в S3»?

Запрашивайте данные S3 непосредственно в Athena с помощью стандартного SQL, оптимизируйте их с помощью колоночных форматов, таких как Parquet и ORC, и используйте разделение для контроля затрат. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Amazon Athena: бессерверный SQL в S3»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание озера данных на S3
  2. AWS Glue: ETL и каталог данных
  3. Amazon Athena: бессерверный SQL в S3
  4. Потоки Kinesis, Firehose и аналитика в реальном времени
← Назад к AWS Solutions Architect