View a markdown version of this page

Kueri file dengan SQL menggunakan Amazon Athena - fsX untuk ONTAP

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

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

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, lihatMembuat titik akses.

  • 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 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 sebagaiglue-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" } ] }
    2. Simpan kebijakan izin berikut sebagaiglue-s3-policy.json. Ini memberikan akses ke titik akses. Ganti regionaccount-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/*" ] } ] }
    3. 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

Tutorial ini menggunakan Data Rekam Perjalanan NYC Taxi and Limousine Commission (TLC), kumpulan data perjalanan 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

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/.

  2. Di panel navigasi, di bawah Katalog Data, pilih Database.

  3. Pilih Add database (Tambahkan basis data).

  4. Untuk Nama, masukkan fsxn_taxi_demo.

  5. 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

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

Opsi A: Gunakan AWS Glue crawler (disarankan)

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/"}]}'
  2. Jalankan crawler.

    $ aws glue start-crawler --name fsxn-taxi-crawler
  3. 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

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

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 denganyellow_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

  • 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

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;
  2. Hapus AWS Glue crawler.

    $ aws glue delete-crawler --name fsxn-taxi-crawler
  3. 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