View a markdown version of this page

Tutorial: Menanyakan data Amazon S3 - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial: Menanyakan data Amazon S3

Tutorial ini memandu Anda melalui pengaturan fitur analitik dari awal dan menjalankan kueri analitik pertama Anda terhadap data Parket di Amazon S3. Pada akhirnya, Anda akan memiliki cluster Aurora PostgreSQL DB yang menanyakan data Amazon S3 melalui SQL standar.

Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki yang berikut:

  • AWS Akun dengan izin untuk membuat peran IAM, kluster Amazon RDS, dan titik akhir VPC.

  • AWS CLI diinstal dan dikonfigurasi.

  • VPC dengan setidaknya dua subnet di Availability Zone yang berbeda, grup subnet DB, dan grup keamanan untuk Aurora.

  • File data parket dalam ember Amazon S3. Jika Anda belum memiliki data, Anda dapat mengunggah file sampel (tutorial ini menggunakan contoh kumpulan data pesanan).

Langkah 1: Buat kebijakan dan peran IAM

Buat kebijakan IAM yang memberikan akses baca ekstensi ke bucket Amazon S3 Anda, lalu buat peran dan lampirkan kebijakan tersebut.

Untuk membuat kebijakan IAM:

aws iam create-policy \ --policy-name AuroraAnalyticsReadAccess \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Access", "Effect": "Allow", "Action": ["s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation"], "Resource": ["arn:aws:s3:::your-data-bucket", "arn:aws:s3:::your-data-bucket/*"] } ] }'

Untuk membuat peran IAM dan melampirkan kebijakan:

aws iam create-role \ --role-name AuroraAnalyticsRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }' aws iam attach-role-policy \ --role-name AuroraAnalyticsRole \ --policy-arn arn:aws:iam::<account-id>:policy/AuroraAnalyticsReadAccess

Langkah 2: Buat cluster Aurora PostgreSQL DB

Buat grup parameter cluster DB, lalu buat cluster DB dan instance DB.

Untuk membuat grup parameter dengan fitur diaktifkan:

aws rds create-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-analytics-params \ --db-parameter-group-family aurora-postgresql17 \ --description "Parameter group with aurora_analytics enabled" aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-analytics-params \ --parameters "ParameterName=aurora_analytics.enabled,ParameterValue=true,ApplyMethod=immediate"

Untuk membuat cluster DB:

aws rds create-db-cluster \ --db-cluster-identifier my-analytics-cluster \ --engine aurora-postgresql \ --engine-version 17.11 \ --master-username postgres \ --master-user-password <password> \ --db-cluster-parameter-group-name my-analytics-params \ --db-subnet-group-name <subnet-group> \ --vpc-security-group-ids <security-group-id>

Untuk membuat instance DB:

aws rds create-db-instance \ --db-instance-identifier my-analytics-instance-1 \ --db-cluster-identifier my-analytics-cluster \ --db-instance-class db.r8gd.xlarge \ --engine aurora-postgresql

Tunggu instans DB tersedia:

aws rds wait db-instance-available \ --db-instance-identifier my-analytics-instance-1

Langkah 3: Lampirkan peran IAM ke cluster DB

aws rds add-role-to-db-cluster \ --db-cluster-identifier my-analytics-cluster \ --role-arn arn:aws:iam::<account-id>:role/AuroraAnalyticsRole \ --feature-name AuroraAnalytics

Langkah 4: Siapkan titik akhir VPC gateway Amazon S3

Jika klaster Aurora DB Anda berada di subnet pribadi, buat titik akhir gateway Amazon S3:

aws ec2 create-vpc-endpoint \ --vpc-id <vpc-id> \ --service-name com.amazonaws.<region>.s3 \ --route-table-ids <route-table-id>

Langkah 5: Connect dan instal ekstensi

Connect ke cluster Aurora PostgreSQL DB Anda menggunakan psql:

psql --host=my-analytics-cluster.<region>.rds.amazonaws.com \ --port=5432 --username=postgres --password

Instal ekstensi aurora_analytics:

CREATE EXTENSION aurora_analytics;

Verifikasi instalasi:

SELECT extname, extversion FROM pg_extension WHERE extname = 'aurora_analytics';

Keluaran yang diharapkan

extname | extversion ------------------+------------ aurora_analytics | 1.0

Verifikasi server asing telah dibuat:

SELECT srvname FROM pg_foreign_server WHERE srvname = 'aurora_analytics_server';

Langkah 6: Buat tabel asing

Buat tabel asing yang menunjuk ke data Parket Anda di Amazon S3. Menggunakan tanda kurung kosong () memungkinkan Aurora PostgreSQL secara otomatis menyimpulkan skema dari metadata Parket:

CREATE FOREIGN TABLE ft_orders () SERVER aurora_analytics_server OPTIONS ( location 's3://your-data-bucket/data/orders/', format 'parquet', region 'us-east-1' );

Periksa skema yang disimpulkan:

\d ft_orders

Langkah 7: Jalankan kueri pertama Anda

-- Count all rows SELECT COUNT(*) FROM ft_orders; -- Aggregation with filter SELECT status, COUNT(*) AS order_count, SUM(total_amount) AS total_revenue, AVG(total_amount) AS avg_order_value FROM ft_orders WHERE order_date >= '2024-01-01' GROUP BY status ORDER BY total_revenue DESC;

Langkah 8: Bergabunglah dengan tabel PostgreSQL lokal

Buat tabel lokal dan gabungkan dengan tabel asing Anda:

-- Create a local dimension table CREATE TABLE customer_segments ( customer_id BIGINT PRIMARY KEY, segment TEXT, region TEXT ); INSERT INTO customer_segments VALUES (1, 'VIP', 'US-West'), (2, 'Premium', 'US-East'), (3, 'Regular', 'EU-West'); -- Join local table with S3 data SELECT cs.segment, cs.region, COUNT(*) AS order_count, SUM(o.total_amount) AS total_revenue FROM ft_orders o JOIN customer_segments cs ON o.customer_id = cs.customer_id WHERE o.order_date >= '2024-01-01' GROUP BY cs.segment, cs.region ORDER BY total_revenue DESC;

Langkah 9: Mewujudkan hasil ke PostgreSQL

Simpan hasil kueri dari Amazon S3 sebagai tabel PostgreSQL lokal untuk akses berulang yang cepat:

CREATE TABLE monthly_revenue AS SELECT DATE_TRUNC('month', order_date) AS month, COUNT(*) AS order_count, SUM(total_amount) AS total_revenue, AVG(total_amount) AS avg_order_value FROM ft_orders WHERE order_date >= '2024-01-01' GROUP BY DATE_TRUNC('month', order_date) ORDER BY month; -- Query the materialized result (fast, local PostgreSQL) SELECT * FROM monthly_revenue;

Langkah 10: Periksa cache dan kinerja

Setelah menjalankan kueri, verifikasi bahwa cache berfungsi:

-- Check cache size (should be non-zero after queries) SELECT pg_size_pretty(aurora_analytics_cache_size()) AS cache_size; -- Check per-query statistics SELECT query, pg_size_pretty(analytics_cache_hit_bytes) AS cache_hits, pg_size_pretty(analytics_remote_read_bytes) AS s3_reads FROM aurora_analytics_stat_statements() WHERE analytics_cache_hit_bytes > 0 OR analytics_remote_read_bytes > 0;

Jalankan kueri yang sama lagi dan perhatikan peningkatannya: eksekusi kedua dibaca dari cache alih-alih Amazon S3.

Bersihkan

Untuk menghindari tagihan yang sedang berlangsung, hapus sumber daya yang Anda buat:

-- Drop the foreign table DROP FOREIGN TABLE ft_orders; DROP TABLE customer_segments; DROP TABLE monthly_revenue;
aws rds delete-db-instance --db-instance-identifier my-analytics-instance-1 --skip-final-snapshot aws rds delete-db-cluster --db-cluster-identifier my-analytics-cluster --skip-final-snapshot aws iam detach-role-policy --role-name AuroraAnalyticsRole --policy-arn arn:aws:iam::<account-id>:policy/AuroraAnalyticsReadAccess aws iam delete-role --role-name AuroraAnalyticsRole aws iam delete-policy --policy-arn arn:aws:iam::<account-id>:policy/AuroraAnalyticsReadAccess

Langkah selanjutnya

Sekarang setelah Anda menyelesaikan tutorial, jelajahi topik-topik berikut: