Skip to content

Giới thiệu Amazon Athena

Amazon Athena là một dịch vụ Serverless Query cho phép bạn phân tích dữ liệu trực tiếp trên Amazon S3 bằng SQL chuẩn (ANSI SQL). Với Athena, bạn không cần phải dựng hạ tầng Database hay ETL phức tạp - chỉ cần chỉ ra dữ liệu nằm ở đâu và bắt đầu truy vấn.

Đặc điểm chính

  • Serverless: Không cần quản lý hạ tầng, không có server để vận hành.
  • SQL-based: Sử dụng Presto (một open-source distributed SQL engine).
  • Kết nối S3: Athena truy vấn trực tiếp dữ liệu lưu trong S3.
  • Pay-per-query: Trả phí dựa trên lượng dữ liệu được scan trong mỗi truy vấn.
    • $5.00/TB data scanned.
  • Tích hợp AWS Glue: Có thể tận dụng Glue Data Catalog để quản lý schema & metadata.

Dữ liệu hỗ trợ

Athena có thể đọc được nhiều định dạng dữ liệu phổ biến:

  • CSV, TSV
  • JSON
  • Parquet, ORC, Avro (định dạng cột, hiệu quả cao)
  • Log files (CloudFront, ELB, VPC logs, CloudTrail, …)

Cách hoạt động

  1. Lưu dữ liệu trên S3 (có thể là log, event, dataset…).
  2. Định nghĩa schema trong Glue Data Catalog hoặc trực tiếp trong Athena.
  3. Chạy truy vấn SQL trên Athena.
  4. Athena sẽ scan dữ liệu trên S3 và trả kết quả trong vài giây.

Use Cases

  • Phân tích log: CloudTrail, VPC Flow Logs, CloudFront logs.
  • Data Lake Analytics: Truy vấn dữ liệu raw trong S3 Data Lake.
  • Ad-hoc queries: Nhanh chóng chạy các câu lệnh SQL để khám phá dữ liệu.
  • Kết hợp với BI tools: Kết nối Athena với Amazon QuickSight hoặc Tableau để trực quan hóa dữ liệu.

Cách setup Athena

1. Chuẩn bị dữ liệu

  • Raw Data sẽ được lưu trữ trên một S3 Bucket
  • Đảm bảo IAM/Role có quyền Read với Bucket này

2. Config nơi lưu kết quả Query

  • Tạo một Bucket S3 để lưu kết quả của Query
  • Ví dụ: s3://my-athena-query-results/

3. Cấu hình Data Catalog

Athena cần biết schema của dữ liệu, từ đó có thể query dữ liệu một cách dễ dàng.

Schema hiểu một cách đơn giản là một bản thiết kế, mô tả cấu trúc dữ liệu.

Có 2 cách để tạo: Tạo bằng thủ công SQL hoặc AWS Glue Crawler

4. Kiểm tra dữ liệu

Ví dụ: Truy vấn log CloudFront để lấy số lượng request theo IP:

SELECT client_ip, COUNT(*) as request_count
FROM cloudfront_logs
WHERE date BETWEEN '2025-01-01' AND '2025-01-31'
GROUP BY client_ip
ORDER BY request_count DESC
LIMIT 10;