

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Consulte arquivos com SQL usando o Amazon Athena
<a name="tutorial-query-data-with-athena"></a>

Os sistemas corporativos geralmente produzem resultados baseados em arquivos — exportações de registros, extrações de transações, instantâneos de inventário, descartes de arquivos entre sistemas — que chegam a um compartilhamento de arquivos NFS ou SMB.

Com um ponto de acesso Amazon S3 conectado ao volume FSx for ONTAP, o Amazon Athena consulta os arquivos no local. Seus aplicativos e usuários continuam gravando no volume via NFS ou SMB da maneira que sempre fizeram, e os analistas executam o SQL padrão com base nesses dados por meio do ponto de acesso. Como um volume FSx for ONTAP pode ser acessado simultaneamente por NFS, SMB e pela API do Amazon S3, o mesmo arquivo pode ser produzido por um protocolo e consumido por outro sem uma cópia.

Neste tutorial, você carrega um conjunto de dados de amostra em seu volume FSx for ONTAP por meio de um ponto de acesso do Amazon S3, registra-o no e o consulta com AWS Glue Data Catalog o Amazon Athena.

**nota**  
Este tutorial leva aproximadamente **20 a 30 minutos** para ser concluído. Os Serviços da AWS usados incorrem em cobranças pelos recursos que você cria. Se você concluir todas as etapas, incluindo a seção **Limpeza** imediatamente, o custo esperado é inferior a **$1** no Leste dos EUA (Norte da Virgínia) Região da AWS. Essa estimativa não inclui cobranças contínuas do FSx para o volume do ONTAP em si.

## Pré-requisitos
<a name="tutorial-athena-prerequisites"></a>

Antes de começar, você deve ter o seguinte:
+ Um volume FSx for ONTAP com um ponto de acesso Amazon S3 conectado. O ponto de acesso deve ter uma origem de rede **na Internet**. Para obter instruções sobre como criar um ponto de acesso, consulte[Criar um ponto de acesso](fsxn-creating-access-points.md).
+ Um grupo de trabalho do Athena configurado com um local de resultados de consulta. O Athena grava os resultados da consulta em um bucket do Amazon S3, não no volume FSx for ONTAP. **Se você não tiver um grupo de trabalho, poderá usar o grupo de `primary` trabalho e configurar um local de resultados no console do Athena em Configurações.** Para obter mais informações, consulte [Gerenciamento de grupos de trabalho](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) no Guia do usuário do *Amazon Athena*.
+ Uma função do IAM AWS Glue com a política `AWSGlueServiceRole` gerenciada anexada e uma política embutida que concede acesso ao seu ponto de acesso Amazon S3. Se você não tiver um, use as etapas a seguir.

  1. Salve a seguinte política de confiança como`glue-trust-policy.json`. Isso permite AWS Glue assumir o papel.

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

  1. Salve a seguinte política de permissões como`glue-s3-policy.json`. Ele concede acesso ao ponto de acesso. Substitua `{{region}}``{{account-id}}`,, e `{{access-point-name}}` por seus 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. Crie a função e anexe as 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
     ```
+ Permissões do IAM para executar consultas do Athena e acessar o AWS Glue catálogo de dados.

**Importante**  
O ponto de acesso do Amazon S3 deve usar uma origem de rede na Internet. O Athena acessa o Amazon S3 a partir da infraestrutura gerenciada, não da sua VPC. Os pontos de acesso com origem na rede VPC negam solicitações do Athena.

## Etapa 1: Carregar dados de amostra para seu volume FSx for ONTAP
<a name="tutorial-athena-upload-data"></a>

Este tutorial usa os dados de [registro de viagens da Comissão de Táxis e Limusines (TLC) de Nova York, um conjunto de dados publicamente disponível de viagens de táxi na cidade](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page) de Nova York. Os dados estão no formato Apache Parquet, um formato colunar que o Athena pode consultar com eficiência.

Faça o download de um mês de dados amarelos da viagem de táxi e carregue-os em seu volume FSx for ONTAP por meio do ponto de acesso Amazon S3.

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

Faça o upload do arquivo para o volume FSx for ONTAP usando o alias do ponto de acesso. `{{my-ap-alias-ext-s3alias}}`Substitua pelo alias do seu ponto de acesso.

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

Verifique se o arquivo está acessível por meio do ponto de acesso.

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

## Etapa 2: Criar um banco de dados no AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Crie um banco de dados no AWS Glue Data Catalog para armazenar os metadados da tabela. Você pode criar o banco de dados usando o AWS Glue console, o editor de consultas Athena ou o. AWS CLI

**AWS Glue console**

1. Abra o AWS Glue console em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, em **Catálogo de dados**, escolha **Bancos de dados**.

1. Selecione **Adicionar banco de dados**.

1. Em **Nome**, digite `{{fsxn_taxi_demo}}`.

1. Selecione **Criar banco de dados**.

**Editor de consultas Athena ou AWS CLI**

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

## Etapa 3: registrar os dados no AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Você pode registrar seus dados usando um AWS Glue rastreador (recomendado) ou uma `CREATE EXTERNAL TABLE` instrução manual no Athena.

### Opção A: use um AWS Glue rastreador (recomendado)
<a name="tutorial-athena-glue-crawler"></a>

Um AWS Glue rastreador descobre automaticamente o esquema dos seus dados e cria uma tabela no. AWS Glue Data Catalog Essa é a abordagem recomendada porque o rastreador infere os tipos de coluna corretos dos metadados do arquivo Parquet.

1. Crie um rastreador que aponte para o alias do ponto de acesso. `{{my-ap-alias-ext-s3alias}}`Substitua pelo alias do seu ponto de acesso e `{{my-glue-role-arn}}` pelo ARN da AWS Glue sua função do 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. Execute o crawler do .

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

1. Verifique o status do rastreador. O rastreador normalmente é concluído em um a dois minutos.

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

   Quando o rastreador termina, o estado é `READY` e o status é. `SUCCEEDED` O rastreador cria uma tabela chamada `taxi_data` (derivada do nome da pasta) no banco de dados. `fsxn_taxi_demo`

### Opção B: criar uma tabela manualmente no Athena
<a name="tutorial-athena-manual-ddl"></a>

Se você já conhece o esquema dos seus dados, pode criar a tabela diretamente no Athena usando `CREATE EXTERNAL TABLE` uma instrução. Use o alias do ponto de acesso na `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**  
Os tipos de coluna devem corresponder aos tipos no arquivo Parquet. Para esse conjunto de dados, campos como `passenger_count` e `VendorID` são armazenados como `bigint` (INT64) no arquivo Parquet, não. `double` Se os tipos não corresponderem, o Athena retornará um `HIVE_BAD_DATA` erro. Usar um AWS Glue rastreador (Opção A) evita esse problema porque o rastreador infere automaticamente os tipos corretos.

## Etapa 4: consulte seus dados
<a name="tutorial-athena-query-data"></a>

Abra o editor de consultas Athena ou use o AWS CLI para executar consultas SQL em seus dados FSx for ONTAP. Os exemplos a seguir usam a tabela criada pelo AWS Glue crawler ()`taxi_data`. Se você criou a tabela manualmente, `taxi_data` substitua por`yellow_taxi_trips`.

**Conte o total de viagens e calcule as médias**

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

Resultado do exemplo:


| total de viagens | média de distâncias\_milhas | avg\_total\_usd | avg\_passengers | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26,80 | 1.3 | 

**Encontre os horários de coleta mais movimentados**

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

**Encontre os locais de coleta com maior receita**

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

## Considerações
<a name="tutorial-athena-considerations"></a>
+ **Read-only acesso.** O Athena lê os dados do seu volume FSx for ONTAP por meio do ponto de acesso. Os resultados da consulta do Athena são gravados no bucket de resultados do Amazon S3, não no volume FSx for ONTAP.
+ **É necessária uma origem na Internet.** Athena acessa o Amazon S3 a partir de uma infraestrutura gerenciada fora da sua VPC. As chaves de `aws:SourceVpce` condição `aws:SourceVpc` e não estão disponíveis para solicitações do Athena. Você deve usar um ponto de acesso de origem na Internet.
+ **Formato de arquivo.** O Athena é compatível com Parquet, ORC, JSON, CSV e outros formatos. Formatos colunares, como Parquet e ORC, oferecem o melhor desempenho de consulta porque o Athena lê somente as colunas referenciadas na sua consulta.
+ **Permissões de usuário do sistema de arquivos.** O usuário do sistema de arquivos associado ao ponto de acesso deve ter permissão de leitura nos arquivos que estão sendo consultados.
+ **AWS Glue Data Catalog a mesa é reutilizável.** Depois de registrar uma tabela no AWS Glue Data Catalog, ela estará disponível para outros serviços de AWS análise que se integram ao AWS Glue Data Catalog, como Amazon Redshift Spectrum, AWS Glue Amazon EMR e tarefas de ETL.

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

Para evitar cobranças contínuas, exclua os recursos que você criou neste tutorial.

1. Elimine as tabelas e o banco de dados do 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. Exclua o AWS Glue rastreador.

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

1. Exclua os dados de amostra do volume FSx for ONTAP.

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