

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

# Kueri file dengan SQL menggunakan Amazon Athena
<a name="tutorial-query-data-with-athena"></a>

Sistem perusahaan sering menghasilkan output berbasis file - ekspor log, ekstrak transaksi, snapshot inventaris, penurunan file antar sistem - yang mendarat di berbagi file NFS atau SMB.

Dengan jalur akses Amazon S3 yang dilampirkan ke FSx untuk volume ONTAP, Amazon Athena menanyakan file di tempatnya. Aplikasi dan pengguna Anda terus menulis ke volume melalui NFS atau SMB seperti yang selalu mereka miliki, dan analis menjalankan SQL standar terhadap data tersebut melalui titik akses. Karena fsX untuk volume ONTAP dapat diakses secara bersamaan melalui NFS, SMB, dan Amazon S3 API, file yang sama dapat diproduksi oleh satu protokol dan dikonsumsi oleh protokol lain tanpa salinan.

Dalam tutorial ini, Anda mengunggah kumpulan data sampel ke FSx Anda untuk volume ONTAP melalui jalur akses Amazon S3, mendaftarkannya di, dan menanyakannya AWS Glue Data Catalog dengan Amazon Athena.

**catatan**  
Tutorial ini membutuhkan waktu sekitar **20 hingga 30 menit** untuk menyelesaikannya. Yang Layanan AWS digunakan dikenakan biaya untuk sumber daya yang Anda buat. Jika Anda menyelesaikan semua langkah, termasuk bagian **Pembersihan** segera, biaya yang diharapkan kurang dari **$1** di AS Timur (Virginia Utara). Wilayah AWS Perkiraan ini tidak termasuk biaya berkelanjutan untuk FSx untuk volume ONTAP itu sendiri.

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

Sebelum Anda mulai, pastikan Anda memiliki yang berikut:
+ FSx untuk volume ONTAP dengan titik akses Amazon S3 terpasang. Titik akses harus memiliki asal jaringan **internet**. Untuk petunjuk tentang cara membuat titik akses, lihat[Membuat titik akses](fsxn-creating-access-points.md).
+ Workgroup Athena yang dikonfigurasi dengan lokasi hasil kueri. Athena menulis hasil kueri ke bucket Amazon S3, bukan ke FSx untuk volume ONTAP. **Jika Anda tidak memiliki workgroup, Anda dapat menggunakan `primary` workgroup dan mengonfigurasi lokasi hasil di konsol Athena di bawah Pengaturan.** Untuk informasi selengkapnya, lihat [Mengelola grup kerja](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) di Panduan *Pengguna Amazon Athena*.
+ Peran IAM AWS Glue dengan kebijakan `AWSGlueServiceRole` terkelola yang dilampirkan dan kebijakan inline yang memberikan akses ke jalur akses Amazon S3 Anda. Jika Anda tidak memilikinya, gunakan langkah-langkah berikut.

  1. Simpan kebijakan kepercayaan berikut sebagai`glue-trust-policy.json`. Hal ini AWS Glue memungkinkan untuk mengambil peran.

     ```
     {
         "Version": "2012-10-17", 		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {"Service": "glue.amazonaws.com"},
                 "Action": "sts:AssumeRole"
             }
         ]
     }
     ```

  1. Simpan kebijakan izin berikut sebagai`glue-s3-policy.json`. Ini memberikan akses ke titik akses. Ganti `{{region}}``{{account-id}}`,, dan `{{access-point-name}}` dengan nilai-nilai Anda.

     ```
     {
         "Version": "2012-10-17", 		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "s3:GetObject",
                     "s3:ListBucket"
                 ],
                 "Resource": [
                     "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}",
                     "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}/object/*"
                 ]
             }
         ]
     }
     ```

  1. Buat peran dan lampirkan kebijakan.

     ```
     $ aws iam create-role \
         --role-name {{fsxn-tutorial-glue-role}} \
         --assume-role-policy-document file://glue-trust-policy.json
     
     aws iam attach-role-policy \
         --role-name {{fsxn-tutorial-glue-role}} \
         --policy-arn arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
     
     aws iam put-role-policy \
         --role-name {{fsxn-tutorial-glue-role}} \
         --policy-name s3-access-point-policy \
         --policy-document file://glue-s3-policy.json
     ```
+ Izin IAM untuk menjalankan kueri Athena dan mengakses Katalog Data. AWS Glue 

**penting**  
Jalur akses Amazon S3 harus menggunakan asal jaringan internet. Athena mengakses Amazon S3 dari infrastruktur terkelola, bukan dari VPC Anda. titik akses dengan asal jaringan VPC menolak permintaan dari Athena.

## Langkah 1: Unggah data sampel ke FSx Anda untuk volume ONTAP
<a name="tutorial-athena-upload-data"></a>

Tutorial ini menggunakan [Data Rekam Perjalanan NYC Taxi and Limousine Commission (TLC), kumpulan data perjalanan](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page) taksi yang tersedia untuk umum di New York City. Data dalam format Apache Parquet, format kolumnar yang Athena dapat kueri secara efisien.

Unduh satu bulan data perjalanan taksi kuning dan unggah ke FSx Anda untuk volume ONTAP melalui jalur akses Amazon S3.

```
$ curl -O https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet
```

Unggah file ke FSx Anda untuk volume ONTAP menggunakan alias titik akses. Ganti `{{my-ap-alias-ext-s3alias}}` dengan alias titik akses Anda.

```
$ aws s3 cp yellow_tripdata_2024-01.parquet \
    s3://{{my-ap-alias-ext-s3alias}}/taxi-data/yellow_tripdata_2024-01.parquet
```

Verifikasi file dapat diakses melalui jalur akses.

```
$ aws s3 ls s3://{{my-ap-alias-ext-s3alias}}/taxi-data/
2024-01-23 02:18:13   49961641 yellow_tripdata_2024-01.parquet
```

## Langkah 2: Buat database di AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Buat database di AWS Glue Data Catalog untuk menahan metadata tabel. Anda dapat membuat database menggunakan AWS Glue konsol, editor kueri Athena, atau file. AWS CLI

**AWS Glue konsol**

1. Buka AWS Glue konsol di [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Di panel navigasi, di bawah **Katalog Data**, pilih **Database**.

1. Pilih **Add database** (Tambahkan basis data).

1. Untuk **Nama**, masukkan `{{fsxn_taxi_demo}}`.

1. Pilih **Buat basis data**.

**Editor kueri Athena atau AWS CLI**

```
$ aws athena start-query-execution \
    --query-string "CREATE DATABASE IF NOT EXISTS {{fsxn_taxi_demo}}" \
    --work-group {{primary}}
```

## Langkah 3: Daftarkan data di AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Anda dapat mendaftarkan data menggunakan AWS Glue crawler (disarankan) atau `CREATE EXTERNAL TABLE` pernyataan manual di Athena.

### Opsi A: Gunakan AWS Glue crawler (disarankan)
<a name="tutorial-athena-glue-crawler"></a>

 AWS Glue Crawler secara otomatis menemukan skema data Anda dan membuat tabel di file. AWS Glue Data Catalog Ini adalah pendekatan yang disarankan karena crawler menyimpulkan jenis kolom yang benar dari metadata file Parket.

1. Buat crawler yang menunjuk ke alias access point. Ganti `{{my-ap-alias-ext-s3alias}}` dengan alias titik akses Anda dan `{{my-glue-role-arn}}` dengan ARN peran IAM AWS Glue Anda.

   ```
   $ aws glue create-crawler \
       --name {{fsxn-taxi-crawler}} \
       --role {{my-glue-role-arn}} \
       --database-name {{fsxn_taxi_demo}} \
       --targets '{"S3Targets": [{"Path": "s3://{{my-ap-alias-ext-s3alias}}/taxi-data/"}]}'
   ```

1. Jalankan crawler.

   ```
   $ aws glue start-crawler --name {{fsxn-taxi-crawler}}
   ```

1. Periksa status crawler. Crawler biasanya selesai dalam satu hingga dua menit.

   ```
   $ aws glue get-crawler --name {{fsxn-taxi-crawler}} \
       --query "Crawler.{State:State,Status:LastCrawl.Status}"
   ```

   Ketika crawler selesai, statusnya `READY` dan statusnya. `SUCCEEDED` Crawler membuat tabel bernama `taxi_data` (berasal dari nama folder) dalam `fsxn_taxi_demo` database.

### Opsi B: Buat tabel secara manual di Athena
<a name="tutorial-athena-manual-ddl"></a>

Jika Anda sudah mengetahui skema data Anda, Anda dapat membuat tabel langsung di Athena menggunakan `CREATE EXTERNAL TABLE` pernyataan. Gunakan alias titik akses dalam `LOCATION` klausa.

```
CREATE EXTERNAL TABLE fsxn_taxi_demo.yellow_taxi_trips (
    VendorID bigint,
    tpep_pickup_datetime timestamp,
    tpep_dropoff_datetime timestamp,
    passenger_count bigint,
    trip_distance double,
    RatecodeID bigint,
    store_and_fwd_flag string,
    PULocationID bigint,
    DOLocationID bigint,
    payment_type bigint,
    fare_amount double,
    extra double,
    mta_tax double,
    tip_amount double,
    tolls_amount double,
    improvement_surcharge double,
    total_amount double,
    congestion_surcharge double,
    Airport_fee double
)
STORED AS PARQUET
LOCATION 's3://{{my-ap-alias-ext-s3alias}}/taxi-data/'
```

**catatan**  
Jenis kolom harus sesuai dengan jenis dalam file Parket. Untuk kumpulan data ini, bidang seperti `passenger_count` dan `VendorID` disimpan sebagai `bigint` (INT64) di file Parket, bukan. `double` Jika jenis tidak cocok, Athena mengembalikan kesalahan. `HIVE_BAD_DATA` Menggunakan AWS Glue crawler (Opsi A) menghindari masalah ini karena crawler menyimpulkan tipe yang benar secara otomatis.

## Langkah 4: Kueri data Anda
<a name="tutorial-athena-query-data"></a>

Buka editor kueri Athena atau gunakan AWS CLI untuk menjalankan kueri SQL terhadap FSx Anda untuk data ONTAP. Contoh berikut menggunakan tabel yang dibuat oleh AWS Glue crawler (`taxi_data`). Jika Anda membuat tabel secara manual, ganti `taxi_data` dengan`yellow_taxi_trips`.

**Hitung total perjalanan dan hitung rata-rata**

```
SELECT
    COUNT(*) AS total_trips,
    ROUND(AVG(trip_distance), 2) AS avg_distance_miles,
    ROUND(AVG(total_amount), 2) AS avg_total_usd,
    ROUND(AVG(passenger_count), 1) AS avg_passengers
FROM fsxn_taxi_demo.taxi_data
```

Contoh output:


| total\_trips | avg\_distance\_miles | avg\_total\_usd | avg\_penumpang | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26.80 | 1.3 | 

**Temukan jam penjemputan tersibuk**

```
SELECT
    HOUR(tpep_pickup_datetime) AS pickup_hour,
    COUNT(*) AS trip_count,
    ROUND(AVG(total_amount), 2) AS avg_fare
FROM fsxn_taxi_demo.taxi_data
GROUP BY HOUR(tpep_pickup_datetime)
ORDER BY trip_count DESC
LIMIT 5
```

**Temukan lokasi pengambilan pendapatan tertinggi**

```
SELECT
    PULocationID AS pickup_location,
    COUNT(*) AS trip_count,
    ROUND(SUM(total_amount), 2) AS total_revenue
FROM fsxn_taxi_demo.taxi_data
GROUP BY PULocationID
ORDER BY total_revenue DESC
LIMIT 10
```

## Pertimbangan-pertimbangan
<a name="tutorial-athena-considerations"></a>
+ **Read-only akses.** Athena membaca data dari FSx Anda untuk volume ONTAP melalui titik akses. Hasil kueri Athena ditulis ke bucket hasil Amazon S3, bukan kembali ke FSx untuk volume ONTAP.
+ **Asal internet diperlukan.** Athena mengakses Amazon S3 dari infrastruktur terkelola di luar VPC Anda. Kunci `aws:SourceVpc` dan `aws:SourceVpce` kondisi tidak tersedia untuk permintaan Athena. Anda harus menggunakan titik akses internet-origin.
+ **Format file.** Athena mendukung Parket, ORC, JSON, CSV, dan format lainnya. Format kolom seperti Parket dan ORC memberikan kinerja kueri terbaik karena Athena hanya membaca kolom yang direferensikan dalam kueri Anda.
+ **Izin pengguna sistem file.** Pengguna sistem file yang terkait dengan titik akses harus memiliki izin membaca pada file yang ditanyakan.
+ **AWS Glue Data Catalog meja dapat digunakan kembali.** Setelah Anda mendaftarkan tabel di AWS Glue Data Catalog, itu tersedia untuk layanan AWS analitik lain yang terintegrasi dengan AWS Glue Data Catalog, seperti Amazon Redshift Spectrum, Amazon EMR, AWS Glue dan pekerjaan ETL.

## Bersihkan
<a name="tutorial-athena-clean-up"></a>

Untuk menghindari biaya yang sedang berlangsung, hapus sumber daya yang Anda buat dalam tutorial ini.

1. Jatuhkan tabel dan database Athena.

   ```
   DROP TABLE IF EXISTS fsxn_taxi_demo.taxi_data;
   DROP TABLE IF EXISTS fsxn_taxi_demo.yellow_taxi_trips;
   DROP DATABASE IF EXISTS fsxn_taxi_demo CASCADE;
   ```

1. Hapus AWS Glue crawler.

   ```
   $ aws glue delete-crawler --name {{fsxn-taxi-crawler}}
   ```

1. Hapus data sampel dari FSx Anda untuk volume ONTAP.

   ```
   $ aws s3 rm s3://{{my-ap-alias-ext-s3alias}}/taxi-data/yellow_tripdata_2024-01.parquet
   ```