View a markdown version of this page

使用 Amazon Athena 查詢具有 SQL 的檔案 - FSx for OnTAP

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Athena 查詢具有 SQL 的檔案

企業系統經常產生以檔案為基礎的輸出:日誌匯出、交易擷取、庫存快照、系統間檔案捨棄,這些輸出會落在 NFS 或 SMB 檔案共享上。

將 Amazon S3 存取點連接到 FSx for ONTAP 磁碟區後,Amazon Athena 會查詢檔案就位。您的應用程式和使用者會繼續像以往一樣透過 NFS 或 SMB 寫入磁碟區,而分析師會透過存取點針對該資料執行標準 SQL。由於 FSx for ONTAP 磁碟區可透過 NFS、SMB 和 Amazon S3 API 同時存取,因此一個通訊協定可以產生相同的檔案,而另一個無需複製即可使用。

在本教學課程中,您會透過 Amazon S3 存取點將範例資料集上傳至 FSx for ONTAP 磁碟區,在 中註冊 AWS Glue Data Catalog,然後向 Amazon Athena 查詢。

注意

本教學課程大約需要 20 到 30 分鐘才能完成。 AWS 服務 使用的 會針對您建立的資源產生費用。如果您立即完成所有步驟,包括清除區段,美國東部 (維吉尼亞北部) 的預期成本不到 1 美元。 AWS 區域此預估不包含 FSx for ONTAP 磁碟區本身的持續費用。

先決條件

開始前,請確定您具有下列項目:

  • 連接 Amazon S3 存取點的 FSx for ONTAP 磁碟區。存取點必須具有網際網路原始伺服器。如需建立存取點的說明,請參閱建立存取點

  • 使用查詢結果位置設定的 Athena 工作群組。Athena 會將查詢結果寫入 Amazon S3 儲存貯體,而不是 FSx for ONTAP 磁碟區。如果您沒有工作群組,您可以使用primary工作群組,並在設定下的 Athena 主控台中設定結果位置。如需詳細資訊,請參閱《Amazon Athena 使用者指南》中的管理工作群組

  • 連接 AWSGlueServiceRole受管政策 AWS Glue 的 IAM 角色,以及授予 Amazon S3 存取點存取權的內嵌政策。如果您沒有,請使用下列步驟。

    1. 將下列信任政策儲存為 glue-trust-policy.json。它允許 AWS Glue 擔任該角色。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "glue.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
    2. 將下列許可政策儲存為 glue-s3-policy.json。它會授予存取點的存取權。將 regionaccount-id和 取代access-point-name為您的值。

      { "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. 建立角色並連接政策。

      $ 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
  • 執行 Athena 查詢和存取 AWS Glue Data Catalog 的 IAM 許可。

重要

Amazon S3 存取點必須使用網際網路原始伺服器。Athena 會從受管基礎設施存取 Amazon S3,而不是從您的 VPC 存取。具有 VPC 網路來源的存取點拒絕來自 Athena 的請求。

步驟 1:將範例資料上傳至 FSx for ONTAP 磁碟區

本教學課程使用 NYC Taxi and Limousine Commission (TLC) Trip Record Data,這是紐約市可公開取得的計程車行程資料集。資料採用 Apache Parquet 格式,這是 Athena 可以有效率地查詢的單欄格式。

下載一個月的黃色計程車行程資料,並透過 Amazon S3 存取點將其上傳至 FSx for ONTAP 磁碟區。

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

使用存取點別名將檔案上傳至 FSx for ONTAP 磁碟區。my-ap-alias-ext-s3alias 將 取代為您的存取點別名。

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

確認檔案可透過存取點存取。

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

步驟 2:在 中建立資料庫 AWS Glue Data Catalog

在 中建立資料庫 AWS Glue Data Catalog 以保留資料表中繼資料。您可以使用 AWS Glue 主控台、Athena 查詢編輯器或 建立資料庫 AWS CLI。

AWS Glue 主控台

  1. 在 https://https://console.aws.amazon.com/glue/ 開啟 AWS Glue 主控台。

  2. 在導覽窗格中的資料目錄下,選擇資料庫

  3. 選擇新增資料庫

  4. 對於名稱,輸入 fsxn_taxi_demo

  5. 選擇建立資料庫

Athena 查詢編輯器或 AWS CLI

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

步驟 3:在 中註冊資料 AWS Glue Data Catalog

您可以使用 AWS Glue 爬蟲程式 (建議) 或 Athena 中的手動CREATE EXTERNAL TABLE陳述式來註冊資料。

選項 A:使用 AWS Glue 爬蟲程式 (建議)

AWS Glue 爬蟲程式會自動探索資料的結構描述,並在 中建立資料表 AWS Glue Data Catalog。這是建議的方法,因為爬蟲程式會從 Parquet 檔案中繼資料推斷正確的資料欄類型。

  1. 建立指向存取點別名的爬蟲程式。my-ap-alias-ext-s3alias 將 取代為您的存取點別名,並將 my-glue-role-arn取代為您的 IAM AWS Glue 角色的 ARN。

    $ 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. 執行爬蟲程式。

    $ aws glue start-crawler --name fsxn-taxi-crawler
  3. 檢查爬蟲程式狀態。爬蟲程式通常會在一到兩分鐘內完成。

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

    當爬蟲程式完成時,狀態為 READY,狀態為 SUCCEEDED。爬蟲程式會在fsxn_taxi_demo資料庫中建立名為 taxi_data(衍生自資料夾名稱) 的資料表。

選項 B:在 Athena 中手動建立資料表

如果您已經知道資料的結構描述,可以使用 CREATE EXTERNAL TABLE陳述式直接在 Athena 中建立資料表。在 LOCATION子句中使用存取點別名。

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/'
注意

資料欄類型必須符合 Parquet 檔案中的類型。對於此資料集, passenger_count和 等欄位VendorID會以 bigint(INT64) 形式存放在 Parquet 檔案中,而不是 double。如果類型不相符,Athena 會傳回HIVE_BAD_DATA錯誤。使用 AWS Glue 爬蟲程式 (選項 A) 可避免此問題,因為爬蟲程式會自動推斷正確的類型。

步驟 4:查詢您的資料

開啟 Athena 查詢編輯器或使用 AWS CLI 針對 FSx for ONTAP 資料執行 SQL 查詢。下列範例使用 AWS Glue 爬蟲程式建立的資料表 (taxi_data)。如果您手動建立資料表,請將 取代taxi_datayellow_taxi_trips

計算總行程數並計算平均值

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

輸出範例:

total_trips avg_distance_miles avg_total_usd avg_passengers
2964624 3.65 26.80 1.3

尋找最忙碌的收件時間

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

尋找收入最高的收件地點

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

考量事項

  • 唯讀存取。Athena 透過存取點從 FSx for ONTAP 磁碟區讀取資料。Athena 查詢結果會寫入 Amazon S3 結果儲存貯體,而不是傳回 FSx for ONTAP 磁碟區。

  • 需要網際網路原始伺服器。Athena 會從 VPC 外部的受管基礎設施存取 Amazon S3。aws:SourceVpcaws:SourceVpce條件金鑰不適用於 Athena 請求。您必須使用網際網路來源存取點。

  • 檔案格式。Athena 支援 Parquet、ORC、JSON、CSV 和其他格式。Parquet 和 ORC 等直欄格式提供最佳查詢效能,因為 Athena 只會讀取查詢中參考的資料欄。

  • 檔案系統使用者許可。與存取點相關聯的檔案系統使用者必須具有所查詢檔案的讀取許可。

  • AWS Glue Data Catalog 資料表可重複使用。在 中註冊資料表後 AWS Glue Data Catalog,它可供與 整合的其他 AWS 分析服務使用 AWS Glue Data Catalog,例如 Amazon Redshift Spectrum、Amazon EMR 和 AWS Glue ETL 任務。

清除

若要避免持續收費,請刪除您在本教學課程中建立的資源。

  1. 捨棄 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. 刪除 AWS Glue 爬蟲程式。

    $ aws glue delete-crawler --name fsxn-taxi-crawler
  3. 從 FSx for ONTAP 磁碟區刪除範例資料。

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