

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Dateien mit SQL mit Amazon Athena abfragen
<a name="tutorial-query-data-with-athena"></a>

Unternehmenssysteme erzeugen häufig dateibasierte Ausgaben — Protokollexporte, Transaktionsextrakte, Inventar-Snapshots, systemübergreifende Dateiabbrüche —, die auf einer NFS- oder SMB-Dateifreigabe landen.

Wenn ein Amazon S3 S3-Zugriffspunkt an das FSx for ONTAP-Volume angeschlossen ist, fragt Amazon Athena die vorhandenen Dateien ab. Ihre Anwendungen und Benutzer schreiben weiterhin wie gewohnt über NFS oder SMB auf das Volume, und Analysten führen Standard-SQL für diese Daten über den Access Point aus. Da auf ein FSx for ONTAP-Volume gleichzeitig über NFS, SMB und die Amazon S3 S3-API zugegriffen werden kann, kann dieselbe Datei von einem Protokoll erzeugt und von einem anderen verarbeitet werden, ohne dass eine Kopie erforderlich ist.

In diesem Tutorial laden Sie einen Beispieldatensatz über einen Amazon S3 S3-Zugangspunkt auf Ihr FSx for ONTAP-Volume hoch, registrieren ihn im AWS Glue Data Catalog und fragen ihn bei Amazon Athena ab.

**Anmerkung**  
Die Bearbeitung dieses Tutorials dauert etwa **20 bis 30 Minuten.** Für die AWS-Services verwendeten Ressourcen fallen Gebühren für die von Ihnen erstellten Ressourcen an. Wenn Sie alle Schritte, einschließlich des Abschnitts **Aufräumen**, umgehend abschließen, belaufen sich die voraussichtlichen Kosten im Osten der USA (Nord-Virginia) AWS-Region auf weniger als **1$**. In dieser Schätzung sind die laufenden Gebühren für das FSx for ONTAP-Volumen selbst nicht enthalten.

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

Stellen Sie vor dem Beginn sicher, dass Sie über das Folgende verfügen:
+ Ein FSx for ONTAP-Volume mit angeschlossenem Amazon S3 S3-Zugriffspunkt. Der Access Point muss über einen **Internetnetzwerk-Ursprung** verfügen. Anweisungen zum Erstellen eines Access Points finden Sie unter[Erstellen eines Zugriffspunkts](fsxn-creating-access-points.md).
+ Eine Athena-Arbeitsgruppe, die mit einem Speicherort für Abfrageergebnisse konfiguriert ist. Athena schreibt Abfrageergebnisse in einen Amazon S3 S3-Bucket, nicht in das FSx for ONTAP-Volume. **Wenn Sie keine Arbeitsgruppe haben, können Sie die Arbeitsgruppe verwenden und in der `primary` Athena-Konsole unter Einstellungen einen Speicherort für Ergebnisse konfigurieren.** Weitere Informationen finden Sie unter [Verwalten von Arbeitsgruppen](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) im *Amazon Athena Athena-Benutzerhandbuch*.
+ Eine IAM-Rolle für AWS Glue mit der angehängten `AWSGlueServiceRole` verwalteten Richtlinie und einer Inline-Richtlinie, die Zugriff auf Ihren Amazon S3 S3-Zugriffspunkt gewährt. Wenn Sie noch keinen haben, gehen Sie wie folgt vor.

  1. Speichern Sie die folgende Vertrauensrichtlinie unter`glue-trust-policy.json`. Es ermöglicht AWS Glue , die Rolle zu übernehmen.

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

  1. Speichern Sie die folgende Berechtigungsrichtlinie unter`glue-s3-policy.json`. Sie gewährt Zugriff auf den Access Point. Ersetzen Sie `{{region}}``{{account-id}}`, und `{{access-point-name}}` durch Ihre Werte.

     ```
     {
         "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. Erstellen Sie die Rolle und fügen Sie die Richtlinien hinzu.

     ```
     $ 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
     ```
+ IAM-Berechtigungen zum Ausführen von Athena-Abfragen und zum Zugriff auf den AWS Glue Datenkatalog.

**Wichtig**  
Der Amazon S3 S3-Zugriffspunkt muss einen Internet-Netzwerkursprung verwenden. Athena greift über eine verwaltete Infrastruktur auf Amazon S3 zu, nicht über Ihre VPC. Access Points mit einem VPC-Netzwerkursprung lehnen Anfragen von Athena ab.

## Schritt 1: Laden Sie Beispieldaten auf Ihr FSx for ONTAP-Volume hoch
<a name="tutorial-athena-upload-data"></a>

Dieses Tutorial verwendet die [Trip Record Data der NYC Taxi and Limousine Commission (TLC)](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page), einen öffentlich zugänglichen Datensatz von Taxifahrten in New York City. Die Daten liegen im Apache Parquet-Format vor, einem Spaltenformat, das Athena effizient abfragen kann.

Laden Sie gelbe Taxifahrtendaten für einen Monat herunter und laden Sie sie über den Amazon S3 S3-Zugangspunkt auf Ihr FSx for ONTAP-Volume hoch.

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

Laden Sie die Datei mithilfe des Access Point-Alias auf Ihr FSx for ONTAP-Volume hoch. Ersetzen Sie sie `{{my-ap-alias-ext-s3alias}}` durch Ihren Access Point-Alias.

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

Stellen Sie sicher, dass auf die Datei über den Access Point zugegriffen werden kann.

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

## Schritt 2: Erstellen Sie eine Datenbank in AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Erstellen Sie eine Datenbank in AWS Glue Data Catalog , die die Metadaten der Tabelle enthält. Sie können die Datenbank mit der AWS Glue Konsole, dem Athena-Abfrageeditor oder dem AWS CLI erstellen.

**AWS Glue console**

1. Öffnen Sie die AWS Glue Konsole unter. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)

1. Wählen Sie im Navigationsbereich unter **Datenkatalog** die Option **Datenbanken** aus.

1. Wählen Sie **Add database** (Datenbank hinzufügen).

1. Geben Sie unter **Name** `{{fsxn_taxi_demo}}` ein.

1. Wählen Sie **Datenbank erstellen** aus.

**Athena-Abfrageeditor oder AWS CLI**

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

## Schritt 3: Registrieren Sie die Daten im AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Sie können Ihre Daten entweder mit einem AWS Glue Crawler (empfohlen) oder mit einer manuellen `CREATE EXTERNAL TABLE` Anweisung in Athena registrieren.

### Option A: Verwenden Sie ein AWS Glue Crawler (empfohlen)
<a name="tutorial-athena-glue-crawler"></a>

Ein AWS Glue Crawler erkennt automatisch das Schema Ihrer Daten und erstellt eine Tabelle im. AWS Glue Data Catalog Dies ist der empfohlene Ansatz, da der Crawler die richtigen Spaltentypen aus den Metadaten der Parquet-Datei ableitet.

1. Erstellen Sie einen Crawler, der auf den Access Point-Alias verweist. `{{my-ap-alias-ext-s3alias}}`Ersetzen Sie es durch Ihren Access Point-Alias und `{{my-glue-role-arn}}` durch den ARN Ihrer AWS Glue IAM-Rolle.

   ```
   $ 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. Führen Sie den Crawler aus.

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

1. Überprüfen Sie den Crawler-Status. Der Crawler ist in der Regel in ein bis zwei Minuten fertig.

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

   Wenn der Crawler fertig ist, lautet der Status `READY` und der Status lautet. `SUCCEEDED` Der Crawler erstellt in der Datenbank eine Tabelle mit dem Namen `taxi_data` (abgeleitet vom Ordnernamen). `fsxn_taxi_demo`

### Option B: Manuelles Erstellen einer Tabelle in Athena
<a name="tutorial-athena-manual-ddl"></a>

Wenn Sie das Schema Ihrer Daten bereits kennen, können Sie die Tabelle mit einer `CREATE EXTERNAL TABLE` Anweisung direkt in Athena erstellen. Verwenden Sie den Access Point-Alias in der `LOCATION` Klausel.

```
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/'
```

**Anmerkung**  
Die Spaltentypen müssen mit den Typen in der Parquet-Datei übereinstimmen. Bei diesem Datensatz `VendorID` werden Felder wie `passenger_count` und als `bigint` (INT64) in der Parquet-Datei gespeichert, nicht`double`. Wenn die Typen nicht übereinstimmen, gibt Athena einen `HIVE_BAD_DATA` Fehler zurück. Durch die Verwendung eines AWS Glue Crawlers (Option A) wird dieses Problem vermieden, da der Crawler automatisch die richtigen Typen ableitet.

## Schritt 4: Fragen Sie Ihre Daten ab
<a name="tutorial-athena-query-data"></a>

Öffnen Sie den Athena-Abfrage-Editor oder verwenden Sie den AWS CLI , um SQL-Abfragen für Ihre FSx for ONTAP-Daten auszuführen. Die folgenden Beispiele verwenden die vom AWS Glue Crawler () erstellte Tabelle. `taxi_data` Wenn Sie die Tabelle manuell erstellt haben, ersetzen Sie sie `taxi_data` durch`yellow_taxi_trips`.

**Zählen Sie die Gesamtzahl der Fahrten und berechnen Sie Durchschnittswerte**

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

Beispielausgabe:


| Gesamtzahl der Fahrten | durchschnittliche Entfernung (Meilen) | avg\_total\_usd | avg\_passagiere | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26,80 | 1.3 | 

**Finden Sie die geschäftigsten Abholzeiten**

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

**Finden Sie die umsatzstärksten Abholorte**

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

## Überlegungen
<a name="tutorial-athena-considerations"></a>
+ **Read-only Zugriff.** Athena liest Daten von Ihrem FSx for ONTAP-Volume über den Access Point. Athena-Abfrageergebnisse werden in den Amazon S3 S3-Ergebnis-Bucket geschrieben, nicht zurück in das FSx for ONTAP-Volume.
+ **Internet-Herkunft erforderlich.** Athena greift über eine verwaltete Infrastruktur außerhalb Ihrer VPC auf Amazon S3 zu. Die Schlüssel `aws:SourceVpc` und die `aws:SourceVpce` Bedingungsschlüssel sind für Athena-Anfragen nicht verfügbar. Sie müssen einen Zugangspunkt mit Internet-Ursprung verwenden.
+ **Dateiformat.** Athena unterstützt Parquet, ORC, JSON, CSV und andere Formate. Spaltenformate wie Parquet und ORC bieten die beste Abfrageleistung, da Athena nur die Spalten liest, auf die in Ihrer Abfrage verwiesen wird.
+ **Benutzerberechtigungen für das Dateisystem.** Der dem Access Point zugeordnete Dateisystembenutzer muss über Leseberechtigungen für die abgefragten Dateien verfügen.
+ **AWS Glue Data Catalog Die Tabelle ist wiederverwendbar.** Sobald Sie eine Tabelle in der registriert haben AWS Glue Data Catalog, steht sie anderen AWS Analysediensten zur Verfügung, die in die integriert sind AWS Glue Data Catalog, z. B. Amazon Redshift Spectrum-, Amazon EMR- und AWS Glue ETL-Jobs.

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

Um laufende Gebühren zu vermeiden, löschen Sie die Ressourcen, die Sie in diesem Tutorial erstellt haben.

1. Löschen Sie die Athena-Tabellen und die Datenbank.

   ```
   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. Löschen Sie den AWS Glue Crawler.

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

1. Löschen Sie die Beispieldaten von Ihrem FSx for ONTAP-Volume.

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