Amazon Athena
Amazon Athena
Interaktywne zapytania SQL na danych w S3 - bez serwera, bez infrastruktury. Analizuj logi, CSV, JSON, Parquet i ORC platac tylko za przeskanowane dane.
Amazon Athena to serverless serwis do interaktywnych zapytan SQL na danych przechowywanych w Amazon S3. Nie musisz konfigurowac serwerow, klastrow ani ladowac danych do bazy - wskazujesz bucket S3, definiujesz schemat tabeli i odpytujesz dane standardowym SQL-em (silnik Presto/Trino).
Athena obsluguje popularne formaty danych: CSV, JSON, Parquet, ORC, Avro i inne. Integruje sie z AWS Glue Data Catalog jako centralnym repozytorium metadanych. Placisz wylacznie za ilosc danych przeskanowanych przez zapytanie - bez oplat za bezczynnosc.
Athena bazuje na silniku Trino (dawniej PrestoSQL), ktory powstal w Facebooku do analizy petabajtow danych. Zapytania, ktore napiszes w Athena, zadzialalyby rowniez na samodzielnym klastrze Trino - to ten sam SQL!
Zlota zasada Athena: (1) Konwertuj CSV do Parquet za pomoca CTAS, (2) partycjonuj po dacie (year/month/day), (3) uzywaj projekcji kolumn (SELECT col1,col2 zamiast SELECT *). Te trzy kroki redukuja koszty o 90%+ i przyspieszaja zapytania 10-100x. Dla powtarzalnych zapytan rozwaz Redshift Serverless - przy regularnym uzyciu moze byc tanszy niz Athena.
Athena pricing ($5/TB scanned) moze zaskoczyc przy duzych zbiorach danych. Zawsze konwertuj dane do Parquet/ORC (kolumnowe) i uzywaj partycjonowania - to moze zredukowac koszty o 90-99%. Pelny skan 1TB CSV kosztuje $5, ale te same dane w Parquet z partycjami moga skanowac tylko 10GB = $0.05.
Athena to serverless query engine, ktory pozwala analizowac dane w S3 za pomoca standardowego SQL bez potrzeby ladowania danych do bazy danych. Platisz tylko za ilosc przeskanowanych danych ($5/TB). Athena uzywa Presto/Trino pod spodem i obsluguje formaty CSV, JSON, Parquet, ORC, Avro i wiele innych.
Konfiguracja zrodla danych w S3
Dane do analizy przechowujesz w S3 w zorganizowanej strukturze folderow. Optymalny uklad to partycjonowanie po najczesciej filtrowanych kolumnach: s3://bucket/data/year=2024/month=03/day=15/. Formaty kolumnowe (Parquet, ORC) sa 3-10x tansze niz CSV/JSON, bo Athena skanuje tylko potrzebne kolumny. Kompresja (GZIP, Snappy, ZSTD) dodatkowo redukuje skanowane dane i koszty.
Tworzenie bazy danych i tabel (DDL)
Definicje tabel (schema) sa przechowywane w AWS Glue Data Catalog. CREATE EXTERNAL TABLE wskazuje na lokalizacje S3, definiuje kolumny, format danych i partycje. Tabele sa "external" - Athena nie kopiuje danych, tylko czyta je z S3 w momencie zapytania. Mozesz tworzyc tabele recznie (CREATE TABLE) lub automatycznie przez Glue Crawler, ktory skanuje S3 i wykrywa schemat.
Partycjonowanie danych
Partycje to sposob na ograniczenie ilosci skanowanych danych. Bez partycji Athena skanuje caly dataset przy kazdym zapytaniu. Z partycjami po dacie, zapytanie WHERE year=2024 AND month=03 skanuje tylko dane z marca 2024 - oszczednosc nawet 95%. Partycje moga byc: Hive-style (year=2024/month=03 w sciezce S3) lub projection-based (generowane dynamicznie przez Athena bez potrzeby MSCK REPAIR).
Pisanie zapytan SQL
Athena obsluguje ANSI SQL z rozszerzeniami Presto/Trino: window functions (RANK, LAG, LEAD), arrays i maps, UNNEST do rozwijania zagniezdzen, APPROX_DISTINCT dla szybkiego count distinct, regularne wyrazenia (REGEXP_LIKE). Wyniki zapytan sa zapisywane w S3 (domyslnie w formacie CSV). Zapytanie na 1 TB danych w Parquet z partycjami typowo trwa 5-30 sekund.
Zapisywanie Named Queries
Named Queries (Saved Queries) pozwalaja zapisac czesto uzywane zapytania z nazwa i opisem. Mozesz je udostepniac w ramach Workgroup i wywolywac przez API/CLI (StartQueryExecution z QueryString lub NamedQueryId). W polaczeniu z parameterized queries mozesz tworzyc reuzywalne szablony z placeholderami, ktore sa bezpieczne przed SQL injection.
Workgroups - kontrola dostepu i kosztow
Workgroups izoluja uzytkownikow, zapytania i koszty. Kazdy Workgroup ma: wlasna lokalizacje wynikow w S3, limit kosztu zapytan (np. max 100 MB skanowania), limit calkowity (np. max 1 TB/dzien), ustawienia szyfrowania wynikow. Typowy setup: osobne Workgroups dla dev, staging, prod i osobny dla analitykow z nizszym limitem skanowania. Metryki zuzycia sa widoczne per Workgroup.
Praktyczne techniki optymalizacji kosztow i wydajnosci Athena - od formatow danych po zaawansowane wzorce zapytan na data lake.
Partycjonuj po dacie - oszczednosc do 95%
Partycjonowanie to najwazniejsza optymalizacja w Athena. Dane logow z calego roku (365 partycji dziennych): zapytanie za ostatni tydzien skanuje tylko 7/365 = 2% danych. Uzywaj partition projection zamiast MSCK REPAIR TABLE - projection generuje partycje dynamicznie na podstawie regul (np. zakres dat), bez potrzeby skanowania S3. To eliminuje opoznienia przy dodawaniu nowych partycji.
PoczatkujacyFormaty kolumnowe: Parquet i ORC
CSV/JSON: Athena musi skanowac kazdy bajt pliku. Parquet/ORC: dane sa zorganizowane kolumnowo - zapytanie SELECT user_id, event_type skanuje tylko te 2 kolumny z 50-kolumnowej tabeli (redukcja 96%). Konwertuj dane do Parquet za pomoca CTAS (CREATE TABLE AS SELECT) lub Glue ETL. Dodaj kompresje Snappy (domyslna w Parquet) lub ZSTD (lepszy ratio). Optymalny rozmiar pliku: 128 MB - 512 MB.
PoczatkujacyCTAS do materializowania wynikow
CREATE TABLE AS SELECT (CTAS) zapisuje wynik zapytania jako nowa tabele w S3 w wybranym formacie. Uzycie: przeksztalcenie CSV na Parquet, agregowanie danych do tabeli summary, tworzenie zoptymalizowanych podzapytan. CTAS moze tez dodac partycjonowanie i bucketing. Limit: CTAS tworzy max 100 partycji w jednym zapytaniu - dla wiekszych datasetow uzywaj INSERT INTO z wieloma zapytaniami.
ZaawansowanyAthena Federated Query - zapytania do wielu zrodel
Federated Query pozwala odpytywac dane w DynamoDB, RDS, Redshift, OpenSearch, CloudWatch Logs i wiecej - bezposrednio z Athena SQL. Pod spodem dziala Lambda connector. Mozesz joinowac dane z S3 z danymi z DynamoDB w jednym zapytaniu. Gotowe connectory sa w AWS Serverless Application Repository. Federated Query jest idealny dla ad-hoc analityki, ale dla regularnych raportow lepiej skopiowac dane do S3.
ZaawansowanyWorkgroups do kontroli kosztow
Ustaw per-query limit (np. 1 GB) i dzienny limit (np. 100 GB) na Workgroup. Bez limitow jeden bledny SELECT * FROM huge_table moze przeskanowac terabajty i wygenerowac rachunek w setkach dolarow. Tworz osobne Workgroups: "analysts" z limitem 10 GB/query, "etl" z limitem 500 GB/query, "admin" bez limitu. Monitoruj metryki DataScannedInBytes per Workgroup w CloudWatch.
PoczatkujacyMSCK REPAIR TABLE vs Partition Projection
MSCK REPAIR TABLE skanuje S3, szukajac nowych partycji - przy tysiacach partycji trwa minuty i kosztuje (ListObjects API calls). Partition Projection definiuje reguly generowania partycji (typ: date, range: 2020-01-01 do NOW, interval: 1 day) - Athena generuje partycje dynamicznie bez skanowania S3. Migruj z MSCK na Projection dla tabel z regularnymi partycjami (np. dziennymi logami).
ZaawansowanyScreenshoty z AWS Console
Wkrotce pojawia sie tu zrzuty ekranu pokazujace jak korzystac z Amazon Athena bezposrednio w konsoli AWS.
Do czego sluzy Amazon Athena?
Analiza logow
Odpytuj logi CloudTrail, VPC Flow Logs, ALB Access Logs czy logi aplikacji przechowywane w S3. Idealne do ad-hoc analizy bezpieczenstwa i troubleshootingu.
Eksploracja danych w data lake
Uruchamiaj zapytania SQL na danych w S3 data lake bez koniecznosci ladowania ich do tradycyjnej bazy danych. Obsluguje petabajty danych.
Raportowanie i dashboardy
Lacz Athena z Amazon QuickSight do tworzenia dashboardow biznesowych. Athena odpytuje dane, QuickSight je wizualizuje.
ETL lekkie z CTAS
Uzyj CREATE TABLE AS SELECT (CTAS) do transformacji danych i zapisu wynikow w optymalnym formacie (np. konwersja CSV do Parquet z partycjonowaniem).
Co musisz wiedziec?
Silnik Presto/Trino
Athena korzysta z rozproszonego silnika SQL Trino (dawniej Presto). Obsluguje ANSI SQL, funkcje okienkowe, JOIN-y, podzapytania i wiele formatow danych.
Glue Data Catalog
Centralny katalog metadanych (bazy danych, tabele, schematy). Athena uzywa go do odczytania struktury danych w S3. Mozesz go wypelnic recznie lub przez Glue Crawler.
Partycjonowanie
Organizacja danych w S3 po kluczach (np. rok/miesiac/dzien). Athena skanuje tylko potrzebne partycje, co drastycznie zmniejsza koszty i przyspiesza zapytania.
CTAS (CREATE TABLE AS SELECT)
Zapytanie tworzace nowa tabele z wynikow SELECT. Swietne do konwersji formatow (CSV -> Parquet), partycjonowania danych i materializacji wynikow.
Federated Query
Zapytania do zewnetrznych zrodel danych (DynamoDB, RDS, Redshift, on-premises) za pomoca Lambda connectorow. Jeden SQL laczacy dane z S3 i bazy relacyjnej.
Workgroup
Grupa robocza izolujaca ustawienia, limity kosztow i uprawnienia. Kazdy workgroup moze miec osobny limit danych na zapytanie i dedykowany bucket na wyniki.
Architektura: Serverless Data Lake z Athena i Glue
Architektura data lake, w ktorej surowe dane w S3 sa katalogowane przez Glue, optymalizowane do formatu Parquet i analizowane przez Athena. QuickSight wizualizuje wyniki dla uzytkownikow biznesowych.
Porownanie Athena vs Redshift vs EMR
| Serwis | Model | Setup | Najlepszy dla | Koszt | Wydajnosc | Dane | Concurrent users |
|---|---|---|---|---|---|---|---|
| Athena | Serverless SQL na S3 | Natychmiastowy (0 config) | Ad-hoc queries, logi, eksploracja | $5/TB zeskanowanych danych | Sekundy-minuty | S3 (external) | Ograniczone (DML quota) |
| Redshift | Data warehouse (klaster) | Minuty (Serverless) lub godziny (provisioned) | BI, raporty, powtarzalne zapytania | Od $0.36/godz. (Serverless) | Sekundy (Concurrency Scaling) | Lokalne + Spectrum (S3) | Setki (Concurrency Scaling) |
| EMR | Zarzadzany Hadoop/Spark | Minuty-godziny | ETL, ML, custom Spark jobs | Od $0.015/godz. per node | Zalezy od klastra | S3/HDFS | Zalezy od config |
Ile kosztuje Amazon Athena?
Pay per query
Placisz za ilosc danych przeskanowanych przez zapytanie. Minimum 10 MB na zapytanie.
$5.00 za TB przeskanowanych danych
Oszczednosci z Parquet
Format kolumnowy (Parquet, ORC) skanuje tylko potrzebne kolumny, zmniejszajac koszty nawet 30-90% vs CSV.
Zapytanie na 1 TB CSV = $5.00, to samo na Parquet = ~$0.50
Partycjonowanie
Partycjonowanie danych ogranicza skanowanie do wybranych folderow S3.
Zapytanie o 1 dzien z 365 skanuje ~0.3% danych
Free Tier
DDL (CREATE TABLE, ALTER) i zapytania zakonczone bledem nie sa naliczane. Brak stalych oplat - 0 zapytan = 0 kosztow.
Brak oplat za bezczynnosc!
Przyklady AWS CLI
Uruchom zapytanie SQL
Uruchamia zapytanie SQL na tabeli w Athena
aws athena start-query-execution \
--query-string "SELECT date, count(*) as cnt FROM logi_aplikacji WHERE date = '2024-01-15' GROUP BY date ORDER BY cnt DESC LIMIT 10" \
--query-execution-context Database=moja_baza \
--result-configuration OutputLocation=s3://moj-bucket-athena/wyniki/
Sprawdz status zapytania
Pobiera status wykonania zapytania
aws athena get-query-execution \
--query-execution-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
--query "{Status:Status.State,Skanowano:Statistics.DataScannedInBytes,Czas:Statistics.EngineExecutionTimeInMillis}"
Pobierz wyniki zapytania
Wyswietla wyniki ukonczonego zapytania
aws athena get-query-results \
--query-execution-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
--max-results 20
Utworz named query
Zapisuje zapytanie jako named query do ponownego uzycia
aws athena create-named-query \
--name "Top-strony-dziennie" \
--database moja_baza \
--query-string "SELECT page_url, COUNT(*) as views FROM access_logs WHERE date = current_date GROUP BY page_url ORDER BY views DESC LIMIT 20" \
--description "Top 20 najczesciej odwiedzanych stron dziennie"
Quiz: Amazon Athena
Sprawdz czy dobrze rozumiesz podstawy. Kliknij odpowiedz — feedback pojawi sie od razu.
1. Za co placisz w Amazon Athena?
2. Jak najskuteczniej zmniejszyc koszty zapytan w Athena?
3. Z jakim serwisem AWS Athena integruje sie jako katalog metadanych?
4. Czym sa Federated Queries w Athena?
Czesto uzywane razem z Amazon Athena
Chcesz poznac Amazon Athena w praktyce?
Darmowy kurs "AWS od podstaw" pokazuje jak uzywac Amazon Athena krok po kroku. Teoria + praktyka od zera.