Amazon Athena: bezserwerowy SQL w S3
Odpytywać dane S3 bezpośrednio za pomocą standardowego SQL w Athena, optymalizować je przy użyciu formatów kolumnowych, takich jak Parquet i ORC, oraz partycjonować dane w celu kontrolowania kosztów.
Amazon Athena: bezserwerowy SQL w S3 to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest Amazon Athena?
Amazon Athena to bezserwisowa, interaktywna usługa zapytań, która umożliwia wykonywanie standardowych zapytań SQL bezpośrednio na danych przechowywanych w Amazon S3. Nie trzeba udostępniać serwerów ani zarządzać klastrami, a opłaty są naliczane wyłącznie za ilość danych przeskanowanych przez zapytanie (około 5 USD za 1 TB przeskanowanych danych). Athena korzysta wewnętrznie z Presto i natywnie integruje się z Glue Data Catalogue w zakresie metadanych tabel.
Konfigurowanie Athena: grupy robocze i lokalizacja wyników
Przed uruchomieniem zapytań należy skonfigurować Athena Workgroup i określić ścieżkę S3, w której będą zapisywane wyniki zapytań. Grupy robocze umożliwiają rozdzielenie historii zapytań i śledzenia kosztów między zespołami, wymuszenie szyfrowania wyników oraz ustawienie limitów ilości danych skanowanych przez pojedyncze zapytanie, aby zapobiec niekontrolowanemu wzrostowi kosztów. Wynik każdego zapytania jest zapisywany jako plik CSV w skonfigurowanym zasobniku wyjściowym 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
}'Uruchamianie pierwszego zapytania
Wskaż bazę danych Glue Data Catalogue i uruchom zapytanie ANSI SQL. Athena obsługuje SELECT, JOIN, GROUP BY, funkcje okna oraz CTE. Można także użyć CREATE TABLE AS SELECT (CTAS), aby zapisać wyniki zapytania jako nową tabelę w formacie Parquet, skutecznie materializując wyniki pośrednie i przyspieszając kolejne zapytania.
-- 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;Optymalizacja kosztów: przycinanie partycji
Athena pobiera opłaty za każdy TB przeskanowanych danych. Najskuteczniejszym sposobem ograniczenia kosztów jest przycinanie partycji: zawsze należy uwzględniać kolumny partycji w klauzuli WHERE. Jeśli dane są podzielone na partycje według year/month/day, filtrowanie tych kolumn zapobiega skanowaniu pozostałych partycji przez Athena. Bez filtra partycji w tabeli o rozmiarze petabajtowym proste zapytanie może kosztować setki dolarów.
-- 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';Optymalizacja kosztów: format kolumnowy
Przechowywanie danych w formacie Apache Parquet lub ORC zamiast CSV albo JSON znacznie ogranicza ilość danych skanowanych przez Athena podczas każdego zapytania. Zapytanie kolumnowe, które korzysta z 3 z 50 kolumn, skanuje na dysku dane tylko tych 3 kolumn. W połączeniu z wbudowaną kompresją (Snappy, Zstd) pliki Parquet są zazwyczaj 5–10 razy mniejsze niż odpowiadające im pliki CSV, co dodatkowo zwiększa oszczędności.
-- 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;Zapytania federacyjne za pomocą konektorów źródeł danych
Athena Federated Query rozszerza możliwości Athena poza S3, umożliwiając wykonywanie zapytań dotyczących danych w RDS, DynamoDB, Redshift, Elasticsearch i niestandardowych źródłach za pomocą opartych na Lambda konektorów źródeł danych. Należy wdrożyć funkcję Lambda konektora z Serverless Application Repository, zarejestrować ją jako źródło danych Athena, a następnie wykonywać w jednym zapytaniu SQL JOIN operacje na tabelach S3 i aktywnych bazach danych — bez wcześniejszego przenoszenia danych.
-- 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';Integracja Athena z QuickSight
Amazon QuickSight łączy się bezpośrednio z Athena jako źródłem danych, umożliwiając analitykom biznesowym tworzenie interaktywnych pulpitów na podstawie danych z S3 bez pośredniej bazy danych. QuickSight korzysta z SPICE (Super-fast, Parallel, In-memory Calculation Engine), aby buforować wyniki zapytań Athena i szybko renderować pulpity. Ten bezserwerowy stos BI (S3 + Glue + Athena + QuickSight) jest częstym wzorcem egzaminacyjnym dla opłacalnej analityki.
Dostrajanie wydajności zapytań Athena
Oprócz partycjonowania i formatu kolumnowego można dodatkowo dostrajać zapytania Athena, stosując: dzielenie dużych plików (dla zapewnienia równoległości należy dążyć do rozmiaru 128 MB–1 GB na plik), grupowanie w zasobniki dla często łączonych kolumn, unikanie SELECT * oraz przybliżone funkcje agregujące, takie jak approx_distinct() i approx_percentile(), gdy dokładne wartości nie są wymagane. Techniki te ograniczają zarówno koszty, jak i opóźnienia.
-- 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;Kontrolowanie dostępu do Athena
Athena integruje się z IAM w zakresie kontroli dostępu: użytkownicy potrzebują uprawnień do uruchamiania zapytań Athena (athena:StartQueryExecution), dostępu do zasobnika wyjściowego S3 oraz odczytu bazowych danych S3. Aby zapewnić szczegółową kontrolę dostępu do kolumn i wierszy, należy połączyć Athena z Lake Formation. Można także ograniczyć grupę roboczą do określonych baz danych za pomocą kluczy warunkowych IAM odnoszących się do ARN grupy roboczej.
# 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": "*"
}Zapisywanie wyników zapytań i zapytania zaplanowane
Wyniki zapytań Athena są przechowywane jako pliki CSV w S3 i buforowane przez 7 dni, dzięki czemu ponowne uruchomienie identycznego zapytania w tym okresie nie powoduje ponownego skanowania danych. W przypadku cyklicznych raportów należy użyć Athena Scheduled Queries, aby uruchamiać zapytanie zgodnie z harmonogramem cron i zapisywać wyniki w nowej lokalizacji S3 lub bezpośrednio w tabeli. Alternatywnie można uruchomić zapytanie Athena z poziomu maszyny stanów Step Functions albo reguły 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_IDAthena a Redshift: wybór właściwego narzędzia
Na egzaminie SAA-C03 należy wiedzieć, kiedy zalecić Athena, a kiedy Redshift. Wybierz Athena w przypadku doraźnych, sporadycznych zapytań dotyczących danych w S3, gdy nie chcesz zarządzać infrastrukturą. Wybierz Redshift, gdy potrzebujesz odpowiedzi w czasie krótszym niż sekunda dla złożonych złączeń, masz dedykowany zespół analityczny uruchamiający setki współbieżnych zapytań lub chcesz użyć Redshift Spectrum do rozszerzenia hurtowni danych o dane z S3. Kluczowym kryterium jest częstotliwość i złożoność zapytań.
Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, że: Athena pobiera opłaty za każdy TB przeskanowanych danych, dlatego przycinanie partycji i format Parquet są kluczowymi sposobami kontroli kosztów, Athena Federated Query rozszerza SQL na źródła danych inne niż S3 za pomocą konektorów Lambda, a Athena najlepiej sprawdza się w przypadku zapytań doraźnych, natomiast Redshift jest odpowiedniejszy dla analityki o wysokiej współbieżności. W następnej części omówimy Kinesis do strumieniowania i analityki danych w czasie rzeczywistym.
Często zadawane pytania
Czy lekcja „Amazon Athena: bezserwerowy SQL w S3” jest bezpłatna?
Tak — pełny tekst „Amazon Athena: bezserwerowy SQL w S3” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Amazon Athena: bezserwerowy SQL w S3”?
Odpytywać dane S3 bezpośrednio za pomocą standardowego SQL w Athena, optymalizować je przy użyciu formatów kolumnowych, takich jak Parquet i ORC, oraz partycjonować dane w celu kontrolowania kosztów. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Amazon Athena: bezserwerowy SQL w S3”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Budowanie jeziora danych w S3
- AWS Glue: ETL i katalog danych
- Amazon Athena: bezserwerowy SQL w S3
- Strumienie Kinesis, Firehose i analityka w czasie rzeczywistym