

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consulte archivos con SQL mediante Amazon Athena
<a name="tutorial-query-data-with-athena"></a>

Los sistemas empresariales suelen producir resultados basados en archivos (exportaciones de registros, extractos de transacciones, instantáneas de inventario, transferencias de archivos entre sistemas) que llegan a un recurso compartido de archivos NFS o SMB.

Con un punto de acceso Amazon S3 conectado al volumen FSx for ONTAP, Amazon Athena consulta los archivos existentes. Sus aplicaciones y sus usuarios siguen escribiendo en el volumen a través de NFS o SMB como siempre lo han hecho, y los analistas utilizan el SQL estándar para comparar esos datos a través del punto de acceso. Como se puede acceder simultáneamente a un volumen de FSx for ONTAP a través de NFS, SMB y la API de Amazon S3, un protocolo puede generar el mismo archivo y consumirlo otro sin necesidad de copiarlo.

En este tutorial, cargará un conjunto de datos de muestra en su volumen de FSx for ONTAP a través de un punto de acceso de Amazon S3, lo registrará en y lo AWS Glue Data Catalog consultará con Amazon Athena.

**nota**  
Este tutorial tarda aproximadamente entre **20 y 30 minutos en completarse**. Los Servicios de AWS usuarios incurren en cargos por los recursos que cree. Si completa todos los pasos, incluida la sección de **limpieza**, con prontitud, el coste previsto será inferior a **1 dólar** en la zona este de EE. UU. (Virginia del Norte) Región de AWS. Esta estimación no incluye los cargos continuos del FSx para el propio volumen de ONTAP.

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

Antes de empezar, asegúrese de que tiene lo siguiente:
+ Un volumen FSx para ONTAP con un punto de acceso Amazon S3 conectado. El punto de acceso debe tener un origen en una red **de Internet**. Para obtener instrucciones sobre cómo crear un punto de acceso, consulte[Creación de un punto de acceso](fsxn-creating-access-points.md).
+ Un grupo de trabajo de Athena configurado con una ubicación de resultados de consulta. Athena escribe los resultados de las consultas en un bucket de Amazon S3, no en el volumen de FSx para ONTAP. **Si no tiene un grupo de trabajo, puede usar el grupo de `primary` trabajo y configurar una ubicación de resultados en la consola de Athena en Configuración.** Para obtener más información, consulte [Administración de grupos de trabajo](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) en la Guía del *usuario de Amazon Athena*.
+ Una función de IAM AWS Glue con la política `AWSGlueServiceRole` gestionada adjunta y una política en línea que concede acceso a su punto de acceso Amazon S3. Si no tiene uno, siga los siguientes pasos.

  1. Guarde la siguiente política de confianza como`glue-trust-policy.json`. Permite AWS Glue asumir el rol.

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

  1. Guarde la siguiente política de permisos como`glue-s3-policy.json`. Concede acceso al punto de acceso. Sustituya `{{region}}``{{account-id}}`, y `{{access-point-name}}` por sus valores.

     ```
     {
         "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. Cree el rol y adjunte las políticas.

     ```
     $ 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
     ```
+ Permisos de IAM para ejecutar consultas de Athena y acceder al catálogo AWS Glue de datos.

**importante**  
El punto de acceso Amazon S3 debe utilizar un origen de red de Internet. Athena accede a Amazon S3 desde una infraestructura gestionada, no desde su VPC. Los puntos de acceso con origen en una red de VPC rechazan las solicitudes de Athena.

## Paso 1: Cargue datos de muestra en su FSx para el volumen ONTAP
<a name="tutorial-athena-upload-data"></a>

Este tutorial utiliza los datos del [registro de viajes de la Comisión de Taxis y Limusinas de la Ciudad de Nueva York (TLC), un conjunto de datos](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page) de acceso público sobre los viajes en taxi en la ciudad de Nueva York. Los datos están en formato Apache Parquet, un formato de columnas que Athena puede consultar de forma eficaz.

Descarga los datos de un mes de viajes en taxi amarillos y súbelos a tu volumen de FSx for ONTAP a través del punto de acceso Amazon S3.

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

Cargue el archivo en su volumen FSx for ONTAP utilizando el alias del punto de acceso. `{{my-ap-alias-ext-s3alias}}`Sustitúyalo por el alias de tu punto de acceso.

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

Compruebe que se puede acceder al archivo a través del punto de acceso.

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

## Paso 2: Cree una base de datos en el AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Cree una base de datos en la AWS Glue Data Catalog que se guarden los metadatos de la tabla. Puede crear la base de datos mediante la AWS Glue consola, el editor de consultas de Athena o el. AWS CLI

**AWS Glue console**

1. Abra la AWS Glue consola en. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)

1. En el panel de navegación, en **Catálogo de datos**, elija **Bases de datos**.

1. Elija **Agregar una base de datos**.

1. En **Nombre**, escriba `{{fsxn_taxi_demo}}`.

1. Elija **Creación de base de datos**.

**editor de consultas Athena o AWS CLI**

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

## Paso 3: Registre los datos en el AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Puede registrar sus datos mediante un AWS Glue rastreador (recomendado) o una `CREATE EXTERNAL TABLE` declaración manual en Athena.

### Opción A: utilizar un AWS Glue rastreador (recomendado)
<a name="tutorial-athena-glue-crawler"></a>

Un AWS Glue rastreador descubre automáticamente el esquema de los datos y crea una tabla en el. AWS Glue Data Catalog Este es el enfoque recomendado porque el rastreador deduce los tipos de columnas correctos a partir de los metadatos del archivo Parquet.

1. Cree un rastreador que apunte al alias del punto de acceso. `{{my-ap-alias-ext-s3alias}}`Sustitúyalo por el alias de tu punto de acceso y `{{my-glue-role-arn}}` por el ARN de tu función de AWS Glue IAM.

   ```
   $ 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. Ejecute el rastreador de .

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

1. Compruebe el estado del rastreador. Por lo general, el rastreador se completa en uno o dos minutos.

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

   Cuando el rastreador termina, el estado es `READY` y el estado es. `SUCCEEDED` El rastreador crea una tabla con el nombre `taxi_data` (derivado del nombre de la carpeta) en la `fsxn_taxi_demo` base de datos.

### Opción B: crear una tabla manualmente en Athena
<a name="tutorial-athena-manual-ddl"></a>

Si ya conoce el esquema de sus datos, puede crear la tabla directamente en Athena mediante una `CREATE EXTERNAL TABLE` sentencia. Utilice el alias del punto de acceso de la `LOCATION` cláusula.

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

**nota**  
Los tipos de columnas deben coincidir con los tipos del archivo Parquet. Para este conjunto de datos, los campos `VendorID` son como (INT64) `passenger_count` y no `double` se almacenan como `bigint` (INT64) en el archivo Parquet. Si los tipos no coinciden, Athena devuelve un `HIVE_BAD_DATA` error. El uso de un AWS Glue rastreador (opción A) evita este problema porque el rastreador deduce los tipos correctos automáticamente.

## Paso 4: consulta tus datos
<a name="tutorial-athena-query-data"></a>

Abra el editor de consultas de Athena o utilícelo AWS CLI para ejecutar consultas SQL en sus datos de FSx para ONTAP. Los siguientes ejemplos utilizan la tabla creada por el AWS Glue rastreador (). `taxi_data` Si creó la tabla manualmente, sustitúyala por`taxi_data`. `yellow_taxi_trips`

**Cuente el total de viajes y calcule los promedios**

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

Ejemplo de código de salida:


| total\_viajes | avg\_distance\_millas | avg\_total\_usd | avg\_passengers | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26,80 | 1.3 | 

**Encuentra las horas de recogida más concurridas**

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

**Encuentra los puntos de recogida con mayores ingresos**

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

## Consideraciones
<a name="tutorial-athena-considerations"></a>
+ **Read-only acceder.** Athena lee los datos del volumen de FSx para ONTAP a través del punto de acceso. Los resultados de las consultas de Athena se escriben en el depósito de resultados de Amazon S3, no en el volumen de FSx para ONTAP.
+ **Se requiere el origen de Internet.** Athena accede a Amazon S3 desde una infraestructura gestionada externa a su VPC. Las llaves `aws:SourceVpc` y `aws:SourceVpce` condiciones no están disponibles para las solicitudes de Athena. Debe utilizar un punto de acceso originado en Internet.
+ **Formato de archivo.** Athena admite Parquet, ORC, JSON, CSV y otros formatos. Los formatos de columnas como Parquet y ORC ofrecen el mejor rendimiento de consulta porque Athena lee solo las columnas a las que se hace referencia en la consulta.
+ **Permisos de usuario del sistema de archivos.** El usuario del sistema de archivos asociado al punto de acceso debe tener permiso de lectura en los archivos que se consultan.
+ **AWS Glue Data Catalog la tabla es reutilizable.** Una vez que registre una tabla en AWS Glue Data Catalog, estará disponible para otros servicios de AWS análisis que se integren con ella AWS Glue Data Catalog, como Amazon Redshift Spectrum, AWS Glue Amazon EMR y ETL jobs.

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

Para evitar cargos continuos, elimine los recursos que creó en este tutorial.

1. Elimine las tablas y la base de datos de 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. Elimine el AWS Glue rastreador.

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

1. Elimine los datos de muestra del volumen FSx para ONTAP.

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