Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3
ค้นข้อมูล S3 โดยตรงด้วย SQL มาตรฐานใน Athena เพิ่มประสิทธิภาพด้วยรูปแบบข้อมูลแบบคอลัมน์ เช่น Parquet และ ORC และแบ่งพาร์ทิชันเพื่อควบคุมต้นทุน
Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3 เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
Amazon Athena คืออะไร
Amazon Athena คือบริการเรียกใช้คำสั่งค้นหาแบบโต้ตอบและไร้เซิร์ฟเวอร์ ซึ่งช่วยให้คุณเรียกใช้ SQL มาตรฐานกับข้อมูลที่จัดเก็บอยู่ใน Amazon S3 ได้โดยตรง คุณไม่ต้องจัดเตรียมเซิร์ฟเวอร์หรือจัดการคลัสเตอร์ และ จะจ่ายเฉพาะข้อมูลที่สแกนต่อคำสั่งค้นหาเท่านั้น (ประมาณ 5 ดอลลาร์สหรัฐต่อข้อมูลที่สแกน 1 TB) Athena ใช้ Presto อยู่เบื้องหลัง และผสานการทำงานกับ Glue Data Catalogue เพื่อจัดการข้อมูลเมตาของตารางได้โดยตรง
การตั้งค่า Athena: กลุ่มงานและตำแหน่งเอาต์พุต
ก่อนเรียกใช้คำสั่งค้นหา ให้กำหนดค่า Athena Workgroup และระบุเส้นทาง S3 สำหรับเอาต์พุตผลลัพธ์ของคำสั่งค้นหา Workgroups ช่วยแยกประวัติการค้นหาและการติดตามค่าใช้จ่ายระหว่างทีม บังคับใช้การเข้ารหัสผลลัพธ์ และกำหนดขีดจำกัดการสแกนข้อมูลต่อคำสั่งค้นหาเพื่อป้องกันค่าใช้จ่ายที่พุ่งสูงเกินควบคุม ผลลัพธ์ของแต่ละคำสั่งค้นหาจะถูกเขียนเป็น 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 คิดค่าบริการตามข้อมูลที่สแกนเป็น TB วิธีลดค่าใช้จ่ายที่มีผลมากที่สุดคือ การตัดพาร์ทิชันที่ไม่จำเป็น: ให้ระบุคอลัมน์พาร์ทิชันในส่วนคำสั่ง 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 จะมีขนาดเล็กกว่า CSV ที่เทียบเท่ากัน 5–10 เท่า จึงช่วยเพิ่มการประหยัดค่าใช้จ่ายได้มากยิ่งขึ้น
-- 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 Federated Query ขยายความสามารถของ 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 (เครื่องมือคำนวณในหน่วยความจำแบบขนานความเร็วสูง) เพื่อแคชผลลัพธ์คำสั่งค้นหาของ Athena ทำให้แสดงผลแดชบอร์ดได้อย่างรวดเร็ว ชุดเครื่องมือ BI แบบไร้เซิร์ฟเวอร์นี้ (S3 + Glue + Athena + QuickSight) เป็นรูปแบบที่มักพบในข้อสอบสำหรับการวิเคราะห์ข้อมูลที่คุ้มค่าใช้จ่าย
การปรับแต่งประสิทธิภาพคำสั่งค้นหา Athena
นอกเหนือจากการแบ่งพาร์ทิชันและรูปแบบข้อมูลแบบคอลัมน์แล้ว คุณยังปรับแต่งคำสั่งค้นหา Athena เพิ่มเติมได้โดย: แบ่งไฟล์ขนาดใหญ่ (ควรมีขนาดไฟล์ละ 128 MB–1 GB เพื่อให้ประมวลผลแบบขนานได้), ใช้ การแบ่งข้อมูลเป็นบักเก็ตกับคอลัมน์ที่นำมา JOIN บ่อย ๆ หลีกเลี่ยง 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 นอกจากนี้ คุณยังจำกัด Workgroup ให้ใช้ได้เฉพาะฐานข้อมูลที่กำหนด โดยใช้คีย์เงื่อนไข IAM กับ ARN ของ Workgroup ได้
# 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 จะถูกจัดเก็บเป็นไฟล์ CSV ใน S3 และแคชไว้นาน 7 วัน ดังนั้นการเรียกใช้คำสั่งค้นหาเดิมซ้ำภายในช่วงเวลาดังกล่าวจะไม่สแกนข้อมูลใหม่ สำหรับความต้องการรายงานที่เกิดซ้ำ ให้ใช้ Athena Scheduled Queries เพื่อเรียกใช้คำสั่งค้นหาตามกำหนดเวลาแบบ 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_IDAthena เทียบกับ Redshift: เลือกเครื่องมือที่เหมาะสม
สำหรับข้อสอบ SAA-C03 คุณควรทราบว่าเมื่อใดควรแนะนำ Athena หรือ Redshift ให้เลือก Athena สำหรับคำสั่งค้นหาเฉพาะกิจที่เกิดขึ้นไม่บ่อยบน S3 โดยไม่ต้องจัดการโครงสร้างพื้นฐาน ให้เลือก Redshift เมื่อต้องการเวลาตอบสนองต่ำกว่าหนึ่งวินาทีสำหรับการ JOIN ที่ซับซ้อน มีทีมวิเคราะห์ข้อมูลโดยเฉพาะที่เรียกใช้คำสั่งค้นหาพร้อมกันหลายร้อยรายการ หรือต้องการใช้ Redshift Spectrum เพื่อขยายคลังข้อมูลด้วยข้อมูลจาก S3 สัญญาณสำคัญคือ ความถี่และความซับซ้อนของคำสั่งค้นหา
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Athena คิดค่าบริการตาม TB ที่สแกน ดังนั้นการตัดพาร์ทิชันที่ไม่จำเป็นและรูปแบบ Parquet จึงเป็นวิธีสำคัญในการควบคุมค่าใช้จ่าย, Athena Federated Query ขยาย SQL ไปยังแหล่งข้อมูลที่ไม่ใช่ S3 ผ่านตัวเชื่อมต่อ Lambda และ Athena เหมาะที่สุดสำหรับคำสั่งค้นหาเฉพาะกิจ ขณะที่ Redshift เหมาะกับการวิเคราะห์ข้อมูลที่มีคำสั่งค้นหาพร้อมกันจำนวนมาก บทถัดไป เราจะสำรวจ Kinesis สำหรับการสตรีมและวิเคราะห์ข้อมูลแบบเรียลไทม์
คำถามที่พบบ่อย
บทเรียน “Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3”
ค้นข้อมูล S3 โดยตรงด้วย SQL มาตรฐานใน Athena เพิ่มประสิทธิภาพด้วยรูปแบบข้อมูลแบบคอลัมน์ เช่น Parquet และ ORC และแบ่งพาร์ทิชันเพื่อควบคุมต้นทุน คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างดาต้าเลคบน S3
- AWS Glue: ETL และแค็ตตาล็อกข้อมูล
- Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3
- Kinesis Streams, Firehose และการวิเคราะห์แบบเรียลไทม์