Amazon Athena: Serverløs SQL på S3
Forespørg direkte i S3-data med standard-SQL i Athena, optimér med kolonnebaserede formater som Parquet og ORC, og brug partitioner til omkostningsstyring
Amazon Athena: Serverløs SQL på S3 er en gratis AWS Solutions Architect-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i AWS Solutions Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Hvad er Amazon Athena?
Amazon Athena er en serverløs, interaktiv forespørgselstjeneste, der lader dig køre standard-SQL direkte mod data, som er gemt i Amazon S3. Du skal ikke klargøre servere eller administrere klynger, og du betaler kun for de data, der scannes pr. forespørgsel (ca. 5 USD pr. scannet TB). Athena bruger Presto under motorhjelmen og integreres direkte med Glue Data Catalogue til metadata om tabeller.
Konfiguration af Athena: arbejdsgrupper og outputplacering
Før du kører forespørgsler, skal du konfigurere en Athena Workgroup og angive en S3-sti til outputtet fra forespørgslerne. Arbejdsgrupper lader dig adskille forespørgselshistorik og omkostningssporing mellem teams, håndhæve kryptering af resultater og angive grænser for datascanning pr. forespørgsel for at forhindre løbske omkostninger. Resultatet af hver forespørgsel skrives som en CSV-fil til den konfigurerede S3-outputbucket.
# 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
}'Kør din første forespørgsel
Forbind Athena med en Glue Data Catalogue-database, og kør ANSI SQL. Athena understøtter SELECT, JOIN, GROUP BY, vinduesfunktioner og CTE'er. Du kan også bruge CREATE TABLE AS SELECT (CTAS) til at gemme resultaterne af en forespørgsel som en ny tabel i Parquet-format, hvilket effektivt materialiserer mellemresultater, så efterfølgende forespørgsler kan køre hurtigere.
-- 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;Omkostningsoptimering: beskæring af partitioner
Athena opkræver betaling pr. TB scannede data. Den mest effektive måde at reducere omkostningerne på er beskæring af partitioner: Medtag altid partitionskolonner i din WHERE-betingelse. Hvis data er partitioneret efter year/month/day, forhindrer filtrering på disse kolonner Athena i at scanne andre partitioner. Uden et partitionsfilter på en tabel i petabyte-størrelse kan en simpel forespørgsel koste hundredvis af dollar.
-- 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';Omkostningsoptimering: kolonneformat
Hvis du gemmer data i Apache Parquet eller ORC i stedet for CSV eller JSON, reducerer du drastisk mængden af data, som Athena scanner pr. forespørgsel. En kolonnebaseret forespørgsel, der bruger 3 ud af 50 kolonner, scanner kun dataene fra disse 3 kolonner på disken. Sammen med indbygget komprimering (Snappy, Zstd) er Parquet-filer typisk 5-10 gange mindre end tilsvarende CSV-filer, hvilket mangedobler besparelserne.
-- 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;Fødererede forespørgsler med datakildeforbindelser
Athena Federated Query udvider Athena ud over S3, så du kan forespørge data i RDS, DynamoDB, Redshift, Elasticsearch og brugerdefinerede kilder ved hjælp af Lambda-baserede datakildeforbindelser. Du implementerer en forbindelses-Lambda-funktion fra Serverless Application Repository, registrerer den som en Athena-datakilde og kan derefter forespørge S3-tabeller og aktive databaser på tværs af en enkelt SQL JOIN — uden først at flytte data.
-- 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';Integration mellem Athena og QuickSight
Amazon QuickSight opretter direkte forbindelse til Athena som datakilde, så forretningsanalytikere kan opbygge interaktive dashboards ud fra S3-data uden en mellemliggende database. QuickSight bruger SPICE (Super-fast, Parallel, In-memory Calculation Engine) til at cache resultaterne af Athena-forespørgsler, så dashboards kan vises hurtigt. Denne serverløse BI-stack (S3 + Glue + Athena + QuickSight) er et almindeligt eksamensmønster til omkostningseffektiv analyse.
Optimering af Athenas forespørgselsydeevne
Ud over partitionering og kolonneformat kan du optimere Athena-forespørgsler yderligere ved at: opdele store filer (sigt efter 128 MB-1 GB pr. fil for parallel behandling), bruge bucket-opdeling til kolonner, der ofte sammenføjes, undgå SELECT * og bruge omtrentlige aggregatfunktioner som approx_distinct() og approx_percentile(), når nøjagtige værdier ikke er nødvendige. Disse teknikker reducerer både omkostninger og svartid.
-- 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;Styring af adgang til Athena
Athena integreres med IAM til adgangskontrol: Brugere skal have tilladelse til at køre Athena-forespørgsler (athena:StartQueryExecution), få adgang til S3-outputbucket'en og læse de underliggende S3-data. Hvis du har brug for detaljeret adgang på kolonne- og rækkeniveau, kan du kombinere Athena med Lake Formation. Du kan også begrænse en arbejdsgruppe til bestemte databaser ved hjælp af IAM-betingelsesnøgler på arbejdsgruppens 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": "*"
}Lagring af forespørgselsresultater og planlagte forespørgsler
Resultaterne af Athena-forespørgsler gemmes som CSV-filer i S3 og caches i 7 dage, så en identisk forespørgsel, der køres igen i dette tidsrum, ikke scanner dataene på ny. Til tilbagevendende rapportering kan du bruge Athena Scheduled Queries til at køre en forespørgsel efter en cron-plan og gemme resultaterne på en ny S3-placering eller direkte i en tabel. Alternativt kan du udløse en Athena-forespørgsel fra en Step Functions-tilstandsmaskine eller en EventBridge-regel.
# 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 eller Redshift: Vælg det rette værktøj
Til SAA-C03-eksamen skal du vide, hvornår du bør anbefale Athena frem for Redshift. Vælg Athena til ad hoc-forespørgsler, der køres sjældent, på S3 uden infrastruktur, der skal administreres. Vælg Redshift, når du har brug for svartider under ét sekund på komplekse sammenføjninger, har et dedikeret analyseteam, der kører hundredvis af samtidige forespørgsler, eller vil bruge Redshift Spectrum til at udvide et datalager med S3-data. Det afgørende tegn er forespørgslernes hyppighed og kompleksitet.
Hurtigt tjek
Test din forståelse af AWS Solutions Architect (SAA-C03)-koncepterne fra denne lektion.
Opsummering af lektionen
I denne lektion lærte du, at Athena opkræver betaling pr. scannet TB, så beskæring af partitioner og Parquet-format er afgørende omkostningskontroller, at Athena Federated Query udvider SQL til datakilder, der ikke er S3, via Lambda-forbindelser, og at Athena er bedst til ad hoc-forespørgsler, mens Redshift egner sig til analyse med høj samtidighed. Dernæst ser vi nærmere på Kinesis til realtidsstreaming af data og analyse.
Lær AWS Solutions Architect med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Amazon Athena: Serverløs SQL på S3” gratis?
Ja — alle 3 lektioner i læringssporet AWS Solutions Architect, inklusive “Amazon Athena: Serverløs SQL på S3”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Amazon Athena: Serverløs SQL på S3”?
Forespørg direkte i S3-data med standard-SQL i Athena, optimér med kolonnebaserede formater som Parquet og ORC, og brug partitioner til omkostningsstyring Du øver dig i AWS Solutions Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på AWS Solutions Architect?
Der kræves ingen tidligere erfaring. AWS Solutions Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Amazon Athena: Serverløs SQL på S3”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne AWS Solutions Architect-lektion?
Ja. Alle AWS Solutions Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Opbygning af en datasø på S3
- AWS Glue: ETL og datakatalog
- Amazon Athena: Serverløs SQL på S3
- Kinesis Streams, Firehose og analyse i realtid