

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
<a name="aurora-analytics-tutorial"></a>

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.

**Topics**
+ [Prasyarat](#aurora-analytics-tutorial-prerequisites)
+ [Langkah 1: Buat kebijakan dan peran IAM](#aurora-analytics-tutorial-step-1)
+ [Langkah 2: Buat cluster Aurora PostgreSQL DB](#aurora-analytics-tutorial-step-2)
+ [Langkah 3: Lampirkan peran IAM ke cluster DB](#aurora-analytics-tutorial-step-3)
+ [Langkah 4: Siapkan titik akhir VPC gateway Amazon S3](#aurora-analytics-tutorial-step-4)
+ [Langkah 5: Connect dan instal ekstensi](#aurora-analytics-tutorial-step-5)
+ [Langkah 6: Buat tabel asing](#aurora-analytics-tutorial-step-6)
+ [Langkah 7: Jalankan kueri pertama Anda](#aurora-analytics-tutorial-step-7)
+ [Langkah 8: Bergabunglah dengan tabel PostgreSQL lokal](#aurora-analytics-tutorial-step-8)
+ [Langkah 9: Mewujudkan hasil ke PostgreSQL](#aurora-analytics-tutorial-step-9)
+ [Langkah 10: Periksa cache dan kinerja](#aurora-analytics-tutorial-step-10)
+ [Bersihkan](#aurora-analytics-tutorial-cleanup)
+ [Langkah selanjutnya](#aurora-analytics-tutorial-next-steps)

## Prasyarat
<a name="aurora-analytics-tutorial-prerequisites"></a>

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
<a name="aurora-analytics-tutorial-step-1"></a>

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
<a name="aurora-analytics-tutorial-step-2"></a>

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
<a name="aurora-analytics-tutorial-step-3"></a>

```
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
<a name="aurora-analytics-tutorial-step-4"></a>

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
<a name="aurora-analytics-tutorial-step-5"></a>

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
<a name="aurora-analytics-tutorial-step-6"></a>

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
<a name="aurora-analytics-tutorial-step-7"></a>

```
-- 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
<a name="aurora-analytics-tutorial-step-8"></a>

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
<a name="aurora-analytics-tutorial-step-9"></a>

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
<a name="aurora-analytics-tutorial-step-10"></a>

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
<a name="aurora-analytics-tutorial-cleanup"></a>

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
<a name="aurora-analytics-tutorial-next-steps"></a>

Sekarang setelah Anda menyelesaikan tutorial, jelajahi topik-topik berikut:
+ [Bekerja dengan tabel asing](aurora-analytics-foreign-tables.md): Pelajari tentang tabel Iceberg, perjalanan waktu dengan snapshot dan stempel waktu, dan manajemen skema.
+ [Parameter konfigurasi](aurora-analytics-configuration-parameters.md): Tune `query_mem` untuk beban kerja Anda.
+ [Praktik terbaik](aurora-analytics-best-practices.md): Optimalkan tata letak data, ukuran instance, dan konkurensi.
+ [Pemantauan dan pemecahan masalah](aurora-analytics-monitoring-troubleshooting.md): Metrik, acara tunggu, dan mendiagnosis masalah.