Thursday, November 21, 2024

[AWS] Amazon Athena

-

Amazon Athena

Athena là một dịch vụ truy vấn dữ liệu serverless của AWS, được sử dụng để phân tích và truy vấn dữ liệu được lưu trữ trên Amazon S3. Với Athena, người dùng có thể sử dụng ngôn ngữ SQL tiêu chuẩn để truy vấn dữ liệu trong các file CSV, JSON, ORC, Avro và Parquet.

Một ưu điểm của Athena là nó hoàn toàn serverless, điều này có nghĩa là không cần phải quản lý máy chủ hay cấu hình hạ tầng. Athena sử dụng công nghệ Presto để truy vấn dữ liệu, cho phép nó xử lý hàng triệu dòng dữ liệu một cách nhanh chóng và hiệu quả.

Điểm cộng của Athena đó là giá cả hợp lý. Athena tính phí dựa trên số lượng dữ liệu quét, với giá $5,00 mỗi TB dữ liệu quét. Điều này có nghĩa là nếu bạn chỉ quét một phần nhỏ của dữ liệu, bạn sẽ chỉ phải trả một khoản phí nhỏ.

Athena thường được sử dụng cùng với Amazon Quicksight để tạo các báo cáo và bảng điều khiển, nhưng nó cũng có thể được sử dụng cho các mục đích khác như phân tích kinh doanh, phân tích dữ liệu, truy vấn các file nhật ký của VPC, ELB,   và nhiều hơn nữa.

Điểm cộng cuối cùng của Athena đó là việc sử dụng nó là một trong những điểm tập trung quan trọng trong kỳ thi AWS. Kỳ thi AWS có thể hỏi về việc sử dụng Athena để phân tích và truy vấn dữ liệu trong Amazon S3. Do đó, việc nắm vững Athena là rất quan trọng cho việc thi chứng chỉ AWS.

Amazon Athena – Performance Improvement

Cột dữ liệu là một cách để lưu trữ dữ liệu trong các bảng có nhiều cột và hàng, trong đó mỗi cột sẽ chứa các giá trị của một loại dữ liệu khác nhau, chẳng hạn như các số nguyên, chuỗi hoặc dấu thập phân. Sử dụng cột dữ liệu có thể mang lại lợi ích về hiệu suất và chi phí khi lưu trữ và truy vấn dữ liệu.

Các công nghệ lưu trữ cột dữ liệu như Apache Parquet hoặc ORC được khuyến nghị vì chúng có khả năng nén tốt và cho phép truy cập hiệu quả vào dữ liệu bằng cách đọc một phần của file. Điều này giúp tối ưu hóa tốc độ truy vấn và giảm chi phí cho việc quét dữ liệu.

Sử dụng AWS Glue là một cách tiện lợi để chuyển đổi dữ liệu thành định dạng Parquet hoặc ORC. Ngoài ra, việc nén dữ liệu bằng các thuật toán như bzip2, gzip, lz4, snappy, zlip, zstd… cũng giúp giảm kích thước của dữ liệu lưu trữ trên S3, giúp giảm chi phí lưu trữ.

Partitioning là một cách tiện lợi để tổ chức dữ liệu trong S3 và tạo ra các bảng ảo để truy vấn dữ liệu trên các cột ảo. Khi sử dụng partitioning, dữ liệu sẽ được lưu trữ trong các thư mục con được đặt tên theo giá trị của cột. Ví dụ, sử dụng đường dẫn s3://athena-examples/flight/parquet/year=1991/month=1/day=1/ cho phép truy vấn các giá trị dữ liệu trong cột year, month và day một cách hiệu quả.

Cuối cùng, sử dụng các file lớn hơn 128 MB cũng giúp tối ưu hóa tốc độ truy vấn và giảm chi phí đọc dữ liệu. Vì vậy, nên tối ưu hóa kích thước của file bằng cách sử dụng các công nghệ nén và partitioning để tăng hiệu suất và giảm chi phí khi truy vấn dữ liệu.

Athena Hands On

Vào Amazon S3 › Create bucket, đặt tên cho bucket là stephane-demo-athena-eu-central-1 và bấm Create bucket.

Thông báo “Successfully created bucket “stephane-demo-athena-eu-central-1″” cho biết bạn đã tạo bucket thành công, copy tên bucket và vào Amazon Athena › Query editor › Manage settings, dán tên bucket vào Location of query result và bấm Save.

Bạn sẽ có thông tin như dưới, hãy bấm vào Editor.

Chúng ta sẽ có 1 số thông tin có sẵn như dưới.

Phần LOCATION 's3://target-bucket-name/prefix/'; hãy thay thế bằng đường dẫn s3 lưu log của bạn vào LOCATION 's3://demo-s3-access-logs-stephane-2020/s3-logs/';

Đây là nội dung đầy đủ của đoạn Querry.

create database s3_access_logs_db;

CREATE EXTERNAL TABLE IF NOT EXISTS s3_access_logs_db.mybucket_logs(
         BucketOwner STRING,
         Bucket STRING,
         RequestDateTime STRING,
         RemoteIP STRING,
         Requester STRING,
         RequestID STRING,
         Operation STRING,
         Key STRING,
         RequestURI_operation STRING,
         RequestURI_key STRING,
         RequestURI_httpProtoversion STRING,
         HTTPstatus STRING,
         ErrorCode STRING,
         BytesSent BIGINT,
         ObjectSize BIGINT,
         TotalTime STRING,
         TurnAroundTime STRING,
         Referrer STRING,
         UserAgent STRING,
         VersionId STRING,
         HostId STRING,
         SigV STRING,
         CipherSuite STRING,
         AuthType STRING,
         EndPoint STRING,
         TLSVersion STRING
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
         'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$' )
LOCATION 's3://demo-s3-access-logs-stephane-2020/s3-logs/';


SELECT requesturi_operation, httpstatus, count(*) FROM "s3_access_logs_db"."mybucket_logs" 
GROUP BY requesturi_operation, httpstatus;

SELECT * FROM "s3_access_logs_db"."mybucket_logs"
where httpstatus='403';

Có thể bạn thắc mắc đoạn Querry này từ đâu mà có, thì đơn gian bạn vào google tìm kiếm với từ khoá athena s3 access logs, với kết quả tìm kiếm của mình thì mình chọn vào link đầu tiên.

Hãy kéo xuống dưới và bạn sẽ thấy đầy đủ đoạn Querry này.

Bây giờ mình sẽ chạy câu querry đầu tiên để tạo 1 database có tên s3_access_logs_db.

Bấm vào Run để khởi chạy, nếu kế quả trả về là Query successful tức là chạy thành công và không có lỗi nào xảy ra.

Bây giờ chúng ta đã có 1 bảng có tên là mybucket_logs.

Bạn có thể bấm vào Preview Table

Bạn có thể thực hiện 1 querry vào bảng mybucket_logs để xem kết quả.

Kết quả nằm ở phần Results.

Bạn cũng thể thử 1 câu lệnh truy vấn khác, ví dụ :

SELECT requesturi_operation, httpstatus, count(*) FROM "s3_access_logs_db"."mybucket_logs" 
GROUP BY requesturi_operation, httpstatus;

Kết quả.

Hoặc tìm kiếm các truy vấn có mã lỗi 403.

SELECT * FROM "s3_access_logs_db"."mybucket_logs"
where httpstatus='403';

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories