

# Usar o Athena SQL
<a name="using-athena-sql"></a>

Você pode usar o Athena SQL para consultar os dados no Amazon S3 localmente ao usar o [AWS Glue Data Catalog](data-sources-glue.md), [um metastore externo do Hive](connect-to-data-source-hive.md) ou [consultas federadas](federated-queries.md) usando uma variedade de [conectores criados previamente](connectors-available.md) para outras fontes de dados.

Você também pode:
+ Conectar-se a ferramentas de business intelligence e outras aplicações usando os [drivers JDBC e ODBC do Athena](https://docs.aws.amazon.com/athena/latest/ug/athena-bi-tools-jdbc-odbc.html). 
+ Consultar [logs de serviço da AWS](querying-aws-service-logs.md). 
+ Consultar [tabelas do Apache Iceberg](querying-iceberg.md), incluindo consultas de passagem de tempo e [conjuntos de dados do Apache Hudi](querying-hudi.md). 
+ Consultar [dados geoespaciais](querying-geospatial-data.md). 
+ Consultar usando a [inferência de machine learning](https://docs.aws.amazon.com/athena/latest/ug/querying-mlmodel.html) do Amazon SageMaker AI.
+ Consultar usando suas próprias [funções definidas pelo usuário](https://docs.aws.amazon.com/athena/latest/ug/querying-udf.html).
+ Acelerar o processamento de consultas de tabelas altamente particionadas e automatizar o gerenciamento de partições usando a [projeção de partições](https://docs.aws.amazon.com/athena/latest/ug/partition-projection.html).

**Topics**
+ [

# Noções básicas sobre tabelas, bancos de dados e catálogos de dados no Athena
](understanding-tables-databases-and-the-data-catalog.md)
+ [

# Conceitos básicos
](getting-started.md)
+ [

# Conectar-se à fonte de dados
](work-with-data-stores.md)
+ [

# Conectar ao Amazon Athena com drivers JDBC e ODBC
](athena-bi-tools-jdbc-odbc.md)
+ [

# Criar bancos de dados e tabelas
](work-with-data.md)
+ [

# Criar uma tabela com base em resultados de consultas (CTAS)
](ctas.md)
+ [

# Usar SerDes
](serde-reference.md)
+ [

# Executar consultas SQL no Amazon Athena
](querying-athena-tables.md)
+ [

# Usar transações ACID do Athena
](acid-transactions.md)
+ [

# Segurança do Amazon Athena
](security.md)
+ [

# Gerenciamento do workload
](workload-management.md)
+ [

# Versionamento do mecanismo do Athena
](engine-versions.md)
+ [

# Referência do SQL para o Athena
](ddl-sql-reference.md)
+ [

# Solucionar problemas no Athena
](troubleshooting-athena.md)
+ [

# Exemplos de código
](code-samples.md)

# Noções básicas sobre tabelas, bancos de dados e catálogos de dados no Athena
<a name="understanding-tables-databases-and-the-data-catalog"></a>

No Athena, os catálogos, os bancos de dados e as tabelas são contêineres para as definições de metadados que definem um esquema para os dados de origem subjacentes.

O Athena utiliza os seguintes termos para se referir às hierarquias de objetos de dados:
+ **Fonte de dados**: um grupo de bancos de dados
+ **Banco de dados**: um grupo de tabelas
+ **Tabela**: dados organizados como um grupo de linhas ou colunas

Às vezes, esses objetos também são chamados por nomes alternativos, mas equivalentes, como:
+ Às vezes uma fonte de dados é denominada catálogo.
+ Às vezes um banco de dados é denominado esquema.

**nota**  
A terminologia pode variar nas fontes de dados federadas usadas com o Athena. Para obter mais informações, consulte [Noções básicas de qualificadores de nomes de tabelas federadas](tables-qualifiers.md). 

Para cada conjunto de dados, deve existir uma tabela no Athena. Os metadados na tabela informam ao Athena onde os dados estão localizados no Amazon S3 e especificam a estrutura dos dados, por exemplo, nomes de coluna, tipos de dados e o nome da tabela. Os bancos de dados são um agrupamento lógico de tabelas e também mantêm somente metadados e informações do esquema de um conjunto de dados.

Para cada conjunto de dados que você deseja consultar, o Athena deve ter uma tabela subjacente que ele usará para obter e retornar os resultados das consultas. Portanto, antes de consultar os dados, uma tabela deve ser registrada no Athena. O registro ocorre quando você cria tabelas automática ou manualmente.

É possível criar uma tabela automaticamente usando um crawler do AWS Glue. Para obter mais informações sobre AWS Glue e crawlers, consulte [Usar o AWS Glue Data Catalog para se conectar aos seus dados](data-sources-glue.md). Quando o AWS Glue cria uma tabela, ele a registra no próprio Catálogo de dados do AWS Glue. O Athena usa o Catálogo de dados do AWS Glue para armazenar e recuperar esses metadados, usando-o quando você executa consultas para analisar o conjunto de dados subjacente.

Seja qual for o modo de criação da tabela, o processo de criação de tabelas registra o conjunto de dados no Athena. Esse registro ocorre no AWS Glue Data Catalog e permite que o Athena execute consultas nos dados. No editor de consultas do Athena, esse catálogo (ou fonte de dados) é referenciado com o rótulo `AwsDataCatalog`.

Após criar uma tabela, use as instruções [SQL SELECT](select.md) para consultá-la e obter os [locais de arquivo específicos para seus dados de origem](select.md#select-path). Os resultados das consultas são armazenados no Amazon S3 no [local de resultados de consultas especificado](query-results-specify-location.md).

O Catálogo de dados do AWS Glue fica acessível em toda a sua conta da Amazon Web Services. Outros Serviços da AWS podem compartilhar o Catálogo de dados do AWS Glue, portanto, você pode ver os bancos de dados e as tabelas criados em toda a organização usando o Athena e vice-versa.
+ Para criar uma tabela manualmente:
  + Use o console do Athena para executar o **Create Table Wizard** (Assistente de criação de tabela).
  + Use o console do Athena para escrever instruções DDL do Hive no editor de consultas.
  + Use a API ou a CLI do Athena para executar uma string de consulta SQL com instruções DDL.
  + Use o driver JDBC ou ODBC do Athena.

Quando você cria tabelas e bancos de dados manualmente, o Athena usa as instruções Data Definition Language (DDL – Linguagem de definição de dados) do HiveQL, como `CREATE TABLE`, `CREATE DATABASE` e `DROP TABLE` em segundo plano para criar tabelas e bancos de dados no AWS Glue Data Catalog.

Para começar, use um tutorial no console do Athena ou leia um guia detalhado na documentação do Athena.
+ Para usar o tutorial no console do Athena, escolha o ícone de informações no canto superior direito do console e escolha a guia **Tutorial**.
+ Para ver um tutorial detalhado sobre como criar uma tabela e gravar consultas no editor de consultas do Athena, consulte [Conceitos básicos](getting-started.md).

# Conceitos básicos
<a name="getting-started"></a>

Este tutorial orienta você a usar o Amazon Athena para consultar dados. Você criará uma tabela com base nos dados de exemplo armazenados no Amazon Simple Storage Service, consultará a tabela e verificará os resultados da consulta.

O tutorial usa recursos dinâmicos. Sendo assim, há cobrança pelas consultas que você executa. Não há cobrança pelos dados de exemplo no local usados neste tutorial, mas se você carregar seus próprios arquivos de dados no Amazon S3, haverá cobrança.

## Pré-requisitos
<a name="getting-started-prerequisites"></a>
+ Se ainda não tiver feito isso, [cadastre-se para um Conta da AWS](setting-up.md#sign-up-for-aws).
+ Usando a mesma Região da AWS (por exemplo, Oeste dos EUA (Oregon)) e a conta que você usa no Athena, siga as etapas para [criar um bucket no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) para armazenar os resultados das consultas do Athena. Você configurará esse bucket para ser o local de saída da consulta.

**Topics**
+ [

## Pré-requisitos
](#getting-started-prerequisites)
+ [

# Etapa 1: criar um banco de dados
](step-1-create-a-database.md)
+ [

# Etapa 2: Criar uma tabela
](step-2-create-a-table.md)
+ [

# Etapa 3: consultar dados
](step-3-query-data.md)
+ [

# Etapa 4: usar as consultas nomeadas
](step-4-use-named-queries.md)
+ [

# Etapa 5: usar atalhos de teclado e sugestões de digitação antecipada
](step-5-using-keyboard-shortcuts.md)
+ [

# Etapa 6: conectar-se a outras fontes de dados
](step-6-connect-to-other-data-sources.md)

# Etapa 1: criar um banco de dados
<a name="step-1-create-a-database"></a>

Primeiro você precisa criar um banco de dados no Athena.

**Para criar um banco de dados do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se esta for a primeira vez que você acessa o console do Athena em sua Região da AWS, escolha **Explore the query editor** (Explorar o editor de consultas) para abrir o editor de consultas. Do contrário, o Athena é aberto no editor de consultas.

1. Escolha **Edit Settings** (Editar configurações) para configurar um local para os resultados de consultas no Amazon S3.  
![\[Escolha Edit Settings.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-choose-view-settings.png)

1. Em **Manage settings** (Gerenciar configurações), faça um dos seguintes procedimentos:
   + Na caixa de texto **Query result location** (Localização dos resultados da consulta), insira o caminho para o bucket criado no Amazon S3 para resultados de consultas. Adicione o prefixo ao caminho `s3://`.
   + Escolha **Browse S3** (Navegar no S3), escolha o bucket do Amazon S3 que você criou na região atual e escolha **Choose** (Escolher).  
![\[Especifique um local no Amazon S3 para receber os resultados das consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-setting-results-location.png)

1. Escolha **Salvar**.

1. Selecione **Editor** para alternar para o editor de consultas.  
![\[Escolha Editor.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-choose-editor.png)

1. À direita do painel de navegação, você pode usar o editor de consultas do Athena para inserir e executar as consultas e instruções.

1. Para criar um banco de dados denominado `mydatabase`, insira a instrução CREATE DATABASE a seguir.

   ```
   CREATE DATABASE mydatabase
   ```

1. Selecione **Run** (Executar) ou pressione **Ctrl\$1ENTER**.

1. Na lista **Database** (Banco de dados) à esquerda, escolha `mydatabase` para torná-lo seu banco de dados atual.

# Etapa 2: Criar uma tabela
<a name="step-2-create-a-table"></a>

Agora que você tem um banco de dados, pode criar uma tabela do Athena para ele. A tabela criada será baseada nos dados de log de exemplo do Amazon CloudFront no local `s3://athena-examples-myregion/cloudfront/plaintext/`, em que *myregion* é a sua Região da AWS atual.

Os dados de log de exemplo estão no formato Tab-Separated Values (TSV – Valores separados por tabulação), o que significa que um caractere de tabulação é usado como delimitador para separar os campos. Veja no exemplo abaixo a aparência dos dados. Para legibilidade, as guias no trecho foram convertidas em espaços e o campo final foi reduzido. 

```
2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]
```

Para permitir que o Athena leia esses dados, você pode criar uma instrução `CREATE EXTERNAL TABLE` direta, semelhante à apresentada abaixo. A instrução que cria a tabela define as colunas que são mapeadas para os dados, especifica como os dados são delimitados e o local do Amazon S3 que contém os dados de exemplo. Observe que, como o Athena espera fazer a varredura de todos os arquivos em uma pasta, a cláusula `LOCATION` especifica um local de pasta do Amazon S3 e não um arquivo específico. 

Não use esse exemplo ainda, pois ele tem uma limitação importante que será explicada em breve.

```
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  `Date` DATE,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  ClientInfo STRING
  ) 
  ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '\t'
  LINES TERMINATED BY '\n'
  LOCATION 's3://athena-examples-my-region/cloudfront/plaintext/';
```

O exemplo cria uma tabela chamada `cloudfront_logs` e especifica um nome e tipo de dados para cada campo. Esses campos se tornam as colunas da tabela. Como `date` é uma [palavra reservada](reserved-words.md#list-of-ddl-reserved-words), ela é escapada com caracteres de acento grave (`). `ROW FORMAT DELIMITED` significa que o Athena usará uma biblioteca padrão chamada [LazySimpleSerDe](lazy-simple-serde.md) para fazer o trabalho real de análise dos dados. O exemplo também especifica que os campos são separados por tabulação (`FIELDS TERMINATED BY '\t'`) e que cada registro no arquivo termina com um caractere de nova linha (`LINES TERMINATED BY '\n`). Por fim, a cláusula `LOCATION` especifica o caminho no Amazon S3 onde estão localizados os dados reais que serão lidos. 

Se tiver seus próprios dados separados por tabulação ou vírgula, você poderá usar uma instrução `CREATE TABLE` como a do exemplo que acabamos de apresentar, desde que seus campos não contenham informações aninhadas. No entanto, se você tiver uma coluna como `ClientInfo`, contendo informações aninhadas que usem um delimitador diferente, será necessário adotar outra abordagem.

**Como extrair dados do campo ClientInfo**  
Observando os dados do exemplo, aqui está um exemplo completo da situação final do campo `ClientInfo`:

```
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
```

Como você pode ver, esse é um campo multivalor. Como a instrução `CREATE TABLE` do exemplo apresentado especifica guias como delimitadores de campo, ela não pode decompor em colunas separadas componentes separados dentro do campo `ClientInfo`. Portanto, é necessário empregar uma nova instrução `CREATE TABLE`.

Para criar colunas com base nos valores dentro do campo `ClientInfo`, você pode usar uma [expressão regular](https://en.wikipedia.org/wiki/Regular_expression) (regex) que contenha grupos de regex. Os grupos de regex especificados tornam-se as colunas separadas da tabela. Para usar uma regex na instrução `CREATE TABLE`, use a sintaxe conforme mostrado a seguir. Essa sintaxe instrui o Athena a usar a biblioteca [Regex SerDe](regex-serde.md) e a expressão regular que você especificar.

```
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
  WITH SERDEPROPERTIES ("input.regex" = "regular_expression")
```

As expressões regulares podem ser úteis para criar tabelas com base em dados complexos CSV ou TSV, mas podem ser difíceis de escrever e manter. No entanto, há outras bibliotecas que você pode usar para formatos como JSON, Parquet e ORC. Para obter mais informações, consulte [Escolha de um SerDe para seus dados](supported-serdes.md).

Agora você está pronto para criar a tabela no editor de consultas do Athena. A instrução `CREATE TABLE` e a regex já foram incluídas para você.

**Para criar uma tabela no Athena**

1. No painel de navegação, para **Database** (Banco de dados), certifique-se de que `mydatabase` esteja selecionado.

1. Para ter mais espaço no editor de consultas, escolha o ícone de seta para recolher o painel de navegação.  
![\[Escolha a seta para recolher o painel de navegação.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-collapse-nav-pane.png)

1. Para criar uma guia para um nova consulta, escolha o sinal de adição (**\$1**) no editor de consultas. É possível ter até dez guias de consulta abertas por vez.  
![\[Selecione o ícone de adição para criar uma nova consulta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-new-query-tab.png)

1. Para fechar uma ou mais guias de consulta, escolha a seta ao lado do sinal de mais. Para fechar todas as guias de uma só vez, escolha a seta e escolha **Close all tabs** (Fechar todas as guias).  
![\[Escolha o ícone de seta para fechar uma ou mais guias de consulta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/close-all-query-editor-tabs.png)

1. No painel de consultas, digite a instrução `CREATE EXTERNAL TABLE` a seguir. A regex divide as informações de sistema operacional, navegador e versão do navegador do campo `ClientInfo` nos dados de log.
**nota**  
O regex usado no exemplo a seguir foi projetado para funcionar com os dados de log de amostra do CloudFront disponíveis publicamente no local do Amazon S3 `athena-examples` e é apenas ilustrativo. Para obter expressões regulares mais atualizadas que consultam arquivos de log do CloudFront padrão e em tempo real, consulte [Consultar logs do Amazon CloudFront](cloudfront-logs.md).

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
     `Date` DATE,
     Time STRING,
     Location STRING,
     Bytes INT,
     RequestIP STRING,
     Method STRING,
     Host STRING,
     Uri STRING,
     Status INT,
     Referrer STRING,
     os STRING,
     Browser STRING,
     BrowserVersion STRING
     ) 
     ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
     WITH SERDEPROPERTIES (
     "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
     ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';
   ```

1. Na instrução `LOCATION`, substitua *myregion* pela Região da AWS que você está usando (por exemplo, `us-west-1`). 

1. Escolha **Executar**.

   A tabela `cloudfront_logs` é criada e aparece na lista de **Tables (Tabelas)** para o banco de dados `mydatabase`.

# Etapa 3: consultar dados
<a name="step-3-query-data"></a>

Agora que você criou a tabela `cloudfront_logs` no Athena com base nos dados do Amazon S3, pode executar as consultas SQL na tabela e ver os resultados no Athena. Para obter mais informações sobre como usar o SQL no Athena, consulte [Referência do SQL para o Athena](ddl-sql-reference.md).

**Para executar uma consulta**

1. Clique no sinal de mais (**\$1**) para abrir uma nova guia de consulta e insira a instrução SQL a seguir no painel de consulta.

   ```
   SELECT os, COUNT(*) count 
   FROM cloudfront_logs 
   WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' 
   GROUP BY os
   ```

1. Escolha **Executar**.

   Os resultados são semelhantes ao seguintes:  
![\[Visualização dos resultados da consulta no console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-query-results.png)

1. Para salvar os resultados da consulta em um arquivo `.csv`, escolha **Download results** (Baixar resultados).  
![\[Download dos resultados da consulta no formato CSV.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-query-results-download-csv.png)

1. Para visualizar ou executar consultas anteriores, escolha **Recent queries** (Consultas recentes).  
![\[Escolha Recent querries (Consultas recentes) para visualizar consultas anteriores.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-recent-queries.png)

1. Para baixar os resultados de uma consulta anterior da guia **Recent queries** (Consultas recentes), selecione a consulta e escolha **Download results** (Baixar resultados). As consultas são retidas por 45 dias.  
![\[Visualizar e baixar consultas recentes no console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-recent-queries-tab-download.png)

1. Para baixar uma ou mais strings de consulta SQL recentes como um arquivo CSV, escolha **Download CSV** (Baixar como CSV).  
![\[Como baixar strings de consulta recentes como um arquivo CSV.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-recent-queries-tab-download-csv.png)

   Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md).

# Etapa 4: usar as consultas nomeadas
<a name="step-4-use-named-queries"></a>

É possível salvar as consultas criadas ou editadas no editor de consultas com um nome. O Athena armazena essas consultas na guia **Saved queries** (Consultas salvas). Você pode usar a guia **Saved queries** (Consultas salvas) para chamar novamente, executar, renomear ou excluir consultas salvas. Para obter mais informações, consulte [Usar consultas salvas](saved-queries.md).

# Etapa 5: usar atalhos de teclado e sugestões de digitação antecipada
<a name="step-5-using-keyboard-shortcuts"></a>

O editor de consultas Athena fornece vários atalhos de teclado para ações como executar uma consulta, formatar uma consulta, operações de linha e localizar e substituir. Para obter mais informações e uma lista completa de atalhos, consulte [Melhore a produtividade usando atalhos de teclado no editor de consultas Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-productivity-by-using-keyboard-shortcuts-in-amazon-athena-query-editor/) no *AWSBlog Big Data*.

O editor de consultas do Athena é compatível com sugestões de código de digitação antecipada para proporcionar uma experiência de criação de consultas mais rápida. Para ajudar você a escrever consultas SQL com maior precisão e eficiência, ele oferece os seguintes atributos: 
+ Enquanto você digita, as sugestões são exibidas em tempo real para palavras-chave, variáveis locais, trechos e itens de catálogo. 
+ Quando você digita um nome de banco de dados ou nome de tabela seguido por um ponto, o editor exibe, de maneira conveniente, uma lista de tabelas ou colunas para escolher.
+ Quando você passa o mouse sobre uma sugestão de trecho, uma sinopse exibe uma breve visão geral da sintaxe e do uso do trecho.
+ Para melhorar a legibilidade do código, as palavras-chave e as respectivas regras de destaque também foram atualizadas para se alinharem à sintaxe mais recente do Trino e do Hive. 

Esse recurso está habilitado por padrão. Para ativar ou desativar o recurso, use **Preferências do editor de código** (ícone de engrenagem) na parte inferior direita da janela do editor de consultas. 

# Etapa 6: conectar-se a outras fontes de dados
<a name="step-6-connect-to-other-data-sources"></a>

Este tutorial usou uma origem dos dados em formato CSV no Amazon S3. Para obter mais informações sobre como usar o Athena com o AWS Glue, consulte [Usar o AWS Glue Data Catalog para se conectar aos seus dados](data-sources-glue.md). É possível também conectar o Athena a uma variedade de origens de dados usando os drivers ODBC e JDBC, os metastores externos do Hive e os conectores de origem dos dados do Athena. Para obter mais informações, consulte [Conectar-se à fonte de dados](work-with-data-stores.md).

# Conectar-se à fonte de dados
<a name="work-with-data-stores"></a>

Você pode usar o Amazon Athena para consultar os dados armazenados em diferentes locais e formatos em um *conjunto de dados*. Esse conjunto de dados pode estar em CSV, JSON, Avro, Parquet ou outro formato.

As tabelas e os bancos de dados com os quais você trabalha no Athena para executar consultas são baseados em *metadados*. Metadados são dados sobre os dados subjacentes em seu conjunto de dados. A forma como esses metadados descrevem seu conjunto de dados é chamada de *esquema*. Por exemplo, um nome de tabela, os nomes de coluna na tabela e o tipo de dados de cada coluna são esquemas, salvos como metadados, que descrevem um conjunto de dados subjacente. No Athena, chamamos um sistema para organizar metadados de *catálogo de dados* ou de *metastore*. A combinação de um conjunto de dados e o catálogo de dados que o descreve é chamada de *fonte de dados*.

A relação dos metadados com um conjunto de dados subjacente depende do tipo de fonte de dados com a qual você trabalha. Fontes de dados relacionais como MySQL, PostgreSQL e SQL Server integram totalmente os metadados ao conjunto de dados. Nesses sistemas, os metadados são gravados com maior frequência quando os dados são gravados. Outras fontes de dados, como aquelas criadas usando o [Hive](https://hive.apache.org), permitem definir metadados em tempo real ao ler o conjunto de dados. O conjunto de dados pode estar em uma variedade de formatos, por exemplo, CSV, JSON, Parquet ou Avro.

O Athena tem compatibilidade nativa com o AWS Glue Data Catalog. O AWS Glue Data Catalog é um catálogo de dados desenvolvido com base em outros conjuntos e origens de dados, como Amazon S3, Amazon Redshift e Amazon DynamoDB. Você também pode conectar o Athena a outras origens de dados usando uma variedade de conectores.

**Topics**
+ [

# Usar o AWS Glue Data Catalog para se conectar aos seus dados
](data-sources-glue.md)
+ [

# Usar a consulta federada do Amazon Athena
](federated-queries.md)
+ [

# Usar o Amazon DataZone no Athena
](datazone-using.md)
+ [

# Usar um metastore externa do Hive
](connect-to-data-source-hive.md)
+ [

# Gerenciar suas fontes de dados
](data-sources-managing.md)

# Usar o AWS Glue Data Catalog para se conectar aos seus dados
<a name="data-sources-glue"></a>

O Athena usa o AWS Glue Data Catalog para armazenar metadados, como nomes de tabela e de coluna para se conectar aos dados armazenados no Amazon S3. Essas informações de metadados tornam-se os bancos de dados, as tabelas e as visualizações que são exibidas no editor de consultas do Athena.

Ao usar o Athena com o AWS Glue Data Catalog, é possível usar o AWS Glue para criar bancos de dados e tabelas (esquema) para serem consultados no Athena ou usar o Athena para criar um esquema e usá-lo no AWS Glue e nos serviços relacionados. 

Para definir informações de esquema para o AWS Glue, você pode usar um formulário no console do Athena, usar o editor de consultas no Athena ou criar um crawler do AWS Glue no console do AWS Glue. Os crawlers do AWS Glue inferem automaticamente o esquema de banco de dados e tabela dos seus dados do Amazon S3. Usar um formulário oferece mais personalização. Escrever suas próprias instruções `CREATE TABLE` exige mais esforço, mas oferece mais controle. Para obter mais informações, consulte [CREATE TABLE](create-table.md).

## Recursos adicionais
<a name="glue-additional-resources"></a>
+ Para obter mais informações sobre o AWS Glue Data Catalog, consulte [Data Catalog e crawlers no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) no *Guia do desenvolvedor do AWS Glue*.
+ Para ver um artigo ilustrativo que mostra como usar o AWS Glue e o Athena para processar dados XML, consulte [Process and analyze highly nested and large XML files using AWS Glue and Amazon Athena](https://aws.amazon.com/blogs/big-data/process-and-analyze-highly-nested-and-large-xml-files-using-aws-glue-and-amazon-athena/) no blog do AWS Big Data.
+ São feitas cobranças separadas pelo uso do AWS Glue. Para obter mais informações, consulte [Preços do AWS Glue](https://aws.amazon.com/glue/pricing).

**Topics**
+ [

## Recursos adicionais
](#glue-additional-resources)
+ [

# Registrar e usar catálogos de dados no Athena
](gdc-register.md)
+ [

# Registrar um catálogo de dados de outra conta
](data-sources-glue-cross-account.md)
+ [

# Controlar o acesso a catálogos de dados com políticas do IAM
](datacatalogs-iam-policy.md)
+ [

# Usar um formulário no console do Athena para adicionar uma tabela do AWS Glue
](data-sources-glue-manual-table.md)
+ [

# Usar um crawler para adicionar uma tabela
](schema-crawlers.md)
+ [

# Otimizar consultas com indexação e filtragem de partições do AWS Glue
](glue-best-practices-partition-index.md)
+ [

# Usar a AWS CLI para recriar um banco de dados do AWS Glue e suas tabelas
](glue-recreate-db-and-tables-cli.md)
+ [

# Criação de tabelas para trabalhos de ETL
](schema-classifier.md)
+ [

# Trabalhar com dados CSV no AWS Glue
](schema-csv.md)
+ [

# Trabalhar com dados geoespaciais no AWS Glue
](schema-geospatial.md)

# Registrar e usar catálogos de dados no Athena
<a name="gdc-register"></a>

O Athena é compatível com a montagem e conexão com vários catálogos de dados. 
+ Você pode montar dados do Amazon Redshift no AWS Glue Data Catalog e consultá-los no Athena sem precisar copiar ou mover dados. Para obter mais informações, consulte [Bringing Amazon Redshift data into the AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html).
+  Conecte o AWS Glue Data Catalog a fontes de dados externas usando conexões do AWS Glue e crie catálogos federados para gerenciar centralmente as permissões aos dados com controle de acesso refinado usando o Lake Formation. Para obter mais informações, consulte [Registrar sua conexão como um Glue Data Catalog](register-connection-as-gdc.md).
+ Crie catálogos com base em buckets de tabela do Amazon S3 e use o Lake Formation para gerenciar centralmente as permissões de acesso e restringir o acesso do usuário aos objetos dentro do bucket de tabela. Para obter mais informações, consulte [Working with Amazon S3 Tables and table buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html) no Guia do usuário do Amazon S3.

**nota**  
Para qualquer catálogo do Glue, você só pode registrar um catálogo de vários níveis, como `123412341234:my_catalog/my_child`. Você não pode registrar um catálogo de nível único como `123412341234:linkcontainer` ou `my_catalog`. Catálogos de nível único só podem ser consultados usando o catálogo de dados Glue diretamente na consulta do Athena. Para obter mais informações, consulte [Consultar catálogos de dados do AWS Glue no Athena](gdc-register-query-the-data-source.md). 

**Topics**
+ [

# Registrar catálogos de dados do Redshift no Athena
](gdc-register-rs.md)
+ [

# Registrar catálogos federados no Athena
](gdc-register-federated.md)
+ [

# Registrar catálogos de buckets de tabela do S3 e consultar tabelas no Athena
](gdc-register-s3-table-bucket-cat.md)
+ [

# Consultar catálogos de dados do AWS Glue no Athena
](gdc-register-query-the-data-source.md)

# Registrar catálogos de dados do Redshift no Athena
<a name="gdc-register-rs"></a>

O Athena pode ler e gravar dados armazenados em clusters do Redshift ou namespaces com tecnologia sem servidor registrados no AWS Glue Data Catalog. Isso funciona em conjunto com o AWS Lake Formation, que fornece segurança e governança centralizadas, garantindo que o acesso aos dados seja gerenciado de modo consistente em diferentes mecanismos de consulta e mantendo controles de acesso refinados para os dados compartilhados do Redshift.

## Considerações e limitações
<a name="gdc-register-rs-considerations-and-limitations"></a>
+ **Visões materializadas**: as visões materializadas do Amazon Redshift podem ser consultadas no Athena, mas não há compatibilidade com a criação de visões materializadas usando o Athena ou o Spark.
+ Não há compatibilidade com as operações de DDL, incluindo a definição da configuração do AWS Glue Data Catalog e as operações nas tabelas de armazenamento gerenciado do Amazon Redshift.

## Pré-requisitos
<a name="gdc-register-rs-prerequisites"></a>

Antes que você possa consultar um catálogo de dados do AWS Glue pelo Athena, conclua as seguintes tarefas:

1. Crie e registre um cluster do Amazon Redshift ou namespace com tecnologia sem servidor no AWS Glue Data Catalog. Para obter mais informações, consulte [Registering a cluster to the AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/register-cluster.html) ou [Registering namespaces to the AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_datasharing-register-namespace.html) no Guia de gerenciamento do Amazon Redshift.

1. Crie um catálogo de dados do AWS Lake Formation usando o namespace registrado. Para obter mais informações, consulte [Creating Amazon Redshift federated catalogs](https://docs.aws.amazon.com/lake-formation/latest/dg/create-ns-catalog.html) no Guia do desenvolvedor do AWS Lake Formation.

1. (Opcional) Use o Lake Formation para definir controles de acesso refinados no catálogo. Para obter mais informações, consulte [Bringing your data into the AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/bring-your-data-overview.html) no Guia do desenvolvedor do AWS Lake Formation.

## Registrar um catálogo de dados do Redshift com o console do Athena
<a name="gdc-register-rs-console-steps"></a>

Para registrar um catálogo de dados do Redshift no console do Athena, execute as etapas a seguir.

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Em **Escolher uma fonte de dados**, escolha **Amazon S3 - AWS Glue Data Catalog**.

1. Na seção **AWS Glue Data Catalog**, em **Conta da fonte de dados**, escolha **AWS Glue Data Catalog nesta conta**.

1. Em **Criar uma tabela ou registrar um catálogo**, escolha **Registrar um novo catálogo do AWS Glue**.

1. Na seção **Detalhes da fonte de dados**, em **Nome da fonte de dados**, insira o nome que deseja usar para especificar a fonte de dados em suas consultas SQL ou use o nome padrão gerado.

1. Em **Catálogo**, escolha **Procurar** para pesquisar uma lista de catálogos do AWS Glue na mesma conta. Se você não encontrar nenhum catálogo existente, crie um no [console do AWS Glue](https://console.aws.amazon.com/glue/). 

1. Na caixa de diálogo **Procurar catálogos do AWS Glue**, selecione o catálogo que deseja usar e selecione **Escolher**.

1. (Opcional) Em **Tags**, adicione pares de chave/valor que queira associar à fonte de dados.

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, verifique se as informações inseridas estão corretas e selecione **Criar fonte de dados**.

# Registrar catálogos federados no Athena
<a name="gdc-register-federated"></a>

Após criar conexões com fontes de dados federadas, você poderá registrá-las como catálogos de dados federados para simplificar a descoberta de dados e gerenciar o acesso aos dados com permissões refinadas usando o Lake Formation. Para obter mais informações, consulte [Registrar sua conexão como um Glue Data Catalog](register-connection-as-gdc.md).

## Considerações e limitações
<a name="gdc-register-federated-consideration"></a>
+ Não há compatibilidade com operações de DDL em catálogos federados. 
+ É possível registrar os seguintes conectores para integração com o AWS Glue a fim de oferecer um controle de acesso refinado:
  + [Azure Data Lake Storage](connectors-adls-gen2.md)
  + [Azure Synapse](connectors-azure-synapse.md)
  + [BigQuery](connectors-bigquery.md)
  + [CMDB](connectors-cmdb.md)
  + [Db2](connectors-ibm-db2.md)
  + [Db2 iSeries](connectors-ibm-db2-as400.md)
  + [DocumentDB](connectors-docdb.md)
  + [DynamoDB](connectors-dynamodb.md)
  + [Google Cloud Storage](connectors-gcs.md)
  + [HBase](connectors-hbase.md)
  + [MySQL](connectors-mysql.md)
  + [OpenSearch](connectors-opensearch.md)
  + [Oracle](connectors-oracle.md)
  + [PostgreSQL](connectors-postgresql.md)
  + [Redshift](connectors-redshift.md)
  + [SAP HANA](connectors-sap-hana.md)
  + [Snowflake](connectors-snowflake.md)
  + [do SQL Server](connectors-microsoft-sql-server.md)
  + [Timestream](connectors-timestream.md)
  + [TPC-DS](connectors-tpcds.md)
+ Quando você cria um link de recurso para a federação de conexões do Glue, o nome do [link de recurso](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html) precisa ser igual ao nome do banco de dados do produtor.
+ Atualmente, somente nomes de tabelas e colunas em minúsculas são reconhecidos, mesmo que a fonte de dados não diferencie maiúsculas de minúsculas.

# Registrar catálogos de buckets de tabela do S3 e consultar tabelas no Athena
<a name="gdc-register-s3-table-bucket-cat"></a>

Os buckets de tabela do Amazon S3 são um tipo de bucket no Amazon S3 criado especificamente para armazenar dados tabulares nas tabelas do Apache Iceberg. Os buckets de tabela automatizam as tarefas de gerenciamento de tabelas, como compactação, gerenciamento de snapshots e coleta de resíduos, para otimizar continuamente o desempenho das consultas e minimizar os custos. Se você está apenas começando ou tem milhares de tabelas em seu ambiente do Iceberg, os buckets de tabela simplificam os data lakes em qualquer escala. Para obter mais informações, consulte [Buckets de tabela](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).

## Considerações e limitações
<a name="gdc-register-s3-table-consideration"></a>
+ Todas as operações de DDL aceitas em tabelas do Iceberg são compatíveis com tabelas do S3, com as seguintes exceções:
  + Não há suporte a `ALTER TABLE RENAME`, `CREATE VIEW` e `ALTER DATABASE`.
  + `OPTIMIZE` e `VACUUM`: é possível gerenciar a compactação e o gerenciamento de snapshots no S3. Para obter mais informações, consulte a [documentação de manutenção de tabelas do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).
+ Não há suporte a consultas de DDL em tabelas do S3 registradas como fontes de dados do Athena.
+ Não há suporte à reutilização de resultados de consultas.
+ Em grupos de trabalho com criptografia SSE-KMS, CSE-KMS ativada, não é possível executar operações de gravação como `INSERT`, `UPDATE`, `DELETE` ou `MERGE` em tabelas do S3.
+ Em grupos de trabalho com a opção S3 Requester Pays ativada, não é possível executar operações de DML em tabelas do S3.

## Consultar tabelas do S3 via Athena
<a name="gdc-register-s3-table-prereq-setup"></a>

**Conclua estas etapas obrigatórias antes de consultar tabelas do S3 no Athena**

1. Crie um bucket de tabela do S3. Para obter mais informações, consulte [Creating a table bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html) no Guia do usuário do Amazon Simple Storage Service. 

1. Certifique-se de que a integração de seus buckets com o AWS Glue Data Catalog seja bem-sucedida. Para obter as permissões necessárias e as etapas de configuração, consulte [Prerequisites for S3 Tables integration](https://docs.aws.amazon.com/glue/latest/dg/s3tables-catalog-prerequisites.html) (Pré-requisitos para a integração do Tabelas do S3) e [Enabling S3 Tables integration with Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/enable-s3-tables-catalog-integration.html) (Como habilitar a integração do Tabelas do S3 com o Glue Data Catalog) no Guia do desenvolvedor do AWS Glue.

1. Para a entidade principal que você usa para executar consultas com o Athena, conceda permissões no catálogo do Tabelas do S3 usando uma das seguintes abordagens: 

   **Opção 1: usar permissões do IAM**

   Ao usar o controle de acesso do IAM, sua entidade principal precisa de permissões tanto nos recursos AWS Glue Data Catalog quanto nos recursos do Tabelas do Amazon S3.

   A lista a seguir contém todas as permissões `s3tables` necessárias para realizar qualquer operação DDL ou DML compatível com suas Tabelas do S3 no Athena:
   + `s3tables:GetTableBucket`
   + `s3tables:GetNamespace`
   + `s3tables:GetTable`
   + `s3tables:GetTableData`
   + `s3tables:PutTableData`
   + `s3tables:ListNamespaces`
   + `s3tables:ListTables`
   + `s3tables:DeleteNamespace`
   + `s3tables:DeleteTable`
   + `s3tables:CreateNamespace`
   + `s3tables:CreateTable`
   + `s3tables:UpdateTableMetadataLocation`

   Aplique essas permissões a recursos específicos do bucket do Tabelas do S3 e do recursos do Tabelas do S3 ou use `*` como recurso para conceder acesso a todos os buckets e tabelas da sua conta. Essas permissões podem ser combinadas com a política gerenciada [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) para permitir a funcionalidade completa.

   **Opção 2: usar as permissões do Lake Formation**

   Alternativamente, para habilitar o controle de acesso granular, você pode conceder permissões ao Lake Formation no catálogo do Tabelas do S3, seja por meio do console do Lake Formation ou AWS CLI. Isso requer o registro dos seus buckets da tabela do S3 como um local de dados do Lake Formation. Para obter mais informações, consulte [Criar um catálogo do Tabelas do Amazon S3 no AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) no Guia do Desenvolvedor do Lake Formation.

------
#### [ Console de gerenciamento da AWS ]

   1. Abra o console do AWS Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) e acesse como administrador do data lake. Para obter mais informações sobre como criar um administrador de data lake, consulte [Create a data lake administrator](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin).

   1. No painel de navegação, escolha **Permissões de dados** e **Conceder**. 

   1. Na página **Conceder Permissões**, em **Entidades principais**, escolha a entidade principal que deseja usar para enviar uma consulta do Athena.

   1. Em **Tags do LF ou recursos de catálogo**, escolha **Recursos do catálogo de dados nomeados**.

   1. Em **Catálogos**, escolha um catálogo de dados do Glue que você criou com base na integração do seu bucket de tabela. Por exemplo, *<accoundID>*:s3tablescatalog/*amzn-s3-demo-bucket*.

   1. Em **Permissões de catálogo**, escolha **Super**.

   1. Selecione **Conceder**.

------
#### [ AWS CLI ]

   Execute o comando a seguir com o perfil de administrador do data lake do Lake Formation para conceder acesso à entidade principal que você usa para enviar consultas do Athena. 

   ```
   aws lakeformation grant-permissions \
   --region <region (Example,us-east-1)> \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>"
       },
       "Resource": {
           "Catalog": {
               "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket"
           }
       },
       "Permissions": ["ALL"]
   }'
   ```

------

**Enviar consultas para tabelas do S3**

1. Envie uma consulta `CREATE DATABASE` do Athena com o usuário/perfil concedido acima. Neste exemplo, `s3tablescatalog` é o Catálogo de Dados do Glue principal criado com base na integração e ` s3tablescatalog/amzn-s3-demo-bucket` o Catálogo de Dados do Glue secundário criado para cada bucket de tabela do S3. Há duas maneiras de fazer a consulta.

------
#### [ Option 1 ]

   Especifique o Catálogo de Dados do Glue secundário (`s3tablescatalog/amzn-s3-demo-bucket`) diretamente do console ou AWS CLI.

   **Usar o Console de gerenciamento da AWS**

   1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. No painel de navegação à esquerda, em **Nome da fonte de dados**, escolha **AwsDataCatalog**.

   1. Em **Catálogo**, escolha **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. No editor de consultas, insira uma consulta, como `CREATE DATABASE test_namespace`.

   **Usar o AWS CLI**

   Execute o comando a seguir.

   ```
   aws athena start-query-execution \ 
   --query-string 'CREATE DATABASE `test_namespace`' \ 
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \
   --work-group "primary"
   ```

------
#### [ Option 2 ]

   Crie o catálogo de dados do Athena com base no Catálogo de Dados do Glue secundário no console do Athena e especifique-o como um catálogo na consulta. Para obter mais informações, consulte [Registrar catálogos de buckets de tabelas do S3 como fontes de dados do Athena](#gdc-register-s3-table-console-steps).

------

1. Com o banco de dados que você criou na etapa anterior, use `CREATE TABLE` para criar uma tabela. O exemplo a seguir cria uma tabela no banco de dados *`test_namespace`* que você criou anteriormente no catálogo `s3tablescatalog/amzn-s3-demo-bucket` do Glue.

------
#### [ Console de gerenciamento da AWS ]

   1. No painel de navegação à esquerda, em **Nome da fonte de dados**, escolha **AwsDataCatalog**.

   1. Em **Catálogo**, escolha **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Em **Banco de dados**, escolha **test\$1namespace**.

   1. No editor de consultas, execute a consulta a seguir.

      ```
      CREATE TABLE daily_sales (
              sale_date date,
              product_category
              string, sales_amount double)
      PARTITIONED BY (month(sale_date))
      TBLPROPERTIES ('table_type' = 'iceberg')
      ```

------
#### [ AWS CLI ]

   Execute o comando a seguir.

   ```
   aws athena start-query-execution \
   --query-string "CREATE TABLE daily_sales (
           sale_date date,
           product_category
           string, sales_amount double)
   PARTITIONED BY (month(sale_date))
   TBLPROPERTIES ('table_type' = 'iceberg')" \
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \
   --work-group "primary"
   ```

------

1. Insira dados na tabela que você criou na etapa anterior.

------
#### [ Console de gerenciamento da AWS ]

   1. No painel de navegação à esquerda, em **Nome da fonte de dados**, escolha **AwsDataCatalog**.

   1. Em **Catálogo**, escolha **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Em **Banco de dados**, escolha **test\$1namespace**.

   1. No editor de consultas, execute a consulta a seguir.

      ```
      INSERT INTO daily_sales
      VALUES 
          (DATE '2024-01-15', 'Laptop', 900.00),
          (DATE '2024-01-15', 'Monitor', 250.00),
          (DATE '2024-01-16', 'Laptop', 1350.00),
          (DATE '2024-02-01', 'Monitor', 300.00);
      ```

------
#### [ AWS CLI ]

   Execute o comando a seguir.

   ```
   aws athena start-query-execution \
   --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   VALUES 
   (DATE '2024-01-15', 'Laptop', 900.00),
   (DATE '2024-01-15', 'Monitor', 250.00),
   (DATE '2024-01-16', 'Laptop', 1350.00),
   (DATE '2024-02-01', 'Monitor', 300.00)"\ 
   --work-group "primary"
   ```

------

1. Após inserir os dados na tabela, você poderá consultá-los.

------
#### [ Console de gerenciamento da AWS ]

   1. No painel de navegação à esquerda, em **Nome da fonte de dados**, escolha **AwsDataCatalog**.

   1. Em **Catálogo**, escolha **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Em **Banco de dados**, escolha **test\$1namespace**.

   1. No editor de consultas, execute a consulta a seguir.

      ```
      SELECT
          product_category,
          COUNT(*) AS units_sold,
          SUM(sales_amount) AS total_revenue,
          AVG(sales_amount) AS average_price
      FROM
          daily_sales
      WHERE
          sale_date BETWEEN DATE '2024-02-01' 
                       AND DATE '2024-02-29'
      GROUP BY
          product_category
      ORDER BY
          total_revenue DESC
      ```

------
#### [ AWS CLI ]

   Execute o comando a seguir.

   ```
   aws athena start-query-execution \
   --query-string "SELECT product_category,
       COUNT(*) AS units_sold,
       SUM(sales_amount) AS total_revenue,
       AVG(sales_amount) AS average_price
   FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29'
   GROUP BY product_category
   ORDER BY total_revenue DESC"\
   --work-group "primary"
   ```

------

## Criar tabelas do S3 no Athena
<a name="gdc-create-s3-tables-athena"></a>

O Athena oferece suporte à criação de tabelas em namespaces de tabela do S3 existentes ou namespaces criados no Athena com instruções `CREATE DATABASE`. Para criar uma tabela do S3 via Athena, a sintaxe é a mesma de quando você [cria uma tabela do Iceberg](querying-iceberg-creating-tables.md), exceto que você não especifica o `LOCATION`, conforme mostrado no exemplo a seguir.

```
CREATE TABLE
[db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
[PARTITIONED BY (col_name | transform, ... )]
[TBLPROPERTIES ([, property_name=property_value] )]
```

Você também pode criar tabelas do S3 usando instruções CREATE TABLE AS SELECT (CTAS). Para obter mais informações, consulte [CTAS para tabelas do S3](#ctas-s3-tables).

## Registrar catálogos de buckets de tabelas do S3 como fontes de dados do Athena
<a name="gdc-register-s3-table-console-steps"></a>

Para registrar catálogos de buckets de tabelas do S3 com o console do Athena, execute as etapas a seguir.

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Em **Escolher uma fonte de dados**, escolha **Amazon S3 - AWS Glue Data Catalog**.

1. Na seção **AWS Glue Data Catalog**, em **Conta da fonte de dados**, escolha **AWS Glue Data Catalog nesta conta**.

1. Em **Criar uma tabela ou registrar um catálogo**, escolha **Registrar um novo catálogo do AWS Glue**.

1. Na seção **Detalhes da fonte de dados**, em **Nome da fonte de dados**, insira o nome que deseja usar para especificar a fonte de dados em suas consultas SQL ou use o nome padrão gerado.

1. Em **Catálogo**, escolha **Procurar** para pesquisar uma lista de catálogos do AWS Glue na mesma conta. Se você não encontrar nenhum catálogo existente, crie um no [console do AWS Glue](https://console.aws.amazon.com/glue/). 

1. Na caixa de diálogo **Procurar catálogos do AWS Glue**, selecione o catálogo que deseja usar e selecione **Escolher**.

1. (Opcional) Em **Tags**, adicione pares de chave/valor que queira associar à fonte de dados.

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, verifique se as informações inseridas estão corretas e selecione **Criar fonte de dados**.

## CTAS para tabelas do S3
<a name="ctas-s3-tables"></a>

O Amazon Athena agora é compatível com operações CREATE TABLE AS SELECT (CTAS) para tabelas do S3. Esse atributo permite criar novas tabelas do S3 com base nos resultados de uma consulta SELECT. 

Ao criar uma consulta CTAS para uma tabela do S3, há algumas diferenças importantes em relação às tabelas padrão do Athena:
+ Você deve omitir a propriedade de localização porque as tabelas do S3 gerenciam automaticamente seus próprios locais de armazenamento.
+ A propriedade `table_type` assume o padrão `ICEBERG`, portanto, você não precisa especificá-la explicitamente na consulta.
+ Se você não especificar um formato, o sistema usará automaticamente `PARQUET` como formato padrão para os dados.
+ Todas as outras propriedades seguem a mesma sintaxe das tabelas normais do Iceberg.

Antes de criar o Tabelas do S3 usando CTAS, verifique se você tem as permissões necessárias configuradas no IAM ou no AWS Lake Formation. Especificamente, você precisa de permissões para criar tabelas no catálogo de tabelas do S3. Sem essas permissões, suas operações CTAS não terão sucesso.

**nota**  
Se a consulta CTAS não tiver sucesso, poderá ser necessário excluir a tabela usando a [API de tabelas do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html) antes de tentar executar a consulta novamente. Não é possível usar as instruções `DROP TABLE` do Athena para remover a tabela que foi parcialmente criada pela consulta. 

**Exemplo**

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```

# Consultar catálogos de dados do AWS Glue no Athena
<a name="gdc-register-query-the-data-source"></a>

Para consultar catálogos dos dados usando o Athena, siga um destes procedimentos.
+ Registre o catálogo como uma fonte de dados no Athena e use o nome da fonte de dados para consultar o catálogo. Nesse uso, as consultas a seguir são equivalentes.

  ```
  SELECT * FROM my_data_source.my_database.my_table
  ```
+ Se você estiver consultando um catálogo que não tenha sido registrado como uma fonte de dados do Athena, você poderá fornecer o caminho completo para o catálogo em suas consultas do `SELECT`, como no exemplo a seguir.

  ```
  SELECT * FROM "my_catalog/my_subcatalog".my_database.my_table
  ```
+ Você também poderá fazer isso via Console de gerenciamento da AWS.

  1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

  1. No editor de consultas, em **Fonte de dados**, escolha **AwsDataCatalog**.

  1. Em **Catálogo**, escolha o nome do catálogo que deseja usar.

  1. Em **Banco de dados**, escolha o banco de dados que contém a tabela que deseja consultar.

  1. Insira uma consulta como `SELECT * FROM my_table` e, em seguida, escolha **Executar**.

# Registrar um catálogo de dados de outra conta
<a name="data-sources-glue-cross-account"></a>

Você pode usar o recurso de catálogo do AWS Glue entre contas do Athena para registrar um catálogo do AWS Glue de outra conta sua. Depois de configurar as permissões do IAM necessárias para o AWS Glue e registrar o catálogo como um recurso `DataCatalog` no Athena, você poderá usar o Athena para executar consultas entre contas. Para obter informações sobre como configurar as permissões necessárias, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).

O procedimento a seguir mostra como usar o Athena para configurar um AWS Glue Data Catalog em uma conta da Amazon Web Services diferente da sua fonte de dados.

## Registrar via console
<a name="data-sources-glue-cross-account-console"></a>

1. Siga as etapas em [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md) para garantir que você tenha permissões para consultar o catálogo de dados na outra conta.

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Escolha **Fontes de dados e catálogos**.

1. No canto superior direito do console, escolha **Create data source** (Criar fonte de dados).

1. Na página **Choose a data source** (Escolher uma fonte de dados), para **Data sources** (Fontes de dados), escolha **S3 - AWS Glue Data Catalog** e escolha **Next** (Próximo).

1. Na página **Enter data source details** (Inserir os detalhes da fonte de dados), na seção **AWS Glue Data Catalog**, para **Choose an AWS Glue Data Catalog** (Escolher um AWS Glue Data Catalog), escolha **AWS Glue Data Catalog in another account** (AWS Glue Data Catalog em outra conta).

1. Em **Data source details** (Detalhes da origemdos dados), forneça as seguintes informações:
   + **Data source name** (Nome da origem dos dados): insira o nome que você deseja usar em suas consultas SQL para fazer referência ao catálogo de dados na outra conta.
   + **Description** (Descrição): insira uma descrição do catálogo de dados na outra conta (opcional).
   + **Catalog ID** (ID do catálogo): insira o ID de 12 dígitos da conta da Amazon Web Services à qual o catálogo de dados pertence. O ID da conta da Amazon Web Services é o ID do catálogo.

1. (Opcional) Para **Tags**, adicione pares de chave-valor que você queira associar com a origem dos dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise as informações fornecidas e selecione **Create data source** (Criar fonte de dados). A página **Data source details** (Detalhes da fonte de dados) lista os bancos de dados e etiquetas do catálogo de dados que você registrou.

1. Escolha **Fontes de dados e catálogos**. O catálogo de dados que você registrou está listado na coluna **Data source name** (Nome da fonte de dados).

1. Para visualizar ou editar as informações do catálogo de dados, escolha o catálogo e selecione **Actions** (Ações), **Edit** (Editar).

1. Para excluir o novo catálogo de dados, escolha o catálogo e selecione **Actions** (Ações) **Delete** (Excluir).

## Registrar usando operações da API
<a name="data-sources-glue-cross-account-api"></a>

1. O corpo da seguinte solicitação `CreateDataCatalog` registra um catálogo do AWS Glue para acesso entre contas:

   ```
   # Example CreateDataCatalog request to register a cross-account Glue catalog:
   {
       "Description": "Cross-account Glue catalog",
       "Name": "ownerCatalog",
       "Parameters": {"catalog-id" : "<catalogid>"  # Owner's account ID
       },
       "Type": "GLUE"
   }
   ```

1. O código de exemplo a seguir usa um cliente Java para criar o objeto `DataCatalog`.

   ```
   # Sample code to create the DataCatalog through Java client
   CreateDataCatalogRequest request = new CreateDataCatalogRequest()
       .withName("ownerCatalog")
       .withType(DataCatalogType.GLUE)
       .withParameters(ImmutableMap.of("catalog-id", "<catalogid>"));
   
   athenaClient.createDataCatalog(request);
   ```

   Após essas etapas, o mutuário deverá ver *`ownerCatalog`* ao chamar a operação de API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html).

## Registrar via AWS CLI
<a name="data-sources-glue-cross-account-cli"></a>

Use o seguinte exemplo de comando da CLI para registrar um AWS Glue Data Catalog de outra conta

```
aws athena create-data-catalog \
  --name cross_account_catalog \
  --type GLUE \
  --description "Cross Account Catalog" \
  --parameters catalog-id=<catalogid>
```

Para saber mais, consulte [Consultar entre contas AWS Glue Data Catalog usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) no *AWS Blog Big Data*.

# Controlar o acesso a catálogos de dados com políticas do IAM
<a name="datacatalogs-iam-policy"></a>

Para controlar o acesso a catálogos de dados, use as permissões do IAM no nível do recurso ou as políticas do IAM baseadas em identidade. 

O procedimento a seguir é específico ao Athena. 

Para obter informações específicas do IAM, acesse os links listados no fim desta seção. Para obter informações sobre políticas de catálogo de dados JSON de exemplo, consulte [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md).

**Para usar o editor visual no console do IAM para criar uma política de catálogo de dados**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM, em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Policies (Políticas)** e **Create policy (Criar política)**.

1. Na guia **Editor visual**, selecione **Escolher um serviço**. Em seguida, escolha o Athena para adicionar à política.

1. Escolha **Select actions (Selecionar ações)** e defina as ações para adicionar à política. O editor visual mostra as ações disponíveis no Athena. Para obter mais informações, consulte [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) na *Referência de autorização do serviço*.

1. Escolha **Add actions (Adicionar ações)** para digitar uma ação específica ou use caracteres curinga (\$1) para especificar várias ações. 

   Por padrão, a política que você está criando permite as ações que você escolhe. Se você escolher uma ou mais ações compatíveis com as permissões no nível do recurso `datacatalog` no Athena, o editor listará o recurso `datacatalog`. 

1. Escolha **Recursos** para especificar os catálogos de dados específicos para sua política. Para obter políticas de catálogo de dados JSON de exemplo, consulte [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md).

1. Especifique o recurso `datacatalog` da seguinte forma:

   ```
   arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>
   ```

1. Selecione **Review Policy (Revisar política)**, digite um **Name (Nome)** e uma **Description (Descrição)** (opcional) para a política que você está criando. Revise o resumo da política para ter certeza de que você concedeu as permissões que pretendia. 

1. Escolha **Criar política** para salvar sua nova política.

1. Anexe essa política baseada em identidade a um usuário, um grupo ou uma função e especifique os recursos do `datacatalog` que eles podem acessar.

Para obter mais informações, consulte os seguintes tópicos na *Referência de autorização do serviço* e no *Manual do usuário do IAM*:
+ [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)
+ [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)
+ [Adicionar e remover políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ [Controlar o acesso aos recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources)

Para obter políticas de catálogo de dados JSON de exemplo, consulte [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md).

Para obter informações sobre permissões do AWS Glue e permissões de crawler do AWS Glue, consulte [Configurar permissões do IAM para o AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) e [Pré-requisitos do crawler](https://docs.aws.amazon.com/glue/latest/dg/crawler-prereqs.html) no *Guia do desenvolvedor do AWS Glue*.

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 

# Políticas de catálogo de dados de exemplo
<a name="datacatalogs-example-policies"></a>

Esta seção inclui exemplos de políticas que você pode usar para habilitar várias ações nos catálogos de dados.

Um catálogo de dados é um recurso do IAM gerenciado pelo Athena. Portanto, se sua política de catálogo de dados usa ações que usam o `datacatalog` como uma entrada, especifique o ARN do catálogo de dados da seguinte maneira:

```
"Resource": [arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>]
```

O `<datacatalog-name>` é o nome do seu catálogo de dados. Por exemplo, para um catálogo de dados chamado `test_datacatalog`, especifique-o como um recurso da seguinte forma:

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:datacatalog/test_datacatalog"]
```

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obter mais informações sobre as políticas do IAM, consulte [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) no *Guia do usuário do IAM*. Para obter mais informações sobre como criar políticas do IAM para grupos de trabalho, consulte [Controlar o acesso a catálogos de dados com políticas do IAM](datacatalogs-iam-policy.md).
+ [Example Policy for Full Access to All Data Catalogs](#datacatalog-policy-full-access-to-all-data-catalogs)
+ [Example Policy for Full Access to a Specified Data Catalog](#datacatalog-policy-full-access-to-a-specified-catalog)
+ [Example Policy for Querying a Specified Data Catalog](#datacatalog-policy-querying-a-specified-data-catalog)
+ [Example Policy for Management Operations on a Specified Data Catalog](#datacatalog-policy-management-operations-on-a-specified-catalog)
+ [Example Policy for Listing Data Catalogs](#datacatalog-policy-listing-data-catalogs)
+ [Example Policy for Metadata Operations on Data Catalogs](#datacatalog-policy-metadata-operations)

**Example Exemplo de política para acesso total a todos os catálogos de dados**  
A seguinte política permite acesso total a todos os recursos do catálogo de dados que podem existir na conta. Recomendamos que você use essa política para os usuários da sua conta que devem administrar e gerenciar catálogos de dados para todos os outros usuários.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "athena:*"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

**Example Exemplo de política para acesso total a um catálogo de dados especificado**  
A seguinte política permite acesso total ao único recurso específico do catálogo de dados, denominado `datacatalogA`. Você pode usar essa política para os usuários com controle total sobre um determinado catálogo de dados.    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:ListDataCatalogs", "athena:ListWorkGroups", "athena:GetDatabase", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:GetTableMetadata" ], "Resource":"*" }, { "Effect":"Allow",
   "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery",
   "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution",
   "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery",
   "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution",
   "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup",
   "athena:CreateWorkGroup" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog",
   "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:UpdateDataCatalog" ],
      "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   } ] }
```

**Example Exemplo de política para consulta em um catálogo de dados especificado**  
Na política a seguir, um usuário tem permissão para executar consultas no especificado `datacatalogA`. O usuário não tem permissão para executar tarefas de gerenciamento para o próprio catálogo de dados, como atualizá-lo ou excluí-lo.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:StartQueryExecution" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:GetDataCatalog" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   ] } ] }
```

**Example Exemplo de política para operações de gerenciamento em um catálogo de dados especificado**  
Na política a seguir, o usuário tem permissão para criar, excluir, obter detalhes e atualizar um catálogo de dados `datacatalogA`.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "athena:CreateDataCatalog", "athena:GetDataCatalog", "athena:DeleteDataCatalog",
    "athena:UpdateDataCatalog" ], "Resource": [
        "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
    ] } ] }
```

**Example Exemplo de política para listagem de catálogos de dados**  
A política a seguir permite que todos os usuários listem todos os catálogos de dados:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Exemplo de política para operações de metadados em catálogos de dados**  
A política a seguir permite operações de metadados em catálogos de dados:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetDatabase",
                "athena:GetTableMetadata",
                "athena:ListDatabases",
                "athena:ListTableMetadata"
            ],
            "Resource": "*"
        }
    ]
}
```

# Usar um formulário no console do Athena para adicionar uma tabela do AWS Glue
<a name="data-sources-glue-manual-table"></a>

O procedimento a seguir mostra como usar o console do Athena para adicionar uma tabela usando o formulário **Create Table From S3 bucket data** (Criar tabela a partir de bucket do S3).

**Como adicionar uma tabela e inserir informações de esquema usando um formulário**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas, ao lado de **Tables and views** (Tabelas e visualizações), escolha **Create** (Criar) e, em seguida, escolha **S3 bucket data** (Dados do bucket do S3).

1. No formulário **Create Table From S3 bucket data** (Criar tabela a partir de dados de bucket do S3), em **Table name** (Nome da tabela), insira um nome para a tabela. Para obter informações sobre caracteres aceitáveis em nomes de bancos de dados, nomes de tabelas e nomes de colunas no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).

1. Em **Database configuration** (Configuração do banco de dados), escolha um banco de dados existente ou crie um.

1. Em **Location of Input Data Set** (Local do conjunto de dados de entrada), especifique o caminho no Amazon S3 para a pasta que contém o conjunto de dados que você deseja processar. Não inclua um nome de arquivo no caminho. O Athena verifica todos os arquivos na pasta especificada. Se seus dados já estiverem particionados (p. ex., 

    s3://amzn-s3-demo-bucket/logs/year=2004/month=12/day=11/), insira somente o caminho base (por exemplo, s3://amzn-s3-demo-bucket/logs/).

1. Em **Data format** (Formato de dados), escolha entre as seguintes opções:
   + Em **Table type** (Tipo de tabela), escolha **Apache Hive**, **Apache Iceberg** ou **Delta Lake**. O Athena usa o tipo de tabela Apache Hive como padrão. Para obter informações sobre como consultar tabelas do Apache Iceberg no Athena, consulte [Consultar tabelas do Apache Iceberg](querying-iceberg.md). Para obter informações sobre como usar tabelas do Delta Lake no Athena, consulte [Consultar tabelas do Linux Foundation Delta Lake](delta-lake-tables.md).
   + Em **File format** (Formato de arquivo), escolha o formato de arquivo ou log dos seus dados.
     + Na opção **Text File with Custom Delimiters (Arquivo de texto com delimitadores personalizados)**, especifique um **Field terminator (Terminador de campo)** (ou seja, um delimitador de coluna). Opcionalmente, você pode especificar um **terminador de coleção** que marque o fim de um tipo de matriz ou um **terminador de coleção** que marque o fim de um tipo de dados de mapa.
   + **Biblioteca SerDe**: uma biblioteca SerDe (serializador-desserializador) analisa um formato de dados específico para que o Athena possa criar uma tabela para ele. Para a maioria dos formatos, uma biblioteca SerDe padrão é escolhida para você. Para os formatos a seguir, escolha uma biblioteca de acordo com seus requisitos:
     + **Apache Web Logs**: escolha a biblioteca **RegexSerDe** ou **GrokserDe**. Para RegexSerDe, forneça uma expressão regular na caixa **Regex definition** (Definição Regex). Para GrokserDe, forneça uma série de expressões regulares nomeadas para a propriedade SerDe `input.format`. As expressões regulares nomeadas são mais fáceis de ler e manter do que as expressões regulares. Para obter mais informações, consulte [Consulta de logs do Apache armazenados no Amazon S3](querying-apache-logs.md).
     + **CSV**: escolha **LazySimpleSerDe** se seus dados separados por vírgula não contiverem valores entre aspas duplas ou se usarem o formato `java.sql.Timestamp`. Escolha **OpenCSVSerDe** se os dados incluírem aspas ou usarem o formato numérico UNIX para `TIMESTAMP` (p. ex., `1564610311`). Para obter mais informações, consulte [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md) e [Open CSV SerDe para processamento de CSV](csv-serde.md).
     + **JSON**: escolha a biblioteca **OpenX** ou **Hive** JSON SerDe. Os dois formatos esperam que cada documento JSON esteja em uma única linha de texto e que os campos não sejam separados por caracteres de nova linha. O OpenX SerDe oferece algumas propriedades adicionais. Para obter mais informações sobre essas propriedades, consulte [OpenX JSON SerDe](openx-json-serde.md). Para obter mais informações sobre o Hive SerDe, consulte [Hive JSON SerDe](hive-json-serde.md).

     Para obter mais informações sobre como usar as bibliotecas SerDe no Athena, consulte [Escolha de um SerDe para seus dados](supported-serdes.md).

1. Em **SerDe properties** (Propriedades de SerDe), adicione, edite ou remova propriedades e valores de acordo com a biblioteca SerDe que você estiver usando e seus requisitos.
   + Para adicionar uma propriedade SerDe, escolha **Add SerDe property** (Adicionar propriedade SerDe).
   + No campo **Name** (Nome), insira o nome da propriedade. 
   + No campo **Value** (Valor), insira um valor para a propriedade. 
   + Para remover uma propriedade SerDe, escolha **Remove** (Remover).

1. Em **Table properties** (Propriedades da tabela), escolha ou edite as propriedades da tabela de acordo com seus requisitos.
   + Em **Propriedades da tabela** (Compactação de gravação), escolha uma opção de compactação. A disponibilidade da opção de compactação de gravação e das opções de compactação disponíveis depende do formato dos dados. Para obter mais informações, consulte [Usar compactação no Athena](compression-formats.md).
   + Para **Encryption** (Criptografia), selecione **Encrypted data set** (Conjunto de dados criptografados) se os dados subjacentes estiverem criptografados no Amazon S3. Essa opção define a propriedade `has_encrypted_data` da tabela como verdadeira na instrução `CREATE TABLE`.

1. Em **Column details** (Detalhes da coluna), insira os nomes e os tipos de dados das colunas que você deseja adicionar à tabela.
   + Para adicionar mais colunas uma de cada vez, escolha **Add a column (Adicionar uma coluna)**.
   + Para adicionar rapidamente mais colunas, escolha **Bulk add columns (Adicionar colunas em massa)**. Na caixa de texto, insira uma lista separada por vírgulas de colunas no formato *column\$1name* *data\$1type*, *column\$1name* *data\$1type*[, …] e escolha **Add** (Adicionar).

1. (Opcional) Em **Partition details** (Detalhes da partição), adicione um ou mais nomes de colunas e tipos de dados. O particionamento mantém os dados relacionados juntos com base nos valores das colunas e pode ajudar a reduzir a quantidade de dados digitalizados por consulta. Para obter informações sobre particionamento, consulte [Particionar dados](partitions.md).

1. (Opcional) Em **Bucketing**, você pode especificar uma ou mais colunas que tenham linhas que você deseja agrupar e, em seguida, colocar essas linhas em vários buckets. Isso permite que você consulte somente o bucket que deseja ler quando o valor das colunas agrupadas for especificado.
   + Para **Buckets**, selecione uma ou mais colunas que tenham um grande número de valores exclusivos (p. ex., uma chave primária) e que sejam frequentemente usadas para filtrar os dados em suas consultas.
   + Em **Number of buckets** (Número de buckets), insira um número que permita que os arquivos tenham o tamanho ideal. Para obter mais informações, consulte [Top 10 Performance Tuning Tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (As 10 melhores dicas para ajustar o desempenho do Amazon Athena) no AWS Big Data Blog.
   + Para especificar suas colunas agrupadas, a instrução `CREATE TABLE` usará a seguinte sintaxe:

     ```
     CLUSTERED BY (bucketed_columns) INTO number_of_buckets BUCKETS
     ```
**nota**  
A opção **Bucketing** (Agregar em bucket) não está disponível para o tipo de tabela do **Iceberg**.

1. A caixa **Preview table query** (Previsualizar consulta da tabela) mostra a instrução `CREATE TABLE` gerada pelas informações inseridas no formulário. A instrução de visualização não pode ser editada diretamente. Para alterar a instrução, modifique os campos no formulário acima da visualização ou [crie a instrução diretamente](creating-tables-how-to.md#to-create-a-table-using-hive-ddl) no editor de consultas em vez de usar o formulário. 

1. Selecione **Create table** (Criar tabela) para executar a instrução gerada no editor de consultas e criar a tabela.

# Usar um crawler para adicionar uma tabela
<a name="schema-crawlers"></a>

Os crawlers do AWS Glue ajudam a descobrir o esquema para conjuntos de dados e registrá-los no catálogo de dados do AWS Glue. Os crawlers passam pelos dados e determinam o esquema. Além disso, o crawler pode detectar e registrar partições. Para obter mais informações, consulte [Definir crawlers](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) no *Guia do desenvolvedor do AWS Glue*. Tabelas de dados que foram rastreadas com sucesso podem ser consultadas no Athena.

**nota**  
O Athena não reconhece os [padrões de exclusão](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que você especifica para um crawler do AWS Glue. Por exemplo, se você tem um bucket do Amazon S3 com os arquivos `.csv` e `.json` e exclui os arquivos `.json` do crawler, o Athena consulta os dois grupos de arquivos. Para evitar isso, coloque os arquivos que você deseja excluir em um local diferente. 

## Criar um crawler do AWS Glue
<a name="data-sources-glue-crawler-setup"></a>

É possível criar um crawler começando no console do Athena e usando o console do AWS Glue de forma integrada. Ao criar o crawler, você especifica um local de dados no Amazon S3 para crawling.

**Para criar um crawler no AWS Glue começando do console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas, ao lado de **Tabelas e visualizações**, escolha **Criar** e, em seguida, selecione **Crawler do AWS Glue**. 

1. No console do **AWS Glue**, na página **Add crawler (Adicionar crawler)**, siga as etapas para criar um crawler. Para obter mais informações, consulte [Usar crawlers do AWS Glue](#schema-crawlers) neste guia e [Como preencher o AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-catalog-methods.html) no *Guia do desenvolvedor do AWS Glue*.

**nota**  
O Athena não reconhece os [padrões de exclusão](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que você especifica para um crawler do AWS Glue. Por exemplo, se você tem um bucket do Amazon S3 com os arquivos `.csv` e `.json` e exclui os arquivos `.json` do crawler, o Athena consulta os dois grupos de arquivos. Para evitar isso, coloque os arquivos que você deseja excluir em um local diferente.

Depois de um rastreamento, o crawler do AWS Glue atribui automaticamente determinados metadados para ajudar a torná-los compatíveis com outras tecnologias externas, como Apache Hive, Presto e Spark. Às vezes, o crawler pode atribuir incorretamente propriedades de metadados. Corrija manualmente as propriedades no AWS Glue antes de consultar a tabela usando o Athena. Para obter mais informações, consulte [Exibir e editar detalhes da tabela](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) no *Guia do desenvolvedor do AWS Glue*.

O AWS Glue pode atribuir indevidamente metadados quando um arquivo CSV tem aspas em torno de cada campo de dados, processando a propriedade `serializationLib` incorretamente. Para obter mais informações, consulte [Lidar com dados CSV entre aspas](schema-csv.md#schema-csv-quotes).

# Usar várias fontes de dados com crawlers
<a name="schema-crawlers-data-sources"></a>

Quando um crawler do AWS Glue verifica o Amazon S3 e detecta vários diretórios, ele usa uma heurística para determinar onde a raiz de uma tabela está na estrutura do diretório e quais diretórios são partições da tabela. Em alguns casos, quando o esquema detectado em dois ou mais diretórios é semelhante, o crawler pode tratá-lo como partições, em vez de tabelas à parte. Uma maneira de ajudar o crawler a descobrir tabelas individuais é adicionar o diretório raiz de cada tabela como um armazenamento de dados para o crawler.

As seguintes partições no Amazon S3 são um exemplo:

```
s3://amzn-s3-demo-bucket/folder1/table1/partition1/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition2/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition3/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition4/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition5/file.txt
```

Se o esquema de `table1` e `table2` for semelhante, e uma única origem dos dados for definida como `s3://amzn-s3-demo-bucket/folder1/` no AWS Glue, o crawler poderá criar uma única tabela com duas colunas de partição: uma com `table1` e `table2` e outra com `partition1` a `partition5`.

Para fazer com que o crawler do AWS Glue crie duas tabelas separadas, defina o crawler para ter duas fontes de dados, `s3://amzn-s3-demo-bucket/folder1/table1/` e `s3://amzn-s3-demo-bucket/folder1/table2`, conforme mostrado no procedimento a seguir.

**Para adicionar um armazenamento de dados do S3 a um crawler existente no AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, escolha **Rastreadores**.

1. Escolha o link para o seu crawler e, em seguida, escolha **Edit** (Editar). 

1. Em **Step 2: Choose data sources and classifiers** (Etapa 2: Escolher fontes de dados e classificadores), escolha **Edit**(Editar). 

1. Em **Fontes de dados e catálogos**, escolha **Adicionar uma fonte de dados**.

1. Na caixa de diálogo **Add data source** (Adicionar fonte de dados), em **S3 path** (Caminho do S3), escolha **Browse** (Procurar). 

1. Escolha o bucket que deseja usar e, em seguida, escolha **Choose** (Escolher).

   A fonte de dados que você adicionou aparece na lista **Data sources** (Fontes de dados).

1. Escolha **Próximo**.

1. Na página **Configure security settings** (Definir configurações de segurança), crie ou escolha um perfil do IAM para o crawler e, em seguida, escolha **Next** (Próximo).

1. Certifique-se de que o caminho do S3 termine em uma barra à direita e, em seguida, escolha **Add an S3 data source** (Adicionar uma fonte de dados do S3).

1. Na página **Set output and scheduling** (Definir saída e programação), em **Output configuration** (Configuração da saída), escolha o banco de dados de destino.

1. Escolha **Avançar**.

1. Na página **Review and update** (Revisar e atualizar), revise as escolhas feitas. Para editar uma etapa, escolha **Edit** (Editar).

1.  Selecione **Atualizar**.

# Agendar um crawler para manter a sincronização entre o AWS Glue Data Catalog e o Amazon S3
<a name="schema-crawlers-schedule"></a>

AWS GlueOs crawlers do podem ser configurados para serem executados em uma programação ou sob demanda. Para obter mais informações, consulte [Programações baseadas em hora para trabalhos e crawlers](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html) no *Guia do desenvolvedor do AWS Glue*.

Se você tiver dados que chegam a uma tabela particionada em um horário fixo, poderá configurar um crawler do AWS Glue para ser executado de acordo com a programação para detectar e atualizar as partições da tabela. Isso pode eliminar a necessidade de executar um comando `MSCK REPAIR` possivelmente longo e caro ou executar manualmente um comando `ALTER TABLE ADD PARTITION`. Para obter mais informações, consulte [Partições de tabela](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition) no *Guia do desenvolvedor do AWS Glue*.

# Otimizar consultas com indexação e filtragem de partições do AWS Glue
<a name="glue-best-practices-partition-index"></a>

Quando o Athena consulta tabelas particionadas, ele recupera e filtra as partições de tabela disponíveis para o subconjunto relevante para a sua consulta. À medida que novos dados e partições são adicionados, mais tempo torna-se necessário para processar as partições, e o runtime da consulta pode aumentar. Se você tiver uma tabela com um grande número de partições que aumenta ao longo do tempo, considere o uso de indexação e filtragem de partições do AWS Glue. A indexação de partições permite que o Athena otimize o processamento das partições e melhore a performance das consulta em tabelas altamente particionadas. A configuração da filtragem de partições nas propriedades de uma tabela é um processo de duas etapas:

1. Criar um índice de partição em AWS Glue.

1. Habilitar a filtragem de partições para a tabela.

## Criar um índice de partição
<a name="glue-best-practices-partition-index-creating"></a>

Para conhecer as etapas da criação de um índice de partição no AWS Glue, consulte [Trabalhar com índices de partição](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) no Guia do desenvolvedor do AWS Glue. Para saber quais são as limitações dos índices de partição no AWS Glue, consulte a seção [Sobre índices de partição](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html#partition-index-1) na mesma página.

## Habilitar filtragem de partição
<a name="glue-best-practices-partition-filtering-enabling"></a>

Para habilitar a filtragem de partição para a tabela, você deve definir uma nova propriedade de tabela no AWS Glue. Para conhecer as etapas da definição de propriedades de tabela no AWS Glue, consulte a página [Configurar a projeção de partições](https://docs.aws.amazon.com/athena/latest/ug/partition-projection-setting-up.html). Quando você editar os detalhes da tabela no AWS Glue, adicione o seguinte par de chave-valor à seção **Table properties** (Propriedades de tabela):
+ Para **Key** (Chave), adicione `partition_filtering.enabled`
+ Para **Value** (Valor), adicione `true`

Você pode desabilitar a filtragem de partições nessa tabela a qualquer momento definindo o valor `partition_filtering.enabled` como `false`.

Depois de concluir as etapas acima, você pode retornar ao console do Athena para consultar os dados.

Para mais informações sobre usar a indexação e filtragem de partição, consulte [Melhorar o desempenho de consultas Amazon Athena usando índices de partição AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/) no *Blog de Big Data da AWS*.

# Usar a AWS CLI para recriar um banco de dados do AWS Glue e suas tabelas
<a name="glue-recreate-db-and-tables-cli"></a>

Não é possível renomear um banco de dados do AWS Glue diretamente, mas você pode copiar a definição, modificar a definição e usá-la para recriar o banco de dados com um nome diferente. Da mesma forma, é possível copiar as definições das tabelas do banco de dados antigo, modificar as definições e usar as definições modificadas para recriar as tabelas no novo banco de dados.

**nota**  
 O método apresentado não copia o particionamento da tabela. 

O procedimento a seguir para o Windows pressupõe que a AWS CLI esteja configurada para saída JSON. Para alterar o formato de saída padrão na AWS CLI, execute `aws configure`.

**Para copiar um banco de dados do AWS Glue usando a AWS CLI**

1. Em um prompt de comando, execute o comando da AWS CLI a seguir para recuperar a definição do banco de dados do AWS Glue que você deseja copiar.

   ```
   aws glue get-database --name database_name
   ```

   Para obter mais informações sobre o comando `get-database`, consulte [get-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html).

1. Salve a saída JSON em um arquivo com o nome do novo banco de dados (por exemplo, `new_database_name.json`) na área de trabalho.

1. Abra o arquivo `new_database_name.json` em um editor de textos.

1. No arquivo JSON, execute as seguintes etapas:

   1. Remova a entrada externa `{ "Database":` e a chave de fechamento correspondente `}` no final do arquivo.

   1. Altere a entrada `Name` para o nome do novo banco de dados.

   1. Remova o campo `CatalogId`.

1. Salve o arquivo.

1. Em um prompt de comando, execute o comando da AWS CLI a seguir para usar o arquivo de definição de banco de dados modificado para criar o banco de dados com o novo nome.

   ```
   aws glue create-database --database-input "file://~/Desktop\new_database_name.json"
   ```

   Para obter mais informações sobre o comando `create-database`, consulte [create-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-database.html). Para obter informações sobre como usar parâmetros da AWS CLI em um arquivo, consulte [Carregar os parâmetros da AWS CLI de um arquivo](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html) no *Guia do usuário da AWS Command Line Interface*.

1. Para verificar se o novo banco de dados foi criado no AWS Glue, execute o seguinte comando:

   ```
   aws glue get-database --name new_database_name
   ```

Agora você está pronto para obter a definição de uma tabela que deseja copiar para o novo banco de dados, modificar a definição e usar a definição modificada para recriar a tabela no novo banco de dados. Esse procedimento não altera o nome da tabela.

**Para copiar uma tabela do AWS Glue usando a AWS CLI**

1. Em um prompt de comando, execute o seguinte comando da AWS CLI.

   ```
   aws glue get-table --database-name database_name --name table_name
   ```

   Para obter mais informações sobre o comando `get-table`, consulte [get-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-table.html).

1. Salve a saída JSON em um arquivo com o nome da tabela (por exemplo, *table\$1name*.json) na área de trabalho do Windows.

1. Abra o arquivo em um editor de textos.

1. No arquivo JSON, remova a entrada externa `{"Table": ` e a chave de fechamento correspondente `}` no final do arquivo.

1. No arquivo JSON, remova as seguintes entradas e os respectivos valores:
   + `DatabaseName`: esta entrada não é necessária porque o comando `create-table` da CLI usa o parâmetro `--database-name`.
   + `CreateTime`
   + `UpdateTime`
   + `CreatedBy`
   + `IsRegisteredWithLakeFormation`
   + `CatalogId`
   + `VersionId`

1. Salve o arquivo de definição da tabela.

1. Em um prompt de comando, execute o seguinte comando da AWS CLI para recriar a tabela no novo banco de dados:

   ```
   aws glue create-table --database-name new_database_name --table-input "file://~/Desktop\table_name.json"     
   ```

   Para obter mais informações sobre o comando `create-table`, consulte [create-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-table.html).

   A tabela agora aparece no novo banco de dados no AWS Glue e pode ser consultada no Athena.

1. Repita as etapas para copiar cada tabela adicional para o novo banco de dados no AWS Glue.

# Criação de tabelas para trabalhos de ETL
<a name="schema-classifier"></a>

É possível usar o Athena para criar tabelas que o AWS Glue possa usar para trabalhos de ETL. Os trabalhos do AWS Glue usam operações de ETL. Um trabalho do AWS Glue executa um script que extrai dados de fontes, transforma os dados e os carrega em destinos. Para obter mais informações, consulte [Criação de trabalhos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) no *Guia do desenvolvedor do AWS Glue*.

## Criar tabelas no Athena para trabalhos ETL do AWS Glue
<a name="schema-etl-tables"></a>

As tabelas que você cria no Athena devem ter uma propriedade de tabela adicionada chamada `classification`, que identifica o formato dos dados. Isso permite que o AWS Glue use as tabelas para trabalhos de ETL. Os valores de classificação podem ser `avro`, `csv`, `json`, `orc`, `parquet` ou `xml`. Veja abaixo um exemplo da instrução `CREATE TABLE` no Athena:

```
CREATE EXTERNAL TABLE sampleTable (
  column1 INT,
  column2 INT
  ) STORED AS PARQUET
  TBLPROPERTIES (
  'classification'='parquet')
```

Se a propriedade da tabela `classification` não tiver sido adicionada quando a tabela foi criada, a propriedade poderá ser adicionada com o console do AWS Glue.

**Para adicionar a propriedade de classificação da tabela usando o console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação do console, escolha **Tables** (Tabelas).

1. Escolha o link da tabela que deseja editar e, em seguida, escolha **Actions** (Ações) e **Edit table** (Editar tabela).

1. Role para baixo até a seção **Table properties** (Propriedades da tabela).

1. Escolha **Adicionar**.

1. Em **Chave**, digite **classification**.

1. Em **Value** (Valor), insira um tipo de dado (por exemplo, **json**).

1. Escolha **Salvar**.

   Na seção **Table details** (Detalhes da tabela), o tipo de dado que você inseriu aparece no campo **Classification** (Classificação) da tabela.

Para obter mais informações, consulte [Trabalhar com tabelas](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) no *Guia do desenvolvedor do AWS Glue*.

## Usar trabalhos de ETL para otimizar a performance da consulta
<a name="schema-etl-performance"></a>

AWS GlueOs trabalhos do podem ajudar a transformar os dados em um formato que otimiza a performance das consultas no Athena. Os formatos de dados têm um grande impacto na performance e nos custos das consultas no Athena.

O AWS Glue permite a gravação nos formatos de dados Parquet e ORC. Você pode usar esse recurso para transformar seus dados para uso no Athena. Para obter mais informações sobre o uso de Parquet e ORC e outras maneiras de melhorar o desempenho no Athena, leia [Top 10 performance tuning tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**nota**  
Para reduzir as chances de o Athena não conseguir ler os tipos de dados `SMALLINT` e `TINYINT` produzidos por um trabalho de ETL do AWS Glue, converta `SMALLINT` e `TINYINT` em `INT` ao criar um trabalho de ETL que converte dados para ORC.

## Automatizar trabalhos do AWS Glue para ETL
<a name="schema-etl-automate"></a>

Você pode configurar trabalhos de ETL do AWS Glue para serem executados automaticamente com base em gatilhos. Esse recurso é ideal quando há dados de fora da AWS sendo enviados para um bucket do Amazon S3 em um formato inadequado para consultas no Athena. Para obter mais informações, consulte [Iniciar trabalhos do AWS Glue usando gatilhos](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) no *Guia do desenvolvedor do AWS Glue*.

# Trabalhar com dados CSV no AWS Glue
<a name="schema-csv"></a>

Esta página descreve como usar o AWS Glue para criar um esquema usando arquivos CSV com valores de dados entre aspas de cada coluna ou de arquivos CSV que incluem valores de cabeçalho.

## Lidar com dados CSV entre aspas
<a name="schema-csv-quotes"></a>

Imagine que você tenha um arquivo CSV com campos de dados entre aspas duplas, como no seguinte exemplo.

```
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
```

Para executar uma consulta no Athena em uma tabela criada com base em um arquivo CSV que tenha valores entre aspas, você deve modificar as propriedades da tabela no AWS Glue para usar o OpenCSVSerDe. Para obter mais informações sobre o OpenCSV SerDe, consulte [Open CSV SerDe para processamento de CSV](csv-serde.md).

**Para editar as propriedades da tabela no console do AWS Glue**

1. No painel de navegação do console do AWS Glue, escolha **Tables**.

1. Escolha o link da tabela que deseja editar e, em seguida, escolha **Actions** (Ações) e **Edit table** (Editar tabela).

1. Na página **Edit table** (Editar tabela), faça as seguintes alterações:
   + Em **Serialization lib** (Biblioteca de serialização), insira `org.apache.hadoop.hive.serde2.OpenCSVSerde`.
   + Em **Serde parameters** (Parâmetros do Serde), insira os seguintes valores para as chaves `escapeChar`, `quoteChar` e `separatorChar`: 
     + Em `escapeChar`, insira uma barra invertida (**\$1**).
     + Em `quoteChar`, insira aspas duplas (**"**).
     + Em `separatorChar`, insira uma vírgula (**,**).

1. Escolha **Salvar**.

Para obter mais informações, consulte [Exibir e editar detalhes da tabela](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) no *Guia do desenvolvedor do AWS Glue*.

Você também pode atualizar as propriedades da tabela AWS Glue programaticamente. Use a operação da API AWS Glue [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) ou o comando da AWS CLI [update-table](https://docs.aws.amazon.com/cli/latest/reference/glue/update-table.html) para modificar o bloco `SerDeInfo` na definição da tabela, conforme mostrado no exemplo de JSON a seguir.

```
"SerDeInfo": {
   "name": "",
   "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
   "parameters": {
      "separatorChar": ","
      "quoteChar": "\""
      "escapeChar": "\\"
      }
},
```

## Lidar com arquivos CSV com cabeçalhos
<a name="schema-csv-headers"></a>

Quando você define uma tabela no Athena com uma instrução `CREATE TABLE`, pode usar a propriedade de tabela `skip.header.line.count` para ignorar os cabeçalhos nos dados CSV, conforme mostrado no exemplo a seguir.

```
...
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/';
TBLPROPERTIES ("skip.header.line.count"="1")
```

Se preferir, remova os cabeçalhos CSV com antecedência para que as informações do cabeçalho não sejam incluídas nos resultados da consulta do Athena. Uma maneira de fazer isso é usar os trabalhos do AWS Glue, que excutam o trabalho de Extract, Transform, and Load (ETL - Extração, transformação e carga). Você pode escrever scripts no AWS Glue usando uma linguagem que é uma extensão do dialeto PySpark Python. Para obter mais informações, consulte [Criação de trabalhos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) no *Guia do desenvolvedor do AWS Glue*.

O exemplo a seguir mostra uma função em um script do AWS Glue que escreve um quadro dinâmico usando `from_options` e define a opção de formato `writeHeader` como falsa, o que remove as informações do cabeçalho:

```
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")
```

# Trabalhar com dados geoespaciais no AWS Glue
<a name="schema-geospatial"></a>

AWS GlueO não oferece suporte nativo a Well-known Text (WKT – Texto bem conhecido), Well-Known Binary (WKB – Binário bem conhecido) ou outros tipos de dados PostGIS. O classificador do AWS Glue analisa dados geoespaciais e os classifica usando tipos de dados compatíveis para o formato, como `varchar` para CSV. Assim como ocorre com outras tabelas do AWS Glue, pode ser necessário atualizar as propriedades das tabelas criadas a partir de dados geoespaciais para permitir que o Athena analise esses tipos de dados no estado em que se encontram. Para obter mais informações, consulte [Usar um crawler para adicionar uma tabela](schema-crawlers.md) e [Trabalhar com dados CSV no AWS Glue](schema-csv.md). O Athena pode não ser capaz de analisar alguns tipos de dados geoespaciais em tabelas do AWS Glue no estado em que se encontram. Para obter mais informações sobre como trabalhar com dados geoespaciais no Athena, consulte [Consultar dados geoespaciais](querying-geospatial-data.md).

# Usar a consulta federada do Amazon Athena
<a name="federated-queries"></a>

Se você tiver dados em origens diferentes do Amazon S3, poderá usar a consulta federada do Athena para consultá-los no local ou criar pipelines para extrair os dados de várias origens e armazená-los no Amazon S3. Com a consulta federada do Athena, é possível executar consultas SQL nos dados armazenados em origens relacionais, não relacionais, de objetos e personalizadas.

O Athena usa *conectores de origem dos dados* operados no AWS Lambda para executar as consultas federadas. Um conector de origem dos dados é uma parte do código que converte entre sua origem dos dados de destino e o Athena. Pense em um conector como uma extensão do mecanismo de consulta do Athena. Os conectores de origem dos dados predefinidos do Athena foram desenvolvidos para origens de dados, como Amazon CloudWatch Logs, Amazon DynamoDB, Amazon DocumentDB e Amazon RDS, e para origens de dados relacionais compatíveis com JDBC, como MySQL e PostgreSQL, na licença do Apache 2.0. Também é possível usar o Athena Query Federation SDK para escrever conectores personalizados. Para escolher, configurar e implantar um conector de origem dos dados em sua conta, você pode usar os consoles do Athena e do Lambda ou o AWS Serverless Application Repository. Depois que implantar conectores de fonte de dados, o conector será associado a um catálogo que pode ser especificado nas consultas SQL. É possível combinar instruções SQL de vários catálogos e abranger várias fontes de dados com uma única consulta.

Quando uma consulta é enviada para uma origem dos dados, o Athena invoca o conector correspondente para identificar as partes das tabelas que precisam ser lidas, gerencia o paralelismo e envia os predicados de filtro. Com base no usuário que envia a consulta, os conectores podem fornecer ou restringir o acesso a elementos de dados específicos. Os conectores usam o Apache Seta como o formato para retornar dados solicitados em uma consulta, o que permite que os conectores sejam implementados em linguagens como C, C\$1\$1, Java, Python e Rust. Como os conectores são processados no Lambda, eles podem ser usados para acessar os dados de qualquer origem dos dados na nuvem ou on-premises que seja acessível pelo Lambda.

Para escrever o próprio conector de origem dos dados, você pode usar o Athena Query Federation SDK para personalizar um dos conectores predefinidos disponíveis e mantidos pelo Amazon Athena. Você pode modificar uma cópia do código-fonte do [repositório do GitHub](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) e usar a [ferramenta de publicação do conector](https://github.com/awslabs/aws-athena-query-federation/wiki/Connector_Publish_Tool) para criar seu próprio pacote do AWS Serverless Application Repository. 

**nota**  
Desenvolvedores de terceiro podem ter usado o Athena Query Federation SDK para escrever conectores de origem dos dados. Para problemas de suporte ou licenciamento com esses conectores de origem dos dados, entre em contato com o provedor dos conectores. Esses conectores não foram testados nem contam com suporte da AWS. 

Para obter uma lista de conectores de origem dos dados escritos e testados pelo Athena, consulte [Conectores de fonte de dados disponíveis](connectors-available.md).

Para obter informações sobre como gravar o próprio conector de origem de dados, consulte [Example Athena connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-example) (Exemplo de conector do Athena) no GitHub.

## Considerações e limitações
<a name="connect-to-a-data-source-considerations"></a>
+ **Versões do mecanismo**: a consulta federada do Athena é permitida apenas no mecanismo Athena versão 2 e posterior. Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md).
+ **Visualizações**: é possível criar e consultar visualizações em fontes de dados federadas. As visualizações federadas são armazenadas no AWS Glue, não na fonte de dados subjacente. Para obter mais informações, consulte [Consultar visualizações federadas](running-federated-queries.md#running-federated-queries-federated-views).
+ **Identificadores delimitados**: os identificadores delimitados (também conhecidos como identificadores citados) começam e terminam com aspas ("). Atualmente, não há compatibilidade com identificadores delimitados para consultas federadas no Athena.
+ **Operações de gravação**: operações de gravação como [INSERT INTO](insert-into.md) não são suportadas. Tentar fazer isso pode gerar a mensagem de erro: This operation is currently not supported for external catalogs (Atualmente, esta operação não é suportada para catálogos externos).
+  **Preço**: para obter informações de preço, consulte [Preços do Amazon Athena](https://aws.amazon.com/athena/pricing/).
+ **Driver JDBC**: para usar o driver JDBC com consultas federadas ou um [metastore externo do Hive](connect-to-data-source-hive.md), inclua `MetadataRetrievalMethod=ProxyAPI` na string de conexão JDBC. Para obter informações sobre o driver JDBC, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md). 
+ **Secrets Manager**: para usar o recurso de consulta federada do Athena com AWS Secrets Manager, você deve configurar um endpoint privado do Amazon VPC para o Secrets Manager. Para obter mais informações, consulte [Criação de um endpoint privado da VPC para o Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) no *Guia do usuário do AWS Secrets Manager*.

## Permissões obrigatórias
<a name="connect-to-a-data-source-permissions"></a>

Conectores de fonte de dados podem exigir acesso aos recursos a seguir para funcionar corretamente. Se você usar um conector predefinido, verifique as informações do conector para garantir que tenha configurado sua VPC corretamente. Além disso, garanta que os principais do IAM que executam consultas e criam conectores tenham os privilégios para as ações necessárias. Para obter mais informações, consulte [Permitir acesso a consultas federadas do Athena: exemplos de política](federated-query-iam-access.md).
+ **Amazon S3**: além de gravar os resultados das consultas no local específico do Athena no Amazon S3, os conectores de dados gravam em um bucket de vazamento no Amazon S3. São necessárias conectividade e permissões para esse local do Amazon S3. Recomendamos usar a criptografia de derramamento para disco para cada conector e a [configuração do ciclo de vida do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) para expirar dados derramados que não sejam mais necessários.
+ **Athena**: as origens de dados precisam de conectividade com o Athena e vice-versa para conferir o status da consulta e evitar a verificação em excesso.
+ **AWS Glue Data Catalog** – conectividade e permissões serão necessárias se o conector usar o Catálogo de dados para metadados complementares ou primários.
+ **Amazon ECR** — As funções do Lambda do conector de fonte de dados usam uma imagem do Amazon ECR de um repositório Amazon ECR. O usuário que implanta o conector deve ter as permissões `ecr:BatchGetImage` e `ecr:GetDownloadUrlForLayer`. Para obter mais informações, consulte [Permissões do Amazon ECR](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#gettingstarted-images-permissions) no *Guia do desenvolvedor do AWS Lambda*.

## Vídeos
<a name="connect-to-a-data-source-videos"></a>

Assista aos vídeos a seguir para saber mais como usar a consulta federada do Athena.

**Vídeo: analisar os resultados da consulta federada do Amazon Athena no Quick**  
O vídeo a seguir demonstra como analisar os resultados de uma consulta federada do Athena no Quick.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/HyM5d0TmwAQ/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/HyM5d0TmwAQ)


**Vídeo: Game Analytics Pipeline**  
O vídeo a seguir mostra como implantar um pipeline de dados escalável sem servidor para ingerir, armazenar e analisar dados de telemetria de jogos e serviços usando as consultas federadas do Amazon Athena.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xcS-flUMVbs/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xcS-flUMVbs)


# Conectores de fonte de dados disponíveis
<a name="connectors-available"></a>

Esta seção lista os conectores de origem dos dados predefinidos do Athena que podem ser usados para consultar uma variedade de origens de dados externas ao Amazon S3. Para usar um conector em suas consultas do Athena, configure-o e implante-o em sua conta. 

## Considerações e limitações
<a name="connectors-available-considerations"></a>
+ Alguns conectores pré-construídos exigem que você crie uma VPC e um grupo de segurança antes de poder usar o conector. Para obter informações sobre como criar VPCs, consulte (Criar uma VPC para um conector de origem de dados) [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md). 
+ Para usar o recurso de consulta federada do Athena com o AWS Secrets Manager, configure um endpoint privado do Amazon VPC para o Secrets Manager. Para obter mais informações, consulte [Criação de um endpoint privado da VPC para o Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) no *Guia do usuário do AWS Secrets Manager*. 
+ Para conectores não compatíveis com passagem direta de predicados, as consultas que incluírem um predicado vão demorar mais para serem executadas. Para conjuntos de dados pequenos, muito poucos dados são examinados, e as consultas levam em média cerca de 2 minutos. No entanto, para grandes conjuntos de dados, muitas consultas podem expirar.
+ Algumas fontes de dados federadas usam terminologia para fazer referência a objetos de dados que são diferentes do Athena. Para obter mais informações, consulte [Noções básicas de qualificadores de nomes de tabelas federadas](tables-qualifiers.md).
+ Atualizamos nossos conectores periodicamente com base nas atualizações do banco de dados ou do provedor da fonte de dados. Não oferecemos suporte a fontes de dados que estejam em fim de vida útil.
+ Para conectores que não oferecem suporte à paginação ao listar tabelas, o serviço Web poderá atingir o tempo limite se o banco de dados tiver muitas tabelas e muitos metadados. Os seguintes conectores fornecem suporte à paginação para tabelas de listagem:
  + DocumentDB
  + DynamoDB
  + MySQL
  + OpenSearch
  + Oracle
  + PostgreSQL
  + Redshift
  + SQL Server

## Modos de resolução de maiúsculas e minúsculas no SDK do Federation
<a name="case-resolver-modes"></a>

O SDK do Federation é compatível com os seguintes modos padronizados de resolução de maiúsculas e minúsculas em nomes de esquemas e tabelas:
+ `NONE`: não altera maiúsculas e minúsculas nos nomes de esquemas e tabelas fornecidos.
+ `LOWER`: converte em minúsculas todos os nomes de esquemas e tabelas fornecidos.
+ `UPPER`: converte em maiúsculas todos os nomes de esquemas e tabela fornecidos.
+ `ANNOTATION`: esse modo é mantido apenas para compatibilidade com as versões anteriores e é compatível exclusivamente com os conectores do Snowflake e SAP HANA existentes.
+ `CASE_INSENSITIVE_SEARCH`: realiza pesquisas que não diferenciam maiúsculas de minúsculas em nomes de esquemas e tabelas.

## Compatibilidade com conectores para modos de resolução de maiúsculas e minúsculas
<a name="connector-support-matrix"></a>

### Compatibilidade com o modo básico
<a name="basic-mode-support"></a>

Todos os conectores JDBC são compatíveis com os seguintes modos básicos:
+ `NONE`
+ `LOWER`
+ `UPPER`

### Compatibilidade com o modo de anotação
<a name="annotation-mode-support"></a>

Apenas os seguintes conectores são compatíveis com o modo `ANNOTATION`:
+ Snowflake
+ SAP HANA

**nota**  
É recomendável usar CASE\$1INSENSITIVE\$1SEARCH em vez de ANNOTATION.

### Compatibilidade com pesquisas que não diferenciam maiúsculas de minúsculas
<a name="case-insensitive-search-support"></a>

Os seguintes conectores são compatíveis com `CASE_INSENSITIVE_SEARCH`:
+ DataLake Gen2
+ Snowflake
+ Oracle
+ Synapse
+ MySQL
+ PostgreSQL
+ Redshift
+ ClickHouse
+ SQL Server
+ DB2

## Limitações da resolução de maiúsculas e minúsculas
<a name="case-resolver-limitations"></a>

Lembre-se das seguintes limitações ao usar modos de resolução de maiúsculas e minúsculas:
+ Ao usar o modo `LOWER`, o nome do esquema e todas as tabelas do esquema devem ser escritos em minúsculas.
+ Ao usar o modo `UPPER`, o nome do esquema e todas as tabelas do esquema devem ser escritos em maiúsculas.
+ Ao usar um `CASE_INSENSITIVE_SEARCH`:
  + Os nomes de esquemas devem ser exclusivos
  + Os nomes das tabelas de um esquema devem ser exclusivos (por exemplo, você não pode ter "Apple" e "APPLE")
+ Limitações da integração do Glue:
  + O Glue é compatível apenas com nomes em minúsculas
  + Somente os modos `NONE` ou `LOWER` funcionarão ao registrar a função do Lambda com o GlueDataCatalog/LakeFormation

## Mais informações
<a name="connectors-available-additional-resources"></a>
+ Para obter informações sobre como implantar um conector de origem dos dados do Athena, consulte [Usar a consulta federada do Amazon Athena](federated-queries.md). 
+ Para obter informações sobre consultas que usam conectores de fonte de dados do Athena, consulte [Executar consultas federadas](running-federated-queries.md).

**Topics**
+ [

## Considerações e limitações
](#connectors-available-considerations)
+ [

## Modos de resolução de maiúsculas e minúsculas no SDK do Federation
](#case-resolver-modes)
+ [

## Compatibilidade com conectores para modos de resolução de maiúsculas e minúsculas
](#connector-support-matrix)
+ [

## Limitações da resolução de maiúsculas e minúsculas
](#case-resolver-limitations)
+ [

## Mais informações
](#connectors-available-additional-resources)
+ [Azure Data Lake Storage](connectors-adls-gen2.md)
+ [Azure Synapse](connectors-azure-synapse.md)
+ [Cloudera Hive](connectors-cloudera-hive.md)
+ [Cloudera Impala](connectors-cloudera-impala.md)
+ [CloudWatch](connectors-cloudwatch.md)
+ [métricas do CloudWatch](connectors-cwmetrics.md)
+ [CMDB](connectors-cmdb.md)
+ [Db2](connectors-ibm-db2.md)
+ [Db2 iSeries](connectors-ibm-db2-as400.md)
+ [DocumentDB](connectors-docdb.md)
+ [DynamoDB](connectors-dynamodb.md)
+ [Google BigQuery](connectors-bigquery.md)
+ [Google Cloud Storage](connectors-gcs.md)
+ [HBase](connectors-hbase.md)
+ [Hortonworks](connectors-hortonworks.md)
+ [Kafka](connectors-kafka.md)
+ [MSK](connectors-msk.md)
+ [MySQL](connectors-mysql.md)
+ [Neptune](connectors-neptune.md)
+ [OpenSearch](connectors-opensearch.md)
+ [Oracle](connectors-oracle.md)
+ [PostgreSQL](connectors-postgresql.md)
+ [Redis OSS](connectors-redis.md)
+ [Redshift](connectors-redshift.md)
+ [SAP HANA](connectors-sap-hana.md)
+ [Snowflake](connectors-snowflake.md)
+ [SQL Server](connectors-microsoft-sql-server.md)
+ [Teradata](connectors-teradata.md)
+ [Timestream](connectors-timestream.md)
+ [TPC-DS](connectors-tpcds.md)
+ [Vertica](connectors-vertica.md)

**nota**  
O [AthenaJdbcConnector](https://serverlessrepo.aws.amazon.com/applications/us-east-1/292517598671/AthenaJdbcConnector) (versão mais recente 2022.4.1) foi descontinuado. Ao invés dele, use um conector específico para banco de dados como aqueles para [MySQL](connectors-mysql.md), [Redshift](connectors-redshift.md) ou [PostgreSQL](connectors-postgresql.md).

# Conector do Amazon Athena para o Azure Data Lake Storage (ADLS) Gen2
<a name="connectors-adls-gen2"></a>

O conector do Amazon Athena para o [Azure Data Lake Storage (ADLS) Gen2](https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/azure/adls-gen2/) permite que o Amazon Athena execute consultas SQL em dados armazenados no ADLS. O Athena não pode acessar diretamente os arquivos armazenados no data lake. 

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.
+ **Fluxo de trabalho** – O conector implementa a interface JDBC, que usa o driver `com.microsoft.sqlserver.jdbc.SQLServerDriver`. O conector envia consultas para o mecanismo do Azure Synapse, que então acessa o data lake. 
+ **Manipulação de dados e S3** – Normalmente, o conector Lambda consulta dados diretamente sem transferência para o Amazon S3. No entanto, quando os dados retornados pela função Lambda excedem os limites do Lambda, os dados são gravados no bucket de vazamento do Amazon S3 que você especifica para que o Athena possa ler o excesso.
+ **Autenticação AAD** – O AAD pode ser usado como um método de autenticação para o conector Azure Synapse. Para usar o AAD, a string de conexão JDBC usada pelo conector deve conter os parâmetros de URL `authentication=ActiveDirectoryServicePrincipal`, `AADSecurePrincipalId` e`AADSecurePrincipalSecret`. Esses parâmetros podem ser passados diretamente ou pelo Secrets Manager.

## Pré-requisitos
<a name="connectors-datalakegentwo-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-adls-gen2-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.

## Termos
<a name="connectors-adls-gen2-terms"></a>

Os termos a seguir são relativos ao conector do Azure Data Lake Storage Gen2.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-adls-gen2-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Azure Data Lake Storage Gen2.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="adls-gen2-gc"></a>

Recomendamos que você configure um conector do Azure Data Lake Storage Gen2 usando um objeto de conexões do Glue. Para isso, defina a variável de ambiente `glue_connection` do conector do Azure Data Lake Storage Gen2 como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DATALAKEGEN2
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Azure Data Lake Storage Gen2 criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Azure Data Lake Storage Gen2 criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="adls-gen2-legacy"></a>

#### String de conexão
<a name="connectors-adls-gen2-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
datalakegentwo://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-adls-gen2-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | DataLakeGen2MuxCompositeHandler | 
| Manipulador de metadados | DataLakeGen2MuxMetadataHandler | 
| Manipulador de registros | DataLakeGen2MuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-adls-gen2-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mydatalakegentwocatalog, então o nome da variável de ambiente será mydatalakegentwocatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do DataLakeGen2 que ofereça suporte a duas instâncias de banco de dados: `datalakegentwo1` (o padrão) e `datalakegentwo2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database\$1name;\$1\$1secret1\$1name\$1 | 
| datalakegentwo\$1catalog1\$1connection\$1string | datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database\$1name;\$1\$1secret1\$1name\$1 | 
| datalakegentwo\$1catalog2\$1connection\$1string | datalakegentwo://jdbc:sqlserver://adlsgentwo2.hostname:port;databaseName=database\$1name;\$1\$1secret2\$1name\$1 | 

##### Fornecimento de credenciais
<a name="connectors-adls-gen2-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${secret1_name}`.

```
datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;${secret1_name}
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;user=user_name;password=password
```

#### Uso de um único manipulador de conexão
<a name="connectors-adls-gen2-using-a-single-connection-handler"></a>

É possível usar os seguintes manipuladores de metadados e registros de conexão única para se conectar a uma única instância do Azure Data Lake Storage Gen2.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | DataLakeGen2CompositeHandler | 
| Manipulador de metadados | DataLakeGen2MetadataHandler | 
| Manipulador de registros | DataLakeGen2RecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-adls-gen2-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Azure Data Lake Storage Gen2 compatível com uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=;\$1\$1secret\$1name\$1 | 

#### Parâmetros de derramamento
<a name="connectors-adls-gen2-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-adls-gen2-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do ADLS Gen2 e do Arrow.


****  

| ADLS Gen2 | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numeric | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| horário | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 

## Partições e divisões
<a name="connectors-adls-gen2-partitions-and-splits"></a>

O Azure Data Lake Storage Gen2 usa armazenamento de blobs Gen2 compatível com Hadoop para armazenar arquivos de dados. Os dados desses arquivos são consultados no mecanismo do Azure Synapse. O mecanismo Azure Synapse trata os dados do Gen2 armazenados nos sistemas de arquivos como tabelas externas. As partições são implementadas com base no tipo de dados. Se os dados já tiverem sido particionados e distribuídos no sistema de armazenamento do Gen2, o conector recuperará os dados como uma única divisão.

## desempenho
<a name="connectors-adls-gen2-performance"></a>

O conector do Azure Data Lake Storage Gen2 apresenta uma performance de consulta mais lenta quando executa várias consultas ao mesmo tempo e está sujeito a controle de utilização.

O conector do Athena para o Azure Data Lake Storage Gen2 realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Predicados
<a name="connectors-datalakegentwo-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Azure Data Lake Storage Gen2 pode combinar essas expressões e passá-las diretamente ao Azure Data Lake Storage Gen2 para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Azure Data Lake Storage Gen2 são compatíveis com passagem de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade:**EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-datalakegentwo-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');
```

## Consultas de passagem
<a name="connectors-datalakegentwo-passthrough-queries"></a>

O conector do Azure Data Lake Storage Gen2 é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Azure Data Lake Storage Gen2, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Azure Data Lake Storage Gen2. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-datalakegentwo-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-datalakegentwo-additional-resources"></a>

Para obter as informações mais recentes sobre versões do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/pom.xml) do conector do Azure Data Lake Storage Gen2 em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-datalakegen2) em GitHub.com.

# Conector do Amazon Athena para o Azure Synapse
<a name="connectors-azure-synapse"></a>

O conector do Amazon Athena para o [Azure Synapse Analytics](https://docs.microsoft.com/en-us/azure/synapse-analytics/overview-what-is) permite que o Amazon Athena execute consultas SQL em seus bancos de dados do Azure Synapse usando JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-synapse-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-azure-synapse-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados `Date` e `Timestamp` para o tipo de dados apropriado.
+ Para pesquisar valores negativos dos tipos `Real` e `Float`, use o operador `<=` ou `>=`.
+ Não há suporte para os tipos de dados `binary`, `varbinary`, `image` e `rowversion`.

## Termos
<a name="connectors-azure-synapse-terms"></a>

Os termos a seguir estão relacionados ao conector Synapse.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-azure-synapse-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Synapse.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-azure-synapse-gc"></a>

Recomendamos que você configure um conector do Synapse usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Synapse como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type SYNAPSE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Synapse criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Synapse criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas (recomendadas)
<a name="connectors-azure-synapse-legacy"></a>

#### String de conexão
<a name="connectors-azure-synapse-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
synapse://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-azure-synapse-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SynapseMuxCompositeHandler | 
| Manipulador de metadados | SynapseMuxMetadataHandler | 
| Manipulador de registros | SynapseMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-azure-synapse-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mysynapsecatalog, então o nome da variável de ambiente será mysynapsecatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Synapse que ofereça suporte a duas instâncias de banco de dados: `synapse1` (o padrão) e `synapse2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| synapse\$1catalog1\$1connection\$1string | synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| synapse\$1catalog2\$1connection\$1string | synapse://jdbc:synapse://synapse2.hostname:port;databaseName=<database\$1name>;\$1\$1secret2\$1name\$1 | 

##### Fornecimento de credenciais
<a name="connectors-azure-synapse-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome do segredo \$1\$1secret\$1name\$1.

```
synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;${secret_name}
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;user=<user>;password=<password>
```

#### Uso de um único manipulador de conexão
<a name="connectors-azure-synapse-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Synapse.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SynapseCompositeHandler | 
| Manipulador de metadados | SynapseMetadataHandler | 
| Manipulador de registros | SynapseRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-azure-synapse-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Synapse com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | synapse://jdbc:sqlserver://hostname:port;databaseName=<database\$1name>;\$1\$1secret\$1name\$1 | 

#### Autenticação da Configuração do Active Directory
<a name="connectors-azure-synapse-configuring-active-directory-authentication"></a>

O conector Amazon Athena Azure Synapse oferece suporte à Autenticação do Microsoft Active Directory. Antes de começar, você deve configurar um usuário administrativo no portal do Microsoft Azure e usá-lo AWS Secrets Manager para criar um segredo.

**Para configurar o usuário administrativo do Active Directory:**

1. Usando uma conta que tenha privilégios administrativos, faça login no portal Microsoft Azure em [https://portal.azure.com/](https://portal.azure.com/).

1. Na caixa de pesquisa, insira **Azure Synapse Analytics** e escolha **Azure Synapse** Analytics.  
![\[Escolha Azure Synapse Analytics.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-azure-synapse-1.png)

1. Abra o menu à esquerda.  
![\[Escolha o menu do portal do Azure.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-azure-synapse-2.png)

1. No painel de navegação, escolha **Azure Active Directory**.

1. Na guia **Definir administrador**, defina o **administrador do Active Directory** como um usuário novo ou existente.  
![\[Use a guia Definir administrador\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-azure-synapse-3.png)

1. Em AWS Secrets Manager, armazene as credenciais de nome de usuário e senha do administrador. Para obter informações sobre como criar um segredo no Secrets Manager, consulte [Criação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

**Para visualizar o segredo no Secrets Manager**

1. Abra o console do Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. No painel de navegação, escolha **Secrets** (Segredos).

1. Na página **Secrets** (Segredos), selecione o link do seu segredo.

1. Na página de detalhes do seu segredo, escolha **Retrieve secret value** (Recuperar valor do segredo).  
![\[Visualizando segredos em AWS Secrets Manager.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-azure-synapse-4.png)

##### Modificando a string de conexão
<a name="connectors-azure-synapse-modifying-the-connection-string"></a>

Para habilitar a Autenticação do Active Directory para o conector, modifique a string de conexão usando a seguinte sintaxe:

```
synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryPassword;{secret_name}
```

##### Usando o ActiveDirectoryServicePrincipal
<a name="connectors-azure-synapse-using-activedirectoryserviceprincipal"></a>

O conector do Amazon Athena para o Azure Synapse também oferece suporte ao `ActiveDirectoryServicePrincipal`. Para habilitar isso, modifique a string de conexão da seguinte forma:

```
synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryServicePrincipal;{secret_name}
```

Para `secret_name`, especifique o ID do aplicativo ou cliente como o nome de usuário e o segredo de uma identidade de serviço principal como a senha.

#### Parâmetros de derramamento
<a name="connectors-azure-synapse-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-azure-synapse-data-type-support"></a>

A tabela a seguir mostra os tipos de dados correspondentes para Synapse e Apache Arrow.


****  

| Synapse | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numeric | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| horário | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 
| nchar[n] | VARCHAR | 
| nvarchar[n/max] | VARCHAR | 

## Partições e divisões
<a name="connectors-azure-synapse-partitions-and-splits"></a>

Uma partição é representada por uma única coluna de partição do tipo `varchar`. O Synapse oferece suporte a particionamento por intervalo, portanto, o particionamento é implementado extraindo a coluna da partição e o intervalo da partição das tabelas de metadados do Synapse. Esses valores de intervalo são usados para criar as divisões.

## desempenho
<a name="connectors-azure-synapse-performance"></a>

A seleção de um subconjunto de colunas diminui significativamente o runtime da consulta. O conector apresenta um controle de utilização significativo devido à simultaneidade.

O conector do Athena para o Synapse realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Predicados
<a name="connectors-synapse-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Synapse pode combinar essas expressões e passá-las diretamente ao Synapse para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Synapse são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade:**EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-synapse-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');
```

## Consultas de passagem
<a name="connectors-synapse-passthrough-queries"></a>

O conector Synapse é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Synapse, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Synapse. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-synapse-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-synapse-additional-resources"></a>
+ Para ver um artigo que mostra como usar o Quick e a consulta federada Amazon Athena para criar painéis e visualizações em dados armazenados nos bancos de dados do Microsoft Azure Synapse, consulte [Perform multi-cloud analytics using Quick, Amazon Athena Federated Query, and Microsoft Azure Synapsee](https://aws.amazon.com/blogs/business-intelligence/perform-multi-cloud-analytics-using-amazon-quicksight-amazon-athena-federated-query-and-microsoft-azure-synapse/) em *AWS Big Data Blog*.
+ Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/pom.xml) do conector Synapse em GitHub.com.
+ Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-synapse) em GitHub.com.

# Conector do Amazon Athena para o Cloudera Hive
<a name="connectors-cloudera-hive"></a>

O conector do Amazon Athena para o Cloudera Hive permite que o Athena execute consultas SQL na distribuição Hadoop do [Cloudera Hive](https://www.cloudera.com/products/open-source/apache-hadoop/apache-hive.html). O conector transforma suas consultas SQL do Athena na sintaxe equivalente do HiveQL. 

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-hive-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-cloudera-hive-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.

## Termos
<a name="connectors-cloudera-hive-terms"></a>

Os termos a seguir estão relacionados ao conector Cloudera Hive.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-cloudera-hive-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Cloudera Hive.

### Conexões do Glue (recomendação)
<a name="connectors-cloudera-hive-gc"></a>

Recomendamos que você configure um conector do Cloudera Hive usando um objeto de conexões do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Cloudera Hive como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type CLOUDERAHIVE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Cloudera Hive criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Cloudera Hive criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-cloudera-hive-legacy"></a>

#### String de conexão
<a name="connectors-cloudera-hive-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
hive://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-cloudera-hive-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | HiveMuxCompositeHandler | 
| Manipulador de metadados | HiveMuxMetadataHandler | 
| Manipulador de registros | HiveMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-cloudera-hive-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myhivecatalog, então o nome da variável de ambiente será myhivecatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Hive que ofereça suporte a duas instâncias de banco de dados: `hive1` (o padrão) e `hive2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1:10000/default;\$1\$1Test/RDS/hive1\$1 | 
| hive2\$1catalog1\$1connection\$1string | hive://jdbc:hive2://hive1:10000/default;\$1\$1Test/RDS/hive1\$1 | 
| hive2\$1catalog2\$1connection\$1string | hive://jdbc:hive2://hive2:10000/default;UID=sample&PWD=sample | 

##### Fornecimento de credenciais
<a name="connectors-cloudera-hive-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string da conexão JDBC, o conector Cloudera Hive exige um segredo do AWS Secrets Manager. Para usar o recurso de consulta federada do Athena com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

Coloque o nome de um segredo do AWS Secrets Manager na string da conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/hive1}`.

```
hive://jdbc:hive2://hive1:10000/default;...&${Test/RDS/hive1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
hive://jdbc:hive2://hive1:10000/default;...&UID=sample2&PWD=sample2&...
```

Atualmente, o conector Cloudera Hive reconhece as propriedades do JDBC `UID` e `PWD`.

#### Uso de um único manipulador de conexão
<a name="connectors-cloudera-hive-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Cloudera Hive.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | HiveCompositeHandler | 
| Manipulador de metadados | HiveMetadataHandler | 
| Manipulador de registros | HiveRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-cloudera-hive-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Cloudera Hive com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| padrão | hive://jdbc:hive2://hive1:10000/default;secret=\$1\$1Test/RDS/hive1\$1 | 

#### Parâmetros de derramamento
<a name="connectors-cloudera-hive-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-cloudera-hive-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC, do Cloudera Hive e do Arrow.


****  

| JDBC | Cloudera Hive | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Inteiro | TINYINT | Tiny | 
| Short | SMALLINT | Smallint | 
| Inteiro | INT | Int | 
| Longo | BIGINT | Bigint | 
| flutuação | float4 | Float4 | 
| Duplo | float8 | Float8 | 
| Data | date | Data/Dia | 
| Timestamp | timestamp | Date Milli | 
| String | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Lista | 

**nota**  
Atualmente, o Cloudera Hive não oferece suporte para os tipos agregados `ARRAY`, `MAP`, `STRUCT` ou `UNIONTYPE`. As colunas de tipos agregados são tratadas como colunas `VARCHAR` pelo SQL.

## Partições e divisões
<a name="connectors-cloudera-hive-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-cloudera-hive-performance"></a>

O Cloudera Hive oferece suporte a partições estáticas. O conector do Athena para o Cloudera Hive pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento estático é altamente recomendado. O conector Cloudera Hive é resiliente ao controle de utilização devido à simultaneidade.

O conector do Athena para o Cloudera Hive executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Cláusulas LIMIT
<a name="connectors-hive-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-hive-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Cloudera Hive pode combinar essas expressões e passá-las diretamente ao Cloudera Hive para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Cloudera Hive são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-hive-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-hive-passthrough-queries"></a>

O conector Cloudera Hive é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Cloudera Hive, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Cloudera Hive. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-hive-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-hive-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/pom.xml) do conector Cloudera Hive em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudera-hive) em GitHub.com.

# Conector do Amazon Athena para o Cloudera Impala
<a name="connectors-cloudera-impala"></a>

O conector do Amazon Athena para o Cloudera Impala permite que o Athena execute consultas SQL na distribuição do [Cloudera Impala](https://docs.cloudera.com/cdw-runtime/cloud/impala-overview/topics/impala-overview.html). O conector transforma suas consultas SQL do Athena na sintaxe equivalente do Impala.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-impala-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-cloudera-impala-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.

## Termos
<a name="connectors-cloudera-impala-terms"></a>

Os termos a seguir estão relacionados ao conector Cloudera Impala.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-cloudera-impala-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Cloudera Impala.

### Conexões do Glue (recomendação)
<a name="connectors-cloudera-impala-gc"></a>

Recomendamos que você configure um conector do Cloudera Impala usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector Cloudera Impala como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type CLOUDERAIMPALA
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Cloudera Impala criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Cloudera Impala criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-cloudera-impala-legacy"></a>

#### String de conexão
<a name="connectors-cloudera-impala-connection-string"></a>

Use uma string de conexão JDBC no formato a seguir para se conectar a um cluster do Impala.

```
impala://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-cloudera-impala-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | ImpalaMuxCompositeHandler | 
| Manipulador de metadados | ImpalaMuxMetadataHandler | 
| Manipulador de registros | ImpalaMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-cloudera-impala-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão do cluster do Impala para um catálogo do Athena. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myimpalacatalog, então o nome da variável de ambiente será myimpalacatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Impala que ofereça suporte a duas instâncias de banco de dados: `impala1` (o padrão) e `impala2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | impala://jdbc:impala://some.impala.host.name:21050/?\$1\$1Test/impala1\$1 | 
| impala\$1catalog1\$1connection\$1string | impala://jdbc:impala://someother.impala.host.name:21050/?\$1\$1Test/impala1\$1 | 
| impala\$1catalog2\$1connection\$1string | impala://jdbc:impala://another.impala.host.name:21050/?UID=sample&PWD=sample | 

##### Fornecimento de credenciais
<a name="connectors-cloudera-impala-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/impala1host}`.

```
impala://jdbc:impala://Impala1host:21050/?...&${Test/impala1host}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
impala://jdbc:impala://Impala1host:21050/?...&UID=sample2&PWD=sample2&...
```

Atualmente, o Cloudera Impala reconhece as propriedades do JDBC `UID` e `PWD`.

#### Uso de um único manipulador de conexão
<a name="connectors-cloudera-impala-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Cloudera Impala.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | ImpalaCompositeHandler | 
| Manipulador de metadados | ImpalaMetadataHandler | 
| Manipulador de registros | ImpalaRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-cloudera-impala-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Cloudera Impala com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | impala://jdbc:impala://Impala1host:21050/?secret=\$1\$1Test/impala1host\$1 | 

#### Parâmetros de derramamento
<a name="connectors-cloudera-impala-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-cloudera-impala-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC, do Cloudera Impala e do Arrow.


****  

| JDBC | Cloudera Impala | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Inteiro | TINYINT | Tiny | 
| Short | SMALLINT | Smallint | 
| Inteiro | INT | Int | 
| Longo | BIGINT | Bigint | 
| flutuação | float4 | Float4 | 
| Duplo | float8 | Float8 | 
| Data | date | Data/Dia | 
| Timestamp | timestamp | Date Milli | 
| String | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Lista | 

**nota**  
Atualmente, o Cloudera Impala não oferece suporte para os tipos agregados `ARRAY`, `MAP`, `STRUCT` ou `UNIONTYPE`. As colunas de tipos agregados são tratadas como colunas `VARCHAR` pelo SQL.

## Partições e divisões
<a name="connectors-cloudera-impala-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-cloudera-impala-performance"></a>

O Cloudera Impala oferece suporte a partições estáticas. O conector do Athena para o Cloudera Impala pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento estático é altamente recomendado. O conector Cloudera Impala é resiliente ao controle de utilização devido à simultaneidade.

O conector do Athena para o Cloudera Impala executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Cláusulas LIMIT
<a name="connectors-impala-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-impala-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Cloudera Impala pode combinar essas expressões e passá-las diretamente ao Cloudera Impala para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Cloudera Impala são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-impala-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-impala-passthrough-queries"></a>

O conector Cloudera Impala é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Cloudera Impala, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Cloudera Impala. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-impala-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-impala-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/pom.xml) do conector Cloudera Impala em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudera-impala) em GitHub.com.

# Conector do Amazon Athena para o CloudWatch
<a name="connectors-cloudwatch"></a>

O conector do CloudWatch no Amazon Athena permite que o Amazon Athena se comunique com o CloudWatch para que você possa consultar os dados de log com SQL.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

O conector mapeia os LogGroups como esquemas e cada LogStream como uma tabela. O conector também mapeia uma exibição `all_log_streams` especial que contém todos os LogStreams no LogGroup. Essa exibição permite consultar todos os logs em um LogGroup de uma só vez, em vez de pesquisar cada LogStream individualmente.

## Pré-requisitos
<a name="connectors-cloudwatch-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-cloudwatch-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do CloudWatch.

### Conexões do Glue (recomendação)
<a name="connectors-cloudwatch-gc"></a>

Recomendamos que você configure um conector do CloudWatch usando um objeto de conexões do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector do CloudWatch como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type CLOUDWATCH
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do CloudWatch criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do CloudWatch criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-cloudwatch-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

O conector também oferece suporte a [Controle de congestionamento AIMD](https://en.wikipedia.org/wiki/Additive_increase/multiplicative_decrease) para lidar com eventos de limitação do CloudWatch por meio da construção `ThrottlingInvoker` do [SDK do Amazon Athena Query Federation](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). É possível ajustar o comportamento do controle de utilização padrão definindo qualquer uma das seguintes variáveis de ambiente opcionais:
+ **throttle\$1initial\$1delay\$1ms**: o atraso inicial da chamada aplicado após o primeiro evento de congestionamento. O padrão é de 10 milissegundos.
+ **throttle\$1max\$1delay\$1ms**: o atraso máximo entre as chamadas. É possível derivar o TPS dividindo-o em 1000 ms. O padrão é de 1000 milissegundos.
+ **throttle\$1decrease\$1factor**: o fator pelo qual o Athena reduz a taxa de chamadas. O padrão é de 0,5
+ **throttle\$1increase\$1ms**: a taxa na qual o Athena diminui o atraso da chamada. O padrão é de 10 milissegundos.

## Bancos de dados e tabelas
<a name="connectors-cloudwatch-databases-and-tables"></a>

O conector CloudWatch do Athena mapeia seus LogGroups como esquemas (ou seja, bancos de dados) e cada LogStream como uma tabela. O conector também mapeia uma exibição `all_log_streams` especial que contém todos os LogStreams no LogGroup. Essa exibição permite consultar todos os logs em um LogGroup de uma só vez, em vez de pesquisar cada LogStream individualmente.

Cada tabela mapeada pelo conector CloudWatch do Athena possui o esquema a seguir. Esse esquema corresponde aos campos fornecidos pelo CloudWatch Logs.
+ **log\$1stream**: um `VARCHAR` que contém o nome do LogStream de onde a linha pertence.
+ **time**: um `INT64` que contém a época em que a linha de log foi gerada.
+ **message**: um `VARCHAR` que contém a mensagem de log.

**Exemplos**  
O exemplo a seguir mostra como realizar uma consulta `SELECT` em um LogStream especificado.

```
SELECT * 
FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."log_stream_name" 
LIMIT 100
```

O exemplo a seguir mostra como usar a visualização `all_log_streams` para executar uma consulta em todos os LogStreams em um LogGroup especificado. 

```
SELECT * 
FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."all_log_streams" 
LIMIT 100
```

## Permissões obrigatórias
<a name="connectors-cloudwatch-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-cloudwatch.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudwatch/athena-cloudwatch.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **CloudWatch Logs Read/Write** (Leitura/gravação do CloudWatch Logs): o conector usa esta permissão para ler seus dados de log e gravar seus logs de diagnóstico.

## desempenho
<a name="connectors-cloudwatch-performance"></a>

O conector CloudWatch do Athena tenta otimizar as consultas em relação ao CloudWatch paralelizando as varreduras dos fluxos de log necessários para sua consulta. Para determinados filtros de período de tempo, a redução de predicados é realizada tanto na função do Lambda quanto no CloudWatch Logs.

Para obter a melhor performance, use somente letras minúsculas em nomes de grupos de logs e nomes de fluxos de logs. O uso de maiúsculas e minúsculas mistas faz com que o conector execute uma pesquisa que não diferencia maiúsculas de minúsculas e é mais computacionalmente intensiva.

**nota**  
 O conector do CloudWatch não é compatível com nomes de banco de dados em maiúsculas. 

## Consultas de passagem
<a name="connectors-cloudwatch-passthrough-queries"></a>

O conector do CloudWatch suporta [consultas de passagem](federated-query-passthrough.md) que usam a [sintaxe de consulta do CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html). Para obter mais informações sobre o CloudWatch Logs Insights, consulte [Analisar dados de log com o CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) no *Guia do usuário do Amazon CloudWatch Logs*.

Para criar consultas de passagem com o CloudWatch, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            STARTTIME => 'start_time',
            ENDTIME => 'end_time',
            QUERYSTRING => 'query_string',
            LOGGROUPNAMES => 'log_group-names',
            LIMIT => 'max_number_of_results'
        ))
```

O exemplo a seguir filtra a consulta de passagem do CloudWatch para o campo `duration` quando ele não é igual a 1000.

```
SELECT * FROM TABLE(
        system.query(
            STARTTIME => '1710918615308',
            ENDTIME => '1710918615972',
            QUERYSTRING => 'fields @duration | filter @duration != 1000',
            LOGGROUPNAMES => '/aws/lambda/cloudwatch-test-1',
            LIMIT => '2'
            ))
```

## Informações de licença
<a name="connectors-cloudwatch-license-information"></a>

O projeto do conector CloudWatch do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-cloudwatch-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudwatch) em GitHub.com.

# Conector do Amazon Athena para o CloudWatch Metrics
<a name="connectors-cwmetrics"></a>

O conector das métricas do CloudWatch no Amazon Athena permite que o Amazon Athena consulte dados de métricas do CloudWatch com SQL.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

Para obter informações sobre a publicação de métricas de consulta do próprio Athena no CloudWatch, consulte [Usar o CloudWatch e o EventBridge para monitorar as consultas e controlar os custos](workgroups-control-limits.md).

## Pré-requisitos
<a name="connectors-cwmetrics-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-cwmetrics-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do CloudWatch Metrics.

### Conexões do Glue (recomendação)
<a name="connectors-cwmetrics-gc"></a>

Recomendamos que você configure um conector do CloudWatch Metrics usando um objeto de conexões do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector do CloudWatch Metrics como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type CLOUDWATCHMETRICS
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do CloudWatch Metrics criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do CloudWatch Metrics criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-cwmetrics-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

O conector também oferece suporte a [Controle de congestionamento AIMD](https://en.wikipedia.org/wiki/Additive_increase/multiplicative_decrease) para lidar com eventos de limitação do CloudWatch por meio da construção `ThrottlingInvoker` do [SDK do Amazon Athena Query Federation](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). É possível ajustar o comportamento do controle de utilização padrão definindo qualquer uma das seguintes variáveis de ambiente opcionais:
+ **throttle\$1initial\$1delay\$1ms**: o atraso inicial da chamada aplicado após o primeiro evento de congestionamento. O padrão é de 10 milissegundos.
+ **throttle\$1max\$1delay\$1ms**: o atraso máximo entre as chamadas. É possível derivar o TPS dividindo-o em 1000 ms. O padrão é de 1000 milissegundos.
+ **throttle\$1decrease\$1factor**: o fator pelo qual o Athena reduz a taxa de chamadas. O padrão é de 0,5
+ **throttle\$1increase\$1ms**: a taxa na qual o Athena diminui o atraso da chamada. O padrão é de 10 milissegundos.

## Bancos de dados e tabelas
<a name="connectors-cwmetrics-databases-and-tables"></a>

O conector CloudWatch Metrics do Athena mapeia seus namespaces, dimensões, métricas e valores métricos em duas tabelas em um único esquema chamado `default`.

### A tabela de métricas
<a name="connectors-cwmetrics-the-metrics-table"></a>

A tabela `metrics` contém as métricas disponíveis conforme definido exclusivamente por uma combinação de namespace, conjunto e nome. A tabela `metrics` contém as colunas a seguir.
+ **namespace**: um `VARCHAR` contendo o namespace.
+ **metric\$1name**: um `VARCHAR` contendo o nome da métrica.
+ **dimensions**: uma `LIST` de objetos `STRUCT` compostos por `dim_name (VARCHAR)` e `dim_value (VARCHAR)`.
+ **statistic**: uma `LIST` de estatísticas `VARCH` (por exemplo, `p90`, `AVERAGE`, ...) disponíveis para a métrica.

### A tabela metric\$1samples
<a name="connectors-cwmetrics-the-metric_samples-table"></a>

A tabela `metric_samples` contém as amostras métricas disponíveis para cada métrica na tabela `metrics`. A tabela `metric_samples` contém as colunas a seguir.
+ **namespace**: um `VARCHAR` que contém o namespace.
+ **metric\$1name**: um `VARCHAR` que contém o nome da métrica.
+ **dimensions**: uma `LIST` de objetos `STRUCT` compostos por `dim_name (VARCHAR)` e `dim_value (VARCHAR)`.
+ **dim\$1name**: um campo `VARCHAR` de conveniência que você pode usar para filtrar facilmente por um único nome de dimensão.
+ **dim\$1value**: um campo `VARCHAR` de conveniência que você pode usar para filtrar facilmente por um único valor de dimensão.
+ **period**: um campo `INT` que representa o “período” da métrica em segundos (por exemplo, uma métrica de 60 segundos).
+ **timestamp**: um campo `BIGINT` que representa o tempo de época em segundos para o qual a amostra métrica se destina.
+ **value**: um `FLOAT8` campo que contém o valor da amostra.
+ **statistic**: um `VARCHAR` que contém o tipo estatístico da amostra (por exemplo, `AVERAGE` ou `p90`).

## Permissões obrigatórias
<a name="connectors-cwmetrics-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-cloudwatch-metrics.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudwatch-metrics/athena-cloudwatch-metrics.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **CloudWatch Metrics ReadOnly** (Métricas do CloudWatch somente para leitura): o conector usa esta permissão para consultar seus dados de métricas.
+ **CloudWatch Logs Write**: o conector usa este acesso para gravar seus registros de diagnóstico.

## desempenho
<a name="connectors-cwmetrics-performance"></a>

O conector CloudWatch Metrics do Athena tenta otimizar as consultas em relação ao CloudWatch Metrics paralelizando as varreduras dos fluxos de log necessários para sua consulta. Para determinados filtros de período de tempo, métricas, namespaces e dimensões, a redução de predicados é realizada tanto na função do Lambda quanto no CloudWatch Logs.

## Informações de licença
<a name="connectors-cwmetrics-license-information"></a>

O projeto do conector CloudWatch Metrics do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-cwmetrics-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudwatch-metrics) em GitHub.com.

# Conector do AWS CMDB no Amazon Athena
<a name="connectors-cmdb"></a>

O conector do Amazon Athena para o AWS CMDB permite que o Athena se comunique com vários serviços da AWS para que você possa consultá-los com SQL.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-cmdb-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-cmdb-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do AWS CMDB.

### Conexões do Glue (recomendação)
<a name="connectors-cmdb-gc"></a>

Recomendamos que você configure um conector do AWS CMDB usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do AWS CMDB com o nome da conexão do Glue que deseja usar.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type CMDB
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do AWS CMDB criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do AWS CMDB criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-cmdb-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar o desempenho, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **default\$1ec2\$1image\$1owner**: (opcional) quando definido, controla o proprietário padrão da imagem do Amazon EC2 que filtra [Imagens de máquina da Amazon (AMIs)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html). Se você não definir esse valor e sua consulta na tabela de imagens do EC2 não incluir um filtro para o proprietário, seus resultados incluirão todas as imagens públicas.

## Bancos de dados e tabelas
<a name="connectors-cmdb-databases-and-tables"></a>

O conector AWS CMDB do Athena disponibiliza os seguintes bancos de dados e tabelas para consultar seu inventário de recursos da AWS. Para obter mais informações sobre as colunas disponíveis em cada tabela, execute uma declaração `DESCRIBE database.table` usando o console ou a API do Athena.
+ **ec2**: esse banco de dados contém recursos relacionados ao Amazon EC2, incluindo os seguintes.
+ **ebs\$1volumes**: contém detalhes dos seus volumes do Amazon EBS.
+ **ec2\$1instances**: contém detalhes das suas instâncias do EC2.
+ **ec2\$1images**: contém detalhes das suas imagens do EC2.
+ **routing\$1tables**: contém detalhes das suas tabelas de roteamento de VPC.
+ **security\$1groups**: contém detalhes dos seus grupos de segurança.
+ **subnets**: contém detalhes das suas sub-redes VPC.
+ **vpcs**: contém detalhes das suas VPCs.
+ **emr**: este banco de dados contém recursos relacionados ao Amazon EMR, incluindo os seguintes.
+ **emr\$1clusters**: contém detalhes dos seus clusters do EMR.
+ **rds**: este banco de dados contém recursos relacionados ao Amazon RDS, incluindo os seguintes.
+ **rds\$1instances**: contém detalhes das suas instâncias do RDS.
+ **s3**: este banco de dados contém recursos relacionados ao RDS, incluindo os seguintes.
+ **buckets**: contém detalhes dos buckets do Amazon S3.
+ **objects**: contém detalhes dos seus objetos do Amazon S3, excluindo seu conteúdo.

## Permissões obrigatórias
<a name="connectors-cmdb-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-aws-cmdb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-aws-cmdb/athena-aws-cmdb.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **S3 List** (Listar S3): o conector usa esta permissão para listar seus buckets e objetos do Amazon S3.
+ **EC2 Describe** (Descrever EC2): o conector usa esta permissão para descrever recursos, como suas instâncias do Amazon EC2, grupos de segurança, VPCs e volumes do Amazon EBS.
+ **EMR Describe / List** (Descrever / listar EMR): o conector usa esta permissão para descrever seus clusters do EMR.
+ **RDS Describe** (Descrever RDS): o conector usa esta permissão para descrever suas instâncias do RDS.

## Performance
<a name="connectors-cmdb-performance"></a>

Atualmente, o conector AWS CMDB do Athena não oferece suporte a verificações paralelas. A redução de predicados é realizada dentro da função do Lambda. Sempre que possível, predicados parciais são enviados para os serviços que estão sendo consultados. Por exemplo, uma consulta para obter os detalhes de uma instância específica do Amazon EC2 chama a API do EC2 com o ID de instância específico para executar uma operação de descrição direcionada.

## Informações de licença
<a name="connectors-cmdb-license-information"></a>

O projeto do conector AWS CMDB do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-cmdb-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-aws-cmdb) em GitHub.com.

# Conector IBM Db2 do Amazon Athena
<a name="connectors-ibm-db2"></a>

O conector do Amazon Athena para Db2 possibilita que o Amazon Athena execute consultas SQL em seus bancos de dados do IBM Db2 usando o JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-dbtwo-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-ibm-db2-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.

## Termos
<a name="connectors-ibm-db2-terms"></a>

Os termos a seguir estão relacionados ao conector Db2.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-ibm-db2-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Db2.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-ibm-db2-gc"></a>

Recomendamos que você configure um conector do Db2 usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Db2 como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DB2
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Db2 criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Db2 criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-ibm-db2-legacy"></a>

#### String de conexão
<a name="connectors-ibm-db2-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
dbtwo://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-ibm-db2-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2MuxCompositeHandler | 
| Manipulador de metadados | Db2MuxMetadataHandler | 
| Manipulador de registros | Db2MuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-ibm-db2-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mydbtwocatalog, então o nome da variável de ambiente será mydbtwocatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades exemplificadas a seguir são para uma função MUX do Lambda para o Db2 compatível com duas instâncias de banco de dados: `dbtwo1` (o padrão) e `dbtwo2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | dbtwo://jdbc:db2://dbtwo1.hostname:port/database\$1name:\$1\$1secret1\$1name\$1 | 
| dbtwo\$1catalog1\$1connection\$1string | dbtwo://jdbc:db2://dbtwo1.hostname:port/database\$1name:\$1\$1secret1\$1name\$1 | 
| dbtwo\$1catalog2\$1connection\$1string | dbtwo://jdbc:db2://dbtwo2.hostname:port/database\$1name:\$1\$1secret2\$1name\$1 | 

##### Fornecimento de credenciais
<a name="connectors-ibm-db2-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${secret_name}`.

```
dbtwo://jdbc:db2://hostname:port/database_name:${secret_name}
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
dbtwo://jdbc:db2://hostname:port/database_name:user=user_name;password=password;
```

#### Uso de um único manipulador de conexão
<a name="connectors-ibm-db2-using-a-single-connection-handler"></a>

É possível usar os metadados de conexão única e os manipuladores de registros a seguir para se conectar a uma única instância do Db2.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2CompositeHandler | 
| Manipulador de metadados | Db2MetadataHandler | 
| Manipulador de registros | Db2RecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-ibm-db2-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

A propriedade exemplificada a seguir é para uma única instância do Db2 compatível em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | dbtwo://jdbc:db2://hostname:port/database\$1name:\$1\$1secret\$1name\$1  | 

#### Parâmetros de derramamento
<a name="connectors-ibm-db2-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-ibm-db2-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Arrow.


****  

| Db2 | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| DATE | DATEDAY | 
| TIME | VARCHAR | 
| TIMESTAMP | DATEMILLI | 
| DATETIME | DATEMILLI | 
| BOOLEAN | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | DECIMAL | 
| REAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 
| DECFLOAT | FLOAT8 | 

## Partições e divisões
<a name="connectors-ibm-db2-partitions-and-splits"></a>

Uma partição é representada por uma ou mais colunas de partição do tipo `varchar`. O conector Db2 cria partições usando os esquemas de organização a seguir.
+ Distribuir por hash
+ Particionar por intervalo
+ Organizar por dimensões

O conector recupera detalhes da partição, como o número de partições e o nome da coluna de uma ou mais tabelas de metadados do Db2. As divisões são criadas com base no número de partições identificadas. 

## desempenho
<a name="connectors-ibm-db2-performance"></a>

O conector do Athena para o Db2 executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Cláusulas LIMIT
<a name="connectors-dbtwo-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-dbtwo-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Db2 pode combinar essas expressões e passá-las diretamente ao Db2 para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Db2 são compatíveis com a passagem de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-dbtwo-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-dbtwo-passthrough-queries"></a>

O conector Db2 é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Db2, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Db2. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-dbtwo-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-dbtwo-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/pom.xml) para o conector Db2 em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-db2) em GitHub.com.

# Conector IBM Db2 AS/400 (Db2 iSeries) para Amazon Athena
<a name="connectors-ibm-db2-as400"></a>

O conector do Amazon Athena para Db2 AS/400 habilita o Amazon Athena a executar consultas SQL em seus bancos de dados IBM Db2 AS/400 (Db2 iSeries) usando o JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-db2as400-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-ibm-db2-as400-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.

## Termos
<a name="connectors-ibm-db2-as400-terms"></a>

Os termos a seguir estão relacionados ao conector Db2 AS/400.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-ibm-db2-as400-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Db2 AS/400.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-ibm-db2-as400-gc"></a>

Recomendamos que você configure um conector do Db2 AS/400 usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Db2 AS/400 como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DB2AS400
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Db2 AS/400 criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Db2 AS/400 criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-ibm-db2-as400-legacy"></a>

#### String de conexão
<a name="connectors-ibm-db2-as400-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
db2as400://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-ibm-db2-as400-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2MuxCompositeHandler | 
| Manipulador de metadados | Db2MuxMetadataHandler | 
| Manipulador de registros | Db2MuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-ibm-db2-as400-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mydb2as400catalog, então o nome da variável de ambiente será mydb2as400catalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades exemplificadas a seguir são para uma função MUX do Lambda para o Db2 compatível com duas instâncias de banco de dados: `db2as4001` (o padrão) e `db2as4002`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret name>\$1; | 
| db2as400\$1catalog1\$1connection\$1string | db2as400://jdbc:as400://db2as4001.hostname/:\$1\$1secret1\$1name\$1 | 
| db2as400\$1catalog2\$1connection\$1string | db2as400://jdbc:as400://db2as4002.hostname/:\$1\$1secret2\$1name\$1 | 
| db2as400\$1catalog3\$1connection\$1string | db2as400://jdbc:as400://<ip\$1address>;user=<username>;password=<password>;<properties>; | 

##### Fornecimento de credenciais
<a name="connectors-ibm-db2-as400-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${secret_name}`.

```
db2as400://jdbc:as400://<ip_address>;<properties>;:${<secret_name>};
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
db2as400://jdbc:as400://<ip_address>;user=<username>;password=<password>;<properties>;
```

#### Uso de um único manipulador de conexão
<a name="connectors-ibm-db2-as400-using-a-single-connection-handler"></a>

É possível usar os metadados de conexão única e os manipuladores de registros a seguir para se conectar a uma única instância do Db2 AS/400.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2CompositeHandler | 
| Manipulador de metadados | Db2MetadataHandler | 
| Manipulador de registros | Db2RecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-ibm-db2-as400-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

A propriedade exemplificada a seguir é para uma única instância do Db2 AS/400 compatível em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret\$1name>\$1; | 

#### Parâmetros de derramamento
<a name="connectors-ibm-db2-as400-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-ibm-db2-as400-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| Db2 AS/400 | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| DATE | DATEDAY | 
| TIME | VARCHAR | 
| TIMESTAMP | DATEMILLI | 
| DATETIME | DATEMILLI | 
| BOOLEAN | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | DECIMAL | 
| REAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 
| DECFLOAT | FLOAT8 | 

## Partições e divisões
<a name="connectors-ibm-db2-as400-partitions-and-splits"></a>

Uma partição é representada por uma ou mais colunas de partição do tipo `varchar`. O conector Db2 AS/400 cria partições usando os esquemas de organização a seguir.
+ Distribuir por hash
+ Particionar por intervalo
+ Organizar por dimensões

O conector recupera detalhes da partição, como o número de partições e o nome da coluna, de uma ou mais tabelas de metadados do Db2 AS/400. As divisões são criadas com base no número de partições identificadas. 

## desempenho
<a name="connectors-db2-as400-performance"></a>

Para melhorar o desempenho, use o pushdown de predicados para consultar o Athena, como nos exemplos a seguir.

```
SELECT * FROM "lambda:<LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE integercol = 2147483647
```

```
SELECT * FROM "lambda: <LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Consultas de passagem
<a name="connectors-db2as400-passthrough-queries"></a>

O conector Db2 AS/400 é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Db2 AS/400, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Db2 AS/400. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-db2as400-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-db2as400-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) para o conector Db2 AS/400 em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-db2-as400) em GitHub.com.

# Conector do DocumentDB no Amazon Athena
<a name="connectors-docdb"></a>

O conector Amazon Athena para o DocumentDB permite que o Athena se comunique com suas instâncias do DocumentDB para que você possa consultar seus dados do DocumentDB com SQL. O conector também funciona com qualquer endpoint compatível com o MongoDB.

Diferentemente dos armazenamentos de dados relacionais tradicionais, as coleções do Amazon DocumentDB não têm um esquema definido. O DocumentDB não tem um armazenamento de metadados. Cada entrada em uma coleção do DocumentDB pode ter diferentes campos e tipos de dados.

O conector DocumentDB oferece suporte a dois mecanismos para gerar informações do esquema da tabela: inferência básica de esquema e metadados do AWS Glue Data Catalog.

A inferência de esquema é o padrão. Essa opção examina um pequeno número de documentos em sua coleção, forma uma união de todos os campos e força campos que têm tipos de dados não sobrepostos. Essa opção funciona bem para coleções que têm, em sua maioria, entradas uniformes.

Para coleções com uma maior variedade de tipos de dados, o conector oferece suporte à recuperação de metadados do AWS Glue Data Catalog. Se o conector vê um banco de dados do AWS Glue e uma tabela que correspondam aos nomes de seu banco de dados e coleção do DocumentDB, ele obtém suas informações de esquema da tabela AWS Glue correspondente. Quando você cria sua tabela AWS Glue, recomendamos que você a torne um superconjunto de todos os campos que você talvez queira acessar da sua coleção do DocumentDB. 

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-docdb-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-docdb-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do DocumentDB.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-docdb-gc"></a>

Recomendamos que você configure um conector do DocumentDB usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do DocumentDB como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DOCUMENTDB
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do DocumentDB criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do DocumentDB criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-docdb-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.
+ **default\$1docdb**: se estiver presente, especifica uma string de conexão do DocumentDB a ser usada quando não existir uma variável de ambiente específica do catálogo.
+ **disable\$1projection\$1and\$1casing**: (opcional) desativa a projeção e a capitalização. Use se quiser consultar tabelas do Amazon DocumentDB que usam nomes de colunas que diferenciam letras maiúsculas de minúsculas. O parâmetro `disable_projection_and_casing` usa os seguintes valores para especificar o comportamento do mapeamento de capitalização e coluna: 
  + **false** (falso): essa é a configuração padrão. A projeção está ativada e o conector espera que todos os nomes das colunas estejam usando letras minúsculas. 
  + **true** (verdadeiro): desativa a projeção e o uso de maiúsculas e minúsculas. Ao usar o parâmetro `disable_projection_and_casing`, lembre-se dos seguintes pontos: 
    + O uso do parâmetro pode resultar em um maior uso de largura de banda. Além disso, se a função do Lambda não estiver na mesma Região da AWS que a fonte de dados, custos mais altos de transferência padrão entre regiões da AWS serão gerados como resultado do maior uso de largura de banda. Para obter mais informações sobre os custos de transferência entre regiões, consulte [Cobranças de transferência de dados da AWS para arquiteturas com servidor e com tecnologia sem servidor](https://aws.amazon.com/blogs/apn/aws-data-transfer-charges-for-server-and-serverless-architectures/) no blog da rede de parceiros da AWS.
    + Como um número maior de bytes é transferido, e o maior número de bytes exige um maior tempo de desserialização, a latência geral pode aumentar. 
+ **enable\$1case\$1insensitive\$1match**: (opcional) quando `true`, realiza pesquisas sem distinção entre maiúsculas e minúsculas em nomes de esquemas e de tabelas no Amazon DocumentDB. O padrão é `false`. Use se sua consulta contiver nomes de esquemas ou de tabelas com letras maiúsculas.

#### Especificação de strings de conexão
<a name="connectors-docdb-specifying-connection-strings"></a>

É possível fornecer uma ou mais propriedades que definem os detalhes da conexão do DocumentDB para as instâncias do DocumentDB que você usar com o conector. Para fazer isso, defina uma variável de ambiente Lambda que corresponda ao nome do catálogo que você deseja usar no Athena. Por exemplo, suponha que você queira usar as seguintes consultas para consultar duas instâncias diferentes do DocumentDB no Athena:

```
SELECT * FROM "docdb_instance_1".database.table
```

```
SELECT * FROM "docdb_instance_2".database.table
```

Antes de usar essas duas instruções de SQL, você deverá adicionar duas variáveis de ambiente à sua função do Lambda: `docdb_instance_1` e `docdb_instance_2`. O valor para cada uma deverá ser uma string de conexão do DocumentDB no seguinte formato:

```
mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0      
```

##### Uso de segredos
<a name="connectors-docdb-using-secrets"></a>

Opcionalmente, é possível usar o AWS Secrets Manager para obter parte ou todo o valor dos detalhes da string de conexão. Para usar o recurso Athena Federated Query com o Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

Se você usar a sintaxe `${my_secret}` para colocar o nome de um segredo do Secrets Manager na string de conexão, o conector substituirá `${my_secret}` por seu valor em texto sem formatação do Secrets Manager exatamente. Os segredos devem ser armazenados como um segredo de texto sem formatação com o valor de `<username>:<password>`. Os segredos armazenados como `{username:<username>,password:<password>}` não serão passados corretamente para a string de conexão.

Os segredos também podem ser usados para toda a string de conexão, e o nome de usuário e a senha podem ser definidos no segredo.

Por exemplo, suponha que você defina a variável de ambiente Lambda para `docdb_instance_1` com o seguinte valor:

```
mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0         
```

O SDK do Athena Query Federation tenta automaticamente recuperar um segredo chamado `docdb_instance_1_creds` do Secrets Manager e injetar esse valor no lugar de `${docdb_instance_1_creds}`. Qualquer parte da string de conexão que esteja delimitada pela combinação de caracteres `${ }` será é interpretada como um segredo do Secrets Manager. Se você especificar um nome secreto que o conector não consiga encontrar no Secrets Manager, o conector não substituirá o texto.

## Recuperar metadados complementares
<a name="supplemental-metadata"></a>

Para recuperar os metadados complementares, siga estas etapas para configurar o banco de dados e a tabela do Glue.

### Configurar o banco de dados do Glue
<a name="setup-glue-database"></a>

1. Crie um banco de dados do Glue com o mesmo nome da coleção do DocumentDB.

1. No campo URI de localização, insira `docdb-metadata-flag`.

### Configurar a tabela do Glue
<a name="setup-glue-table"></a>

Adicione os seguintes parâmetros à tabela do Glue:
+ `docdb-metadata-flag = true`
+ `columnMapping = apple=APPLE`

  Neste exemplo, `apple` representa o nome da coluna em minúsculas no Glue e `APPLE` representa o nome real da coluna que diferencia maiúsculas de minúsculas na coleção do DocumentDB.

### Verificar recuperação de metadados
<a name="verify-metadata-retrieval"></a>

1. Execute a consulta.

1. Verifique nos logs do CloudWatch da função do Lambda se a recuperação de metadados foi bem-sucedida. Uma recuperação bem-sucedida mostrará a seguinte entrada de log:

   ```
   doGetTable: Retrieved schema for table[TableName{schemaName=test, tableName=profiles}] from AWS Glue.
   ```

**nota**  
Se a tabela já tiver um campo `columnMapping` configurado, será necessário apenas adicionar o parâmetro `docdb-metadata-flag = true` às propriedades da tabela.

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-docdb-setting-up-databases-and-tables-in-aws-glue"></a>

Como o recurso de inferência de esquema integrado do conector examina um número limitado de documentos e oferece suporte apenas um subconjunto de tipos de dados, talvez você queira usar o AWS Glue para metadados, em vez disso.

Para habilitar uma tabela do AWS Glue para uso com o Amazon DocumentDB, você deve ter um banco de dados do AWS Glue e uma tabela para o banco de dados DocumentDB e a coleção para a qual você deseja fornecer metadados complementares.

**Para usar uma tabela do AWS Glue para metadados complementares**

1. Use o console do AWS Glue para criar um banco de dados do AWS Glue com o mesmo nome do banco de dados Amazon DocumentDB.

1. Defina a propriedade de URI do banco de dados para incluir **docdb-metadata-flag**.

1. (Opcional) Adicione a propriedade de tabela **sourceTable**. Essa propriedade define o nome da tabela de origem no Amazon DocumentDB. Use essa propriedade se o nome da tabela do AWS Glue for diferente do nome da tabela no Amazon DocumentDB. Diferenças nas regras de nomenclatura entre o AWS Glue e Amazon DocumentDB podem fazer com que isso seja necessário. Por exemplo, não é permitido usar letras maiúsculas em nomes de tabelas do AWS Glue, mas é permitido usá-las em nomes de tabelas do Amazon DocumentDB.

1. (Opcional) Adicione a propriedade de tabela **columnMapping**. Essa propriedade define mapeamentos de nomes de colunas. Use essa propriedade caso as regras de nomenclatura de colunas do AWS Glue impeçam que você crie uma tabela do AWS Glue com os mesmos nomes de coluna da tabela do Amazon DocumentDB. Ela pode ser útil porque letras maiúsculas são permitidas nos nomes de colunas do Amazon DocumentDB, mas não são permitidas nos nomes de colunas do AWS Glue.

   Espera-se que o valor da propriedade `columnMapping` seja um conjunto de mapeamentos no formato `col1=Col1,col2=Col2`.
**nota**  
 O mapeamento de colunas só é aplicável a nomes de colunas de nível superior e não a campos aninhados. 

   Após adicionar a propriedade de tabela `columnMapping` do AWS Glue, é possível remover a variável de ambiente `disable_projection_and_casing` do Lambda.

1. Use os tipos de dados apropriados para o AWS Glue, conforme listado neste documento.

## Suporte ao tipo de dados
<a name="connectors-docdb-data-type-support"></a>

Esta seção lista os tipos de dados que o conector DocumentDB usa para inferência de esquema e os tipos de dados quando metadados do AWS Glue forem usados.

### Tipos de dados de inferência de esquema
<a name="connectors-docdb-schema-inference-data-types"></a>

O recurso de inferência de esquema do conector DocumentDB tenta inferir valores como pertencentes a um dos seguintes tipos de dados. A tabela mostra os tipos de dados correspondentes para o Amazon DocumentDB, Java e Apache Arrow.


****  

| Apache Arrow | Java ou DocDB | 
| --- | --- | 
| VARCHAR | String | 
| INT | Inteiro | 
| BIGINT | Longo | 
| BIT | Booleano | 
| FLOAT4 | Float | 
| FLOAT8 | Duplo | 
| TIMESTAMPSEC | Data | 
| VARCHAR | ObjectId | 
| LIST | Lista | 
| STRUCT | Documento | 

### AWS GlueTipos de dados do
<a name="connectors-docdb-glue-data-types"></a>

Se você usar o AWS Glue para metadados complementares, será possível poderá configurar os tipos de dados a seguir. A tabela mostra os correspondentes tipos de dados do AWS Glue e do Apache Arrow.


****  

| AWS Glue | Apache Arrow | 
| --- | --- | 
| int | INT | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| flutuação | FLOAT4 | 
| booleano | BIT | 
| binary | VARBINARY | 
| string | VARCHAR | 
| Lista | LIST | 
| Struct | STRUCT | 

## Permissões obrigatórias
<a name="connectors-docdb-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-docdb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-docdb/athena-docdb.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector DocumentDB requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.
+ **Acesso de leitura do AWS Secrets Manager**: se você optar por armazenar os detalhes do endpoint do DocumentDB no Secrets Manager, deverá conceder ao conector acesso a esses segredos.
+ **Acesso à VPC**: o conector exige a capacidade de conectar e desconectar interfaces à sua VPC para que ela possa se conectar a ela e se comunicar com suas instâncias do DocumentDB.

## desempenho
<a name="connectors-docdb-performance"></a>

No momento, o conector Amazon DocumentDB do Athena não é compatível com verificações paralelas, mas tenta empilhar predicados como parte de suas consultas ao DocumentDB, e predicados em relação a índices na coleção do DocumentDB resultam em, significantemente, menos dados verificados.

A função do Lambda executa o empilhamento de projeções para diminuir os dados verificados pela consulta. No entanto, selecionar um subconjunto de colunas, às vezes, resulta em um runtime de consulta mais longo. As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados.

## Consultas de passagem
<a name="connectors-docdb-passthrough-queries"></a>

O conector do Amazon DocumentDB para Athena é compatível com [consultas de passagem](federated-query-passthrough.md) e é baseado em NoSQL. Para obter mais informações sobre como fazer consultas ao Amazon DocumentDB, consulte [Como fazer consultas](https://docs.aws.amazon.com/documentdb/latest/developerguide/querying.html) no *Guia do desenvolvedor do Amazon DocumentDB*.

Para usar consultas de passagem com o Amazon DocumentDB, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            database => 'database_name',
            collection => 'collection_name',
            filter => '{query_syntax}'
        ))
```

O exemplo a seguir consulta o banco de dados `example` da coleção `TPCDS`, filtrando todos os livros com o título *Bill of Rights*.

```
SELECT * FROM TABLE(
        system.query(
            database => 'example',
            collection => 'tpcds',
            filter => '{title: "Bill of Rights"}'
        ))
```

## Recursos adicionais
<a name="connectors-docdb-additional-resources"></a>
+ Para um artigo sobre o uso da [Consulta federada do Amazon Athena](federated-queries.md) para conectar um banco de dados MongoDB ao [Quick](https://aws.amazon.com/quicksight/) para criar painéis e visualizações, consulte [Visualize dados do MongoDB do Quick usando a consulta federada do Amazon Athena](https://aws.amazon.com/blogs/big-data/visualize-mongodb-data-from-amazon-quicksight-using-amazon-athena-federated-query/) no *AWS Big Data Blog*.
+ Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-docdb) em GitHub.com.

# Conector do Amazon Athena para o DynamoDB
<a name="connectors-dynamodb"></a>

O conector do DynamoDB no Amazon Athena permite que o Amazon Athena se comunique com o DynamoDB para que você possa consultar suas tabelas com SQL. Operações de gravação como [INSERT INTO](insert-into.md) não são suportadas.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

## Pré-requisitos
<a name="connectors-dynamodb-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-dynamodb-limitations"></a>

Se você migrar suas conexões do DynamoDB para o Glue Catalog e o Lake Formation, somente os nomes das tabelas e colunas em minúsculas serão reconhecidos. 

## Parâmetros
<a name="connectors-dynamodb-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do DynamoDB.

### Conexões do Glue (recomendação)
<a name="ddb-gc"></a>

Recomendamos que você configure um conector do DynamoDB usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do DynamoDB com o nome da conexão do Glue que deseja usar.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DYNAMODB
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do DynamoDB criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do DynamoDB criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="ddb-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.
+ **disable\$1projection\$1and\$1casing**: (opcional) desativa a projeção e a capitalização. Use se quiser consultar tabelas do DynamoDB que tenham maiúsculas e minúsculas em seus nomes de coluna e não quiser especificar uma propriedade `columnMapping` em sua tabela AWS Glue.

  O parâmetro `disable_projection_and_casing` usa os seguintes valores para especificar o comportamento do mapeamento de capitalização e coluna:
  + **auto**: desativa a projeção e a capitalização quando um tipo anteriormente sem suporte é detectado e o mapeamento do nome da coluna não está definido na tabela. Essa é a configuração padrão.
  + **always** (sempre): desativa a projeção e a capitalização incondicionalmente. Isso é útil quando você tem maiúsculas e minúsculas nos nomes das colunas do DynamoDB, mas não quer especificar nenhum mapeamento de nome de coluna.

  Ao usar o parâmetro `disable_projection_and_casing`, lembre-se dos seguintes pontos:
  + O uso do parâmetro pode resultar em um maior uso de largura de banda. Além disso, se a função do Lambda não estiver na mesma Região da AWS que a fonte de dados, custos mais altos de transferência padrão entre regiões da AWS serão gerados como resultado do maior uso de largura de banda. Para obter mais informações sobre os custos de transferência entre regiões, consulte [Cobranças de transferência de dados da AWS para arquiteturas com servidor e com tecnologia sem servidor](https://aws.amazon.com/blogs/apn/aws-data-transfer-charges-for-server-and-serverless-architectures/) no blog da rede de parceiros da AWS.
  + Como um número maior de bytes é transferido, e o maior número de bytes exige um maior tempo de desserialização, a latência geral pode aumentar. 

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-dynamodb-setting-up-databases-and-tables-in-aws-glue"></a>

Como a capacidade incorporada de inferência de esquema do conector é limitada, talvez você queira usar o AWS Glue para metadados. Para fazer isso, você deve ter um banco de dados e uma tabela no AWS Glue. Para habilitá-los para uso com o DynamoDB, você deve editar suas propriedades.

**Para editar as propriedades do banco de dados no console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, expanda **Data Catalog** e escolha **Bancos de dados**.

   Na página **Databases** (Bancos de dados), você pode editar um banco de dados existente ou escolher **Add database** (Adicionar banco de dados) para criar um.

1. Na lista de bancos de dados, selecione o link do banco de dados que deseja editar.

1. Escolha **Editar**.

1. Na página **Atualizar um banco de dados**, em **Configurações de banco de dados**, para **Local**, adicione a string **dynamo-db-flag**. Essa palavra-chave indica que o banco de dados contém tabelas que o conector DynamoDB para Athena está usando para metadados complementares e é necessária para bancos de dados do AWS Glue diferentes de `default`. A propriedade `dynamo-db-flag` é útil para filtrar bancos de dados em contas com muitos bancos de dados.

1. Escolha **Update Database** (Atualizar banco de dados).

**Para editar as propriedades da tabela no console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, expanda **Data Catalog** e escolha **Tebelas**.

1. Na página **Tabelas**, na lista de tabelas, escolha o nome do link para a tabela que você deseja editar.

1. Selecione **Actions** (Ações), **Edit** (Editar).

1. Na página **Edit table** (Editar tabela), na seção **Table properties** (Propriedades de tabela), adicione as seguintes propriedades de tabela, conforme solicitado: Se você usar o crawler do DynamoDB do AWS Glue, essas propriedades serão definidas automaticamente.
   + **DynamoDB**: string que indica ao conector DynamoDB do Athena que a tabela pode ser usada para metadados complementares. Insira a string `dynamodb` nas propriedades da tabela em um campo chamado **classification** (classificação) (correspondência exata).
**nota**  
A página **Definir propriedades da tabela**, que é parte do processo de criação de tabelas no console no AWS Glue, tem uma seção **Formato dos dados** com um campo **Classificação**. Você não pode inserir nem escolher o `dynamodb` aqui. Em vez disso, depois de criar a tabela, siga as etapas para editar a tabela e inserir `classification` e `dynamodb` como um par de chave/valor na seção **Propriedades da tabela**.
   + **sourceTable**: propriedade de tabela opcional que define o nome da tabela de origem no DynamoDB. Use-a caso as regras de nomenclatura de tabelas do AWS Glue impeçam que você crie uma tabela do AWS Glue com o mesmo nome da sua tabela do DynamoDB. Por exemplo, letras maiúsculas não são permitidas em nomes de tabelas do AWS Glue, mas são permitidas nos nomes de tabelas do DynamoDB.
   + **columnMapping**: propriedade de tabela opcional que define mapeamentos de nomes de colunas. Use-a caso as regras de nomenclatura de colunas do AWS Glue impeçam que você crie uma tabela do AWS Glue com os mesmos nomes de coluna da sua tabela do DynamoDB. Por exemplo, letras maiúsculas não são permitidas em nomes de colunas do AWS Glue, mas são permitidas nos nomes de colunas do DynamoDB. Espera-se que o valor da propriedade esteja no formato col1=Col1,col2=Col2. Observe que o mapeamento de colunas só é aplicável a nomes de colunas de nível superior e não a campos aninhados.
   + **defaultTimeZone**: propriedade de tabela opcional que é aplicada a valores `date` ou `datetime` que não tenham um fuso horário explícito. Definir esse valor é uma boa prática para evitar discrepâncias entre o fuso horário padrão da fonte de dados e o fuso horário da sessão do Athena.
   + **datetimeFormatMapping**: propriedade de tabela opcional que especifica o formato de `date` ou `datetime` a ser usado ao analisar dados de uma coluna do AWS Glue de tipo de dado `date` ou `timestamp`. Se essa propriedade não for especificada, o conector tentará [inferir](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateFormatUtils.html) um formato ISO-8601. Se o conector não puder inferir o formato `date` ou `datetime`, ou analisar a string bruta, então o valor será omitido do resultado. 

     O valor de `datetimeFormatMapping` deve estar no formato `col1=someformat1,col2=someformat2`. Veja a seguir alguns exemplos de formatos:

     ```
     yyyyMMdd'T'HHmmss 
     ddMMyyyy'T'HH:mm:ss
     ```

     Se sua coluna tiver valores `date` ou `datetime` sem um fuso horário, e você desejar usar a coluna na cláusula `WHERE`, defina a propriedade `datetimeFormatMapping` para a coluna.

1. Se você definir suas colunas manualmente, certifique-se de usar os tipos de dados apropriados. Se você usou um crawler, valide as colunas e os tipos que o crawler descobriu.

1. Escolha **Salvar**.

## Permissões obrigatórias
<a name="connectors-dynamodb-required-permissions"></a>

Revise a seção `Policies` do arquivo [athena-dynamodb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-dynamodb/athena-dynamodb.yaml) para obter detalhes completos sobre as políticas do IAM que esse conector exige. A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector DynamoDB requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.
+ **Acesso de leitura do DynamoDB**: o conector usa as operações da API `DescribeTable`, `ListSchemas`, `ListTables`, `Query` e `Scan`.

## desempenho
<a name="connectors-dynamodb-performance"></a>

O conector Athena DynamoDB oferece suporte a verificações paralelas e tentativas de reduzir predicados como parte de suas consultas do DynamoDB. Um predicado de chave de hash com `X` valores distintos resulta em `X` chamadas de consulta para o DynamoDB. Todos os outros cenários de predicados resultam em um número `Y` de chamadas de exame, onde `Y` é determinado heuristicamente com base no tamanho da tabela e na throughput provisionada. Porém, selecionar um subconjunto de colunas resulta, algumas vezes, em um runtime mais longo.

Cláusulas `LIMIT` e predicados simples são passados diretamente e podem reduzir a quantidade de dados examinados e reduzir o runtime de execução da consulta. 

### Cláusulas LIMIT
<a name="connectors-dynamodb-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-dynamodb-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. Para melhorar a funcionalidade e reduzir a quantidade de dados examinados, o conector do Athena para o DynamoDB pode combinar essas expressões e passá-las diretamente ao DynamoDB.

Os seguintes operadores do conector do Athena para o DynamoDB são compatíveis com a passagem direta de predicados:
+ **Booleano: **E
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL

### Exemplo de passagem direta combinada
<a name="connectors-dynamodb-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT *
FROM my_table
WHERE col_a > 10 and col_b < 10
LIMIT 10
```

Para ver um artigo sobre como usar o pushdown de predicado para melhorar o desempenho em consultas federadas, incluindo DynamoDB, consulte [Melhorar as consultas federadas com o pushdown de predicados no Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) no *AWSBlog de Big Data*.

## Consultas de passagem
<a name="connectors-dynamodb-passthrough-queries"></a>

O conector do DynamoDB é compatível com [consultas de passagem](federated-query-passthrough.md) e usa a sintaxe partiQL. Não há compatibilidade com a operação de API [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) do DynamoDB. Para obter informações sobre como consultar o DynamoDB usando o PartiQL, consulte [Instruções selecionadas do partiQL para o DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.select.html) no *Guias do desenvolvedor do Amazon DynamoDB*.

Para usar consultas de passagem com o DynamoDB, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query_string'
        ))
```

O seguinte exemplo de consulta de passagem do DynamoDB usa partiQL para retornar uma lista de dispositivos Fire TV Stick com uma propriedade `DateWatched` posterior a 24/12/22.

```
SELECT * FROM TABLE(
        system.query(
           query => 'SELECT Devices 
                       FROM WatchList 
                       WHERE Devices.FireStick.DateWatched[0] > '12/24/22''
        ))
```

## Solução de problemas
<a name="connectors-dynamodb-troubleshooting"></a>

### Vários filtros em uma coluna de chave de classificação
<a name="connectors-dynamodb-troubleshooting-sort-key-filters"></a>

**Mensagem de erro**: KeyConditionExpressions deve conter apenas uma condição por chave

**Causa**: este problema pode ocorrer no mecanismo Athena versão 3 em consultas que tenham um filtro limitado inferior e superior em uma coluna de chave de classificação do DynamoDB. Como o DynamoDB não oferece suporte a mais de uma condição de filtro em uma chave de classificação, ocorre um erro quando o conector tenta propagar uma consulta que tenha as duas condições aplicadas.

**Solução**: atualize o conector para a versão 2023.11.1 ou posterior. Para obter instruções sobre como atualizar um conector, consulte [Atualizar um conector de fonte de dados](connectors-updating.md).

## Custos
<a name="connectors-dynamodb-costs"></a>

Os custos de uso do conector dependem dos recursos subjacentes da AWS que são usados. Como as consultas que usam verificações podem consumir um grande número de [unidades de capacidade de leitura (RCUs)](https://aws.amazon.com/dynamodb/pricing/provisioned/), considere as informações para [Definição de preços do Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/) com cuidado.

## Recursos adicionais
<a name="connectors-dynamodb-additional-resources"></a>
+ Para uma introdução ao uso do conector Amazon Athena DynamoDB, consulte [Acesse, consulte e una tabelas Amazon DynamoDB usando o Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) no guia *AWSPadrões de Orientação Prescritiva*. 
+ Para ver um artigo sobre como usar o conector do Athena DynamoDB para consultar dados no DynamoDB com SQL e visualizar insights no Quick, consulte a postagem [Visualize Amazon DynamoDB insights in Amazon Quick using the Amazon Athena DynamoDB connector and AWS Glue](https://aws.amazon.com/blogs/big-data/visualize-amazon-dynamodb-insights-in-amazon-quicksight-using-the-amazon-athena-dynamodb-connector-and-aws-glue/) em *AWS Big Data Blog*. 
+ Para ler um artigo sobre o uso do conector do Amazon Athena DynamoDB com o Amazon DynamoDB, o Athena e o Quick para criar um painel de governança simples, consulte a postagem [Consulte tabelas Amazon DynamoDB entre contas usando a consulta federada Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-amazon-dynamodb-tables-using-amazon-athena-federated-query/) no *AWS Big Data Blog*.
+ Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) em GitHub.com.

# Conector do Amazon Athena para o Google BigQuery
<a name="connectors-bigquery"></a>

O conector do Amazon Athena para o Google [BigQuery](https://cloud.google.com/bigquery/) permite que o Amazon Athena execute consultas SQL em seus dados do Google BigQuery.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-bigquery-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-bigquery-limitations"></a>
+ As funções do Lambda têm um valor máximo de tempo limite de 15 minutos. Cada divisão executa uma consulta no BigQuery e precisa terminar com tempo suficiente para armazenar os resultados para que o Athena leia. Se a função do Lambda atingir o tempo limite, a consulta falhará.
+ O Google BigQuery diferencia maiúsculas e minúsculas. O conector tenta corrigir a capitalização dos nomes dos conjuntos de dados, dos nomes das tabelas e dos ID de projetos. Isso é necessário porque o Athena coloca em minúsculas todos os metadados. Essas correções geram muitas chamadas extras para o Google BigQuery.
+ Não há suporte para o tipo de dado binário.
+ Devido à simultaneidade e aos limites de cota do Google BigQuery, o conector pode encontrar problemas de limite de cota do Google. Para evitar esses problemas, imponha o máximo possível de restrições ao Google BigQuery. Para obter informações sobre cotas do BigQuery, consulte [Cotas e limites](https://cloud.google.com/bigquery/quotas) na documentação do Google BigQuery.

## Parâmetros
<a name="connectors-bigquery-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Google BigQuery.

### Conexões do Glue (recomendação)
<a name="bigquery-gc"></a>

Recomendamos que você configure um conector do Google BigQuery usando um objeto de conexões do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do Google BigQuery com o nome da conexão do Glue que deseja usar.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type BIGQUERY
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Google BigQuery criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Google BigQuery criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="bigquery-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar o desempenho, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **gcp\$1project\$1id**: o ID do projeto (não o nome do projeto) que contém os conjuntos de dados que o conector deve ler (por exemplo, `semiotic-primer-1234567`).
+ **secret\$1manager\$1gcp\$1creds\$1name**: o nome do segredo no AWS Secrets Manager que contém suas credenciais do BigQuery no formato JSON (por exemplo, `GoogleCloudPlatformCredentials`).
+ **big\$1query\$1endpoint**: (opcional) o URL de um endpoint privado do BigQuery. Use esse parâmetro quando quiser acessar o BigQuery por meio de um endpoint privado.

## Divisões e exibições
<a name="connectors-bigquery-splits-and-views"></a>

Como o conector BigQuery usa a API Storage Read do BigQuery para consultar tabelas, e a API Storage do BigQuery não é compatível com exibições, o conector usa o cliente do BigQuery com uma única divisão para exibições.

## desempenho
<a name="connectors-bigquery-performance"></a>

Para consultar tabelas, o conector BigQuery usa a API Storage Read do BigQuery, que usa um protocolo baseado em RPC que fornece acesso rápido ao armazenamento gerenciado do BigQuery. Para obter mais informações sobre a API BigQuery Storage Read, consulte [Use the BigQuery Storage Read API to read table data](https://cloud.google.com/bigquery/docs/reference/storage) na documentação do Google Cloud.

A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector está sujeito a falhas de consulta à medida que a simultaneidade aumenta e, de forma geral, é um conector lento.

O conector do Athena para o Google BigQuery executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, cláusulas `ORDER BY`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Cláusulas LIMIT
<a name="connectors-bigquery-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Principais N consultas
<a name="connectors-bigquery-performance-top-n-queries"></a>

Uma das `N` principais consultas especifica uma ordenação do conjunto de resultados e um limite no número de linhas retornadas. Você pode usar esse tipo de consulta para determinar os `N` principais valores máximos ou `N` principais valores mínimos para os conjuntos de dados. Com os `N` pushdown principais, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-bigquery-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Google BigQuery pode combinar essas expressões e passá-las diretamente ao Google BigQuery para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Google BigQuery são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-bigquery-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
ORDER BY col_a DESC 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-bigquery-passthrough-queries"></a>

O conector Google BigQuery é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Google BigQuery, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Google BigQuery. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-bigquery-license-information"></a>

O projeto do conector Google BigQuery do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-bigquery-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-google-bigquery) em GitHub.com.

# Conector Google Cloud Storage para Amazon Athena
<a name="connectors-gcs"></a>

O conector Google Cloud Storage para Amazon Athena permite que o Amazon Athena execute consultas em arquivos Parquet e CSV armazenados em um bucket do Google Cloud Storage (GCS). Depois de agrupar um ou mais arquivos Parquet ou CSV em uma pasta não particionada ou particionada em um bucket do GCS, você poderá organizá-los em uma tabela de banco de dados do [AWS Glue](https://aws.amazon.com/glue/).

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation. 

Para ver um artigo que mostra como usar o Athena para executar consultas em arquivos Parquet ou CSV em um bucket do GCS, consulte a postagem [Use Amazon Athena to query data stored in Google Cloud Platform](https://aws.amazon.com/blogs/big-data/use-amazon-athena-to-query-data-stored-in-google-cloud-platform/). no AWS Big Data Blog.

## Pré-requisitos
<a name="connectors-gcs-prerequisites"></a>
+ Configure um banco de dados e uma tabela do AWS Glue que correspondam ao seu bucket e suas pastas no Google Cloud Storage. Para ver as etapas, consulte [Configuração de bancos de dados e tabelas no AWS Glue](#connectors-gcs-setting-up-databases-and-tables-in-glue) mais adiante neste documento.
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-gcs-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Atualmente, o conector é compatível somente com o tipo `VARCHAR` de colunas de partição (`string` ou `varchar` em um esquema de tabela do AWS Glue). Outros tipos de campo de partição geram erros quando você os consulta no Athena.

## Termos
<a name="connectors-gcs-terms"></a>

Os termos a seguir estão relacionados ao conector GCS.
+ **Manipulador**: um manipulador Lambda que acessa seu bucket do GCS. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados do seu bucket do GCS.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados do seu bucket do GCS.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados do seu bucket do GCS.

## Tipos de arquivos compatíveis
<a name="connectors-gcs-supported-file-types"></a>

O conector GCS é compatível com os tipos de arquivo Parquet e CSV.

**nota**  
Certifique-se de não colocar os arquivos CSV e Parquet no mesmo bucket ou caminho do GCS. Isso pode resultar em um erro de runtime se houver tentativa de ler os arquivos Parquet como CSV ou vice-versa. 

## Parâmetros
<a name="connectors-gcs-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do GCS.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-gcs-gc"></a>

Recomendamos que você configure um conector do GCS usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do GCS como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type GOOGLECLOUDSTORAGE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do GCS criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do GCS criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-gcs-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **secret\$1manager\$1gcp\$1creds\$1name**: o nome do segredo no AWS Secrets Manager que contém suas credenciais do GCS no formato JSON (por exemplo, `GoogleCloudPlatformCredentials`).

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-gcs-setting-up-databases-and-tables-in-glue"></a>

Como a capacidade de inferência de esquema integrada do conector GCS é limitada, recomendamos que você use o AWS Glue para seus metadados. Os procedimentos a seguir mostram como criar um banco de dados e uma tabela do AWS Glue que você possa acessar a partir do Athena.

### Criação de um banco de dados no AWS Glue
<a name="connectors-gcs-creating-a-database-in-glue"></a>

Você pode usar o console do AWS Glue para criar um banco de dados para uso com o conector GCS.

**Para criar um banco de dados no AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Databases** (Bancos de dados) no painel de navegação.

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

1. Em **Name** (Nome), insira um nome para o banco de dados que você deseja usar com o conector GCS.

1. Em **Local**, especifique `google-cloud-storage-flag`. Esse local informa ao conector do GCS que o banco de dados do AWS Glue contém as tabelas para os dados do GCS para consulta no Athena. O conector reconhece bancos de dados no Athena que têm esse sinalizador e ignora bancos de dados que não o têm.

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

### Criar uma tabela no AWS Glue
<a name="connectors-gcs-creating-a-table-in-glue"></a>

Agora você pode criar uma tabela para o banco de dados. Ao criar uma tabela do AWS Glue para usar com o conector GCS, você deve especificar metadados adicionais.

**Para criar uma tabela no console do AWS Glue**

1. No painel de navegação do console do AWS Glue, escolha **Tables** (Tabelas).

1. Na página **Tables** (Tabelas), escolha **Add table** (Adicionar tabela).

1. Na página **Set table properties** (Definir propriedades da tabela), insira as informações a seguir.
   + **Name** (Tabela): um nome exclusivo para a tabela.
   + **Banco de dados**: escolha o banco de dados do AWS Glue que você criou para o conector GCS.
   + **Include path** (Incluir caminho): Na seção **Data store** (Armazenamento de dados), em **Include path** (Incluir caminho), insira a localização do URI para GCS prefixada por `gs://` (por exemplo, `gs://gcs_table/data/`). Se você tiver uma ou mais pastas de partição, não as inclua no caminho.
**nota**  
Quando você insere um caminho de table que não é do `s3://` tabela, o console do AWS Glue mostra um erro. Você pode ignorar esse erro. A tabela será criada com êxito.
   + **Formato de dados**: para **Classification** (Classificação), selecione **CSV** ou **Parquet**.

1. Escolha **Próximo**.

1. Na página **Choose or define schema** (Escolher ou definir esquema), definir um esquema de tabela é altamente recomendado, mas não obrigatório. Se você não definir um esquema, o conector GCS tentará inferir um esquema para você.

   Execute um destes procedimentos:
   + Se você quiser que o conector GCS tente inferir um esquema para você, escolha **Next** (Próximo) e, em seguida, escolha **Create** (Criar).
   + Para definir um esquema você mesmo, siga as etapas da próxima seção.

### Definir um esquema de tabela no AWS Glue
<a name="connectors-gcs-defining-a-table-schema-in-glue"></a>

Definir um esquema de tabela no AWS Glue requer mais etapas, mas oferece maior controle sobre o processo de criação da tabela.

**Para definir um esquema para sua tabela no AWS Glue**

1. Na página **Choose or define schema** (Escolher ou definir esquema), escolha **Add** (Adicionar).

1. Use a caixa de diálogo **Add schema entry** (Adicionar entrada de esquema) para fornecer um nome de coluna e um tipo de dados.

1. Para designar a coluna como uma coluna de partição, selecione a opção **Set as partition key** (Definir como chave de partição).

1. Escolha **Save** (Salvar) para salvar a alteração.

1. Selecione **Add** (Adicionar) para adicionar outra coluna.

1. Ao terminar de adicionar contas, escolha **Next** (Próximo).

1. Na página **Review and create** (Revisar e criar), revise a configuração e selecione **Create** (Criar).

1. Se o esquema contiver informações sobre partições, siga as etapas na próxima seção para adicionar um padrão de partição às propriedades da tabela em AWS Glue.

### Adicionar um padrão de partição às propriedades da tabela no AWS Glue
<a name="connectors-gcs-adding-a-partition-pattern-to-table-properties-in-glue"></a>

Se seus buckets do GCS tiverem partições, você deverá adicionar o padrão de partição às propriedades da tabela no AWS Glue.

**Para adicionar informações de partição às propriedades da tabela do AWS Glue**

1. Na página de detalhes da tabela que você criou em AWS Glue, escolha **Actions** (Ações), **Edit table** (Editar tabela).

1. Na página **Edit table** (Editar tabela), role para baixo até a seção **Table properties** (Propriedades da tabela).

1. Escolha **Add** (Adicionar) para adicionar uma chave de partição.

1. Em **Chave**, digite **partition.pattern**. Essa chave define o padrão do caminho da pasta.

1. Em **Value** (Valor), insira um padrão de caminho de pasta como **StateName=\$1\$1statename\$1/ZipCode=\$1\$1zipcode\$1/**, em que **statename** e **zipcode** delimitados por **\$1\$1\$1** são nomes de colunas de partição. O conector GCS é compatível com esquemas de partição Hive e não Hive.

1. Quando terminar, escolha **Salvar**.

1. Para visualizar as propriedades da tabela que você acabou de criar, escolha a guia **Advanced properties** (Propriedades avançadas).

Nesse ponto, você pode navegar até o console do Athena. O banco de dados e a tabela que você criou no AWS Glue estão disponíveis para consulta no Athena.

## Suporte ao tipo de dados
<a name="connectors-gcs-data-type-support"></a>

As tabelas a seguir mostram os tipos de dados com suporte para CSV e Parquet.

### CSV
<a name="connectors-gcs-csv"></a>


****  

| **Natureza dos dados** | **Tipo de dados inferido** | 
| --- | --- | 
| Os dados parecem um número | BIGINT | 
| Os dados parecem uma string | VARCHAR | 
| Os dados parecem de ponto flutuante (flutuante, duplo ou decimal) | DOUBLE | 
| Os dados parecem uma data | Timestamp | 
| Dados que contêm valores verdadeiros/falsos | BOOL | 

### Parquet
<a name="connectors-gcs-parquet"></a>


****  

| **PARQUET** | **Athena (Seta)** | 
| --- | --- | 
| BINARY | VARCHAR | 
| BOOLEAN | BOOL | 
| DOUBLE | DOUBLE | 
| ENUM | VARCHAR | 
| FIXED\$1LEN\$1BYTE\$1ARRAY | DECIMAL | 
| FLOAT | FLOAT (32 bits) | 
| INT32 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-gcs.html)  | 
| INT64 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-gcs.html)  | 
| INT96 | Timestamp | 
| MAP | MAP | 
| STRUCT | STRUCT | 
| LIST | LIST | 

## Permissões obrigatórias
<a name="connectors-gcs-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-gcs.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/athena-gcs.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector GCS requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.

## desempenho
<a name="connectors-gcs-performance"></a>

Quando o esquema da tabela contém campos de partição e a propriedade `partition.pattern` da tabela está configurada corretamente, você pode incluir o campo de partição na cláusula `WHERE` de suas consultas. Para essas consultas, o conector GCS usa as colunas de partição para refinar o caminho da pasta GCS e evitar a varredura de arquivos desnecessários nas pastas do GCS.

Para conjuntos de dados Parquet, selecionar um subconjunto de colunas resulta em menos dados sendo verificados. Isso geralmente resulta em um runtime de consulta mais curto quando a projeção de coluna é aplicada. 

Para conjuntos de dados CSV, a projeção de colunas não é compatível e não reduz a quantidade de dados que estão sendo digitalizados. 

As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados. O conector GCS examina mais dados para conjuntos de dados maiores do que para conjuntos de dados menores, independentemente da cláusula `LIMIT` aplicada. Por exemplo, a consulta `SELECT * LIMIT 10000` examina mais dados em busca de um conjunto de dados subjacente maior do que de um menor.

### Informações de licença
<a name="connectors-gcs-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/LICENSE.txt) em GitHub.com.

### Recursos adicionais
<a name="connectors-gcs-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-gcs) em GitHub.com.

# Conector do Amazon Athena para o HBase
<a name="connectors-hbase"></a>

O conector do HBase no Amazon Athena permite que o Amazon Athena se comunique com as instâncias do Apache HBase para que você possa consultar os dados do HBase com SQL.

Diferentemente dos armazenamentos de dados relacionais tradicionais, as coleções do HBase não têm um esquema definido. O HBase não tem um armazenamento de metadados. Cada entrada em uma coleção do HBase pode ter diferentes campos e tipos de dados.

O conector HBase oferece suporte a dois mecanismos para gerar informações do esquema da tabela: inferência básica de esquema e metadados do AWS Glue Data Catalog.

A inferência de esquema é o padrão. Essa opção examina um pequeno número de documentos em sua coleção, forma uma união de todos os campos e força campos que têm tipos de dados não sobrepostos. Essa opção funciona bem para coleções que têm, em sua maioria, entradas uniformes.

Para coleções com uma maior variedade de tipos de dados, o conector oferece suporte à recuperação de metadados do AWS Glue Data Catalog. Se o conector vê um banco de dados do AWS Glue e uma tabela que correspondam aos nomes de seu namespace do HBase e nomes de coleção, ele obtém suas informações de esquema da tabela AWS Glue correspondente. Quando você cria sua tabela AWS Glue, recomendamos que você a torne um superconjunto de todos os campos que você talvez queira acessar da sua coleção do HBase.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation. 

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-hbase-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-hbase-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do HBase.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-hbase-gc"></a>

Recomendamos que você configure um conector do HBase usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do HBase como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type HBASE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do HBase criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do HBase criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-hbase-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.
+ **default\$1hbase**: se estiver presente, especifica uma string de conexão do HBase a ser usada quando não existir uma variável de ambiente específica do catálogo.
+ **enable\$1case\$1insensitive\$1match**: (opcional) caso seja `true`, realiza pesquisas sem distinção entre maiúsculas e minúsculas em nomes de tabelas no HBase. O padrão é `false`. Use se sua consulta contiver nomes de tabelas com letras maiúsculas.

#### Especificação de strings de conexão
<a name="connectors-hbase-specifying-connection-strings"></a>

É possível fornecer uma ou mais propriedades que definem os detalhes da conexão do HBase para as instâncias do HBase que você usar com o conector. Para fazer isso, defina uma variável de ambiente Lambda que corresponda ao nome do catálogo que você deseja usar no Athena. Por exemplo, suponha que você queira usar as seguintes consultas para consultar duas instâncias diferentes do HBase no Athena:

```
SELECT * FROM "hbase_instance_1".database.table
```

```
SELECT * FROM "hbase_instance_2".database.table
```

Antes de usar essas duas instruções de SQL, você deverá adicionar duas variáveis de ambiente à sua função do Lambda: `hbase_instance_1` e `hbase_instance_2`. O valor para cada uma deverá ser uma string de conexão do HBase no seguinte formato:

```
master_hostname:hbase_port:zookeeper_port
```

##### Uso de segredos
<a name="connectors-hbase-using-secrets"></a>

Opcionalmente, é possível usar o AWS Secrets Manager para obter parte ou todo o valor dos detalhes da string de conexão. Para usar o recurso Athena Federated Query com o Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

Se você usar a sintaxe `${my_secret}` para colocar o nome de um segredo do Secrets Manager em sua string de conexão, o conector substituirá o nome do segredo pelos valores de seu nome de usuário e senha do Secrets Manager.

Por exemplo, suponha que você defina a variável de ambiente Lambda para `hbase_instance_1` com o seguinte valor:

```
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
```

O SDK do Athena Query Federation tenta automaticamente recuperar um segredo chamado `hbase_instance_1_creds` do Secrets Manager e injetar esse valor no lugar de `${hbase_instance_1_creds}`. Qualquer parte da string de conexão que esteja delimitada pela combinação de caracteres `${ }` será é interpretada como um segredo do Secrets Manager. Se você especificar um nome secreto que o conector não consiga encontrar no Secrets Manager, o conector não substituirá o texto.

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-hbase-setting-up-databases-and-tables-in-aws-glue"></a>

A inferência de esquema incorporada do conector oferece suporte somente a valores serializados no HBase, como strings (por exemplo, `String.valueOf(int)`). Como a capacidade incorporada de inferência de esquema do conector é limitada, talvez você queira usar o AWS Glue para metadados, em vez disso. Para habilitar uma tabela do AWS Glue para uso com o HBase, é preciso ter um banco de dados do AWS Glue e uma tabela com nomes que correspondam ao namespace do HBase e à tabela para a qual você deseja fornecer metadados complementares. O uso das convenções de nomenclatura da família de colunas do HBase é opcional, mas não obrigatório.

**Para usar uma tabela AWS Glue para metadados complementares**

1. Quando você editar a tabela e o banco de dados no console do AWS Glue, adicione as seguintes propriedades de tabela:
   + **hbase-metadata-flag**: essa propriedade indica ao conector HBase que o conector pode usar a tabela para metadados complementares. É possível fornecer qualquer valor para `hbase-metadata-flag`, desde que a propriedade `hbase-metadata-flag` esteja presente na lista de propriedades da tabela.
   + **hbase-native-storage-flag**: use esse sinalizador para alternar os dois modos de serialização de valores com suporte pelo conector. Por padrão, quando esse campo não estiver presente, o conector assumirá que todos os valores estão armazenados no HBase como strings. Como tal, ele tentará analisar tipos de dados como `INT`, `BIGINT` e `DOUBLE` do HBase como strings. Se esse campo for definido com qualquer valor na tabela em AWS Glue, o conector muda para o modo de armazenamento “nativo” e tenta ler `INT`, `BIGINT`, `BIT`, e `DOUBLE` como bytes usando as seguintes funções:

     ```
     ByteBuffer.wrap(value).getInt() 
     ByteBuffer.wrap(value).getLong() 
     ByteBuffer.wrap(value).get() 
     ByteBuffer.wrap(value).getDouble()
     ```

1. Use os tipos de dados apropriados para o AWS Glue, conforme listado neste documento.

### Modelagem de famílias de colunas
<a name="connectors-hbase-modeling-column-families"></a>

O conector Athena HBase oferece suporte a duas formas de modelagem de famílias de colunas do HBase: nomenclatura totalmente qualificada (plana), como `family:column` ou usando objetos `STRUCT`.

No modelo `STRUCT`, o nome do campo `STRUCT` deve corresponder à família da coluna, e filhos do `STRUCT` devem corresponder aos nomes das colunas da família. No entanto, como ainda não há suporte total para a redução de predicados e as leituras colunares com tipos complexos como `STRUCT`, o uso de `STRUCT`, atualmente, não é recomendado.

A imagem a seguir mostra uma tabela configurada no AWS Glue que usa uma combinação das duas abordagens.

![\[Modelagem de famílias de colunas no AWS Glue para o Apache Hbase.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-hbase-1.png)


## Suporte ao tipo de dados
<a name="connectors-hbase-data-type-support"></a>

O conector recupera todos os valores do HBase como o tipo básico byte. Em seguida, com base em como você definiu suas tabelas no Catálogo de dados do AWS Glue, ele mapeia os valores em um dos tipos de dados do Apache Arrow na tabela a seguir.


****  

| AWS GlueTipo de dados do  | Tipo de dados Apache Arrow | 
| --- | --- | 
| int | INT | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| flutuação | FLOAT4 | 
| booleano | BIT | 
| binary | VARBINARY | 
| string | VARCHAR | 

**nota**  
Se você não usar AWS Glue para complementar seus metadados, a inferência do esquema do conector usará somente os tipos de dados `BIGINT`, `FLOAT8` e `VARCHAR`.

## Permissões obrigatórias
<a name="connectors-hbase-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-hbase.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hbase/athena-hbase.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector HBase requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.
+ **Acesso de leitura do AWS Secrets Manager**: se você optar por armazenar os detalhes do endpoint do HBase no Secrets Manager, deverá conceder ao conector acesso a esses segredos.
+ **Acesso à VPC**: o conector exige a capacidade de conectar e desconectar interfaces à sua VPC para que ela possa se conectar a ela e se comunicar com suas instâncias do HBase.

## desempenho
<a name="connectors-hbase-performance"></a>

O conector Athena HBase tenta paralelizar as consultas em sua instância do HBase lendo cada servidor da região em paralelo. O conetor do Athena para o HBase realiza a passagem direta de predicados para diminuir os dados examinados pela consulta.

A função do Lambda também executa o empilhamento de *projeções* para diminuir os dados verificados pela consulta. No entanto, selecionar um subconjunto de colunas, às vezes, resulta em um runtime de consulta mais longo. As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados.

O HBase está propenso a falhas na consulta e tempos de execução variáveis para as consultas. Pode ser necessário repetir as consultas diversas vezes para que elas sejam bem-sucedidas. O conector HBase é resiliente ao controle de utilização devido à simultaneidade.

## Consultas de passagem
<a name="connectors-hbase-passthrough-queries"></a>

O conector do HBase é compatível com [consultas de passagem](federated-query-passthrough.md) e é baseado em NoSQL. Para obter informações sobre como consultar o Apache HBase usando filtros, consulte [Filter language](https://hbase.apache.org/book.html#thrift.filter_language) na documentação do Apache.

Para usar consultas de passagem com o HBase, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            database => 'database_name',
            collection => 'collection_name',
            filter => '{query_syntax}'
        ))
```

O exemplo a seguir de consulta de passagem do HBase filtra funcionários com 24 ou 30 anos na coleção `employee` do banco de dados `default`.

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'default',
            COLLECTION => 'employee',
            FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' ||
                       ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')'
        ))
```

## Informações de licença
<a name="connectors-hbase-license-information"></a>

O projeto do conector HBase do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-hbase-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-hbase) em GitHub.com.

# Conector do Amazon Athena para a Hortonworks
<a name="connectors-hortonworks"></a>

O conector do Amazon Athena para a Hortonworks permite que o Amazon Athena execute consultas SQL na plataforma de dados [Hortonworks](https://www.cloudera.com/products/hdp.html) da Cloudera. O conector transforma suas consultas SQL do Athena na sintaxe equivalente do HiveQL.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-hive-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-hortonworks-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.

## Termos
<a name="connectors-hortonworks-terms"></a>

Os termos a seguir estão relacionados ao conector Hortonworks Hive.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-hortonworks-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Hortonworks Hive.

### String de conexão
<a name="connectors-hortonworks-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
hive://${jdbc_connection_string}
```

### Uso de um manipulador de multiplexação
<a name="connectors-hortonworks-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | HiveMuxCompositeHandler | 
| Manipulador de metadados | HiveMuxMetadataHandler | 
| Manipulador de registros | HiveMuxRecordHandler | 

#### Parâmetros do manipulador de multiplexação
<a name="connectors-hortonworks-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myhivecatalog, então o nome da variável de ambiente será myhivecatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Hive que ofereça suporte a duas instâncias de banco de dados: `hive1` (o padrão) e `hive2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog1\$1connection\$1string | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog2\$1connection\$1string | hive://jdbc:hive2://hive2:10000/default?UID=sample&PWD=sample | 

#### Fornecimento de credenciais
<a name="connectors-hortonworks-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/hive1host}`.

```
hive://jdbc:hive2://hive1host:10000/default?...&${Test/RDS/hive1host}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
hive://jdbc:hive2://hive1host:10000/default?...&UID=sample2&PWD=sample2&...
```

Atualmente, o conector Hortonworks Hive reconhece as propriedades do JDBC `UID` e `PWD`.

### Uso de um único manipulador de conexão
<a name="connectors-hortonworks-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Hortonworks Hive.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | HiveCompositeHandler | 
| Manipulador de metadados | HiveMetadataHandler | 
| Manipulador de registros | HiveRecordHandler | 

#### Parâmetros do manipulador de conexão única
<a name="connectors-hortonworks-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Hortonworks Hive com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1host:10000/default?secret=\$1\$1Test/RDS/hive1host\$1 | 

### Parâmetros de derramamento
<a name="connectors-hortonworks-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-hortonworks-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC, do Hortonworks Hive e do Arrow.


****  

| JDBC | Hortonworks Hive | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Inteiro | TINYINT | Tiny | 
| Short | SMALLINT | Smallint | 
| Inteiro | INT | Int | 
| Longo | BIGINT | Bigint | 
| flutuação | float4 | Float4 | 
| Duplo | float8 | Float8 | 
| Data | date | Data/Dia | 
| Timestamp | timestamp | Date Milli | 
| String | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Lista | 

**nota**  
Atualmente, o Hortonworks Hive não oferece suporte para os tipos agregados `ARRAY`, `MAP`, `STRUCT` ou `UNIONTYPE`. As colunas de tipos agregados são tratadas como colunas `VARCHAR` pelo SQL.

## Partições e divisões
<a name="connectors-hortonworks-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-hortonworks-performance"></a>

O Hortonworks Hive oferece suporte a partições estáticas. O conector do Athena para o Hortonworks Hive pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento estático é altamente recomendado. A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector Hortonworks Hive é resiliente ao controle de utilização devido à simultaneidade.

O conector do Athena para o Hortonworks Hive executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados para o conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Cláusulas LIMIT
<a name="connectors-hive-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-hive-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Hortonworks Hive pode combinar essas expressões e passá-las diretamente ao Hortonworks Hive para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Hortonworks Hive são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-hive-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-hive-passthrough-queries"></a>

O conector Hortonworks Hive é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Hortonworks Hive, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Hortonworks Hive. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-hive-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-hive-additional-resources"></a>

Para obter as informações sobre a versão do driver JDBC mais recentes, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) do conector Hortonworks Hive em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-hortonworks-hive) em GitHub.com.

# Conector do Apache Kafka do Amazon Athena
<a name="connectors-kafka"></a>

O conector do Amazon Athena para o Apache Kafka possibilita que o Amazon Athena execute consultas SQL em seus tópicos do Apache Kafka. Use esse conector para visualizar os tópicos e as mensagens do [Apache Kafka](https://kafka.apache.org/) no Athena como tabelas e linhas, respectivamente.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-kafka-prerequisites"></a>

Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-kafka-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.
+ Os tipos de dados data e timestamp não são compatíveis com o tipo de arquivo CSV e são tratados como valores varchar.
+ Não há suporte para o mapeamento em campos JSON aninhados. O conector mapeia somente os campos de nível superior.
+ O conector não é compatível com tipos complexos. Tipos complexos são interpretados como strings.
+ Para extrair ou trabalhar com valores JSON complexos, use as funções relacionadas ao JSON disponíveis no Athena. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md).
+ O conector não oferece suporte ao acesso a metadados de mensagens do Kafka.

## Termos
<a name="connectors-kafka-terms"></a>
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Endpoint do Kafka**: uma string de texto que estabelece uma conexão com uma instância do Kafka.

## Compatibilidade de cluster
<a name="connectors-kafka-cluster-compatibility"></a>

O conector do Kafka pode ser usado com os seguintes tipos de cluster:
+ **Kafka dedicado**: uma conexão direta com o Kafka (autenticada ou não autenticada).
+ **Confluent** - Uma conexão direta com o Confluent Kafka. Para obter informações sobre como usar o Athena com dados do Confluent Kafka, consulte [Visualize dados do Confluent rapidamente usando o Amazon Athena](https://aws.amazon.com/blogs/business-intelligence/visualize-confluent-data-in-amazon-quicksight-using-amazon-athena/) em *AWS Business Intelligence Blog*. 

### Conectando-se ao Confluent
<a name="connectors-kafka-connecting-to-confluent"></a>

A conexão com o Confluent requer as etapas a seguir:

1. Gere uma chave de API do Confluent.

1. Armazene o nome de usuário e a senha da chave da API Confluent em AWS Secrets Manager.

1. Forneça o nome secreto da variável de `secrets_manager_secret` ambiente no conector Kafka.

1. Siga as etapas na seção [Como configurar o conector do Kafka](#connectors-kafka-setup) deste documento.

## Métodos de autenticação compatíveis
<a name="connectors-kafka-supported-authentication-methods"></a>

O conector é compatível com os métodos de autenticação a seguir.
+ [SSL](https://kafka.apache.org/documentation/#security_ssl)
+ [SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram)
+ SASL/PLAIN
+ SASL/PLAINTEXT
+ NO\$1AUTH
+ **Plataforma Kafka e Confluent autogerenciada** - SSL, SASL/SCRAM, SASL/PLAINTEXT, NO\$1AUTH
+ **Kafka autogerenciado e Confluent Cloud** - SASL/PLAIN

Para obter mais informações, consulte [Configurar a autenticação do conector do Kafka para o Athena](#connectors-kafka-setup-configuring-authentication).

## Formatos de dados de entrada compatíveis
<a name="connectors-kafka-supported-input-data-formats"></a>

O conector é compatível com os seguintes formatos de dados de entrada:
+ JSON
+ CSV
+ AVRO
+ PROTOBUF (PROTOCOL BUFFERS)

## Parâmetros
<a name="connectors-kafka-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Kafka para o Athena.
+ **auth\$1type**: especifica o tipo de autenticação do cluster. O conector é compatível com os tipos de autenticação a seguir:
  + **NO\$1AUTH**: conexão direta ao Kafka (por exemplo, um cluster do Kafka implantado em uma instância do EC2 que não usa autenticação).
  + **SASL\$1SSL\$1PLAIN**: esse método usa o protocolo de segurança `SASL_SSL` e o mecanismo SASL `PLAIN`. Para obter mais informações, consulte [Configuração do SASL](https://kafka.apache.org/documentation/#security_sasl_config) na documentação do Apache Kafka.
  + **SASL\$1PLAINTEXT\$1PLAIN**: esse método usa o protocolo de segurança `SASL_PLAINTEXT` e o mecanismo SASL `PLAIN`. Para obter mais informações, consulte [Configuração do SASL](https://kafka.apache.org/documentation/#security_sasl_config) na documentação do Apache Kafka.
  + **SASL\$1SSL\$1SCRAM\$1SHA512**: você pode usar esse tipo de autenticação para controlar o acesso aos clusters do Apache Kafka. Esse método armazena o nome do usuário e a senha no AWS Secrets Manager. O segredo deve estar associado ao cluster do Kafka. Para obter mais informações, consulte [Autenticação usando SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram) na documentação do Apache Kafka.
  + **SASL\$1PLAINTEXT\$1SCRAM\$1SHA512**: este método usa o protocolo de segurança `SASL_PLAINTEXT` e o mecanismo `SCRAM_SHA512 SASL`. Esse método usa seu nome de usuário e a senha armazenados no AWS Secrets Manager. Para obter mais informações, consulte a seção [Configuração do SASL](https://kafka.apache.org/documentation/#security_sasl_config) na documentação do Apache Kafka.
  + **SSL**: a autenticação SSL usa os arquivos de armazenamento de chaves e de armazenamento confiável para se conectar ao cluster do Apache Kafka. Você deve gerar os arquivos de armazenamento confiável e de armazenamento de chaves, carregá-los em um bucket do Amazon S3 e fornecer a referência ao Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Seu cliente deve fornecer a chave secreta da AWS ao implantar o conector. Para obter mais informações, consulte [Criptografia e autenticação usando SSL](https://kafka.apache.org/documentation/#security_ssl) na documentação do Apache Kafka.

    Para obter mais informações, consulte [Configurar a autenticação do conector do Kafka para o Athena](#connectors-kafka-setup-configuring-authentication).
+ **certificates\$1s3\$1reference**: o local do Amazon S3 que contém os certificados (os arquivos de armazenamento de chaves e de armazenamento confiável).
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\$1endpoint**: os detalhes do endpoint a serem fornecidos para o Kafka.
+ **schema\$1registry\$1url** — O endereço URL do registro do esquema (por exemplo, `http://schema-registry.example.org:8081`). Aplica-se aos formatos de dados `AVRO` e `PROTOBUF`. O Athena só oferece suporte ao registro de esquema Confluent.
+ **secrets\$1manager\$1secret**: o nome do segredo da AWS no qual as credenciais são salvas.
+ **Parâmetros de vazamento**: as funções do Lambda armazenam temporariamente dados (“de vazamentos”) que não cabem na memória do Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local. Use os parâmetros na tabela a seguir para especificar o local do vazamento.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)
+ **Subnet IDs** - Um ou mais IDs de sub-rede que correspondem à sub-rede que a função do Lambda pode usar para acessar sua fonte de dados.
  + **Cluster Kafka público ou cluster padrão do Confluent Cloud** — Associe o conector a uma sub-rede privada que tenha um gateway NAT.
  + **Cluster do Confluent Cloud com conectividade privada** - Associe o conector a uma sub-rede privada que tenha uma rota para o cluster Confluent Cloud.
    + Para o [AWS Transit Gateway](https://docs.confluent.io/cloud/current/networking/aws-transit-gateway.html), as sub-redes devem estar em uma VPC conectada ao mesmo gateway de trânsito que o Confluent Cloud usa.
    + No caso de [VPC Peering](https://docs.confluent.io/cloud/current/networking/peering/aws-peering.html), as sub-redes devem estar em uma VPC que está emparelhada com a VPC do Confluent Cloud.
    + Para [AWS PrivateLink](https://docs.confluent.io/cloud/current/networking/private-links/aws-privatelink.html), as sub-redes devem estar em uma VPC que tenha uma rota para os endpoints da VPC que se conectam ao Confluent Cloud.

**nota**  
Se você implantar o conector em uma VPC para acessar recursos privados e também quiser estabelecer uma conexão com um serviço acessível ao público, como o Confluent, deverá associar o conector a uma sub-rede privada que tenha um gateway NAT. Para obter mais informações, consulte [Gateways NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) no Guia do usuário da Amazon VPC.

## Suporte ao tipo de dados
<a name="connectors-kafka-data-type-support"></a>

A tabela a seguir apresenta os tipos de dados correspondentes compatíveis com o Kafka e o Apache Arrow.


****  

| Kafka | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| TIMESTAMP | MILLISECOND | 
| DATE | DAY | 
| BOOLEAN | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 

## Partições e divisões
<a name="connectors-kafka-partitions-and-splits"></a>

Os tópicos do Kafka são divididos em partições. Cada partição é ordenada. Cada mensagem em uma partição tem um ID incremental denominado *deslocamento*. Cada partição do Kafka é separada em diversas divisões para o processamento paralelo. Os dados estão disponíveis para o período de retenção configurado nos clusters do Kafka.

## Práticas recomendadas
<a name="connectors-kafka-best-practices"></a>

Como prática recomendada, use o empilhamento de predicados ao consultar o Athena, como mostrado nos exemplos a seguir.

```
SELECT * 
FROM "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE integercol = 2147483647
```

```
SELECT * 
FROM "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Como configurar o conector do Kafka
<a name="connectors-kafka-setup"></a>

Antes de usar o conector, você deve configurar seu cluster do Apache Kafka. Use o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir seu esquema e configurar a autenticação para o conector.

Ao trabalhar com o registro de esquemas do AWS Glue, preste atenção aos seguintes pontos:
+ Certifique-se de que o texto no campo **Description** (Descrição) do registro de esquemas do AWS Glue inclua a string `{AthenaFederationKafka}`. Essa string de marcação é necessária para os registros do AWS Glue usados com o conector do Kafka para o Amazon Athena.
+ Para obter a melhor performance, use somente letras minúsculas para nomes de banco de dados e nomes de tabela. O uso de maiúsculas e minúsculas mistas faz com que o conector execute uma pesquisa que não diferencia maiúsculas de minúsculas e é mais computacionalmente intensiva.

**Para configurar o ambiente do Apache Kafka e o registro de esquemas do AWS Glue**

1. Configure o ambiente do Apache Kafka.

1. Faça o upload do arquivo de descrição do tópico do Kafka (ou seja, seu esquema) no formato JSON para o registro de esquemas do AWS Glue. Para obter mais informações, consulte [Integração com o registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) no Guia do desenvolvedor do AWS Glue.

1. Para usar o formato de dados `AVRO` ou `PROTOBUF` ao definir o esquema no Registro de esquemas do AWS Glue:
   + Em **Nome do esquema**, insira o nome do tópico do Kafka no mesmo formato de maiúsculas e minúsculas do original.
   + Para **Formato de dados**, escolha **Apache Avro** ou **Protocol Buffers**.

    Para obter esquemas de exemplo, consulte a seção a seguir.

### Exemplos de esquema para o registro de esquemas do AWS Glue
<a name="connectors-kafka-setup-schema-examples"></a>

Use o formato dos exemplos apresentados nessa seção ao fazer upload de seu esquema para o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

#### Exemplo de esquema: tipo JSON
<a name="connectors-kafka-setup-schema-examples-json"></a>

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `json` como o valor para `dataFormat` e usa `datatypejson` para `topicName`.

**nota**  
O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no Kafka. 

```
{
  "topicName": "datatypejson",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "intcol",
        "mapping": "intcol",
        "type": "INTEGER"
      },
      {
        "name": "varcharcol",
        "mapping": "varcharcol",
        "type": "VARCHAR"
      },
      {
        "name": "booleancol",
        "mapping": "booleancol",
        "type": "BOOLEAN"
      },
      {
        "name": "bigintcol",
        "mapping": "bigintcol",
        "type": "BIGINT"
      },
      {
        "name": "doublecol",
        "mapping": "doublecol",
        "type": "DOUBLE"
      },
      {
        "name": "smallintcol",
        "mapping": "smallintcol",
        "type": "SMALLINT"
      },
      {
        "name": "tinyintcol",
        "mapping": "tinyintcol",
        "type": "TINYINT"
      },
      {
        "name": "datecol",
        "mapping": "datecol",
        "type": "DATE",
        "formatHint": "yyyy-MM-dd"
      },
      {
        "name": "timestampcol",
        "mapping": "timestampcol",
        "type": "TIMESTAMP",
        "formatHint": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    ]
  }
}
```

#### Exemplo de esquema: tipo CSV
<a name="connectors-kafka-setup-schema-examples-csv"></a>

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `csv` como o valor para `dataFormat` e usa `datatypecsvbulk` para `topicName`. O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no Kafka.

```
{
  "topicName": "datatypecsvbulk",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "intcol",
        "type": "INTEGER",
        "mapping": "0"
      },
      {
        "name": "varcharcol",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "booleancol",
        "type": "BOOLEAN",
        "mapping": "2"
      },
      {
        "name": "bigintcol",
        "type": "BIGINT",
        "mapping": "3"
      },
      {
        "name": "doublecol",
        "type": "DOUBLE",
        "mapping": "4"
      },
      {
        "name": "smallintcol",
        "type": "SMALLINT",
        "mapping": "5"
      },
      {
        "name": "tinyintcol",
        "type": "TINYINT",
        "mapping": "6"
      },
      {
        "name": "floatcol",
        "type": "DOUBLE",
        "mapping": "7"
      }
    ]
  }
}
```

#### Exemplo de esquema do tipo AVRO
<a name="connectors-kafka-setup-schema-examples-avro"></a>

O exemplo a seguir é usado para criar um esquema baseado em AVRO no Registro de esquemas do AWS Glue. Ao definir o esquema no Registro de esquemas do AWS Glue, em **Nome do esquema**, você insere o nome do tópico Kafka no mesmo formato de maiúsculas e minúsculas do original e, para **Formato de dados**, você escolhe **Apache Avro**. Como você especifica essas informações diretamente no registro, os campos `dataformat` e `topicName` não são obrigatórios.

```
{
    "type": "record",
    "name": "avrotest",
    "namespace": "example.com",
    "fields": [{
            "name": "id",
            "type": "int"
        },
        {
            "name": "name",
            "type": "string"
        }
    ]
}
```

#### Exemplo de esquema do tipo PROTOBUF
<a name="connectors-kafka-setup-schema-examples-protobuf"></a>

O exemplo a seguir é usado para criar um esquema baseado em PROTOBUF no Registro de esquemas do AWS Glue. Ao definir o esquema no Registro de esquemas do AWS Glue, em **Nome do esquema**, você insere o nome do tópico Kafka no mesmo formato de maiúsculas e minúsculas do original e, para **Formato de dados**, você escolhe **Protocol Buffers**. Como você especifica essas informações diretamente no registro, os campos `dataformat` e `topicName` não são obrigatórios. A primeira linha define o esquema como PROTOBUF.

```
syntax = "proto3";
message protobuftest {
string name = 1;
int64 calories = 2;
string colour = 3;
}
```

Para obter mais informações sobre como adicionar um registro e esquemas no Registro de esquemas do AWS Glue, consulte [Conceitos básicos do registro de esquemas](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-gs.html) na documentação do AWS Glue.

### Configurar a autenticação do conector do Kafka para o Athena
<a name="connectors-kafka-setup-configuring-authentication"></a>

É possível usar uma variedade de métodos para autenticar o cluster do Apache Kafka, como SSL, SASL/SCRAM, SASL/PLAIN e SASL/PLAINTEXT.

A tabela a seguir mostra os tipos de autenticação para o conector, e o protocolo de segurança e o mecanismo SASL para cada um. Para obter mais informações, consulte a seção [Segurança](https://kafka.apache.org/documentation/#security) da documentação do Apache Kafka.


****  

| auth\$1type | security.protocol | sasl.mechanism | Compatibilidade do tipo de cluster | 
| --- | --- | --- | --- | 
| SASL\$1SSL\$1PLAIN | SASL\$1SSL | PLAIN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1PLAINTEXT\$1PLAIN | SASL\$1PLAINTEXT | PLAIN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1SSL\$1SCRAM\$1SHA512 | SASL\$1SSL | SCRAM-SHA-512 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1PLAINTEXT\$1SCRAM\$1SHA512 | SASL\$1PLAINTEXT | SCRAM-SHA-512 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)  | 
| SSL | SSL | N/D |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-kafka.html)  | 

#### SSL
<a name="connectors-kafka-setup-configuring-authentication-tls"></a>

Se o cluster for autenticado por SSL, você deverá gerar os arquivos de armazenamento confiável e de armazenamento de chaves, e fazer o upload deles no bucket do Amazon S3. Você deverá fornecer essa referência do Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Você fornecerá a chave secreta da AWS ao implantar o conector.

Para obter informações sobre como criar um segredo no Secrets Manager, consulte [Criação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar esse tipo de autenticação, defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SSL | 
| certificates\$1s3\$1reference | O local do Amazon S3 que contém os certificados. | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

Após a criação de um segredo no Secrets Manager, é possível visualizá-lo no console do Secrets Manager.

**Para visualizar o segredo no Secrets Manager**

1. Abra o console do Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. No painel de navegação, escolha **Secrets** (Segredos).

1. Na página **Secrets** (Segredos), selecione o link do seu segredo.

1. Na página de detalhes do seu segredo, escolha **Retrieve secret value** (Recuperar valor do segredo).

   A imagem a seguir apresenta um exemplo de segredo com três pares chave/valor: `keystore_password`, `truststore_password` e `ssl_key_password`.  
![\[Recuperação de um segredo SSL no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-kafka-setup-1.png)

Para obter mais informações sobre como usar SSL com o Kafka, consulte [Criptografia e autenticação usando SSL](https://kafka.apache.org/documentation/#security_ssl) na documentação do Apache Kafka.

#### SASL/SCRAM
<a name="connectors-kafka-setup-configuring-authentication-sasl-scram"></a>

Se o cluster usar a autenticação SCRAM, forneça a chave do Secrets Manager associada ao cluster ao implantar o conector. As credenciais da AWS do usuário (chave secreta e chave de acesso) serão usadas para realizar a autenticação com o cluster.

Defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SASL\$1SSL\$1SCRAM\$1SHA512 | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

A imagem a seguir apresenta um exemplo de segredo no console do Secrets Manager com dois pares chave/valor: um para `username` e outro para `password`.

![\[Recuperação de um segredo SCRAM no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-kafka-setup-2.png)


Para obter mais informações sobre como usar o SASL/SCRAM com o Kafka, consulte [Autenticação usando SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram) na documentação do Apache Kafka.

## Informações de licença
<a name="connectors-kafka-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-kafka/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-kafka/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-kafka-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-kafka) em GitHub.com.

# Conector MSK do Amazon Athena
<a name="connectors-msk"></a>

O conector do Amazon Athena para o [Amazon MSK](https://aws.amazon.com/msk/) possibilita que o Amazon Athena execute consultas SQL em seus tópicos do Apache Kafka. Use esse conector para visualizar os tópicos e as mensagens do [Apache Kafka](https://kafka.apache.org/) no Athena como tabelas e linhas, respectivamente. Para obter informações adicionais, consulte [Analyze real-time streaming data in Amazon MSK with Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-real-time-streaming-data-in-amazon-msk-with-amazon-athena/) (Analisar dados de streaming em tempo real no Amazon MSK com o Amazon Athena) no blog de big data da AWS.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-msk-prerequisites"></a>

Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-msk-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.
+ Os tipos de dados data e timestamp não são compatíveis com o tipo de arquivo CSV e são tratados como valores varchar.
+ Não há suporte para o mapeamento em campos JSON aninhados. O conector mapeia somente os campos de nível superior.
+ O conector não é compatível com tipos complexos. Tipos complexos são interpretados como strings.
+ Para extrair ou trabalhar com valores JSON complexos, use as funções relacionadas ao JSON disponíveis no Athena. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md).
+ O conector não oferece suporte ao acesso a metadados de mensagens do Kafka.

## Termos
<a name="connectors-msk-terms"></a>
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Endpoint do Kafka**: uma string de texto que estabelece uma conexão com uma instância do Kafka.

## Compatibilidade de cluster
<a name="connectors-msk-cluster-compatibility"></a>

O conector MSK pode ser usado com os seguintes tipos de cluster:
+ **Cluster provisionado pelo MSK**: você especifica, monitora e escala manualmente a capacidade do cluster.
+ **Cluster do MSK Serverless**: fornece uma capacidade sob demanda que é escalada automaticamente conforme a escalabilidade de E/S da aplicação.
+ **Kafka dedicado**: uma conexão direta com o Kafka (autenticada ou não autenticada).

## Métodos de autenticação compatíveis
<a name="connectors-msk-supported-authentication-methods"></a>

O conector é compatível com os métodos de autenticação a seguir.
+ [SASL/IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) 
+ [SSL](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)
+ [SASL/SCRAM](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html)
+ SASL/PLAIN
+ SASL/PLAINTEXT
+ NO\$1AUTH

  Para obter mais informações, consulte [Configuração da autenticação para o conector MSK do Athena](#connectors-msk-setup-configuring-authentication).

## Formatos de dados de entrada compatíveis
<a name="connectors-msk-supported-input-data-formats"></a>

O conector é compatível com os seguintes formatos de dados de entrada:
+ JSON
+ CSV

## Parâmetros
<a name="connectors-msk-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do MSK para o Athena.
+ **auth\$1type**: especifica o tipo de autenticação do cluster. O conector é compatível com os tipos de autenticação a seguir:
  + **NO\$1AUTH**: conexão direta ao Kafka sem autenticação (por exemplo, um cluster do Kafka implantado em uma instância do EC2 que não usa autenticação).
  + **SASL\$1SSL\$1PLAIN**: esse método usa o protocolo de segurança `SASL_SSL` e o mecanismo SASL `PLAIN`.
  + **SASL\$1PLAINTEXT\$1PLAIN**: esse método usa o protocolo de segurança `SASL_PLAINTEXT` e o mecanismo SASL `PLAIN`.
**nota**  
Os tipos de autenticação `SASL_SSL_PLAIN` e `SASL_PLAINTEXT_PLAIN` são compatíveis com o Apache Kafka, mas não no Amazon MSK.
  + **SASL\$1SSL\$1AWS\$1MSK\$1IAM**: o controle de acesso do IAM para o Amazon MSK permite que você gerencie a autenticação e a autorização para o cluster do MSK. As credenciais da AWS do seu usuário (chave secreta e chave de acesso) serão usadas para se conectar ao cluster. Para obter mais informações, consulte [IAM access control](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) (Controle de acesso do IAM) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
  + **SASL\$1SSL\$1SCRAM\$1SHA512**: você pode usar esse tipo de autenticação para controlar o acesso aos seus clusters do Amazon MSK. Esse método armazena o nome do usuário e a senha no AWS Secrets Manager. O segredo deve estar associado ao cluster do Amazon MSK. Para obter mais informações, consulte [Setting up SASL/SCRAM authentication for an Amazon MSK cluster](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) (Configuração da autenticação SASL/SCRAM para um cluster do Amazon MSK) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
  + **SSL**: a autenticação SSL usa os arquivos de armazenamento de chaves e de armazenamento confiável para se conectar ao cluster do Amazon MSK. Você deve gerar os arquivos de armazenamento confiável e de armazenamento de chaves, carregá-los em um bucket do Amazon S3 e fornecer a referência ao Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Seu cliente deve fornecer a chave secreta da AWS ao implantar o conector. Para obter mais informações, consulte [Mutual TLS authentication](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) (Autenticação mútua TLS) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

    Para obter mais informações, consulte [Configuração da autenticação para o conector MSK do Athena](#connectors-msk-setup-configuring-authentication).
+ **certificates\$1s3\$1reference**: o local do Amazon S3 que contém os certificados (os arquivos de armazenamento de chaves e de armazenamento confiável).
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\$1endpoint**: os detalhes do endpoint a serem fornecidos para o Kafka. Por exemplo, para um cluster do Amazon MSK, você fornece um [URL de inicialização](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html) para o cluster.
+ **secrets\$1manager\$1secret**: o nome do segredo da AWS no qual as credenciais são salvas. Esse parâmetro não é necessário para a autenticação do IAM.
+ **Parâmetros de vazamento**: as funções do Lambda armazenam temporariamente dados (“de vazamentos”) que não cabem na memória do Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local. Use os parâmetros na tabela a seguir para especificar o local do vazamento.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/connectors-msk.html)

## Suporte ao tipo de dados
<a name="connectors-msk-data-type-support"></a>

A tabela a seguir apresenta os tipos de dados correspondentes compatíveis com o Kafka e o Apache Arrow.


****  

| Kafka | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| TIMESTAMP | MILLISECOND | 
| DATE | DAY | 
| BOOLEAN | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 

## Partições e divisões
<a name="connectors-msk-partitions-and-splits"></a>

Os tópicos do Kafka são divididos em partições. Cada partição é ordenada. Cada mensagem em uma partição tem um ID incremental denominado *deslocamento*. Cada partição do Kafka é separada em diversas divisões para o processamento paralelo. Os dados estão disponíveis para o período de retenção configurado nos clusters do Kafka.

## Práticas recomendadas
<a name="connectors-msk-best-practices"></a>

Como prática recomendada, use o empilhamento de predicados ao consultar o Athena, como mostrado nos exemplos a seguir.

```
SELECT * 
FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE integercol = 2147483647
```

```
SELECT * 
FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Configuração do conector MSK
<a name="connectors-msk-setup"></a>

Antes de usar o conector, você deve configurar seu cluster do Amazon MSK. Use o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir seu esquema e configurar a autenticação para o conector.

**nota**  
Se você implantar o conector em uma VPC para acessar recursos privados e também quiser estabelecer uma conexão com um serviço acessível ao público, como o Confluent, deverá associar o conector a uma sub-rede privada que tenha um gateway NAT. Para obter mais informações, consulte [Gateways NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) no Guia do usuário da Amazon VPC.

Ao trabalhar com o registro de esquemas do AWS Glue, preste atenção aos seguintes pontos:
+ Certifique-se de que o texto no campo **Description** (Descrição) do registro de esquemas do AWS Glue inclua a string `{AthenaFederationMSK}`. Essa string de marcação é necessária para os registros do AWS Glue usados com o conector MSK do Amazon Athena.
+ Para obter a melhor performance, use somente letras minúsculas para nomes de banco de dados e nomes de tabela. O uso de maiúsculas e minúsculas mistas faz com que o conector execute uma pesquisa que não diferencia maiúsculas de minúsculas e é mais computacionalmente intensiva.

**Para configurar o ambiente do Amazon MSK e o registro de esquemas do AWS Glue**

1. Configure o ambiente do Amazon MSK. Para obter mais informações e etapas, consulte [Setting up Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/before-you-begin.html) (Configuração do Amazon MSK) e [Getting started using Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) (Comece a usar o Amazon MSK) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

1. Faça o upload do arquivo de descrição do tópico do Kafka (ou seja, seu esquema) no formato JSON para o registro de esquemas do AWS Glue. Para obter mais informações, consulte [Integração com o registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) no Guia do desenvolvedor do AWS Glue. Para obter esquemas de exemplo, consulte a seção a seguir.

### Exemplos de esquema para o registro de esquemas do AWS Glue
<a name="connectors-msk-setup-schema-examples"></a>

Use o formato dos exemplos apresentados nessa seção ao fazer upload de seu esquema para o [registro de esquemas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

#### Exemplo de esquema: tipo JSON
<a name="connectors-msk-setup-schema-examples-json"></a>

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `json` como o valor para `dataFormat` e usa `datatypejson` para `topicName`.

**nota**  
O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no Kafka. 

```
{
  "topicName": "datatypejson",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "intcol",
        "mapping": "intcol",
        "type": "INTEGER"
      },
      {
        "name": "varcharcol",
        "mapping": "varcharcol",
        "type": "VARCHAR"
      },
      {
        "name": "booleancol",
        "mapping": "booleancol",
        "type": "BOOLEAN"
      },
      {
        "name": "bigintcol",
        "mapping": "bigintcol",
        "type": "BIGINT"
      },
      {
        "name": "doublecol",
        "mapping": "doublecol",
        "type": "DOUBLE"
      },
      {
        "name": "smallintcol",
        "mapping": "smallintcol",
        "type": "SMALLINT"
      },
      {
        "name": "tinyintcol",
        "mapping": "tinyintcol",
        "type": "TINYINT"
      },
      {
        "name": "datecol",
        "mapping": "datecol",
        "type": "DATE",
        "formatHint": "yyyy-MM-dd"
      },
      {
        "name": "timestampcol",
        "mapping": "timestampcol",
        "type": "TIMESTAMP",
        "formatHint": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    ]
  }
}
```

#### Exemplo de esquema: tipo CSV
<a name="connectors-msk-setup-schema-examples-csv"></a>

No exemplo a seguir, o esquema a ser criado no registro de esquemas do AWS Glue especifica `csv` como o valor para `dataFormat` e usa `datatypecsvbulk` para `topicName`. O valor para `topicName` deve usar a mesma capitalização que o nome do tópico no Kafka.

```
{
  "topicName": "datatypecsvbulk",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "intcol",
        "type": "INTEGER",
        "mapping": "0"
      },
      {
        "name": "varcharcol",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "booleancol",
        "type": "BOOLEAN",
        "mapping": "2"
      },
      {
        "name": "bigintcol",
        "type": "BIGINT",
        "mapping": "3"
      },
      {
        "name": "doublecol",
        "type": "DOUBLE",
        "mapping": "4"
      },
      {
        "name": "smallintcol",
        "type": "SMALLINT",
        "mapping": "5"
      },
      {
        "name": "tinyintcol",
        "type": "TINYINT",
        "mapping": "6"
      },
      {
        "name": "floatcol",
        "type": "DOUBLE",
        "mapping": "7"
      }
    ]
  }
}
```

### Configuração da autenticação para o conector MSK do Athena
<a name="connectors-msk-setup-configuring-authentication"></a>

É possível usar uma variedade de métodos para autenticar seu cluster do Amazon MSK, incluindo IAM, SSL, SCRAM e Kafka dedicado.

A tabela a seguir mostra os tipos de autenticação para o conector, e o protocolo de segurança e o mecanismo SASL para cada um. Para obter mais informações, consulte [Authentication and authorization for Apache Kafka APIs](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) (Autenticação e autorização para APIs do Apache Kafka) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.


****  

| auth\$1type | security.protocol | sasl.mechanism | 
| --- | --- | --- | 
| SASL\$1SSL\$1PLAIN | SASL\$1SSL | PLAIN | 
| SASL\$1PLAINTEXT\$1PLAIN | SASL\$1PLAINTEXT | PLAIN | 
| SASL\$1SSL\$1AWS\$1MSK\$1IAM | SASL\$1SSL | AWS\$1MSK\$1IAM | 
| SASL\$1SSL\$1SCRAM\$1SHA512 | SASL\$1SSL | SCRAM-SHA-512 | 
| SSL | SSL | N/D | 

**nota**  
Há suporte para os tipos de autenticação `SASL_SSL_PLAIN` e `SASL_PLAINTEXT_PLAIN` no Apache Kafka, mas não no Amazon MSK.

#### SASL/IAM
<a name="connectors-msk-setup-configuring-authentication-sasl-iam"></a>

Se o cluster usar a autenticação do IAM, você deverá configurar a política do IAM para o usuário ao configurar o cluster. Para obter mais informações, consulte [IAM access control](https://docs.aws.amazon.com/msk/latest/developerguide/IAM-access-control.html) (Controle de acesso do IAM) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.

Para usar esse tipo de autenticação, defina a variável de ambiente do Lambda `auth_type` como `SASL_SSL_AWS_MSK_IAM` para o conector. 

#### SSL
<a name="connectors-msk-setup-configuring-authentication-tls"></a>

Se o cluster for autenticado por SSL, você deverá gerar os arquivos de armazenamento confiável e de armazenamento de chaves, e fazer o upload deles no bucket do Amazon S3. Você deverá fornecer essa referência do Amazon S3 ao implantar o conector. O armazenamento de chaves, o armazenamento confiável e a chave SSL serão armazenados no AWS Secrets Manager. Você fornecerá a chave secreta da AWS ao implantar o conector.

Para obter informações sobre como criar um segredo no Secrets Manager, consulte [Criação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar esse tipo de autenticação, defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SSL | 
| certificates\$1s3\$1reference | O local do Amazon S3 que contém os certificados. | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

Após a criação de um segredo no Secrets Manager, é possível visualizá-lo no console do Secrets Manager.

**Para visualizar o segredo no Secrets Manager**

1. Abra o console do Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. No painel de navegação, escolha **Secrets** (Segredos).

1. Na página **Secrets** (Segredos), selecione o link do seu segredo.

1. Na página de detalhes do seu segredo, escolha **Retrieve secret value** (Recuperar valor do segredo).

   A imagem a seguir apresenta um exemplo de segredo com três pares chave/valor: `keystore_password`, `truststore_password` e `ssl_key_password`.  
![\[Recuperação de um segredo SSL no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-msk-setup-1.png)

#### SASL/SCRAM
<a name="connectors-msk-setup-configuring-authentication-sasl-scram"></a>

Se o cluster usar a autenticação SCRAM, forneça a chave do Secrets Manager associada ao cluster ao implantar o conector. As credenciais da AWS do usuário (chave secreta e chave de acesso) serão usadas para realizar a autenticação com o cluster.

Defina as variáveis ​​de ambiente conforme mostrado na tabela a seguir.


****  

| Parâmetro | Valor | 
| --- | --- | 
| auth\$1type | SASL\$1SSL\$1SCRAM\$1SHA512 | 
| secrets\$1manager\$1secret | O nome da chave secreta da AWS. | 

A imagem a seguir apresenta um exemplo de segredo no console do Secrets Manager com dois pares chave/valor: um para `username` e outro para `password`.

![\[Recuperação de um segredo SCRAM no Secrets Manager\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-msk-setup-2.png)


## Informações de licença
<a name="connectors-msk-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-msk-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-msk) em GitHub.com.

# Conector do Amazon Athena para o MySQL
<a name="connectors-mysql"></a>

O conector MySQL do Lambda no Amazon Athena permite que o Amazon Athena acesse bancos de dados MySQL.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-mysql-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-mysql-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Como o Athena converte as consultas em minúsculas, os nomes das tabelas do MySQL devem estar em minúsculas. Por exemplo, consultas do Athena em uma tabela chamada `myTable` falharão.
+ Se você migrar suas conexões do MySQL para o Glue Catalog e o Lake Formation, somente os nomes das tabelas e colunas em minúsculas serão reconhecidos. 

## Termos
<a name="connectors-mysql-terms"></a>

Os termos a seguir estão relacionados ao conector MySQL.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-mysql-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do MySQL.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

### Conexões do Glue (recomendação)
<a name="connectors-mysql-gc"></a>

Recomendamos que você configure um conector do MySQL usando um objeto de conexão do Glue. 

Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do MySQL com o nome da conexão do Glue que deseja usar.

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type MYSQL
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do MySQL criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do MySQL criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-mysql-connection-legacy"></a>

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

#### String de conexão
<a name="connectors-mysql-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
mysql://${jdbc_connection_string}
```

**nota**  
Se você receber o erro java.sql.SQLException: Zero date value prohibited (Valor de data zero proibido) ao fazer uma consulta `SELECT` em uma tabela do MySQL, adicione o seguinte parâmetro à sua string de conexão:  

```
zeroDateTimeBehavior=convertToNull
```
Para obter mais informações, consulte: [Erro 'Valor de data zero proibido' ao tentar selecionar em tabela do MySQL](https://github.com/awslabs/aws-athena-query-federation/issues/760) em GitHub.com.

#### Uso de um manipulador de multiplexação
<a name="connectors-mysql-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | MySqlMuxCompositeHandler | 
| Manipulador de metadados | MySqlMuxMetadataHandler | 
| Manipulador de registros | MySqlMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-mysql-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mymysqlcatalog, então o nome da variável de ambiente será mymysqlcatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do MySql que ofereça suporte a duas instâncias de banco de dados: `mysql1` (o padrão) e `mysql2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | mysql://jdbc:mysql://mysql2.host:3333/default?user=sample2&password=sample2 | 
| mysql\$1catalog1\$1connection\$1string | mysql://jdbc:mysql://mysql1.host:3306/default?\$1\$1Test/RDS/MySql1\$1 | 
| mysql\$1catalog2\$1connection\$1string | mysql://jdbc:mysql://mysql2.host:3333/default?user=sample2&password=sample2 | 

##### Fornecimento de credenciais
<a name="connectors-mysql-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/MySql1}`.

```
mysql://jdbc:mysql://mysql1.host:3306/default?...&${Test/RDS/MySql1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
mysql://jdbc:mysql://mysql1host:3306/default?...&user=sample2&password=sample2&...
```

Atualmente, o conector MySQL reconhece as propriedades `user` e `password` do JDBC.

#### Uso de um único manipulador de conexão
<a name="connectors-mysql-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do MySQL.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | MySqlCompositeHandler | 
| Manipulador de metadados | MySqlMetadataHandler | 
| Manipulador de registros | MySqlRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-mysql-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do MySQL com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | mysql://mysql1.host:3306/default?secret=Test/RDS/MySQL1 | 

#### Parâmetros de derramamento
<a name="connectors-mysql-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-mysql-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Arrow.


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Inteiro | Tiny | 
| Short | Smallint | 
| Inteiro | Int | 
| Longo | Bigint | 
| flutuação | Float4 | 
| Duplo | Float8 | 
| Data | Data/Dia | 
| Timestamp | Date Milli | 
| String | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Lista | 

## Partições e divisões
<a name="connectors-mysql-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-mysql-performance"></a>

O MySQL oferece suporte a partições nativas. O conector do Athena para o Lambda pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento nativo é altamente recomendado.

O conector do Athena para o MySQL executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Cláusulas LIMIT
<a name="connectors-mysql-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-mysql-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o MySQL pode combinar essas expressões e passá-las diretamente ao MySQL para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o MySQL são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-mysql-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

Para ver um artigo sobre como usar o pushdown de predicado para melhorar a performance em consultas federadas, incluindo MySQL, consulte [Melhorar as consultas federadas com o pushdown de predicados no Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) no *Blog de Big Data da AWS*.

## Consultas de passagem
<a name="connectors-mysql-passthrough-queries"></a>

O conector MySQL é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o MySQL, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no MySQL. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-mysql-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-mysql-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/pom.xml) do conector MySQL em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-mysql) em GitHub.com.

# Conector do Amazon Athena para o Neptune
<a name="connectors-neptune"></a>

O Amazon Neptune é um serviço de banco de dados de grafos rápido, confiável e totalmente gerenciado que facilita a criação e a execução de aplicações que trabalham com conjuntos de dados altamente conectados. O mecanismo de banco de dados de grafos especificamente projetado e de alta performance armazena bilhões de relacionamentos de maneira ideal e consulta gráficos com latência de poucos milissegundos. Para obter mais informações, consulte o [Manual do usuário do Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html).

O conector do Neptune no Amazon Athena permite que o Athena se comunique com a instância de banco de dados de grafos do Neptune, tornando seus dados de grafos do Neptune acessíveis para consultas SQL.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

## Pré-requisitos
<a name="connectors-neptune-prerequisites"></a>

O uso do conector Neptune requer as três etapas a seguir.
+ Configuração de um cluster do Neptune
+ Configuração de um AWS Glue Data Catalog
+ Implantação do conector em sua Conta da AWS. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md). Para obter detalhes adicionais específicos sobre a implantação do conector Neptune, consulte [Implantação do conector Neptune no Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/neptune-connector-setup) em GitHub.com.

## Limitações
<a name="connectors-neptune-limitations"></a>

No momento, o conector Neptune tem a seguinte limitação.
+ A projeção de colunas, incluindo a chave primária (ID), não é compatível. 

## Configuração de um cluster do Neptune
<a name="connectors-neptune-setting-up-a-neptune-cluster"></a>

Se você não tiver um cluster do Amazon Neptune e um conjunto de dados de gráfico de propriedades existentes que gostaria de usar, você deverá configurar um.

Verifique se você tem um gateway da Internet e um gateway NAT na VPC que hospeda seu cluster Neptune. As sub-redes privadas que a função do Lambda do conector Neptune usa devem ter uma rota para a Internet por meio desse gateway NAT. A função do Lambda do conector Neptune usa o gateway NAT para se comunicar com o AWS Glue.

Para obter instruções sobre como configurar um novo cluster do Neptune e carregá-lo com um conjunto de dados de amostra, consulte [Exemplo de configuração do cluster Neptune](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/neptune-cluster-setup) em GitHub.com.

## Configuração de um AWS Glue Data Catalog
<a name="connectors-neptune-setting-up-an-aws-glue-data-catalog"></a>

Diferentemente dos armazenamentos de dados relacionais tradicionais, os nós e bordas do banco de dados gráfico do Neptune não usam um esquema definido. Cada entrada pode ter diferentes campos e tipos de dados. No entanto, como o conector Neptune recupera metadados do AWS Glue Data Catalog, você deve criar um banco de dados do AWS Glue que tenha tabelas com o esquema necessário. Depois de criar o banco de dados e as tabelas do AWS Glue, o conector poderá preencher a lista de tabelas disponíveis para consulta no Athena.

### Habilitar a correspondência de colunas sem distinção entre maiúsculas e minúsculas
<a name="connectors-neptune-glue-case-insensitive-column-matching"></a>

Para resolver os nomes das colunas da tabela do Neptune com a capitalização correta, mesmo quando os nomes das colunas estão em minúsculas no AWS Glue, é possível configurar o conector do Neptune para correspondência sem distinção entre maiúsculas e minúsculas.

Para habilitar esse atributo, defina a variável de ambiente da função do Lambda do conector Neptune `enable_caseinsensitivematch` como `true`. 

### Especificar o parâmetro de tabela glabel do AWS Glue para nomes de tabelas com distinção entre maiúsculas e minúsculas
<a name="connectors-neptune-glue-glabel-parameter-for-table-names"></a>

Como o AWS Glue é compatível apenas com nomes de tabelas em letras minúsculas, é importante especificar o parâmetro `glabel` da tabela do AWS Glue ao criar uma tabela do AWS Glue para o Neptune e que a tabela do Neptune inclua distinção entre maiúsculas e minúsculas. 

Na definição da tabela do AWS Glue, inclua o parâmetro `glabel` e defina seu valor para o nome da tabela com a capitalização original. Isso garante que a capitalização correta seja preservada quando o AWS Glue interagir com a tabela do Neptune. O exemplo a seguir define o valor de `glabel` para o nome de tabela `Airport`.

```
glabel = Airport
```

![\[Definir a propriedade de tabela glabel do AWS Glue para preservar a capitalização do nome da tabela em uma tabela do Neptune\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-neptune-1.png)


Para obter mais informações sobre como configurar um AWS Glue Data Catalog para trabalhar com o Neptune, consulte [Set up AWS Glue Catalog](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/aws-glue-sample-scripts) em GitHub.com.

## desempenho
<a name="connectors-neptune-performance"></a>

O conector do Athena para o Neptune realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. No entanto, os predicados que usam a chave primária resultam em falhas na consulta. As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados. O conector Neptune é resiliente ao controle de utilização devido à simultaneidade.

## Consultas de passagem
<a name="connectors-neptune-passthrough-queries"></a>

O conector Neptune é compatível com [consultas de passagem](federated-query-passthrough.md). Você pode usar esse atributo para executar consultas Gremlin em gráficos de propriedades e executar consultas SPARQL em dados RDF.

Para usar consultas de passagem com o Neptune, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'database_name',
            COLLECTION => 'collection_name',
            QUERY => 'query_string'
        ))
```

O exemplo a seguir filtra a consulta de passagem do Neptune para aeroportos com o código `ATL`. As aspas simples duplas são para escapar.

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'graph-database',
            COLLECTION => 'airport',
            QUERY => 'g.V().has(''airport'', ''code'', ''ATL'').valueMap()' 
        ))
```

## Recursos adicionais
<a name="connectors-neptune-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune) em GitHub.com.

# Conector do Amazon Athena para o OpenSearch
<a name="connectors-opensearch"></a>

OpenSearch Service

O conector do OpenSearch no Amazon Athena permite que o Amazon Athena se comunique com suas instâncias do OpenSearch para que você possa usar o SQL para consultar os dados do OpenSearch.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

**nota**  
Devido a um problema conhecido, o conector do OpenSearch não pode ser usado com uma VPC.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

## Pré-requisitos
<a name="connectors-opensearch-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Termos
<a name="connectors-opensearch-terms"></a>

Os termos a seguir estão relacionados ao conector OpenSearch.
+ **Domínio**: um nome que esse conector associa ao endpoint da sua instância do OpenSearch. O domínio também é usado como nome do banco de dados. Para instâncias do OpenSearch definidas no Amazon OpenSearch Service, o domínio é detectável automaticamente. Para outras instâncias, você deve fornecer um mapeamento entre o nome de domínio e o endpoint.
+ **Índice**: uma tabela de banco de dados definida em sua instância do OpenSearch.
+ **Mapeamento**: se um índice for uma tabela de banco de dados, o mapeamento será seu esquema (ou seja, as definições de seus campos e atributos).

  Esse conector oferece suporte à recuperação de metadados da instância do OpenSearch e do AWS Glue Data Catalog. Se o conector encontrar um banco de dados e tabela do AWS Glue que correspondam aos nomes de domínio e índice do OpenSearch, o conector tentará usá-los para definição de esquema. Recomendamos que você crie sua tabela do AWS Glue para que seja um superconjunto de todos os campos em seu índice do OpenSearch.
+ **Documento**: um registro em uma tabela do banco de dados.
+ **Fluxo de dados**: dados baseados em tempo que são compostos por vários índices de apoio. Para obter mais informações, consulte [Fluxos de dados](https://opensearch.org/docs/latest/dashboards/im-dashboards/datastream/) na documentação do OpenSearch e [Conceitos básicos de fluxos de dados](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/data-streams.html#data-streams-example) no *Guia do desenvolvedor do Amazon OpenSearch Service*.
**nota**  
Como os índices do fluxo de dados são criados e gerenciados internamente pelo OpenSearch, o conector escolhe o mapeamento do esquema com base no primeiro índice disponível. Por isso, é altamente recomendável configurar uma tabela do AWS Glue como fonte suplementar de metadados. Para obter mais informações, consulte [Configuração de bancos de dados e tabelas no AWS Glue](#connectors-opensearch-setting-up-databases-and-tables-in-aws-glue). 

## Parâmetros
<a name="connectors-opensearch-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do OpenSearch.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="opensearch-gc"></a>

Recomendamos que você configure um conector do OpenSearch usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do OpenSearch como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type OPENSEARCH
```

**Propriedades do ambiente do Lambda**
+  **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do OpenSearch criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do OpenSearch criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="opensearch-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.
+ **query\$1timeout\$1cluster**: o tempo limite, em segundos, para consultas de integridade do cluster usadas na geração de verificações paralelas.
+ **query\$1timeout\$1search**: o tempo limite, em segundos, para consultas de pesquisa usadas na recuperação de documentos de um índice.
+ **auto\$1discover\$1endpoint**: booleano. O padrão é `true`. Quando você usar o Amazon OpenSearch Service e definir esse parâmetro como verdadeiro, o conector poderá descobrir automaticamente seus domínios e endpoints chamando as operações de API de descrição ou lista apropriadas no OpenSearch Service. Para qualquer outro tipo de instância do OpenSearch (por exemplo, auto-hospedada), você deverá especificar os endpoints de domínio associados na variável `domain_mapping`. Se `auto_discover_endpoint=true`, o conector usará credenciais da AWS para se autenticar no OpenSearch Service. Caso contrário, o conector recuperará as credenciais de nome de usuário e senha do AWS Secrets Manager por meio da variável `domain_mapping`.
+ **domain\$1mapping**: usado somente quando `auto_discover_endpoint` for definido como falso, e estabelece o mapeamento entre nomes de domínio e seus endpoints associados. A variável `domain_mapping` pode acomodar vários endpoints do OpenSearch no formato a seguir:

  ```
  domain1=endpoint1,domain2=endpoint2,domain3=endpoint3,...       
  ```

  Para fins de autenticação em um endpoint do OpenSearch, o conector oferece suporte a strings de substituição injetadas usando o formato `${SecretName}` com nome de usuário e senha recuperados do AWS Secrets Manager. O segredo deve ser armazenado no seguinte formato JSON:

  ```
  { "username": "your_username", "password": "your_password" }
  ```

  O conector analisará automaticamente essa estrutura JSON para recuperar as credenciais.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.

  O exemplo a seguir usa o segredo `opensearch-creds`.

  ```
  movies=https://${opensearch-creds}:search-movies-ne...qu---us-east-1---es.amazonaws.com     
  ```

  Em runtime, `${opensearch-creds}` será renderizado como nome de usuário e senha, como no exemplo a seguir.

  ```
  movies=https://myusername@mypassword:search-movies-ne...qu---us-east-1---es.amazonaws.com
  ```

  No parâmetro `domain_mapping`, cada par de domínio e endpoint pode usar um segredo diferente. O segredo em si deve ser especificado no formato *nome\$1do\$1usuário*@*senha*. Embora a senha possa conter sinais `@` incorporados, o primeiro `@` serve como um separador de *nome\$1do\$1usuário*.

  Também é importante observar que a vírgula (,) e o sinal de igual (=) são usados por esse conector como separadores para os pares de endpoints do domínio. Por esse motivo, você não deve usá-los em nenhum lugar do segredo armazenado.

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-opensearch-setting-up-databases-and-tables-in-aws-glue"></a>

O conector obtém informações de metadados usando o AWS Glue ou o OpenSearch. É possível configurar uma tabela do AWS Glue como fonte de definição de metadados complementar. Para ativar esse recurso, defina um banco de dados do AWS Glue e uma tabela que correspondam ao domínio e ao índice da fonte que você está complementando. O conector também pode aproveitar as definições de metadados armazenadas na instância do OpenSearch recuperando o mapeamento para o índice especificado.

### Definição de metadados para matrizes no OpenSearch
<a name="connectors-opensearch-defining-metadata-for-arrays-in-opensearch"></a>

O OpenSearch não tem um tipo de dados de matriz dedicado. Qualquer campo pode conter zero ou mais valores, desde que sejam do mesmo tipo de dados. Se você quiser usar o OpenSearch como sua fonte de definição de metadados, você deve definir uma propriedade `_meta` para todos os índices usados com o Athena para os campos que devam ser considerados uma lista ou matriz. Se você não conseguir concluir essa etapa, as consultas retornarão somente o primeiro elemento no campo da lista. Quando você especificar a propriedade `_meta`, os nomes dos campos deverão ser totalmente qualificados para estruturas JSON aninhadas (por exemplo, `address.street`, em que `street` é um campo aninhado dentro de uma estrutura `address`).

O exemplo a seguir define as listas `actor` e `genre` na tabela `movies`.

```
PUT movies/_mapping 
{ 
  "_meta": { 
    "actor": "list", 
    "genre": "list" 
  } 
}
```

### Tipos de dados
<a name="connectors-opensearch-data-types"></a>

O conector OpenSearch pode extrair definições de metadados do AWS Glue ou da instância do OpenSearch. O conector usa o mapeamento na tabela a seguir para converter as definições em tipos de dados do Apache Arrow, incluindo os pontos indicados na seção a seguir.


****  

| OpenSearch | Apache Arrow | AWS Glue | 
| --- | --- | --- | 
| text, keyword, binary | VARCHAR | string | 
| longo | BIGINT | bigint | 
| scaled\$1float | BIGINT | SCALED\$1FLOAT(...) | 
| integer | INT | int | 
| curto | SMALLINT | smallint | 
| byte | TINYINT | tinyint | 
| double | FLOAT8 | double | 
| float, half\$1float | FLOAT4 | flutuação | 
| booleano | BIT | booleano | 
| date, date\$1nanos | DATEMILLI | timestamp | 
| Estrutura JSON | STRUCT | STRUCT | 
| \$1meta (para obter mais informações, consulte a seção [Definição de metadados para matrizes no OpenSearch](#connectors-opensearch-defining-metadata-for-arrays-in-opensearch).) | LIST | ARRAY | 

#### Notas sobre tipos de dados
<a name="connectors-opensearch-data-type-considerations-and-limitations"></a>
+ No momento, o conector oferece suporte somente os tipos de dados do OpenSearch e do AWS Glue listados na tabela anterior.
+ Um `scaled_float` é um número de ponto flutuante escalado por um fator fixo de escala dupla e representado como um `BIGINT` no Apache Arrow. Por exemplo, 0,756 com um fator de escala de 100 é arredondado para 76.
+ Para definir um `scaled_float` no AWS Glue, você deverá selecionar o tipo de coluna `array` e declarar o campo usando o formato SCALED\$1FLOAT(*fator\$1de\$1escala*).

  Os exemplos a seguir são válidos:

  ```
  SCALED_FLOAT(10.51) 
  SCALED_FLOAT(100) 
  SCALED_FLOAT(100.0)
  ```

  Os exemplos a seguir não são válidos:

  ```
  SCALED_FLOAT(10.) 
  SCALED_FLOAT(.5)
  ```
+ Ao converter de `date_nanos` para `DATEMILLI`, os nanossegundos serão arredondados para o milissegundo mais próximo. Valores válidos para `date` e `date_nanos` incluem, entre outros, os seguintes formatos:

  ```
  "2020-05-18T10:15:30.123456789" 
  "2020-05-15T06:50:01.123Z" 
  "2020-05-15T06:49:30.123-05:00" 
  1589525370001 (epoch milliseconds)
  ```
+ Um `binary` do OpenSearch é uma representação de string de um valor binário codificado usando `Base64`, e é convertido em um `VARCHAR`.

## Execução de consultas de SQL
<a name="connectors-opensearch-running-sql-queries"></a>

Veja a seguir exemplos de consultas DDL que você pode usar com esse conector. Nos exemplos, *nome\$1da\$1função* corresponde ao nome da função do Lambda *domínio* é o nome do domínio que você deseja consultar e *índice* é o nome do seu índice.

```
SHOW DATABASES in `lambda:function_name`
```

```
SHOW TABLES in `lambda:function_name`.domain
```

```
DESCRIBE `lambda:function_name`.domain.index
```

## desempenho
<a name="connectors-opensearch-performance"></a>

O conector OpenSearch do Athena oferece suporte a verificações paralelas baseadas em fragmentos. O conector usa as informações de integridade do cluster recuperadas da instância do OpenSearch para gerar várias solicitações para uma consulta de pesquisa de documentos. As solicitações são divididas para cada fragmento e executadas simultaneamente.

O conector também reduz os predicados como parte de suas consultas de pesquisa de documentos. O exemplo de consulta e predicado a seguir mostra como o conector usa a redução de predicado.

**Consulta**

```
SELECT * FROM "lambda:elasticsearch".movies.movies 
WHERE year >= 1955 AND year <= 1962 OR year = 1996
```

**Predicado**

```
(_exists_:year) AND year:([1955 TO 1962] OR 1996)
```

## Consultas de passagem
<a name="connectors-opensearch-passthrough-queries"></a>

O conector OpenSearch é compatível com [consultas de passagem](federated-query-passthrough.md) e usa a linguagem Query DSL. Para obter mais informações sobre consultas com o Query DSL, consulte [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html) na documentação do Elasticsearch ou [Query DSL](https://opensearch.org/docs/latest/query-dsl/) na documentação do OpenSearch.

Para usar as consultas de passagem com o conector OpenSearch, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            schema => 'schema_name',
            index => 'index_name',
            query => "{query_string}"
        ))
```

O seguinte exemplo de consulta de passagem do OpenSearch filtra funcionários com status de emprego ativo no índice `employee` do esquema `default`.

```
SELECT * FROM TABLE(
        system.query(
            schema => 'default',
            index => 'employee',
            query => "{ ''bool'':{''filter'':{''term'':{''status'': ''active''}}}}"
        ))
```

## Recursos adicionais
<a name="connectors-opensearch-additional-resources"></a>
+ Para ver um artigo sobre o uso do conector Amazon Athena OpenSearch para consultar dados no Amazon OpenSearch Service e no Amazon S3 em uma única consulta, consulte [Consulte dados no Amazon OpenSearch Service usando SQL do Amazon Athena](https://aws.amazon.com/blogs/big-data/query-data-in-amazon-opensearch-service-using-sql-from-amazon-athena/) no *Blog de Big Data da AWS*.
+ Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-elasticsearch) em GitHub.com.

# Conector do Amazon Athena para Oracle
<a name="connectors-oracle"></a>

O conector do Amazon Athena para Oracle permite que o Amazon Athena execute consultas SQL em dados armazenados no Oracle em execução on-premises, no Amazon EC2 ou no Amazon RDS. Você também pode usar o conector para consultar dados no [Oracle Exadata](https://www.oracle.com/engineered-systems/exadata/).

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-oracle-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-oracle-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Há suporte somente à versão 12.1.0.2 do Oracle Databases.
+ Se o conector do Oracle não usar uma conexão do Glue, os nomes do banco de dados, da tabela e da coluna serão convertidos em maiúsculas pelo conector. 

  Se o conector do Oracle usar uma conexão do Glue, os nomes do banco de dados, da tabela e da coluna não serão convertidos em maiúsculas pelo conector. Para alterar esse comportamento de maiúsculas e minúsculas, altere o Lambda pela variável de ambiente `casing_mode` para `upper` ou `lower` conforme necessário.

   Um conector Oracle usando uma conexão do Glue não é compatível com o uso de um manipulador de multiplexação.
+ Quando o Oracle `NUMBER` for usado sem Precisão e Escala definidos, o Athena irá tratá-lo como `BIGINT`. Para obter as casas decimais necessárias no Athena, especifique `default_scale=<number of decimal places>` nas variáveis de ambiente da sua função do Lambda.

## Termos
<a name="connectors-oracle-terms"></a>

Os termos a seguir estão relacionados ao conector Oracle.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-oracle-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Oracle.

### Conexões do Glue (recomendação)
<a name="oracle-gc"></a>

Recomendamos que você configure um conector do Oracle usando um objeto de conexões do Glue. Para tal, defina a variável de ambiente `glue_connection` do Lambda do conector Oracle como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type ORACLE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **is\$1fips\$1enabled**: (opcional) defina como true quando o modo FIPS estiver habilitado. O padrão é falso.
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada.
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que não têm uma conexão do Glue associada.
  + **case\$1insensitive\$1search**: executa pesquisas sem diferenciar maiúsculas de minúsculas em nomes de esquemas e tabelas no Oracle. Use esse valor se sua consulta contiver nomes de esquema ou tabela que não correspondam ao padrão de maiúsculas e minúsculas do seu conector.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Oracle criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Oracle criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="oracle-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **default**: uma string de conexão JDBC a ser usada para conexão com a instância do banco de dados Oracle. Por exemplo, ., `oracle://${jdbc_connection_string}`
+ **catalog\$1connection\$1string**: usada pelo manipulador de multiplexação (não compatível com o uso de uma conexão do Glue). Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myoraclecatalog, então o nome da variável de ambiente será myoraclecatalog\$1connection\$1string.
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **is\$1fips\$1enabled**: (opcional) defina como true quando o modo FIPS estiver habilitado. O padrão é falso.
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada.
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que não têm uma conexão do Glue associada.
  + **case\$1insensitive\$1search**: executa pesquisas sem diferenciar maiúsculas de minúsculas em nomes de esquemas e tabelas no Oracle. Use esse valor se sua consulta contiver nomes de esquema ou tabela que não correspondam ao padrão de maiúsculas e minúsculas do seu conector.

#### String de conexão
<a name="connectors-oracle-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
oracle://${jdbc_connection_string}
```

**nota**  
Se sua senha contiver caracteres especiais (por exemplo, `some.password`), coloque-a entre aspas duplas quando passá-la para a string de conexão (por exemplo, `"some.password"`). Não fazê-lo pode resultar em um erro de URL inválido especificado.

#### Uso de um único manipulador de conexão
<a name="connectors-oracle-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Oracle.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | OracleCompositeHandler | 
| Manipulador de metadados | OracleMetadataHandler | 
| Manipulador de registros | OracleRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-oracle-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 
| IsFIPSEnabled | Opcional. Definido como true quando o modo FIPS estiver ativado. O padrão é false.  | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O conector oferece suporte a conexões baseadas em SSL a instâncias do Amazon RDS. O suporte é limitado ao protocolo Transport Layer Security (TLS) e à autenticação do servidor pelo cliente. Não há suporte para a autenticação mútua no Amazon RDS. A segunda linha na tabela abaixo mostra a sintaxe para o uso de SSL.

O exemplo de propriedade a seguir é para uma única instância do Oracle com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle\$1@//hostname:port/servicename | 
|  | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle\$1@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS) (HOST=<HOST\$1NAME>)(PORT=))(CONNECT\$1DATA=(SID=))(SECURITY=(SSL\$1SERVER\$1CERT\$1DN=))) | 

#### Fornecimento de credenciais
<a name="connectors-oracle-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**nota**  
Se sua senha contiver caracteres especiais (por exemplo, `some.password`), coloque-a entre aspas duplas quando armazená-la no Secrets Manager (por exemplo, `"some.password"`). Não fazê-lo pode resultar em um erro de URL inválido especificado.

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/Oracle}`.

```
oracle://jdbc:oracle:thin:${Test/RDS/Oracle}@//hostname:port/servicename 
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
oracle://jdbc:oracle:thin:username/password@//hostname:port/servicename
```

Atualmente, o conector Oracle reconhece as propriedades `UID` e `PWD` do JDBC.

#### Uso de um manipulador de multiplexação
<a name="connectors-oracle-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | OracleMuxCompositeHandler | 
| Manipulador de metadados | OracleMuxMetadataHandler | 
| Manipulador de registros | OracleMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-oracle-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myoraclecatalog, então o nome da variável de ambiente será myoraclecatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Oracle que ofereça suporte a duas instâncias de banco de dados: `oracle1` (o padrão) e `oracle2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle1\$1@//oracle1.hostname:port/servicename | 
| oracle\$1catalog1\$1connection\$1string | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle1\$1@//oracle1.hostname:port/servicename | 
| oracle\$1catalog2\$1connection\$1string | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle2\$1@//oracle2.hostname:port/servicename | 

## Suporte ao tipo de dados
<a name="connectors-oracle-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC, do Oracle e do Arrow.


****  

| JDBC | Oracle | Arrow | 
| --- | --- | --- | 
| Booleano | booleano | Bit | 
| Inteiro | N/D | Tiny | 
| Short | smallint | Smallint | 
| Inteiro | integer | Int | 
| Longo | bigint | Bigint | 
| flutuação | float4 | Float4 | 
| Duplo | float8 | Float8 | 
| Data | date | Data/Dia | 
| Timestamp | timestamp | Date Milli | 
| String | texto | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | numeric(p,s) | Decimal | 
| ARRAY | N/D (ver nota) | Lista | 

## Partições e divisões
<a name="connectors-oracle-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-oracle-performance"></a>

O Oracle oferece suporte a partições nativas. O conector do Athena para o Oracle pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento nativo é altamente recomendado. A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector Oracle é resiliente ao controle de utilização devido à simultaneidade. No entanto, os tempos de execução das consultas tendem a ser longos.

O conector do Athena para Oracle realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Predicados
<a name="connectors-oracle-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Oracle pode combinar essas expressões e passá-las diretamente ao Oracle para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Oracle são compatíveis com a passagem de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR,  NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-oracle-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');
```

## Consultas de passagem
<a name="connectors-oracle-passthrough-queries"></a>

O conector Oracle é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Oracle, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Oracle. A consulta seleciona todas as colunas na tabela `customer`.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer'
        ))
```

## Informações de licença
<a name="connectors-oracle-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-oracle-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/pom.xml) do conector Oracle em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-oracle) em GitHub.com.

# Conector do Amazon Athena para o PostgreSQL
<a name="connectors-postgresql"></a>

O conector PostgreSQL do Amazon Athena permite que o Athena acesse seus bancos de dados PostgreSQL.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-postgres-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-postgresql-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Assim como o PostgreSQL, o Athena trata os espaços à direita nos tipos `CHAR` do PostgreSQL como semanticamente insignificantes para fins de comprimento e comparação. Observe que isso se aplica somente aos tipos `CHAR`, mas não aos `VARCHAR`. O Athena ignora os espaços à direita no tipo `CHAR`, mas os trata como significativos para no `VARCHAR`.
+ Quando você usa o tipo de dados de cadeia de caracteres [citext](https://www.postgresql.org/docs/current/citext.html) que não diferencia maiúsculas de minúsculas, o PostgreSQL usa uma comparação de dados sem distinção entre maiúsculas e minúsculas que é diferente do Athena. Essa diferença cria uma discrepância de dados durante as operações SQL`JOIN`. Para contornar esse problema, use o recurso de consultas de passagem do conector do PostgreSQL. Para ter mais informações, veja a seção [Consultas de passagem](#connectors-postgres-passthrough-queries) posteriormente neste documento. 

## Termos
<a name="connectors-postgresql-terms"></a>

Os termos a seguir estão relacionados ao conector PostgreSQL.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-postgresql-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do PostgreSQL.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

### Conexões do Glue (recomendação)
<a name="connectors-postgresql-gc"></a>

Recomendamos que você configure um conector do PostgreSQL usando um objeto de conexão do Glue. 

Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do PostgreSQL com o nome da conexão do Glue que deseja usar.

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type POSTGRESQL
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do PostgreSQL criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do PostgreSQL criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-postgresql-connection-legacy"></a>

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

#### String de conexão
<a name="connectors-postgresql-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
postgres://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-postgresql-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | PostGreSqlMuxCompositeHandler | 
| Manipulador de metadados | PostGreSqlMuxMetadataHandler | 
| Manipulador de registros | PostGreSqlMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-postgresql-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mypostgrescatalog, então o nome da variável de ambiente será mypostgrescatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do PostgreSQL que ofereça suporte a duas instâncias de banco de dados: `postgres1` (o padrão) e `postgres2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | postgres://jdbc:postgresql://postgres1.host:5432/default?\$1\$1Test/RDS/PostGres1\$1 | 
| postgres\$1catalog1\$1connection\$1string | postgres://jdbc:postgresql://postgres1.host:5432/default?\$1\$1Test/RDS/PostGres1\$1 | 
| postgres\$1catalog2\$1connection\$1string | postgres://jdbc:postgresql://postgres2.host:5432/default?user=sample&password=sample | 

##### Fornecimento de credenciais
<a name="connectors-postgresql-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/PostGres1}`.

```
postgres://jdbc:postgresql://postgres1.host:5432/default?...&${Test/RDS/PostGres1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
postgres://jdbc:postgresql://postgres1.host:5432/default?...&user=sample2&password=sample2&...
```

Atualmente, o conector PostgreSQL reconhece as propriedades `user` e `password` do JDBC.

##### Habilitação do SSL
<a name="connectors-postgresql-ssl"></a>

Para oferecer suporte a SSL em sua conexão PostgreSQL, acrescente o seguinte à string de conexão:

```
&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
```

**Exemplo**  
O exemplo de string de conexão a seguir não usa SSL.

```
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword
```

Para habilitar o SSL, modifique a string da forma mostrada a seguir.

```
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
```

#### Uso de um único manipulador de conexão
<a name="connectors-postgresql-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do PostgreSQL.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | PostGreSqlCompositeHandler | 
| Manipulador de metadados | PostGreSqlMetadataHandler | 
| Manipulador de registros | PostGreSqlRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-postgresql-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do PostgreSQL com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | postgres://jdbc:postgresql://postgres1.host:5432/default?secret=\$1\$1Test/RDS/PostgreSQL1\$1 | 

#### Parâmetros de derramamento
<a name="connectors-postgresql-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-postgresql-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC, do PostgreSQL e do Arrow.


****  

| JDBC | PostGreSQL | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Inteiro | N/D | Tiny | 
| Short | smallint | Smallint | 
| Inteiro | integer | Int | 
| Longo | bigint | Bigint | 
| flutuação | float4 | Float4 | 
| Duplo | float8 | Float8 | 
| Data | date | Data/Dia | 
| Timestamp | timestamp | Date Milli | 
| String | texto | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | numeric(p,s) | Decimal | 
| ARRAY | N/D (ver nota) | Lista | 

**nota**  
Há suporte para o tipo `ARRAY` no conector PostgreSQL com as seguintes restrições: não há suporte para matrizes multidimensionais (`<data_type>[][]` ou matrizes aninhadas). Colunas com tipos de dados `ARRAY` sem suporte serão convertidas em uma matriz de elementos de string (`array<varchar>`).

## Partições e divisões
<a name="connectors-postgresql-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

## desempenho
<a name="connectors-postgresql-performance"></a>

O PostgreSQL oferece suporte a partições nativas. O conector do Athena para o PostgreSQL pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento nativo é altamente recomendado.

O conector do Athena para o PostgreSQL executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. Porém, selecionar um subconjunto de colunas resulta, algumas vezes, em um runtime mais longo.

### Cláusulas LIMIT
<a name="connectors-postgres-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-postgres-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o PostgreSQL pode combinar essas expressões e passá-las diretamente ao PostgreSQL para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o PostgreSQL são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-postgres-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-postgres-passthrough-queries"></a>

O conector PostgreSQL é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o PostgreSQL, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no PostgreSQL. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Recursos adicionais
<a name="connectors-postgresql-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-postgresql/pom.xml) do conector PostgreSQL em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-postgresql) em GitHub.com.

# Conector do Amazon Athena para Redis OSS
<a name="connectors-redis"></a>

O conector do Redis OSS no Amazon Athena permite que o Amazon Athena se comunique com as instâncias do Redis OSS para que você possa consultar os dados do Redis OSS com SQL. É possível usar o AWS Glue Data Catalog para mapear os pares de chave-valor do Redis OSS em tabelas virtuais.

Ao contrário dos armazenamentos de dados relacionais tradicionais, o Redis OSS não tem o conceito de tabela ou coluna. Em vez disso, o Redis OSS oferece padrões de acesso de valores-chave em que a chave é essencialmente uma `string` e o valor é uma `string`, `z-set` ou `hmap`.

É possível usar o AWS Glue Data Catalog para criar um esquema e configurar tabelas virtuais. As propriedades especiais da tabela informam ao conector do Redis OSS do Athena como mapear suas chaves e valores do Redis OSS em uma tabela. Para obter mais informações, consulte [Configuração de bancos de dados e tabelas no AWS Glue](#connectors-redis-setting-up-databases-and-tables-in-glue) adiante neste documento.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

O conector do Amazon Athena para o Redis OSS oferece suporte ao Amazon MemoryDB e ao Amazon ElastiCache (Redis OSS).

## Pré-requisitos
<a name="connectors-redis-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Parâmetros
<a name="connectors-redis-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Redis.
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar o desempenho, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-redis-setting-up-databases-and-tables-in-glue"></a>

Para habilitar uma tabela do AWS Glue para uso com o Redis OSS, é possível definir as seguintes propriedades da tabela na tabela: `redis-endpoint`, `redis-value-type` e `redis-keys-zset` ou `redis-key-prefix`.

Além disso, qualquer banco de dados do AWS Glue que contenha tabelas do Redis OSS deve ter um `redis-db-flag` na propriedade URI do banco de dados. Para definir a propriedade da URI `redis-db-flag`, use o console do AWS Glue para editar o banco de dados.

A lista a seguir descreve as propriedades da tabela.
+ **redis-endpoint**: (obrigatório) o *nome do host*`:`*porta*`:`*senha* do servidor Redis que contém dados para essa tabela (por exemplo, `athena-federation-demo.cache.amazonaws.com:6379`). Como alternativa, é possível armazenar o endpoint, ou parte do endpoint, em AWS Secrets Manager, usando \$1\$1*Secret\$1Name*\$1 como o valor da propriedade da tabela.

**nota**  
Para usar o recurso de consulta federada do Athena com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.
+ **redis-keys-zset**: (necessário se `redis-key-prefix` não for usado) uma lista separada por vírgulas de chaves cujo valor é um [zset](https://redis.com/ebook/part-2-core-concepts/chapter-3-commands-in-redis/3-5-sorted-sets/) (por exemplo, `active-orders,pending-orders`). Cada um dos valores no zset é tratado como uma chave que faz parte da tabela. A propriedade `redis-keys-zset` ou a propriedade `redis-key-prefix` devem ser definidas.
+ **redis-key-prefix**: (necessário se `redis-keys-zset` não for usado) uma lista separada por vírgulas de prefixos de chave para verificar os valores na tabela (por exemplo, `accounts-*,acct-`). A propriedade `redis-key-prefix` ou a propriedade `redis-keys-zset` devem ser definidas.
+ **redis-value-type**: (obrigatório) define como os valores das chaves definidos por `redis-key-prefix` ou `redis-keys-zset` são mapeados para sua tabela. Um literal é mapeado para uma única coluna. Um zset também é mapeado para uma única coluna, mas cada chave pode armazenar muitas linhas. Um hash permite que cada chave seja uma linha com várias colunas (por exemplo, um hash, literal ou zset).
+ **redis-ssl-flag**: (opcional) quando for `True`, cria uma conexão Redis que usa SSL/TLS. O padrão é `False`.
+ **redis-cluster-flag**: (opcional) quando for `True`, permite o suporte para instâncias Redis em cluster. O padrão é `False`.
+ **redis-db-number**: (opcional) aplica-se somente a instâncias autônomas sem cluster. Defina esse número (por exemplo, 1, 2 ou 3) para ler de um banco de dados Redis não padrão. O padrão é o banco de dados lógico Redis 0. Esse número não se refere a um banco de dados no Athena ou no AWS Glue, mas a um banco de dados lógico Redis. Para obter mais informações, consulte [Índice SELECT](https://redis.io/commands/select) na documentação do Redis.

## Tipos de dados
<a name="connectors-redis-data-types"></a>

O conector Redis OSS é compatível com os tipos de dados a seguir. Os fluxos do Redis OSS não são compatíveis.
+ [String](https://redis.com/ebook/part-1-getting-started/chapter-1-getting-to-know-redis/1-2-what-redis-data-structures-look-like/1-2-1-strings-in-redis/)
+ [Hash](https://redis.com/ebook/part-1-getting-started/chapter-1-getting-to-know-redis/1-2-what-redis-data-structures-look-like/1-2-4-hashes-in-redis/)
+ Conjunto classificados ([ZSet](https://redis.com/ebook/part-2-core-concepts/chapter-3-commands-in-redis/3-5-sorted-sets/))

Todos os valores do Redis OSS são recuperados como o tipo de dados `string`. Em seguida, eles são convertidos em um dos seguintes tipos de dados do Apache Arrow, com base em como suas tabelas são definidas no AWS Glue Data Catalog.


****  

| AWS GlueTipo de dados do  | Tipo de dados Apache Arrow | 
| --- | --- | 
| int | INT | 
| string | VARCHAR | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| flutuação | FLOAT4 | 
| smallint | SMALLINT | 
| tinyint | TINYINT | 
| booleano | BIT | 
| binary | VARBINARY | 

## Permissões obrigatórias
<a name="connectors-redis-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-redis.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-redis/athena-redis.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector do Redis requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.
+ **Acesso de leitura do AWS Secrets Manager**: se você optar por armazenar os detalhes do endpoint do Redis no Secrets Manager, deverá conceder ao conector acesso a esses segredos.
+ **Acesso à VPC**: o conector exige a capacidade de conectar e desconectar interfaces à sua VPC para que possa se conectar a ela e se comunicar com suas instâncias do Redis.

## desempenho
<a name="connectors-redis-performance"></a>

O conector do Redis OSS para o Athena tenta paralelizar as consultas com sua instância do Redis OSS de acordo com o tipo de tabela que você definiu (por exemplo, chaves zset ou chaves de prefixo).

O conector do Athena para Redis realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. No entanto, as consultas que contêm um predicado na chave primária apresentam falhas relacionadas ao tempo limite. As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados. O conector Redis é resiliente ao controle de utilização devido à simultaneidade.

## Consultas de passagem
<a name="connectors-redis-passthrough-queries"></a>

O conector Redis é compatível com [consultas de passagem](federated-query-passthrough.md). Você pode usar esse atributo para executar consultas que usam um script Lua em bancos de dados Redis. 

Para usar consultas de passagem com o Redis, use a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.script(
            script => 'return redis.[call|pcall](query_script)',
            keys => '[key_pattern]',
            argv => '[script_arguments]'
))
```

O exemplo a seguir executa um script Lua para obter o valor na chave `l:a`.

```
SELECT * FROM TABLE(
        system.script(
            script => 'return redis.call("GET", KEYS[1])',
            keys => '[l:a]',
            argv => '[]'
))
```

## Informações de licença
<a name="connectors-redis-license-information"></a>

O projeto do conector do Redis do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-redis-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-redis) em GitHub.com.

# Conector do Amazon Athena para o Redshift
<a name="connectors-redshift"></a>

O conector Redshift do Amazon Athena permite que o Amazon Athena acesse bancos de dados do Amazon Redshift e do Amazon Redshift sem servidor, incluindo visualizações do RedShift sem servidor. Você pode se conectar a qualquer serviço usando as configurações da string de conexão JDBC descritas nesta página.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-redshift-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-redshift-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Como o Redshift não oferece suporte a partições externas, todos os dados especificados por uma consulta são recuperados sempre.
+ Assim como o Redshift, o Athena trata os espaços à direita nos tipos `CHAR` do Redshift como semanticamente insignificantes para fins de comprimento e comparação. Observe que isso se aplica somente aos tipos `CHAR`, mas não aos `VARCHAR`. O Athena ignora os espaços à direita no tipo `CHAR`, mas os trata como significativos para no `VARCHAR`.

## Termos
<a name="connectors-redshift-terms"></a>

Os termos a seguir estão relacionados ao conector Redshift.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-redshift-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Redshift.

### Conexões do Glue (recomendação)
<a name="redshift-gc"></a>

Recomendamos que você configure um conector do Redshift usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Redshift com o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type REDSHIFT
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Redshift criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Redshift criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="redshift-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) se estiver presente e definido como verdadeiro, o conector não tentará recuperar metadados complementares do AWS Glue.
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.

#### String de conexão
<a name="connectors-redshift-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
redshift://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-redshift-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | RedshiftMuxCompositeHandler | 
| Manipulador de metadados | RedshiftMuxMetadataHandler | 
| Manipulador de registros | RedshiftMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-redshift-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myredshiftcatalog, então o nome da variável de ambiente será myredshiftcatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades do exemplo a seguir são para uma função do Lambda MUX do Redshift que ofereça suporte a duas instâncias de banco de dados: `redshift1` (o padrão) e `redshift2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | redshift://jdbc:redshift://redshift1.host:5439/dev?user=sample2&password=sample2 | 
| redshift\$1catalog1\$1connection\$1string | redshift://jdbc:redshift://redshift1.host:3306/default?\$1\$1Test/RDS/Redshift1\$1 | 
| redshift\$1catalog2\$1connection\$1string | redshift://jdbc:redshift://redshift2.host:3333/default?user=sample2&password=sample2 | 

##### Fornecimento de credenciais
<a name="connectors-redshift-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto \$1\$1Test/RDS/ `Redshift1`\$1.

```
redshift://jdbc:redshift://redshift1.host:3306/default?...&${Test/RDS/Redshift1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
redshift://jdbc:redshift://redshift1.host:3306/default?...&user=sample2&password=sample2&...
```

Atualmente, o conector do Redshift reconhece as propriedades `user` e `password` do JDBC.

## Suporte ao tipo de dados
<a name="connectors-redshift-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Inteiro | Tiny | 
| Short | Smallint | 
| Inteiro | Int | 
| Longo | Bigint | 
| flutuação | Float4 | 
| Duplo | Float8 | 
| Data | Data/Dia | 
| Timestamp | Date Milli | 
| String | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Lista | 

## Partições e divisões
<a name="connectors-redshift-partitions-and-splits"></a>

O Redshift não oferece suporte a partições externas. Para obter mais informações sobre problemas relativos à performance, consulte [desempenho](#connectors-redshift-performance).

## desempenho
<a name="connectors-redshift-performance"></a>

O conector do Athena para o Redshift executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, cláusulas `ORDER BY`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. Porém, selecionar um subconjunto de colunas resulta, algumas vezes, em um runtime mais longo. O Amazon Redshift é particularmente suscetível à lentidão na execução de consultas quando você executa várias consultas simultaneamente.

### Cláusulas LIMIT
<a name="connectors-redshift-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Principais N consultas
<a name="connectors-redshift-performance-top-n-queries"></a>

Uma das `N` principais consultas especifica uma ordenação do conjunto de resultados e um limite no número de linhas retornadas. Você pode usar esse tipo de consulta para determinar os `N` principais valores máximos ou `N` principais valores mínimos para os conjuntos de dados. Com os `N` pushdown principais, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-redshift-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Redshift pode combinar essas expressões e passá-las diretamente ao Redshift para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Redshift são compatíveis com a passágem de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-redshift-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
ORDER BY col_a DESC 
LIMIT 10;
```

Para ver um artigo sobre como usar o pushdown de predicado para melhorar a performance em consultas federadas, incluindo Amazon Redshift, consulte [Melhorar as consultas federadas com o pushdown de predicados no Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) no *Blog de Big Data da AWS*.

## Consultas de passagem
<a name="connectors-redshift-passthrough-queries"></a>

O conector Redshift é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Redshift, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Redshift. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Recursos adicionais
<a name="connectors-redshift-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-redshift/pom.xml) do conector do Redshift em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-redshift) em GitHub.com.

# Conector do Amazon Athena para o SAP HANA
<a name="connectors-sap-hana"></a>

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-saphana-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-sap-hana-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ No SAP HANA, os nomes dos objetos são convertidos em maiúsculas quando armazenados no banco de dados do SAP HANA. No entanto, como os nomes entre aspas diferenciam maiúsculas e minúsculas, é possível que duas tabelas tenham o mesmo nome em maiúsculas e minúsculas (por exemplo, `EMPLOYEE` e `employee`).

  Na Athena Federated Query, os nomes das tabelas de esquema são fornecidos para a função do Lambda em letras minúsculas. Para resolver esse problema, é possível fornecer dicas de consulta `@schemaCase` para recuperar os dados das tabelas que tenham nomes que diferenciem maiúsculas de minúsculas. A seguir estão dois exemplos de consultas com dicas de consulta.

  ```
  SELECT * 
  FROM "lambda:saphanaconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
  ```

  ```
  SELECT * 
  FROM "lambda:saphanaconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=lower"
  ```

## Termos
<a name="connectors-sap-hana-terms"></a>

Os termos a seguir estão relacionados ao conector SAP HANA.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-sap-hana-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do SAP HANA.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-sap-hana-gc"></a>

Recomendamos que você configure um conector do SAP HANA usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do SAP HANA como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type SAPHANA
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do SAP HANA criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do SAP HANA criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-sap-hana-legacy"></a>

#### String de conexão
<a name="connectors-sap-hana-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
saphana://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-sap-hana-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SaphanaMuxCompositeHandler | 
| Manipulador de metadados | SaphanaMuxMetadataHandler | 
| Manipulador de registros | SaphanaMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-sap-hana-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mysaphanacatalog, então o nome da variável de ambiente será mysaphanacatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Saphana que ofereça suporte a duas instâncias de banco de dados: `saphana1` (o padrão) e `saphana2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | saphana://jdbc:sap://saphana1.host:port/?\$1\$1Test/RDS/ Saphana1\$1 | 
| saphana\$1catalog1\$1connection\$1string | saphana://jdbc:sap://saphana1.host:port/?\$1\$1Test/RDS/ Saphana1\$1 | 
| saphana\$1catalog2\$1connection\$1string | saphana://jdbc:sap://saphana2.host:port/?user=sample2&password=sample2 | 

##### Fornecimento de credenciais
<a name="connectors-sap-hana-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/Saphana1}`.

```
saphana://jdbc:sap://saphana1.host:port/?${Test/RDS/Saphana1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
saphana://jdbc:sap://saphana1.host:port/?user=sample2&password=sample2&...
```

Atualmente, o conector SAP HANA reconhece as propriedades `user` e `password` do JDBC.

#### Uso de um único manipulador de conexão
<a name="connectors-sap-hana-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do SAP HANA.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SaphanaCompositeHandler | 
| Manipulador de metadados | SaphanaMetadataHandler | 
| Manipulador de registros | SaphanaRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-sap-hana-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância SAP HANA com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | saphana://jdbc:sap://saphana1.host:port/?secret=Test/RDS/Saphana1 | 

#### Parâmetros de derramamento
<a name="connectors-sap-hana-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-sap-hana-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Inteiro | Tiny | 
| Short | Smallint | 
| Inteiro | Int | 
| Longo | Bigint | 
| flutuação | Float4 | 
| Duplo | Float8 | 
| Data | Data/Dia | 
| Timestamp | Date Milli | 
| String | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Lista | 

## Conversões de tipos de dados
<a name="connectors-sap-hana-data-type-conversions"></a>

Além das conversões de JDBC para Arrow, o conector realiza algumas outras conversões para tornar a fonte SAP HANA e os tipos de dados do Athena compatíveis. Essas conversões ajudam a garantir que as consultas sejam executadas com êxito. A tabela a seguir mostra essas conversões:


****  

| Tipo de dados de origem (SAP HANA) | Tipo de dados convertidos (Athena) | 
| --- | --- | 
| DECIMAL | BIGINT | 
| INTEGER | INT | 
| DATE | DATEDAY | 
| TIMESTAMP | DATEMILLI | 

Todos os outros tipos de dados sem suporte são convertidos em `VARCHAR`.

## Partições e divisões
<a name="connectors-sap-hana-partitions-and-splits"></a>

Uma partição é representada por uma única coluna de partição do tipo `Integer`. A coluna contém os nomes das partições definidas em uma tabela do SAP HANA. Para uma tabela que não tenha nomes de partição, \$1 será retornado, o que equivale a uma única partição. Uma partição é equivalente a uma divisão.


****  

| Nome | Tipo | Descrição | 
| --- | --- | --- | 
| PART\$1ID | Inteiro | Partição nomeada no SAP HANA. | 

## desempenho
<a name="connectors-sap-hana-performance"></a>

O SAP HANA oferece suporte a partições nativas. O conector do Athena para o SAP HANA pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento nativo é altamente recomendado. A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector apresenta um controle de utilização significativo e, às vezes, falhas na consulta devido à simultaneidade.

O conector do Athena para o SAP HANA executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Cláusulas LIMIT
<a name="connectors-saphana-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-saphana-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o SAP HANA pode combinar essas expressões e passá-las diretamente ao SAP HANA para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o SAP HANA são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-saphana-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## Consultas de passagem
<a name="connectors-saphana-passthrough-queries"></a>

O conector SAP HANA é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o SAP HANA, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no SAP HANA. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-saphana-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-saphana-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/pom.xml) do conector SAP HANA em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-saphana) em GitHub.com.

# Conector o Amazon Athena para o Snowflake
<a name="connectors-snowflake"></a>

O conector do Amazon Athena para o [Snowflake](https://www.snowflake.com/) permite que o Amazon Athena execute consultas SQL nos dados armazenados no seu banco de dados SQL Snowflake ou em instâncias do RDS usando JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-snowflake-prerequisites"></a>

Implante o conector na sua Conta da AWS usando o console do Athena ou a operação da API `CreateDataCatalog`. Para obter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md).

## Limitações
<a name="connectors-snowflake-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Somente conexões legadas são compatíveis com a configuração do multiplexador. 
+ No momento, as visualizações do Snowflake com uma única divisão são compatíveis. 
+  No Snowflake, os nomes dos objetos diferenciam maiúsculas de minúsculas. O Athena aceita maiúsculas e minúsculas nas consultas DDL e DML, mas, por padrão, converte os nomes dos objetos para [minúsculas](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#table-names-and-table-column-names-in-ate-must-be-lowercase) ao executar a consulta. O conector do Snowflake aceita somente letras minúsculas quando o Catálogo do Glue/Lake Formation é usado. Quando o Catálogo do Athena é usado, os clientes podem controlar o comportamento de diferenciação de maiúsculas e minúsculas usando a variável de ambiente `casing_mode` do Lambda cujos valores possíveis estão listados na seção [Parâmetros](#connectors-snowflake-parameters) (por exemplo, `key=casing_mode, value = CASE_INSENSITIVE_SEARCH`). 

## Termos
<a name="connectors-snowflake-terms"></a>

Os termos a seguir estão relacionados ao conector Snowflake.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-snowflake-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Snowflake.

### Conexões do Glue (recomendação)
<a name="snowflake-gc"></a>

Recomendamos que você configure um conector do Snowflake usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do Snowflake com o nome da conexão do Glue que deseja usar.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type SNOWFLAKE
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **NONE**: mantém a diferenciação de maiúsculas e minúsculas nos nomes de esquema e tabela (executa a consulta sem modificações no Snowflake). Esse é o valor padrão quando **casing\$1mode** não é especificado. 
  + **UPPER**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos na consulta antes de executá-la no Snowflake.
  + **LOWER**: converte para minúsculas todos os nomes de esquema e tabela fornecidos na consulta antes de executá-la no Snowflake.
  + **CASE\$1INSENSITIVE\$1SEARCH**: faz pesquisas sem diferenciar maiúsculas de minúsculas em nomes de esquemas e tabelas no Snowflake. Por exemplo, você pode usar esse modo quando você tem uma consulta como `SELECT * FROM EMPLOYEE` e o Snowflake contém uma tabela chamada `Employee`. No entanto, na presença de duplicidade de nomes, como ter uma tabela chamada `EMPLOYEE` e outra chamada `Employee` no Snowflake, a consulta falhará.

**nota**  
O conector do Snowflake criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Snowflake criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

**Armazenar credenciais**

Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais. Para obter mais informações, consulte [Autenticar com o Snowflake](connectors-snowflake-authentication.md).

### Conexões legadas
<a name="snowflake-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **default**: uma string de conexão JDBC a ser usada para conexão com a instância do banco de dados Snowflake. Por exemplo, ., `snowflake://${jdbc_connection_string}`
+ **catalog\$1connection\$1string**: usada pelo manipulador de multiplexação (não compatível com o uso de uma conexão do Glue). Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mysnowflakecatalog, o nome da variável de ambiente será mysnowflakecatalog\$1connection\$1string.
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **NONE**: mantém a diferenciação de maiúsculas e minúsculas nos nomes de esquema e tabela (executa a consulta sem modificações no Snowflake). Esse é o valor padrão quando **casing\$1mode** não é especificado. 
  + **UPPER**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos na consulta antes de executá-la no Snowflake.
  + **LOWER**: converte para minúsculas todos os nomes de esquema e tabela fornecidos na consulta antes de executá-la no Snowflake.
  + **CASE\$1INSENSITIVE\$1SEARCH**: faz pesquisas sem diferenciar maiúsculas de minúsculas em nomes de esquemas e tabelas no Snowflake. Por exemplo, você pode usar esse modo quando você tem uma consulta como `SELECT * FROM EMPLOYEE` e o Snowflake contém uma tabela chamada `Employee`. No entanto, na presença de duplicidade de nomes, como ter uma tabela chamada `EMPLOYEE` e outra chamada `Employee` no Snowflake, a consulta falhará.
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

#### String de conexão
<a name="connectors-snowflake-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
snowflake://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-snowflake-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SnowflakeMuxCompositeHandler | 
| Manipulador de metadados | SnowflakeMuxMetadataHandler | 
| Manipulador de registros | SnowflakeMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-snowflake-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mysnowflakecatalog, então o nome da variável de ambiente será mysnowflakecatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Snowflake que ofereça suporte a duas instâncias de banco de dados: `snowflake1` (o padrão) e `snowflake2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1&\$1\$1Test/RDS/Snowflake1\$1 | 
| snowflake\$1catalog1\$1connection\$1string | snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1\$1\$1Test/RDS/Snowflake1\$1 | 
| snowflake\$1catalog2\$1connection\$1string | snowflake://jdbc:snowflake://snowflake2.host:port/?warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2 | 

##### Fornecimento de credenciais
<a name="connectors-snowflake-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/Snowflake1}`.

```
snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1${Test/RDS/Snowflake1}&... 
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
snowflake://jdbc:snowflake://snowflake1.host:port/warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2&... 
```

Atualmente, o Snowflake reconhece as propriedades `user` e `password` do JDBC. Ele também aceita o nome do usuário e a senha no formato *nome de usuário*`/`*senha* sem as chaves `user` ou `password`.

#### Uso de um único manipulador de conexão
<a name="connectors-snowflake-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Snowflake.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SnowflakeCompositeHandler | 
| Manipulador de metadados | SnowflakeMetadataHandler | 
| Manipulador de registros | SnowflakeRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-snowflake-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Snowflake com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | snowflake://jdbc:snowflake://snowflake1.host:port/?secret=Test/RDS/Snowflake1 | 

#### Parâmetros de derramamento
<a name="connectors-snowflake-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-snowflake-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Inteiro | Tiny | 
| Short | Smallint | 
| Inteiro | Int | 
| Longo | Bigint | 
| flutuação | Float4 | 
| Duplo | Float8 | 
| Data | Data/Dia | 
| Timestamp | Date Milli | 
| String | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Lista | 

## Conversões de tipos de dados
<a name="connectors-snowflake-data-type-conversions"></a>

Além das conversões de JDBC para Arrow, o conector realiza algumas outras conversões para tornar a fonte do Snowflake e os tipos de dados do Athena compatíveis. Essas conversões ajudam a garantir que as consultas sejam executadas com êxito. A tabela a seguir mostra essas conversões:


****  

| Tipo de dados de origem (Snowflake) | Tipo de dados convertidos (Athena) | 
| --- | --- | 
| TIMESTAMP | TIMESTAMPMILLI | 
| DATE | TIMESTAMPMILLI | 
| INTEGER | INT | 
| DECIMAL | BIGINT | 
| TIMESTAMP\$1NTZ | TIMESTAMPMILLI | 

Todos os outros tipos de dados sem suporte são convertidos em `VARCHAR`.

## Partições e divisões
<a name="connectors-snowflake-partitions-and-splits"></a>

As partições são usadas para determinar como gerar divisões para o conector. O Athena constrói uma coluna sintética do tipo `varchar` que representa o esquema de particionamento da tabela para ajudar o conector a gerar divisões. O conector não modifica a definição real da tabela.

Para criar essa coluna sintética e as partições, o Athena exige que uma chave primária seja definida. No entanto, como o Snowflake não impõe restrições de chave primária, você mesmo deve impor a exclusividade. Caso você não faça isso, o Athena vai ter como padrão uma divisão única.

## desempenho
<a name="connectors-snowflake-performance"></a>

Para obter um desempenho ideal, use filtros nas consultas sempre que possível. Além disso, é altamente recomendável o particionamento nativo para recuperar grandes conjuntos de dados com distribuição uniforme de partições. A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector Snowflake é resiliente ao controle de utilização devido à simultaneidade.

O conector do Athena para o Snowflake executa a passagem direta de predicados para diminuir os dados examinados pela consulta. Cláusulas `LIMIT`, predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Cláusulas LIMIT
<a name="connectors-snowflake-performance-limit-clauses"></a>

Uma instrução `LIMIT N` reduz os dados examinados pela consulta. Com a passagem direta de `LIMIT N`, o conector só retorna `N` linhas para o Athena.

### Predicados
<a name="connectors-snowflake-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Snowflake pode combinar essas expressões e passá-las diretamente ao Snowflake para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Snowflake são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-snowflake-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

# Autenticar com o Snowflake
<a name="connectors-snowflake-authentication"></a>

Você pode configurar o conector do Amazon Athena Snowflake para usar a autenticação por par de chaves ou o método de autenticação OAuth para se conectar ao data warehouse do Snowflake. Ambos os métodos fornecem acesso seguro ao Snowflake e eliminam a necessidade de armazenar senhas em cadeias de conexão.
+ **Autenticação por par de chaves**: esse método usa pares de chaves públicas ou privadas RSA para autenticar com o Snowflake. A chave privada assina digitalmente as solicitações de autenticação enquanto a chave pública correspondente é registrada no Snowflake para verificação. Esse método elimina o armazenamento de senhas.
+ **Autenticação OAuth**: esse método usa o token de autorização e o token de atualização para autenticar com o Snowflake. Ele oferece suporte à atualização automática de tokens, o que o torna adequado para aplicações de execução longa.

Para obter mais informações, consulte [autenticação por par de chaves](https://docs.snowflake.com/en/user-guide/key-pair-auth) e [autenticação OAuth](https://docs.snowflake.com/en/user-guide/oauth-custom) no guia do usuário do Snowflake.

## Pré-requisitos
<a name="connectors-snowflake-authentication-prerequisites"></a>

Antes de começar, conclua os seguintes pré-requisitos:
+ Acesso à conta do Snowflake com privilégios administrativos.
+ Conta de usuário do Snowflake dedicada para o conector do Athena.
+ OpenSSL ou ferramentas equivalentes de geração de chaves para autenticação de pares de chaves.
+ Acesso ao AWS Secrets Manager para criar e gerenciar segredos.
+ Navegador da Web para concluir o fluxo do OAuth para a autenticação do OAuth.

## Configurar a autenticação por par de chaves
<a name="connectors-snowflake-keypair-authentication"></a>

Esse processo envolve gerar um par de chaves RSA, configurar sua conta do Snowflake com a chave pública e armazenar com segurança a chave privada no AWS Secrets Manager. As etapas a seguir guiarão você na criação das chaves criptográficas, na configuração das permissões necessárias do Snowflake e na configuração das credenciais da AWS para autenticação direta. 

1. **Gerar pares de chaves RSA**

   Gere um par de chaves pública e privada usando o OpenSSL.
   + Para gerar uma versão não criptografada, use o comando a seguir em sua aplicação de linha de comando local.

     ```
     openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
     ```
   + Para gerar uma versão criptografada, use o comando a seguir, que omite `-nocrypt`.

     ```
     openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
     ```
   + Para gerar uma chave pública com base em uma chave privada.

     ```
     openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
     # Set appropriate permissions (Unix/Linux)
     chmod 600 rsa_key.p8
     chmod 644 rsa_key.pub
     ```
**nota**  
Não compartilhe sua chave privada. A chave privada só deve estar acessível à aplicação que precisa se autenticar com o Snowflake.

1. **Extrair conteúdo da chave pública sem delimitadores para o Snowflake**

   ```
   # Extract public key content (remove BEGIN/END lines and newlines)
   cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'
   ```

   Salve essa saída, pois ela será necessária mais tarde na próxima etapa.

1. **Configurar um usuário do Snowflake**

   Siga estas etapas para configurar um usuário do Snowflake.

   1. Crie um usuário dedicado para o conector do Athena, caso ele ainda não exista.

      ```
      -- Create user for Athena connector
      CREATE USER athena_connector_user;
      
      -- Grant necessary privileges
      GRANT USAGE ON WAREHOUSE your_warehouse TO ROLE athena_connector_role;
      GRANT USAGE ON DATABASE your_database TO ROLE athena_connector_role;
      GRANT SELECT ON ALL TABLES IN DATABASE your_database TO ROLE athena_connector_role;
      ```

   1. Conceda privilégios de autenticação. Para atribuir uma chave pública a um usuário, é necessário ter um dos seguintes perfis ou privilégios.
      + O privilégio `MODIFY PROGRAMMATIC AUTHENTICATION METHODS` ou `OWNERSHIP` no usuário.
      + O perfil `SECURITYADMIN` ou superior.

      Conceda os privilégios necessários para atribuir chaves públicas usando o comando a seguir.

      ```
      GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER athena_connector_user TO ROLE your_admin_role;
      ```

   1. Atribua a chave pública ao usuário do Snowflake usando o comando a seguir.

      ```
      ALTER USER athena_connector_user SET RSA_PUBLIC_KEY='RSAkey';
      ```

      Verifique se a chave pública foi atribuída com sucesso ao usuário com o comando a seguir.

      ```
      DESC USER athena_connector_user;
      ```

1. **Armazenar a chave privada em AWS Secrets Manager**

   1. Converta a chave privada para o formato exigido pelo conector.

      ```
      # Read private key content
      cat rsa_key.p8
      ```

   1. Crie um segredo no AWS Secrets Manager com a estrutura a seguir.

      ```
      {
        "sfUser": "your_snowflake_user",
        "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
        "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)"
      }
      ```
**nota**  
O cabeçalho e o rodapé são opcionais.
A chave privada deve ser separada por `\n`.

## Configurar autenticação do OAuth
<a name="connectors-snowflake-oauth-authentication"></a>

Esse método de autenticação permite acesso seguro e baseado em tokens ao Snowflake com recursos de atualização automática de credenciais. O processo de configuração envolve a criação de uma integração de segurança no Snowflake, a recuperação das credenciais do cliente OAuth, a conclusão do fluxo de autorização necessário para obter um código de acesso e o armazenamento das credenciais do OAuth no AWS Secrets Manager para uso do conector. 

1. **Criar uma integração de segurança no Snowflake**

   Execute o seguinte comando SQL no Snowflake para criar uma integração de segurança OAuth do Snowflake.

   ```
   CREATE SECURITY INTEGRATION my_snowflake_oauth_integration_a
     TYPE = OAUTH
     ENABLED = TRUE
     OAUTH_CLIENT = CUSTOM
     OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
     OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback'
     OAUTH_ISSUE_REFRESH_TOKENS = TRUE
     OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;
   ```

   **Parâmetros de configuração**
   + `TYPE = OAUTH`: especifica o tipo de autenticação OAuth.
   + `ENABLED = TRUE`: permite a integração de segurança.
   + `OAUTH_CLIENT = CUSTOM`: usa a configuração personalizada do cliente OAuth.
   + `OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'`: define o tipo de cliente para aplicações seguras.
   + `OAUTH_REDIRECT_URI`: o URL de retorno de chamada para o fluxo do OAuth. Para fins de teste, ele pode ser o localhost.
   + `OAUTH_ISSUE_REFRESH_TOKENS = TRUE`: habilita a geração de tokens de atualização.
   + `OAUTH_REFRESH_TOKEN_VALIDITY = 7776000`: define a validade do token de atualização (90 dias em segundos).

1. **Recuperar segredos do cliente OAuth**

   1. Execute o comando SQL a seguir para obter as credenciais do cliente.

      ```
      DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A';
      ```

   1. Recupere os segredos do cliente OAuth.

      ```
      SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');
      ```

      **Exemplo de resposta**

      ```
      {
        "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
        "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY,
        "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE"
      }
      ```
**nota**  
Mantenha essas credenciais em segurança e não as compartilhe. Elas serão usadas para configurar o cliente OAuth.

1. **Autorizar o usuário e recuperar o código de autorização**

   1. Abra o URL a seguir no seu navegador.

      ```
      https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callback
      ```

   1. Conclua o fluxo de autorização.

      1. Faça login usando suas credenciais do Snowflake.

      1. Conceda as permissões solicitadas. Você será redirecionado para o URI de retorno de chamada com um código de autorização.

   1. Extraia o código de autorização copiando o parâmetro de código do URL de redirecionamento.

      ```
      https://localhost:8080/oauth/callback?code=<authorizationcode>
      ```
**nota**  
O código de autorização é válido por tempo limitado e só pode ser usado uma vez.

1. **Armazenar credenciais do OAuth no AWS Secrets Manager**

   Crie um segredo no AWS Secrets Manager com a estrutura a seguir.

   ```
   {
     "redirect_uri": "https://localhost:8080/oauth/callback",
     "client_secret": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
     "token_url": "https://<your_account>.snowflakecomputing.com/oauth/token-request",
     "client_id": "AIDACKCEVSQ6C2EXAMPLE,
     "username": "your_snowflake_username",
     "auth_code": "authorizationcode"
   }
   ```

   **Campos obrigatórios**
   + `redirect_uri`: URI de redirecionamento do OAuth que você obteve na Etapa 1.
   + `client_secret`: segredo do cliente OAuth que você obteve na Etapa 2.
   + `token_url`: Snowflake. O endpoint do token OAuth.
   + `client_id`: o ID do cliente OAuth da Etapa 2.
   + `username`: o nome de usuário do Snowflake para o conector.
   + `auth_code`: o código de autorização que você obteve na Etapa 3.

Após criar um segredo, você obtém um ARN de segredo que pode ser usado na sua conexão do Glue ao [criar uma conexão de fonte de dados](connect-to-a-data-source.md). 

## Consultas de passagem
<a name="connectors-snowflake-passthrough-queries"></a>

O conector Snowflake é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Snowflake, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Snowflake. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-snowflake-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-snowflake-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/pom.xml) do conector Snowflake em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-snowflake) em GitHub.com.

# Conector do Amazon Athena para o Microsoft SQL Server
<a name="connectors-microsoft-sql-server"></a>

O conector do Amazon Athena para o [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/?view=sql-server-ver15) permite que o Amazon Athena execute consultas SQL em dados armazenados no Microsoft SQL Server usando JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-sqlserver-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-microsoft-sql-server-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados `Date` e `Timestamp` para o tipo de dados apropriado.
+ Para pesquisar valores negativos dos tipos `Real` e `Float`, use o operador `<=` ou `>=`.
+ Não há suporte para os tipos de dados `binary`, `varbinary`, `image` e `rowversion`.

## Termos
<a name="connectors-microsoft-sql-server-terms"></a>

Os termos a seguir estão relacionados ao conector SQL Server.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-microsoft-sql-server-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do SQL Server.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-microsoft-sql-server-gc"></a>

Recomendamos que você configure um conector do SQL Server usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` do Lambda do conector do SQL Server com o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type SQLSERVER
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do SQL Server criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do SQL Server criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-microsoft-sql-server-legacy"></a>

#### String de conexão
<a name="connectors-microsoft-sql-server-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
sqlserver://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-microsoft-sql-server-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SqlServerMuxCompositeHandler | 
| Manipulador de metadados | SqlServerMuxMetadataHandler | 
| Manipulador de registros | SqlServerMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-microsoft-sql-server-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mysqlservercatalog, então o nome da variável de ambiente será mysqlservercatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do SqlServer que ofereça suporte a duas instâncias de banco de dados: `sqlserver1` (o padrão) e `sqlserver2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| sqlserver\$1catalog1\$1connection\$1string | sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| sqlserver\$1catalog2\$1connection\$1string | sqlserver://jdbc:sqlserver://sqlserver2.hostname:port;databaseName=<database\$1name>;\$1\$1secret2\$1name\$1 | 

##### Fornecimento de credenciais
<a name="connectors-microsoft-sql-server-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${secret_name}`.

```
sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database_name>;${secret_name}
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database_name>;user=<user>;password=<password>
```

#### Uso de um único manipulador de conexão
<a name="connectors-microsoft-sql-server-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do SQL Server.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | SqlServerCompositeHandler | 
| Manipulador de metadados | SqlServerMetadataHandler | 
| Manipulador de registros | SqlServerRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-microsoft-sql-server-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do SQL Server com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database\$1name>;\$1\$1secret\$1name\$1 | 

#### Parâmetros de derramamento
<a name="connectors-microsoft-sql-server-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-microsoft-sql-server-data-type-support"></a>

A tabela a seguir mostra os tipos de dados correspondentes para SQL Server e Apache Arrow.


****  

| SQL Server | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numeric | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| horário | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 
| nchar[n] | VARCHAR | 
| nvarchar[n/max] | VARCHAR | 
| texto | VARCHAR | 
| ntext | VARCHAR | 

## Partições e divisões
<a name="connectors-microsoft-sql-server-partitions-and-splits"></a>

Uma partição é representada por uma única coluna de partição do tipo `varchar`. No caso do conector SQL Server, uma função de partição determina como as partições serão aplicadas na tabela. As informações sobre a função de partição e o nome da coluna são recuperadas da tabela de metadados do SQL Server. Em seguida, uma consulta personalizada obtém a partição. As divisões são criadas com base no número de partições distintas recebidas.

## desempenho
<a name="connectors-microsoft-sql-server-performance"></a>

A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector SQL Server é resiliente ao controle de utilização devido à simultaneidade.

O concetor do Athena para o SQL Server realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta. 

### Predicados
<a name="connectors-sqlserver-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL, que avalia para um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o SQL Server pode combinar essas expressões e passá-las diretamente ao SQL Server para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o SQL Server são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-sqlserver-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');
```

## Consultas de passagem
<a name="connectors-sqlserver-passthrough-queries"></a>

O conector SQL Server é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o SQL Server, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no SQL Server. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-sqlserver-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-sqlserver-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/pom.xml) do conector SQL Server em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-sqlserver) em GitHub.com.

# Conector do Amazon Athena para o Teradata
<a name="connectors-teradata"></a>

 O conector do Amazon Athena para o Teradata permite que o Amazon Athena execute consultas SQL em dados armazenados nos seus bancos de dados Teradata. 

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-teradata-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Limitações
<a name="connectors-teradata-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.

## Termos
<a name="connectors-teradata-terms"></a>

Os termos a seguir estão relacionados ao conector Teradata.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-teradata-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Teradata.

### Conexões do Glue (recomendação)
<a name="connectors-teradata-gc"></a>

Recomendamos que você configure um conector do Teradata usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Teradata como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type TERADATA
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Teradata criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Teradata criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-teradata-legacy"></a>

#### String de conexão
<a name="connectors-teradata-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
teradata://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-teradata-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | TeradataMuxCompositeHandler | 
| Manipulador de metadados | TeradataMuxMetadataHandler | 
| Manipulador de registros | TeradataMuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-teradata-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for myteradatacatalog, então o nome da variável de ambiente será myteradatacatalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades de exemplo a seguir são para uma função do Lambda MUX do Teradata que ofereça suporte a duas instâncias de banco de dados: `teradata1` (o padrão) e `teradata2`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2 | 
| teradata\$1catalog1\$1connection\$1string | teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,\$1\$1Test/RDS/Teradata1\$1 | 
| teradata\$1catalog2\$1connection\$1string | teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2 | 

##### Fornecimento de credenciais
<a name="connectors-teradata-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${Test/RDS/Teradata1}`.

```
teradata://jdbc:teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,${Test/RDS/Teradata1}&...
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,...&user=sample2&password=sample2&...
```

Atualmente, o Teradata reconhece as propriedades `user` e `password` do JDBC. Ele também aceita o nome do usuário e a senha no formato *nome de usuário*`/`*senha* sem as chaves `user` ou `password`.

#### Uso de um único manipulador de conexão
<a name="connectors-teradata-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância Teradata.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | TeradataCompositeHandler | 
| Manipulador de metadados | TeradataMetadataHandler | 
| Manipulador de registros | TeradataRecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-teradata-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

O exemplo de propriedade a seguir é para uma única instância do Teradata com suporte em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,secret=Test/RDS/Teradata1 | 

#### Parâmetros de derramamento
<a name="connectors-teradata-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-teradata-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Inteiro | Tiny | 
| Short | Smallint | 
| Inteiro | Int | 
| Longo | Bigint | 
| flutuação | Float4 | 
| Duplo | Float8 | 
| Data | Data/Dia | 
| Timestamp | Date Milli | 
| String | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Lista | 

## Partições e divisões
<a name="connectors-teradata-partitions-and-splits"></a>

Uma partição é representada por uma única coluna de partição do tipo `Integer`. A coluna contém os nomes das partições definidas em uma tabela do Teradata. Para uma tabela que não tenha nomes de partição, \$1 será retornado, o que equivale a uma única partição. Uma partição é equivalente a uma divisão.


****  

| Nome | Tipo | Descrição | 
| --- | --- | --- | 
| partição | Inteiro | Partição nomeada no Teradata. | 

## desempenho
<a name="connectors-teradata-performance"></a>

O Teradata oferece suporte a partições nativas. O conector do Athena para o Teradata pode recuperar dados dessas partições em paralelo. Se você quiser consultar conjuntos de dados muito grandes com distribuição uniforme de partições, o particionamento nativo é altamente recomendado. A seleção de um subconjunto de colunas diminui significativamente o runtime da consulta. O conector apresenta alguns controles de utilização devido à simultaneidade.

O conector do Athena para o Teradata realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. Predicados simples e expressões complexas são passados diretamente ao conector para reduzir a quantidade de dados examinados e o runtime de execução da consulta.

### Predicados
<a name="connectors-teradata-performance-predicates"></a>

Um predicado é uma expressão na cláusula `WHERE` de uma consulta SQL que é avaliado como um valor booleano e filtra as linhas com base em várias condições. O conector do Athena para o Teradata pode combinar essas expressões e passá-las diretamente ao Synapse para melhorar a funcionalidade e reduzir a quantidade de dados examinados.

Os seguintes operadores do conector do Athena para o Teradata são compatíveis com a passagem direta de predicados:
+ **Booleanos:** E, OU, NÃO
+ **Igualdade:**EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL
+ **Aritméticos:** ADICIONAR, SUBTRAIR, MULTIPLICAR, DIVIDIR, MÓDULO, NEGAR
+ **Outros:**LIKE\$1PATTERN, IN

### Exemplo de passagem direta combinada
<a name="connectors-teradata-performance-pushdown-example"></a>

Para ter recursos aprimorados de consulta, combine os tipos de passagem direta, como no seguinte exemplo:

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d)) 
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');
```

## Consultas de passagem
<a name="connectors-teradata-passthrough-queries"></a>

O conector Teradata é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Teradata, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Teradata. A consulta seleciona todas as colunas na tabela `customer`.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer'
        ))
```

## Informações de licença
<a name="connectors-teradata-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-teradata-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/pom.xml) do conector Teradata em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-teradata) em GitHub.com.

# Conector do Amazon Athena para o Timestream
<a name="connectors-timestream"></a>

O conector do Amazon Athena para o Timestream permite que o Amazon Athena se comunique com [Amazon Timestream](https://aws.amazon.com/timestream/), tornando seus dados de séries temporais acessíveis pelo Amazon Athena. Se preferir, use o AWS Glue Data Catalog como uma fonte de metadados complementares.

O Amazon Timestream é um banco de dados de séries temporais rápido, escalável, totalmente gerenciado e criado para fins específicos que facilita o armazenamento e a análise de trilhões de pontos de dados de séries temporais por dia. O Timestream economiza tempo e custo de gerenciamento do ciclo de vida dos dados de séries temporais mantendo os dados recentes na memória e movendo os dados históricos para um nível de armazenamento com otimização de custo conforme as políticas definidas pelo usuário.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

Se você tiver o Lake Formation habilitado em sua conta, o perfil do IAM para seu conector Lambda federado para Athena que você implantou no AWS Serverless Application Repository deve ter acesso de leitura ao AWS Glue Data Catalog no Lake Formation.

## Pré-requisitos
<a name="connectors-timestream-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-timestream-parameters"></a>

Use os parâmetros nesta seção para configurar o conector Timestream.

### Conexões do Glue (recomendação)
<a name="connectors-timestream-gc"></a>

Recomendamos que você configure um conector do Timestream usando um objeto de conexão do Glue. Para fazer isso, defina a variável de ambiente `glue_connection` da função do Lambda para o conector do Timestream com o nome da conexão do Glue que deseja usar.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type TIMESTREAM
```

**Propriedades do ambiente do Lambda**

**glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Timestream criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Timestream criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-timestream-legacy"></a>

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.

Os nomes dos parâmetros e suas definições listados abaixo referem-se a conectores de fonte de dados do Athena criados sem uma conexão do Glue associada. Os parâmetros apresentados abaixo devem ser usados somente quando você [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena ou quando a propriedade de ambiente `glue_connection` não for especificada.

**Propriedades do ambiente do Lambda**
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar a performance, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **glue\$1catalog**: (opcional) use essa opção para especificar um [catálogo do AWS Glue entre contas](data-sources-glue-cross-account.md). Por padrão, o conector tenta obter metadados de sua própria conta do AWS Glue.

## Configuração de bancos de dados e tabelas no AWS Glue
<a name="connectors-timestream-setting-up-databases-and-tables-in-aws-glue"></a>

Se preferir, use o AWS Glue Data Catalog como uma fonte de metadados complementares. Para habilitar uma tabela do AWS Glue para uso com o Timestream, é preciso ter um banco de dados do AWS Glue e uma tabela com nomes que correspondam ao banco de dados Timestream e à tabela para a qual você deseja fornecer metadados complementares.

**nota**  
Para obter a melhor performance, use somente letras minúsculas para nomes de banco de dados e nomes de tabela. O uso de maiúsculas e minúsculas mistas faz com que o conector execute uma pesquisa que não diferencia maiúsculas de minúsculas e é mais computacionalmente intensiva.

Para configurar a tabela do AWS Glue para uso com o Timestream é preciso definir suas propriedades de tabela em AWS Glue.

**Para usar uma tabela do AWS Glue para metadados complementares**

1. Edite a tabela no console do AWS Glue para adicionar as seguintes propriedades da tabela:
   + **timestream-metadata-flag**: essa propriedade indica ao conector Timestream que o conector pode usar a tabela para metadados complementares. É possível fornecer qualquer valor para `timestream-metadata-flag`, desde que a propriedade `timestream-metadata-flag` esteja presente na lista de propriedades da tabela.
   + **\$1view\$1template**: quando você usa o AWS Glue para metadados complementares, é possível usar essa propriedade da tabela e especificar qualquer Timestream SQL como visualização. O conector Timestream do Athena usa o SQL da visualização junto com o SQL do Athena para executar sua consulta. Isso é útil se você quiser usar um recurso do Timestream SQL que, de outra forma, não está disponível no Athena.

1. Use os tipos de dados apropriados para o AWS Glue, conforme listado neste documento.

### Tipos de dados
<a name="connectors-timestream-data-types"></a>

Atualmente, o conector Timestream oferece suporte somente a um subconjunto dos tipos de dados disponíveis no Timestream, especificamente: os valores escalares `varchar`, `double` e `timestamp`.

Para consultar o tipo de dados da `timeseries`, é preciso configurar uma visualização nas propriedades da tabela do AWS Glue que use a função `CREATE_TIME_SERIES` do Timestream. Você também precisa fornecer um esquema para a visualização que use a sintaxe `ARRAY<STRUCT<time:timestamp,measure_value::double:double>>` como o tipo de qualquer uma de suas colunas de séries temporais. Certifique-se de substituir `double` pelo tipo escalar apropriado para sua tabela.

A imagem a seguir mostra um exemplo de propriedades da tabela do AWS Glue configuradas para definir uma visualização sobre uma série temporal.

![\[Configuração de propriedades de tabelas no AWS Glue para definir uma visualização de uma série temporal.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-timestream-1.png)


## Permissões obrigatórias
<a name="connectors-timestream-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-timestream.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-timestream/athena-timestream.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.
+ **AWS Glue Data Catalog**: o conector Timestream requer acesso somente de leitura ao AWS Glue Data Catalog para obter informações do esquema.
+ **CloudWatch Logs**: o conector requer acesso ao CloudWatch Logs para armazenar registros.
+ **Acesso ao Timestream**: para executar consultas no Timestream.

## desempenho
<a name="connectors-timestream-performance"></a>

Recomendamos o uso da cláusula `LIMIT` para limitar os dados retornados (não os dados verificados) a menos de 256 MB com a finalidade de garantir que as consultas interativas tenham uma boa performance.

O conector do Athena para o Timestream realiza a passagem direta de predicados para diminuir os dados examinados pela consulta. As cláusulas `LIMIT` reduzem a quantidade de dados examinados, mas, se você não fornecer um predicado, deverá esperar que as consultas `SELECT` com uma cláusula `LIMIT` examinem, pelo menos, 16 MB de dados. A seleção de um subconjunto de colunas acelera o runtime da consulta e reduz os dados verificados de forma significativa. O conector Timestream é resiliente ao controle de utilização devido à simultaneidade.

## Consultas de passagem
<a name="connectors-timestream-passthrough-queries"></a>

O conector Timestream é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Timestream, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Timestream. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-timestream-license-information"></a>

O projeto do conector Timestream do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-timestream-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-timestream) em GitHub.com.

# Conector do Amazon Athena para o TPC Benchmark DS (TPC-DS)
<a name="connectors-tpcds"></a>

O conector TPC-DS no Amazon Athena permite que o Amazon Athena se comunique com uma fonte de dados do TPC Benchmark DS gerada aleatoriamente para uso em benchmarking e testes funcionais do Athena Federation. O conector TPC-DS no Athena gera um banco de dados compatível com TPC-DS em um dos quatro fatores de escala. Não recomendamos o uso desse conector como alternativa aos testes de desempenho de data lake baseados no Amazon S3.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-tpcds-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).

## Parâmetros
<a name="connectors-tpcds-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do TPC-DS.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-tpcds-gc"></a>

Recomendamos que você configure um conector do TPC-DS usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do TPC-DS como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type TPCDS
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do TPC-DS criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do TPC-DS criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-tpcds-legacy"></a>
+ **spill\$1bucket**: especifica o bucket do Amazon S3 para dados que excedem os limites da função do Lambda.
+ **spill\$1prefix**: (opcional) assume como padrão uma subpasta no `spill_bucket` especificado chamado `athena-federation-spill`. Recomendamos que você configure um [ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3 neste local para excluir derramamentos anteriores a um número predeterminado de dias ou horas.
+ **spill\$1put\$1request\$1headers**: (opcional) um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação `putObject` do Amazon S3 usada para o derramamento (por exemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na *Referência da API do Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (opcional) por padrão, todos os dados transmitidos para o Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente. Para que sua função do Lambda use chaves de criptografia mais fortes geradas pelo KMS, como `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, é possível especificar um ID de chave do KMS.
+ **disable\$1spill\$1encryption**: (opcional) quando definido como `True`, desativa a criptografia do derramamento. É padronizado como `False`, para que os dados transmitidos para o S3 sejam criptografados usando o AES-GCM — usando uma chave gerada aleatoriamente ou o KMS para gerar chaves. Desativar a criptografia do derramamento pode melhorar o desempenho, especialmente se o local do derramamento usar [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

## Teste de bancos de dados e tabelas
<a name="connectors-tpcds-test-databases-and-tables"></a>

O conector TPC-DS no Athena gera um banco de dados compatível com TPC-DS em um dos quatro fatores de escala `tpcds1`, `tpcds10`, `tpcds100`, `tpcds250` ou `tpcds1000`.

### Resumo de tabelas
<a name="connectors-tpcds-table-summary"></a>

Para obter uma lista completa de tabelas e colunas de dados de teste, execute a consulta `SHOW TABLES` ou `DESCRIBE TABLE`. O resumo de tabelas a seguir é fornecido para sua conveniência.

1. call\$1center

1. catalog\$1page

1. catalog\$1returns

1. catalog\$1sales

1. customer

1. customer\$1address

1. customer\$1demographics

1. date\$1dim

1. dbgen\$1version

1. household\$1demographics

1. income\$1band

1.  Inventory

1. item

1. promotion

1. reason

1. ship\$1mode

1. armazenamento

1. store\$1returns

1. store\$1sales

1. time\$1dim

1. warehouse

1. web\$1page

1. web\$1returns

1. web\$1sales

1. web\$1site

Para consultas do TPC-DS que sejam compatíveis com esse esquema e dados gerados, consulte o diretório [athena-tpcds/src/main/resources/query](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-tpcds/src/main/resources/queries) no GitHub.

### Consulta de exemplo
<a name="connectors-tpcds-example-query"></a>

O exemplo de consulta `SELECT` a seguir consulta o catálogo `tpcds` para dados demográficos de clientes em países específicos.

```
SELECT
  cd_gender,
  cd_marital_status,
  cd_education_status,
  count(*) cnt1,
  cd_purchase_estimate,
  count(*) cnt2,
  cd_credit_rating,
  count(*) cnt3,
  cd_dep_count,
  count(*) cnt4,
  cd_dep_employed_count,
  count(*) cnt5,
  cd_dep_college_count,
  count(*) cnt6
FROM
  "lambda:tpcds".tpcds1.customer c, "lambda:tpcds".tpcds1.customer_address ca, "lambda:tpcds".tpcds1.customer_demographics
WHERE
  c.c_current_addr_sk = ca.ca_address_sk AND
    ca_county IN ('Rush County', 'Toole County', 'Jefferson County',
                  'Dona Ana County', 'La Porte County') AND
    cd_demo_sk = c.c_current_cdemo_sk AND
    exists(SELECT *
           FROM "lambda:tpcds".tpcds1.store_sales, "lambda:tpcds".tpcds1.date_dim
           WHERE c.c_customer_sk = ss_customer_sk AND
             ss_sold_date_sk = d_date_sk AND
             d_year = 2002 AND
             d_moy BETWEEN 1 AND 1 + 3) AND
    (exists(SELECT *
            FROM "lambda:tpcds".tpcds1.web_sales, "lambda:tpcds".tpcds1.date_dim
            WHERE c.c_customer_sk = ws_bill_customer_sk AND
              ws_sold_date_sk = d_date_sk AND
              d_year = 2002 AND
              d_moy BETWEEN 1 AND 1 + 3) OR
      exists(SELECT *
             FROM "lambda:tpcds".tpcds1.catalog_sales, "lambda:tpcds".tpcds1.date_dim
             WHERE c.c_customer_sk = cs_ship_customer_sk AND
               cs_sold_date_sk = d_date_sk AND
               d_year = 2002 AND
               d_moy BETWEEN 1 AND 1 + 3))
GROUP BY cd_gender,
  cd_marital_status,
  cd_education_status,
  cd_purchase_estimate,
  cd_credit_rating,
  cd_dep_count,
  cd_dep_employed_count,
  cd_dep_college_count
ORDER BY cd_gender,
  cd_marital_status,
  cd_education_status,
  cd_purchase_estimate,
  cd_credit_rating,
  cd_dep_count,
  cd_dep_employed_count,
  cd_dep_college_count
LIMIT 100
```

## Permissões obrigatórias
<a name="connectors-tpcds-required-permissions"></a>

Os detalhes completos sobre as políticas do IAM exigidas por esse conector podem ser encontrados na seção `Policies` do arquivo [athena-tpcds.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-tpcds/athena-tpcds.yaml). A lista a seguir resume as permissões necessárias.
+ **Acesso de gravação do Amazon S3**: o conector requer acesso de gravação a um local no Amazon S3 para mostrar resultados de grandes consultas.
+ **Athena GetQueryExecution**: o conector usa esta permissão para falhar rapidamente quando a consulta upstream do Athena é encerrada.

## desempenho
<a name="connectors-tpcds-performance"></a>

O conector TPC-DS do Athena tenta paralelizar as consultas com base no fator de escala que você escolher. A redução de predicados é realizada dentro da função do Lambda.

## Informações de licença
<a name="connectors-tpcds-license-information"></a>

O projeto do conector TPC-DS do Amazon Athena é licenciado sob a [Licença Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionais
<a name="connectors-tpcds-additional-resources"></a>

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-tpcds) em GitHub.com.

# Conector do Amazon Athena para o Vertica
<a name="connectors-vertica"></a>

O Vertica é uma plataforma de banco de dados em colunas que pode ser implantada na nuvem ou on-premises e que oferece suporte a data warehouses em escala de exabytes. Você pode usar o conector do Vertica para Amazon Athena em consultas federadas para consultar origens de dados do Vertica usando o Athena. Por exemplo, você pode executar consultas analíticas em um data warehouse no Vertica e um data lake no Amazon S3.

Esse conector não usa o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

## Pré-requisitos
<a name="connectors-vertica-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-vertica-limitations"></a>
+ Como o conector Vertica do Athena lê arquivos exportados Parquet do Amazon S3, o desempenho do conector pode ser lento. Ao consultar tabelas grandes, recomendamos usar uma consulta [CREATE TABLE AS (SELECT ...)](ctas.md) e predicados de SQL.
+ Atualmente, devido a um problema conhecido na consulta federada do Athena, o conector faz com que o Vertica exporte todas as colunas da tabela consultada para o Amazon S3, mas somente as colunas consultadas estão visíveis nos resultados no console do Athena.
+ Não há suporte para operações de gravação de DDL.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.

## Fluxo de trabalho
<a name="connectors-vertica-workflow"></a>

O diagrama a seguir mostra o fluxo de trabalho de uma consulta que use o conector Vertica.

![\[Fluxo de trabalho de uma consulta Vertica do Amazon Athena\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-vertica-1.png)


1. Uma consulta SQL é emitida em uma ou mais tabelas no Vertica.

1. O conector analisa a consulta SQL para enviar a parte relevante para o Vertica por meio da conexão do JDBC.

1. As strings de conexão usam o nome de usuário e a senha armazenados no AWS Secrets Manager para obter acesso ao Vertica.

1. O conector envolve a consulta SQL com um comando `EXPORT` do Vertica, como no exemplo a seguir.

   ```
   EXPORT TO PARQUET (directory = 's3://amzn-s3-demo-bucket/folder_name, 
      Compression='Snappy', fileSizeMB=64) OVER() as 
   SELECT
   PATH_ID,
   ...
   SOURCE_ITEMIZED,
   SOURCE_OVERRIDE
   FROM DELETED_OBJECT_SCHEMA.FORM_USAGE_DATA
   WHERE PATH_ID <= 5;
   ```

1. O Vertica processa a consulta SQL e envia o conjunto de resultados para um bucket do Amazon S3. Para uma melhor throughput, o Vertica usa a opção `EXPORT` para paralelizar a operação de gravação de vários arquivos Parquet.

1. O Athena examina o bucket do Amazon S3 para determinar o número de arquivos a serem lidos para o conjunto de resultados.

1. O Athena faz várias chamadas para a função do Lambda e usa o Apache `ArrowReader` para ler os arquivos Parquet do conjunto de resultados. Várias chamadas permitem que o Athena paralelize a leitura dos arquivos do Amazon S3 e alcance uma throughput de até 100 GB por segundo.

1. O Athena processa os dados retornados do Vertica com dados examinados do data lake e retorna o resultado.

## Termos
<a name="connectors-vertica-terms"></a>

Os termos a seguir estão relacionados ao conector Vertica.
+ **Instância do banco de dados**: qualquer instância de um banco de dados Vertica implantado no Amazon EC2.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.

## Parâmetros
<a name="connectors-vertica-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Vertica.

### Conexões do Glue (recomendação)
<a name="connectors-vertica-gc"></a>

Recomendamos que você configure um conector do Vertica usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Vertica como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type VERTICA
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Vertica criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Vertica criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-vertica-legacy"></a>

O conector do Amazon Athena para o Vertica expõe as opções de configuração por meio das variáveis de ambiente do Lambda. É possível usar as seguintes variáveis de ambiente do Lambda para definir o conector. 
+  **AthenaCatalogName**: nome da função do Lambda 
+  **ExportBucket**: o bucket do Amazon S3 para onde os resultados de consultas do Vertica são exportados. 
+  **SpillBucket**: o nome do bucket do Amazon S3 no qual essa função pode derramar dados. 
+  **SpillPrefix**: o prefixo para a localização do `SpillBucket` onde essa função pode derramar dados. 
+  **SecurityGroupIds**: um ou mais IDs que correspondem ao grupo de segurança que deve ser aplicado à função do Lambda (por exemplo, `sg1`, `sg2` ou `sg3`). 
+  **SubnetIds**: uma ou mais IDs de sub-rede que correspondem à sub-rede que a função do Lambda pode usar para acessar sua fonte de dados (por exemplo, `subnet1` ou `subnet2`). 
+  **SecretNameOrPrefix**: o nome ou prefixo de um conjunto de nomes no Secrets Manager ao qual essa função tem acesso (por exemplo, `vertica-*`) 
+  **VerticaConnectionString**: os detalhes da conexão do Vertica a serem usados por padrão se nenhuma conexão específica do catálogo for definida. A string pode opcionalmente usar a sintaxe do AWS Secrets Manager (por exemplo, `${secret_name}`). 
+  **VPC ID**: o ID da VPC a ser associada à função do Lambda. 

#### String de conexão
<a name="connectors-vertica-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
vertica://jdbc:vertica://host_name:
                        port/database?user=vertica-username&password=
                        vertica-password
```

#### Uso de um único manipulador de conexão
<a name="connectors-vertica-using-a-single-connection-handler"></a>

É possível usar os seguintes metadados de conexão única e manipuladores de registros para se conectar a uma única instância do Vertica.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | VerticaCompositeHandler | 
| Manipulador de metadados | VerticaMetadataHandler | 
| Manipulador de registros | VerticaRecordHandler | 

#### Parâmetros do manipulador de conexão única
<a name="connectors-vertica-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

#### Fornecimento de credenciais
<a name="connectors-vertica-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nomes secretos**  
A string a seguir tem os nomes secretos \$1\$1`vertica-username`\$1 e `${vertica-password}`. 

```
vertica://jdbc:vertica://
                        host_name:port/database?user=${vertica-username}&password=${vertica-password}
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
vertica://jdbc:vertica://
                        host_name:port/database?user=sample-user&password=sample-password
```

Atualmente, o conector Vertica reconhece as propriedades `vertica-username` e `vertica-password` do JDBC. 

#### Parâmetros de derramamento
<a name="connectors-vertica-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-vertica-data-type-support"></a>

A tabela a seguir mostra os tipos de dados com suporte pelo conector Vertica.


****  

| Booleano | 
| --- | 
| BigInt | 
| Short | 
| Inteiro | 
| Longo | 
| Float | 
| Duplo | 
| Data | 
| Varchar | 
| Bytes | 
| BigDecimal | 
| TimeStamp como Varchar | 

## desempenho
<a name="connectors-vertica-performance"></a>

A função do Lambda realiza o empilhamento de projeções para diminuir os dados verificados pela consulta. As cláusulas `LIMIT` reduzem a quantidade de dados verificados, mas se você não fornecer um predicado, deverá aguardar que as consultas `SELECT` com uma cláusula `LIMIT` verifiquem, no mínimo, 16 MB de dados. O conector Vertica é resiliente ao controle de utilização devido à simultaneidade.

## Consultas de passagem
<a name="connectors-vertica-passthrough-queries"></a>

O conector Vertica é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Vertica, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Vertica. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-vertica-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-vertica-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/pom.xml) do conector Vertica em GitHub.com.

Para obter mais informações sobre esse conector, consulte [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-vertica) em GitHub.com e [Consulta de uma fonte de dados do Vertica no Amazon Athena usando o SDK Athena Federated Query](https://aws.amazon.com/blogs/big-data/querying-a-vertica-data-source-in-amazon-athena-using-the-athena-federated-query-sdk/) no *Blog de big data da AWS*.

# Criar uma conexão de fonte de dados
<a name="connect-to-a-data-source"></a>

Para usar um conector de fonte de dados do Athena, você cria a conexão AWS Glue que armazena as informações de conexão sobre o conector e sua fonte de dados. Ao criar a conexão, você informa à fonte de dados um nome que usará para fazer referência à sua fonte de dados em suas consultas SQL.

É possível criar e configurar uma conexão de fonte de dados no Athena usando o [console](connect-to-a-data-source-console-steps.md) ou as operações da API [CreateDataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html).

**Topics**
+ [

# Permissões para criar e usar uma fonte de dados no Athena
](connect-to-a-data-source-permissions.md)
+ [

# Usar o console do Athena para conectar a uma fonte de dados
](connect-to-a-data-source-console-steps.md)
+ [

# Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados
](connect-data-source-serverless-app-repo.md)
+ [

# Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue
](athena-connectors-vpc-creation.md)
+ [

# Extrair imagens do ECR para sua conta da AWS
](pull-ecr-customer-account.md)
+ [

# Registrar sua conexão como um Glue Data Catalog
](register-connection-as-gdc.md)
+ [

# Habilitar consultas federadas entre contas
](xacct-fed-query-enable.md)
+ [

# Atualizar um conector de fonte de dados
](connectors-updating.md)

# Permissões para criar e usar uma fonte de dados no Athena
<a name="connect-to-a-data-source-permissions"></a>

Para criar e usar uma fonte de dados, você precisa dos seguintes conjuntos de permissões.
+ AmazonAthenaFullAccess, que fornece acesso total ao Amazon Athena e acesso limitado às dependências necessárias para permitir a consulta, a gravação de resultados e o gerenciamento de dados. Para obter mais informações, consulte [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) no Guia de referência de política gerenciada da AWS.
+ Permissões para chamar a API CreateDataCatalog. Essas permissões só são necessárias quando você cria uma fonte de dados que se integra às conexões do Glue. Para obter mais informações sobre o exemplo de política, consulte [Permissões necessárias para criar o conector e o catálogo do Athena](athena-catalog-access.md).
+ Se quiser usar o controle de acesso refinado do Lake Formation, além das permissões listadas acima, você também precisará das seguintes permissões.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:RegisterResource",
          "iam:ListRoles",
          "glue:CreateCatalog",
          "glue:GetCatalogs",
          "glue:GetCatalog"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

------

# Usar o console do Athena para conectar a uma fonte de dados
<a name="connect-to-a-data-source-console-steps"></a>

Você pode usar o console do Athena para criar e configurar uma conexão de fonte de dados.

**Criar uma conexão com uma fonte de dados**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Em **Choose a data source** (Escolher uma origem dos dados), escolha a origem dos dados que o Athena deve consultar, considerando as seguintes diretrizes:
   + Escolha uma opção de conexão que corresponda à sua fonte de dados. O Athena tem conectores de origem dos dados pré-criados que você pode configurar para origens que incluem o MySQL, o Amazon DocumentDB e o PostgreSQL.
   + Escolha **S3 - AWS Glue Data Catalog** se quiser consultar dados no Amazon S3 e não estiver usando um metastore do Apache Hive ou uma das outras opções de origem dos dados de consulta federada nesta página. O Athena usa o AWS Glue Data Catalog para armazenar metadados e informações de esquemas para origens dos dados no Amazon S3. Essa é a opção padrão (não federada). Para obter mais informações, consulte [Usar o AWS Glue Data Catalog para se conectar aos seus dados](data-sources-glue.md). Para ver as etapas de uso desse fluxo de trabalho, consulte [Registrar e usar catálogos de dados no Athena](gdc-register.md).
   + Selecione **S3 - Apache Hive metastore** para consultar conjuntos de dados no Amazon S3 que usam um metastore do Apache Hive. Para obter mais informações sobre essa opção, consulte [Conectar o Athena a um metastore do Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md).
   + Escolha **Custom or shared connector** (Conector personalizado ou compartilhado) se quiser criar seu próprio conector de origem dos dados para usar com o Athena. Para obter informações sobre como escrever um conector de origem dos dados, consulte [Desenvolver um conector de fonte de dados com uso do SDK do Athena Query Federation](connect-data-source-federation-sdk.md).

1. Escolha **Próximo**.

1. Na página **Inserir detalhes da fonte de dados**, em **Nome da fonte de dados**, insira o nome gerado automaticamente ou um nome exclusivo que deseja usar em suas instruções SQL ao consultar a fonte de dados usando o Athena. O nome pode ter até 127 caracteres e deve ser exclusivo na sua conta. Ele não poderá ser alterado após a criação. Os caracteres válidos são a-z, A-Z, 0-9, \$1 (sublinhado), @ (arroba) e - (hífen). Os nomes `awsdatacatalog`, `hive`, `jmx` e `system` são reservados pelo Athena e não podem ser usados como nomes de origens dos dados. 

1. Se a fonte de dados escolhida tiver integração com conexões do AWS Glue.

   1. Em **obter detalhes da conexão do AWS Glue**, insira as informações necessárias. Uma conexão que contém as propriedades necessárias para se conectar a uma fonte de dados específica. As propriedades necessárias variam de acordo com o tipo de conexão. Para obter mais informações sobre propriedades relacionadas ao seu conector, consulte [Conectores de fonte de dados disponíveis](connectors-available.md). Para obter informações sobre propriedades adicionais de conexão, consulte [Propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) no *Guia do usuário do AWS Glue*.
**nota**  
Quando você atualiza as propriedades de conexão do Glue, o conector Lambda precisa ser reiniciado para obter as propriedades atualizadas. Para fazer isso, edite as propriedades do ambiente e salve-as sem alterar efetivamente nada. 
Quando você atualizar uma conexão do Glue, as propriedades a seguir não serão atualizadas automaticamente na função do Lambda correspondente. Você deverá atualizar manualmente sua função do Lambda para essas propriedades.  
Configuração de VPC do Lambda: `security_group_ids`, `subnet_ids`
Perfil de execução do Lambda: `spill_bucket`, `secret_name`, `spill_kms_key_id`

   1. Em **Perfil do IAM de execução do Lambda**, escolha uma das seguintes opções:
      + **Criar e usar um novo perfil de execução**: (Padrão) o Athena cria um perfil de execução que será usado para acessar recursos no AWS Lambda em seu nome. O Athena exige esse perfil para criar sua fonte de dados federada.
      + **Usar um perfil de execução existente**: use essa opção para escolher um perfil de execução existente. Para essa opção, escolha o perfil de execução que deseja usar no menu suspenso **Perfil de execução**.

1. Se a fonte de dados escolhida não tiver integração com conexões do AWS Glue. 

   1. Em **Lambda function** (Função do Lambda), escolha **Create Lambda function** (Criar função do Lambda). A página de função do conector escolhido será aberta no console do AWS Lambda. A página inclui informações detalhadas sobre o conector.

   1. Em **Application settings** (Configurações da aplicação), leia atentamente a descrição de cada configuração de aplicação e insira os valores de acordo com os seus requisitos.

      As configurações de aplicação exibidas variam dependendo do conector da sua origem dos dados. As configurações mínimas necessárias são:
      + **AthenaCatalogName**: um nome para a função do Lambda, em letras minúsculas, que indica a origem dos dados desejada, como `cloudwatchlogs`.
      + **SpillBucket**: um bucket do Amazon S3 em sua conta para armazenar os dados que excedem os limites de tamanho de resposta da função do Lambda.
**nota**  
Dados derramados não serão reutilizados em execuções subsequentes e poderão ser excluídos com segurança. O Athena não os exclui para você. Para gerenciar esses objetos, considere adicionar uma política de ciclo de vida de objetos que exclua dados antigos do seu bucket de derramamento do Amazon S3. Para obter mais informações, consulte [Gerenciar o ciclo de vida dos objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) no Guia do usuário do Amazon S3.

   1. Selecione **Reconheço que este aplicativo cria perfis personalizadas do IAM e políticas de recursos**. Para obter mais informações, escolha o link **Informações**.

   1. Escolha **Implantar**. Quando a implantação for concluída, a função do Lambda será exibida seção **Resources** (Recursos) no console do Lambda.

      Depois de implantar o conector da origem dos dados em sua conta, você poderá conectar o Athena a ele.

   1. Retorne à página **Enter data source details** (Inserir detalhes da origem dos dados) do console do Athena.

   1. Na seção **Connection details** (Detalhes da conexão), escolha o ícone de atualização ao lado da caixa de pesquisa **Select or enter a Lambda function** (Selecionar ou inserir uma função do Lambda).

   1. Escolha o nome da função que você acabou de criar no console do Lambda. O ARN da função do Lambda é exibido.

1. (Opcional) Para **Tags**, adicione pares de chave-valor a associar com essa origem dos dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, revise os detalhes da fonte de dados. Para fazer alterações, escolha **Editar**. 

1. Leia as informações em **O Athena criará recursos em sua conta**. Se você concordar, selecione **Reconheço que o Athena criará recursos em meu nome**.

1. Escolha **Criar fonte de dados**. O **Athena** criará os seguintes recursos para você.
   + Perfil do IAM de execução do Lambda
   + Conexão do AWS Glue (somente se a fonte de dados for compatível com conexões do AWS Glue)
   + Função do Lambda

A seção **Data source details** (Detalhes da origem dos dados) da página de sua origem dos dados mostra informações sobre o novo conector. Agora é possível usar o conector em suas consultas do Athena. 

Para obter informações sobre como usar conectores de dados em consultas, acesse [Executar consultas federadas](running-federated-queries.md).

# Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados
<a name="connect-data-source-serverless-app-repo"></a>

Para implantar um conector de fonte de dados, você pode usar o [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) em vez de usar uma conexão do AWS Glue.

**nota**  
Recomendamos que você só use o SAR se tiver um conector personalizado ou precisar usar um conector mais antigo. Caso contrário, recomenda-se usar o console do Athena. 

É possível recorrer ao AWS Serverless Application Repository para encontrar o conector que deseja usar, fornecer os parâmetros que o conector exige e implantar o conector em sua conta. Depois de implantar o conector, você usa o console do Athena para disponibilizar a origem dos dados para o Athena.

## Implantar o conector em sua conta
<a name="connect-data-source-serverless-app-repo-deploying"></a>

**Como usar o AWS Serverless Application Repository para implantar um conector de fonte de dados em sua conta**

1. Faça login no Console de gerenciamento da AWS e abra o **Repositório de aplicativos sem servidor**.

1. No painel de navegação, escolha **Aplicativos disponíveis**.

1. Selecione a opção **Show apps that create custom IAM roles or resource policies** (Mostrar aplicações que criam funções personalizadas do IAM ou políticas de recursos).

1. Na caixa de pesquisa, digite o nome do conector. Para obter uma lista de conectores de dados predefinidos do Athena, consulte [Conectores de fonte de dados disponíveis](connectors-available.md).

1. Escolha o nome do conector. Ao escolher um conector, a página **Application details** (Detalhes da aplicação) da função do Lambda no console do AWS Lambda é aberta.

1. No lado direito da página de detalhes, em **Application settings** (Configurações da aplicação), preencha as informações necessárias. As configurações mínimas necessárias são mostradas a seguir. Para obter informações sobre as opções configuráveis restantes de conectores de dados criados pelo Athena, consulte o tópico [Available Connectors](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) (Conectores disponíveis) no GitHub.
   + **AthenaCatalogName**: um nome para a função do Lambda em letras minúsculas que indica a origem dos dados desejada, como `cloudwatchlogs`.
   + **SpillBucket**: especifique um bucket do Amazon S3 em sua conta para receber os dados de qualquer carga útil de resposta grande que exceda os limites de tamanho de resposta da função do Lambda.

1. Selecione **I acknowledge that this app creates custom IAM roles and resource policies** (Reconheço que este aplicativo cria funções personalizadas do IAM e políticas de recursos). Para obter mais informações, escolha o link **Informações**.

1. Na parte inferior direita da página **Configurações da aplicação** selecione **Implantar**. Quando a implantação for concluída, a função do Lambda será exibida seção **Resources** (Recursos) no console do Lambda.

## Disponibilizar o conector no Athena
<a name="connect-data-source-serverless-app-repo-making-the-connector-available-in-athena"></a>

Agora você já pode usar o console do Athena para disponibilizar o conector da origem dos dados para o Athena.

**Para disponibilizar o conector da origem dos dados para o Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Em **Choose a data source** (Escolher uma origem dos dados), escolha a origem dos dados para a qual você criou um conector no AWS Serverless Application Repository. Este tutorial usa o **Amazon CloudWatch Logs** como origem dos dados federada.

1. Escolha **Próximo**.

1. Na página **Enter data source details** (Inserir detalhes da origem dos dados), em **Data source name** (Nome da origem dos dados), insira o nome que deseja usar em suas instruções SQL ao consultar a origem dos dados pelo Athena (por exemplo, `CloudWatchLogs`). O nome pode ter até 127 caracteres e deve ser exclusivo na sua conta. Ele não poderá ser alterado após a criação. Os caracteres válidos são a-z, A-Z, 0-9, \$1 (sublinhado), @ (arroba) e - (hífen). Os nomes `awsdatacatalog`, `hive`, `jmx` e `system` são reservados pelo Athena e não podem ser usados como nomes de origens dos dados. 

1. Na seção **Connection details** (Detalhes da conexão), use a caixa **Select or enter a Lambda function** (Selecionar ou inserir uma função do Lambda) para escolher o nome da função que você acabou de criar. O ARN da função do Lambda é exibido.

1. (Opcional) Para **Tags**, adicione pares de chave-valor a associar com essa origem dos dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise os detalhes da origem dos dados e escolha **Create data source** (Criar origem dos dados). 

1. A seção **Data source details** (Detalhes da origem dos dados) da página de sua origem dos dados mostra informações sobre o novo conector. Agora é possível usar o conector em suas consultas do Athena. 

   Para obter informações sobre como usar conectores de dados em consultas, acesse [Executar consultas federadas](running-federated-queries.md).

# Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue
<a name="athena-connectors-vpc-creation"></a>

Alguns conectores de fonte de dados do Athena e conexões do AWS Glue exigem uma VPC e um grupo de segurança. Este tópico mostra como criar uma VPC com uma sub-rede e um grupo de segurança para a VPC. Como parte desse processo, você recupera os IDs da VPC, da sub-rede e do grupo de segurança criados. Esses IDs são necessários quando você configura sua conexão do AWS Glue ou o conector da fonte de dados para uso com o Athena.

**Para criar uma VPC para um conector de origem de dados do Athena**

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC, em [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. Escolha **Criar VPC**.

1. Na página **Criar VPC**, em **Configurações da VPC**, para **Recursos a criar**, escolha **VPC e mais**.

1. Em **Geração automática da etiqueta de nome**, para **Gerar automaticamente**, insira o valor que será usado para gerar as tags de nome para todos os recursos na VPC.

1. Escolha **Criar VPC**.

1. Quando o processo for concluído, escolha **Visualizar VPC**.

1. Na seção **Details** (Detalhes), em **VPC ID** (ID da VPC), copie o ID da VPC para referência posterior.

Agora você já pode recuperar o ID de sub-rede da VPC que acabou de criar.

**Para recuperar o ID de sub-rede da VPC**

1. No painel de navegação do console da VPC, escolha **Subnets** (Sub-redes).

1. Selecione o nome de uma sub-rede cuja coluna **VPC** tenha o ID da VPC que você anotou.

1. Na seção **Details** (Detalhes), em **Subnet ID** (ID da sub-rede), copie o ID da sub-rede para referência posterior.

Em seguida, crie um grupo de segurança para a VPC.

**Para criar um grupo de segurança para a VPC**

1. No painel de navegação do console da VPC, escolha **Security** (Segurança), **Security groups** (Grupos de segurança).

1. Escolha **Criar grupo de segurança**.

1. Na página **Create Security Group** (Criar grupo de segurança), insira as informações a seguir:
   + Em **Security group name** (Nome do grupo de segurança), insira um nome para o grupo de segurança.
   + Em **Description** (Descrição), insira uma descrição para o grupo de segurança. É necessária uma descrição.
   + Em **VPC**, escolha o ID da VPC criada por você para o conector da fonte de dados.
   + Em **Inbound rules** (Regras de entrada) e **Outbound rules** (Regras de saída), adicione todas as regras de entrada e saída que precisar.

1. Escolha **Criar grupo de segurança**.

1. Na página **Details** (Detalhes) do grupo de segurança, copie o **Security group ID** (ID do grupo de segurança) para referência posterior.

## Considerações importantes sobre o uso de VPC com os conectores do Athena
<a name="vpc-warning-instructions"></a>

As instruções a seguir se aplicam a todos os conectores do Athena, pois todos os conectores podem utilizar VPC.

**nota**  
Ao usar uma VPC com conexões do AWS Glue, será necessário configurar os seguintes endpoints do PrivateLink:  
Amazon S3
AWS Glue
AWS Secrets Manager

Como alternativa, você pode usar o acesso público à Internet, embora isso não seja recomendado por motivo de segurança.

**Atenção**  
O uso do acesso público à Internet pode expor seus recursos a riscos de segurança adicionais. É altamente recomendável usar endpoints do PrivateLink para aumentar a segurança da configuração da VPC.

# Extrair imagens do ECR para sua conta da AWS
<a name="pull-ecr-customer-account"></a>

As funções do Lambda do conector do Athena Federation usam as imagens de contêiner que estão armazenadas no repositórios do Amazon ECR gerenciados pelo Athena. Para realizar verificações de segurança nessas imagens de contêiner, você deve primeiro copiá-las para um repositório do Amazon ECR em sua conta. Esta seção fornece instruções passo a passo sobre como copiar uma imagem para o repositório e configurar a função do Lambda para usá-la.

## Pré-requisitos
<a name="pull-ecr-customer-account-prereq"></a>
+ Um conector do Athena Federation: o conector pode ser criado por meio de qualquer fonte, desde que use uma imagem de contêiner.
**nota**  
Para verificar a implantação de imagens, verifique a guia Imagem no Lambda do conector do Athena Federation
+ Docker instalado e em execução
+ AWS CLI instalada
+ Credenciais de conta com permissões de extração apropriadas

## Como transferir uma imagem
<a name="image-transfer-procedure"></a>

1. Localize o URI da imagem do Lambda do conector do Athena Federation  
**Example**  

   ```
   account_id_1.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

1. Gere um token de autenticação do Docker para a conta gerenciada pelo Athena:

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin athena-managed-registry
   ```

   Em que:
   + *regionID* é região da implantação (p. ex., us-east-1)
   + *athena-managed-registry* é a parte do registro do URI da imagem (por exemplo, account\$1id\$11.dkr. ecr.us-east-1.amazonaws.com)

1. Extraia a imagem da conta gerenciada pelo Athena:

   ```
   docker pull athenaImageURI
   ```

1. Autentique o Docker para o registro:

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin customer-registry
   ```

   Onde *customer-registry* é o registro ECR (p. ex., account\$1id\$12.dkr.ecr.us-east-1.amazonaws.com)

1. Marque a imagem extraída para a repositório:

   ```
   docker tag athenaImageURI yourImageURI
   ```

1. Extraia a imagem para o repositório:

   ```
   docker push yourImageURI
   ```

1. Atualize o conector do Athena Federation:

   1. Navegue até a função do Lambda

   1. Selecione **Implantar nova imagem**

   1. Insira o URI da nova imagem

   A imagem do conector federado do Athena agora se encontra em sua conta, o que permite que você execute varreduras de CVE na imagem.

# Registrar sua conexão como um Glue Data Catalog
<a name="register-connection-as-gdc"></a>

Após criar sua fonte de dados, você poderá usar o console do Athena para registrar sua conexão como um Glue Data Catalog. Após o registro, você poderá gerenciar seu catálogo de dados federados e habilitar um controle de acesso refinado usando o Lake Formation. Para obter mais informações, consulte [Creating a federated catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-fed-catalog-data-source.html).

É possível registrar os seguintes conectores para integração com o AWS Glue a fim de oferecer um controle de acesso refinado.
+ Redshift
+ BigQuery
+ DynamoDB (pré-visualização)
+ Snowflake (pré-visualização)
+ MySQL
+ PostgreSQL
+ AWS CMDB
+ Timestream
+ Azure Data Lake Storage
+ Azure Synapse
+ IBM Db2
+ IBM Db2 AS/400 (Db2 iSeries)
+ DocumentDB
+ Google Cloud Storage
+ HBase
+ OpenSearch
+ Oracle
+ SAP HANA
+ SQL Server
+ TPC-DS
+ Cloudera Hive
+ CloudWatch
+ Cloudwatch Metrics
+ Teradata
+ Vertica

## Pré-requisitos
<a name="register-connection-as-gdc-pre"></a>

Antes de começar, conclua os pré-requisitos a seguir.
+ Certifique-se de que você tenha os perfis e as permissões necessários para registrar locais. Para obter mais informações, consulte [Requisitos para funções usadas para registrar locais](https://docs.aws.amazon.com/lake-formation/latest/dg/registration-role.html) no Guia do desenvolvedor do AWS Lake Formation.
+ Certifique-se de que você tenha os perfis necessários para o Lake Formation. Para obter mais informações, consulte [Prerequisites for connecting the Data Catalog to external data sources](https://docs.aws.amazon.com/lake-formation/latest/dg/federated-catalog-data-connection.html) no Guia do desenvolvedor do AWS Lake Formation.
+ O perfil que você registrar no Glue deverá ter as permissões listadas no exemplo a seguir.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:GetObject"
              ],
              "Resource": [
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix/*",
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix"
              ]
          },
          {
              "Sid": "lambdainvoke",
              "Effect": "Allow",
              "Action": "lambda:InvokeFunction",
              "Resource": "arn:aws:lambda:us-east-1:111122223333:function:lambda_function_name"
          },
          {
              "Sid": "gluepolicy",
              "Effect": "Allow",
              "Action": "glue:*",
              "Resource": [
              "arn:aws:glue:us-east-1:111122223333:connection/<connection_name>",
      "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          }
      ]
  }
  ```

------
+ Você é responsável por determinar e gerenciar o acesso adequado aos dados. [Com controles de acesso refinados em consultas federadas, é recomendável usar a política gerenciada AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html). Se quiser usar sua própria política, você deverá garantir que os usuários que executam consultas federadas não tenham acesso aos seguintes recursos.
  + `lambda:InvokeFunction` no conector Lambda especificado na conexão do Glue
  + Acesso à localização do bucket de derramamento no IAM
  + Acesso à conexão do Glue associada ao seu catálogo federado
  + Perfil do Lake Formation no IAM

## Registrar sua conexão usando o console
<a name="register-connection-as-gdc-steps"></a>

**Para registrar sua conexão como um Glue Data Catalog**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na lista **Fontes de dados**, escolha a fonte de dados que você criou para abrir a página **Detalhes da fonte de dados**. 

1. Escolha **Comece a usar o AWS Lake Formation**.
**nota**  
Após escolher essa opção, você deverá gerenciar sua função do Lambda por conta própria. O Athena não excluirá sua função do Lambda.

1. Em **Nome do catálogo de dados**, forneça um nome exclusivo para seu catálogo.

1. Escolha o **Perfil do IAM do Lake Formation** que concede permissão ao Lake Formation para invocar a função do Lambda. Certifique-se de que seu perfil tenha as permissões [deste exemplo](#register-connection-as-gdc-pre).

1. Na caixa de texto, digite **confirmar** para excluir a fonte de dados do Athena e substituí-la por um registro do catálogo de dados do Glue.
**nota**  
Essa ação excluirá sua fonte de dados do Athena e criará um novo Glue Data Catalog em seu lugar. Após a conclusão desse processo, talvez seja necessário atualizar as consultas que acessam a fonte de dados para fazer referência ao catálogo de dados do Glue recém-criado.

1. Escolha **Criar catálogo e acessar o Lake Formation**. Isso vai abrir o console do Lake Formation, onde você poderá gerenciar o catálogo e conceder permissões aos usuários em catálogos, bancos de dados e tabelas.

# Habilitar consultas federadas entre contas
<a name="xacct-fed-query-enable"></a>

A consulta federada permite consultar as origens de dados que não são do Amazon S3 usando os conectores de origem de dados implantados no AWS Lambda. O recurso de consulta federada entre contas permite que a função do Lambda e as origens de dados a serem consultadas estejam localizadas em contas diferentes.

**nota**  
Só use esse método se você não tiver registrado sua fonte de dados federada com o AWS Glue Data Catalog. Se você tiver registrado sua fonte de dados no AWS Glue Data Catalog, use o modelo de recursos e permissões entre contas do AWS Glue Data Catalog. Para mais informações, consulte [Concessão de acesso entre contas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) no *Guia do usuário do AWS Glue*.

Como administrador de dados, você pode habilitar consultas federadas entre contas compartilhando seu conector de dados com uma conta de analista de dados ou, como analista de dados, usando um ARN do Lambda compartilhado de um administrador de dados para adicionar à sua conta. Quando alterações de configuração são feitas em um conector na conta de origem, a configuração atualizada é aplicada automaticamente às instâncias compartilhadas do conector nas outras contas de usuário.

## Considerações e limitações
<a name="xacct-fed-query-enable-considerations-and-limitations"></a>
+ O recurso de consulta federada entre contas está disponível para conectores de dados de metastore não Hive que usam uma origem de dados baseada no Lambda.
+ O recurso não está disponível para o tipo de origem de dados AWS Glue Data Catalog. Para obter informações sobre o acesso entre contas aos AWS Glue Data Catalogs, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).
+ Se a resposta da função do Lambda do conector excede o limite de tamanho de resposta do Lambda de 6 MB, o Athena automaticamente criptografa, agrupa e distribui a resposta para um bucket do Amazon S3 que você configurou. A entidade que executa a consulta do Athena deve ter acesso ao local do vazamento para que o Athena leia os dados vazados. Recomendamos definir uma política de ciclo de vida do Amazon S3 para excluir objetos do local do vazamento, pois os dados não serão necessários após a conclusão da consulta. 
+ Não há suporte para o uso de consultas federadas em Regiões da AWS. 

## Permissões obrigatórias
<a name="xacct-fed-query-enable-required-permissions"></a>

Para configurar as permissões necessárias, ações devem ser feitas na Conta A (*444455556666*) e na Conta B (*111122223333*).

### Ações para a Conta A
<a name="xacct-fed-query-enable-required-permissions-account-a"></a>

Para que a Conta A de administrador de dados compartilhe uma função do Lambda com a Conta B de analista de dados, a Conta B requer a função invoke do Lambda e acesso ao bucket de vazamento. Consequentemente, a Conta A deve adicionar uma [política baseada em recursos](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) à função do Lambda e acesso do [principal](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) ao bucket de vazamento no Amazon S3.

1. A política a seguir concede as permissões da função invoke do Lambda à Conta B em uma função do Lambda na conta A.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CrossAccountInvocationStatement",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:user/username"
                   ]
               },
               "Action": "lambda:InvokeFunction",
               "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name"
           }
       ]
   }
   ```

------

1. A política a seguir concede acesso ao bucket de vazamento a entidade principal na conta B. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
               "AWS": ["arn:aws:iam::111122223333:user/username"]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket"
                ],
               "Resource": [
                   "arn:aws:s3:::spill-bucket",
                   "arn:aws:s3:::spill-bucket/*"
               ]
           }
        ]
    }
   ```

------

1. Se a função do Lambda criptografar o bucket de vazamento com uma chave AWS KMS, em vez de usar a criptografia padrão oferecida pelo SDK da federação, a política de chave AWS KMS na conta A deverá conceder acesso ao usuário na Conta B, como no exemplo a seguir.

   ```
   { 
       "Sid": "Allow use of the key", 
       "Effect": "Allow", 
       "Principal": 
       { 
          "AWS": ["arn:aws:iam::account-B-id:user/username"] 
       }, 
       "Action": [ "kms:Decrypt" ], 
       "Resource": "*" // Resource policy that gets placed on the KMS key. 
    }
   ```

### Ações para a Conta B
<a name="xacct-fed-query-enable-required-permissions-account-b"></a>

Para que a Conta A compartilhe seu conector com a Conta B, a Conta B deve criar uma função chamada `AthenaCrossAccountCreate-account-A-id`, que a Conta A assume chamando a ação de API [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) do AWS Security Token Service.

1. Use o console do IAM ou a AWS CLI para criar o perfil `AthenaCrossAccountCreate-account-A-id` como um perfil de política de confiança personalizada. Uma política de confiança personalizada delega acesso e permite que outras pessoas realizem ações na sua conta da AWS. Para ver as instruções passo a passo, consulte [Criar um perfil usando políticas de confiança personalizadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html) no *Guia de Usuário do IAM*.

   A relação de confiança deve ter um objeto de entidade principal no qual a chave é `AWS` e o valor é o ARN da Conta A, como no exemplo a seguir.

   ```
   ...
   "Principal": 
   { 
      "AWS": ["arn:aws:iam::account-A-id:user/username"]
   }, 
   ...
   ```

1. Também na Conta B, crie uma política como a descrita a seguir que permita a ação `CreateDataCatalog`. 

   ```
   {
    "Effect": "Allow",
    "Action": "athena:CreateDataCatalog",
    "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*"
   }
   ```

1. Adicione ao perfil `AthenaCrossAccountCreate-account-A-id` que você criou usando a Conta B a política que permite a ação `CreateDataCatalog`. 

## Compartilhar uma origem de dados na conta A com a conta B
<a name="xacct-fed-query-enable-sharing-a-lambda-data-source-in-account-a-with-account-b"></a>

Após aplicar as permissões, você poderá usar a página **Fontes de dados e catálogos** no console do Athena para compartilhar um conector de dados em sua conta (Conta A) com outra conta (Conta B). A conta A mantém total controle e propriedade do conector. Quando a conta A faz alterações de configuração no conector, a configuração atualizada se aplica ao conector compartilhado na conta B.

**nota**  
Você só pode compartilhar uma fonte de dados do tipo Lambda e não pode compartilhar fontes de dados que usam conexões do AWS Glue. Para obter mais informações, consulte [Conectores de fonte de dados disponíveis](connectors-available.md).

**Para compartilhar uma origem de dados do Lambda na conta A com a conta B**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha o link do conector que deseja compartilhar.

1. Na página de detalhes de uma fonte de dados do Lambda, no menu **Ações**, escolha a opção **Compartilhar** no canto superior direito.

1. Na caixa de diálogo **Compartilhar *Lambda-name* com outra conta?**, insira as informações necessárias.
   + Para **Data source name** (Nome da origem dos dados), insira o nome da origem de dados copiada como você deseja que apareça na outra conta.
   + Para **Account ID**, (ID da conta), insira o ID da conta com a qual deseja compartilhar sua origem dos dados (neste caso, Conta B).

1. Selecione **Share**. O conector de dados compartilhados que você especificou é criado na Conta B. As alterações de configuração do conector na Conta A se aplicam ao conector na Conta B.

## Adicionar uma origem de dados compartilhada da conta A à conta B
<a name="xacct-fed-query-enable-add-a-shared-lambda-function-arn-to-your-account"></a>

Como analista de dados, você pode receber, de um administrador de dados, o ARN de um conector para adicionar à sua conta. Você pode usar a página **Fontes de dados e catálogos** do console do Athena para adicionar o ARN do Lambda fornecido pelo administrador à sua conta.

**Para adicionar o Lambda ARN de um conector de dados compartilhado à sua conta**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Na página **Escolha uma fonte de dados**, escolha **Conector personalizado ou compartilhado**.

1. Escolha **Próximo**.

1. Na página **Inserir detalhes da fonte de dados**, na seção **Detalhes da conexão**, em **Selecionar ou inserir uma função do Lambda**, insira o ARN do Lambda da conta A.

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, escolha **Criar fonte de dados**.

## Solução de problemas
<a name="xacct-fed-query-enable-troubleshooting"></a>

Se você receber uma mensagem de erro informando que a Conta A não tem permissões para assumir uma função na Conta B, certifique-se de que o nome da função criada na Conta B esteja escrito corretamente e ela que tenha a política adequada anexada.

# Atualizar um conector de fonte de dados
<a name="connectors-updating"></a>

O Athena recomenda atualizar regularmente os conectores da fonte de dados que você usa para a versão mais recente para aproveitar os novos recursos e aprimoramentos. A atualização um conector de fonte de dados inclui as etapas a seguir:

# Conexões do Glue (recomendação)
<a name="connectors-updating-gc"></a>

## Localizar a versão mais recente do Athena Query Federation
<a name="connectors-updating-finding-the-latest-version"></a>

O número da versão mais recente dos conectores de fonte de dados do Athena corresponde à versão mais recente do Athena Query Federation. Em certos casos, as versões do GitHub podem ser um pouco mais recentes do que as disponíveis no AWS Serverless Application Repository (SAR).

**Para localizar o número da versão mais recente do Athena Query Federation**

1. Acesse o URL do GitHub [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest).

1. Observe o número da versão no título da página principal no seguinte formato:

   **Versão v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week* **do Athena Query Federation **

   Por exemplo, o número da **versão v2023.8.3 do Athena Query Federation** é 2023.8.3.

## Descobrir a versão do conector
<a name="connectors-find-version"></a>

Siga estas etapas para determinar qual é a versão do conector que você está usando no momento.

**Para descobrir a versão do conector**

1. Na página do console do Lambda de sua aplicação do Lambda, escolha a guia **Imagem**.

1. Na guia Imagem, localize o URI da imagem. O URI tem este formato:

   ```
   Image_location_account.dkr.ecr.us-west-2.amazonaws.com/athena-federation-repository:Version
   ```

1. O número da versão no URI da imagem tem o formato `year.week_of_year.iteration_of_week` (por exemplo, `2021.42.1`). Esse número representa a versão do conector.

## Implantar uma nova versão do conector
<a name="connectors-deploy-new-version"></a>

Siga as etapas a seguir para implantar uma nova versão do conector.

**Para implantar uma nova versão de conector**

1. Encontre a versão desejada seguindo o procedimento para encontrar a versão mais recente do Athena Query Federation.

1. Na função do Lambda do conector federado, localize o ImageURI e atualize a tag para a versão desejada. Por exemplo:

   From:

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

   Para:

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.26.1
   ```

**nota**  
Se sua versão atual for anterior à 2025.15.1, preste atenção a essas mudanças importantes:  
O nome do repositório foi atualizado para `athena-federation-repository`
Para versões anteriores a essa atualização, a substituição de comando pode não estar definida. Você deve configurá-la como o manipulador composto.

# Conexões legadas
<a name="connectors-updating-legacy"></a>

## Localizar a versão mais recente do Athena Query Federation
<a name="connectors-updating-finding-the-latest-version"></a>

O número da versão mais recente dos conectores de fonte de dados do Athena corresponde à versão mais recente do Athena Query Federation. Em certos casos, as versões do GitHub podem ser um pouco mais recentes do que as disponíveis no AWS Serverless Application Repository (SAR).

**Para localizar o número da versão mais recente do Athena Query Federation**

1. Acesse o URL do GitHub [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest).

1. Observe o número da versão no título da página principal no seguinte formato:

   **Versão v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week* **do Athena Query Federation **

   Por exemplo, o número da **versão v2023.8.3 do Athena Query Federation** é 2023.8.3.

## Localizar e anotar os nomes dos recursos
<a name="connectors-updating-finding-and-noting-resource-names"></a>

Na preparação para o upgrade, é necessário localizar e anotar as seguintes informações:

1. O nome da função do Lambda para o conector.

1. As variáveis de ambiente da função do Lambda.

1. O nome da aplicação do Lambda, que gerencia a função do Lambda para o conector.

**Para localizar nomes de recursos no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na coluna **Nome da fonte de dados**, escolha o link para a fonte de dados do conector.

1. Na seção **Detalhes da fonte de dados**, em **Função do Lambda**, escolha o link para a função do Lambda.  
![\[Escolha o link da função do Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-updating-1.png)

1. Na página **Funções**, na coluna **Nome da função**, anote o nome da função do conector.  
![\[Observe o nome da função.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-updating-2.png)

1. Escolha o link do nome da função.

1. Na seção **Visão geral da função**, escolha a guia **Configuração**.

1. No painel à esquerda, escolha **Variáveis de ambiente**.

1. Na seção **Variáveis de ambiente**, anote as chaves e os valores correspondentes.

1. Mova a barra de rolagem até o topo da página.

1. Na mensagem **Esta função pertence a uma aplicação. Clique aqui para gerenciá-la**, escolha o link **Clique aqui**.

1. Na página **serverlessrepo-*your\$1application\$1name***, anote o nome da aplicação sem **serverlessrepo**. Por exemplo, se o nome da aplicação for **serverlessrepo-DynamoDbTestApp**, o nome da aplicação será **DynamoDbTestApp**.

1. Permaneça na página do console do Lambda de sua aplicação e continue com as etapas descritas em **Localizar a versão do conector que você está usando**.

## Localizar a versão do conector que está sendo usado
<a name="connectors-updating-finding-the-version-that-you-are-using"></a>

Siga estas etapas para localizar a versão do conector que você está usando.

**Para localizar a versão do conector que você está usando**

1. Na página do console do Lambda de sua aplicação do Lambda, escolha a guia **Implantações**.

1. Na guia **Implantações**, expanda o **Modelo do SAM**.

1. Pesquise **CodeUri**.

1. No campo **Chave**, em **CodeUri**, localize a seguinte string:

   ```
   applications-connector_name-versions-year.week_of_year.iteration_of_week/hash_number
   ```

   O exemplo a seguir mostra uma string do conector do CloudWatch:

   ```
   applications-AthenaCloudwatchConnector-versions-2021.42.1/15151159...
   ```

1. Registre o valor de *year*.*week\$1of\$1year*.*iteration\$1of\$1week* (por exemplo, **2021.42.1**). Esta é a versão de seu conector.

## Implantar uma nova versão do seu conector
<a name="connectors-updating-deploying-the-new-version"></a>

Siga as etapas a seguir para implantar uma nova versão do conector.

**Para implantar uma nova versão de seu conector**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Escolha a fonte de dados que deseja atualizar e escolha **Próximo**.

1. Na seção **Detalhes da conexão**, escolha **Criar função do Lambda**. Isso abre o console do Lambda, no qual você poderá implantar a aplicação atualizada.  
![\[Página do conector no console do AWS Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-updating-3.png)

1. Como você não está de fato criando uma nova fonte de dados, pode fechar a guia do console do Athena.

1. Na página do console do Lambda do conector, execute as seguintes etapas:

   1. Verifique se removeu o prefixo **serverlessrepo-** do nome da aplicação e copie o nome da aplicação no campo **Nome da aplicação**.

   1. Copie o nome da função do Lambda no campo **AthenaCatalogName**. Alguns conectores chamam esse campo de **LambdaFunctionName**.

   1. Copie as variáveis de ambiente que você registrou nos campos correspondentes.

1. Selecione a opção **Eu reconheço que esta aplicação cria perfis do IAM personalizados e políticas de recursos** e escolha **Implantar**.

1. Para verificar se a aplicação foi atualizada, escolha a guia **Implantações**.

   A seção **Histórico de implantações** mostra que sua atualização foi concluída.  
![\[Atualização do conector concluída.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connectors-updating-4.png)

1. Para confirmar o novo número da versão, você pode expandir **Modelo do SAM** como antes, localizar o **CodeUri** e verificar o número da versão do conector no campo **Chave**.

Agora é possível usar seu conector atualizado para criar consultas federadas do Athena.

# Editar ou excluir uma conexão de fonte de dados
<a name="connectors-edit-data-source"></a>

Você pode usar o console do Athena para atualizar a descrição, o host, a porta, o banco de dados e outras propriedades de uma conexão existente. Você também pode excluir as fontes de dados do console do Athena.

## Editar uma conexão de fonte de dados
<a name="connectors-edit-data-source-editsteps"></a>

**Para editar uma conexão de fonte de dados**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha a conexão de fonte de dados que deseja editar.

1. Para os **detalhes da conexão do AWS Glue**, escolha **Editar**.

1. Escolha **Próximo**.

1. Na página **Editar <nome da conexão>**, atualize as informações conforme necessário. As propriedades disponíveis dependerão do tipo de conexão.
**nota**  
Ao atualizar as propriedades de conexão para segredos, local de derramamento ou ID da chave do AWS KMS, certifique-se de que o perfil de execução do Lambda ainda tenha acesso aos recursos atualizados. Para obter mais informações, consulte [Visualizar e atualizar permissões no perfil de execução](https://docs.aws.amazon.com/lambda/latest/dg/permissions-executionrole-update.html) no Guia do desenvolvedor do AWS Lambda.
   + **Descrição**: edite a descrição de sua conexão.
   + **Host**: edite o nome de host do seu banco de dados.
   + **Porta**: edite o número da porta do seu banco de dados.
   + **Banco de dados**: edite o nome do banco de dados.
   + **Parâmetros JDBC**: edite qualquer outro parâmetro JDBC necessário para sua conexão. 
   + **Segredo**: escolha ou crie um segredo do AWS Secrets Manager. Use segredos do AWS para evitar a codificação permanente de informações confidenciais em sua string de conexão JDBC. Para ter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) Para obter informações sobre a criação de segredos no Secrets Manager, consulte [Criação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) no *Guia do usuário do AWS Secrets Manager*.

     Para usar o AWS Secrets Manager com consultas federadas do Athena, é necessário configurar um endpoint privado do Amazon VPC para o Secrets Manager. Para obter mais informações, consulte [Criação de um endpoint privado da VPC para o Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) no *Guia do usuário do AWS Secrets Manager*.
   + **Local de derramamento no Amazon S3**: escolha ou crie um local de bucket do Amazon S3 em sua conta para armazenar os dados que excedem os limites de tamanho de resposta da função do Lambda.
**nota**  
Dados derramados não são reutilizados em execuções subsequentes e podem ser excluídos com segurança depois de 12 horas. O Athena não os exclui para você. Para gerenciar esses objetos, considere adicionar uma política de ciclo de vida de objetos que exclua dados antigos do seu bucket de derramamento do Amazon S3. Para obter mais informações, consulte [Gerenciar ciclo de vida de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) no *Manual do usuário do Amazon S3*.
   + **Criptografia para resultados de consulta no S3**: escolha uma das seguintes opções:
     + (Padrão) **Usar chave gerada aleatoriamente**: os dados derramados no Amazon S3 são criptografados usando o modo de criptografia autenticado AES-GCM e uma chave gerada aleatoriamente.
     + **Usar uma chave do AWS KMS**: escolha ou crie uma chave de criptografia mais forte gerada pelo AWS KMS. Para obter mais informações, consulte [Criação de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) *Guia do desenvolvedor do AWS Key Management Service*.
     + **Desativar**: não criptografe dados de derramamento.
   + **Configurações de rede**: algumas conexões exigem uma nuvem privada virtual (VPC). Escolha ou crie uma VPC que tenha o armazenamento de dados que você deseja acessar, uma sub-rede e um ou mais grupos de segurança. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).
**nota**  
Após atualizar as propriedades de conexão para recursos como segredos, local de derramamento ou ID da chave do AWS KMS, certifique-se de que o perfil de execução do Lambda continue tendo acesso aos recursos atualizados.
Após atualizar as configurações de rede da sua conexão, certifique-se de atualizar a função do Lambda com as mesmas configurações para tornar sua conexão compatível com a fonte de dados.

   Para obter informações sobre propriedades adicionais de conexão, consulte [Propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) no *Guia do usuário do AWS Glue* ou [Conectores de fonte de dados disponíveis](connectors-available.md) no *Guia do usuário do Amazon Athena*.

1. Escolha **Salvar**.

A seção **detalhes da conexão do AWS Glue** da página de sua fonte de dados mostra as informações atualizadas do conector.

## Excluir uma fonte de dados
<a name="connectors-edit-data-source-delete"></a>

Quando você exclui uma fonte de dados, ela exclui apenas a fonte de dados do Athena e não exclui recursos como as conexões do Glue, o perfil de execução do IAM e a função do Lambda.

**Como excluir uma fonte de dados**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha a fonte de dados que deseja excluir.

1. Escolha **Excluir**.

1. Na página **Excluir fonte de dados**, digite *confirmar* para confirmar a exclusão e escolha **Excluir**. A conclusão da exclusão da fonte de dados poderá levar algum tempo. Você receberá um alerta de operação bem-sucedida quando a fonte de dados for excluída.

# Executar consultas federadas
<a name="running-federated-queries"></a>

Depois de configurar um ou mais conectores de dados e implantá-los em sua conta, você poderá usá-los nas consultas do Athena. 

## Consultar uma única fonte de dados
<a name="running-federated-queries-single-data-source"></a>

Os exemplos nesta seção pressupõem que você tenha configurado e implantado [Conector do Amazon Athena para o CloudWatch](connectors-cloudwatch.md) em sua conta. Use a mesma abordagem para consultar quando usar outros conectores.

**Para criar uma consulta do Athena que usa o conector do CloudWatch**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas do Athena, crie uma consulta SQL que use a sintaxe a seguir na cláusula `FROM`.

   ```
   MyCloudwatchCatalog.database_name.table_name       
   ```

### Exemplos
<a name="running-federated-queries-single-data-source-examples"></a>

O exemplo a seguir usa o conector do CloudWatch no Athena para se conectar à visualização `all_log_streams` no [grupo de logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) `/var/ecommerce-engine/order-processor` do CloudWatch Logs. A visualização `all_log_streams` é uma visualização de todos os fluxos de log no grupo de logs. A consulta de exemplo limita o número de linhas retornadas a 100.

```
SELECT * 
FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams 
LIMIT 100;
```

O exemplo a seguir analisa informações da mesma visualização que o exemplo anterior. O exemplo extrai o ID da ordem e o nível de log e filtra qualquer mensagem que tenha o nível `INFO`.

```
SELECT 
    log_stream as ec2_instance, 
    Regexp_extract(message '.*orderId=(\d+) .*', 1) AS orderId, 
    message AS order_processor_log, 
    Regexp_extract(message, '(.*):.*', 1) AS log_level 
FROM MyCloudwatchCatalog."/var/ecommerce-engine/order-processor".all_log_streams 
WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'
```

## Consultar várias fontes de dados
<a name="running-federated-queries-multiple-sources"></a>

Usando um exemplo mais complexo, imagine uma empresa de comércio eletrônico que usa as seguintes fontes de dados para armazenar dados relacionados às compras dos clientes:
+ [Amazon RDS para MySQL](https://aws.amazon.com/rds/mysql/) para armazenar dados do catálogo de produtos
+ [Amazon DocumentDB](https://aws.amazon.com/documentdb/) para armazenar dados de conta de clientes, como endereços de e-mail e endereços de envio
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) para armazenar dados de envio e rastreamento de pedidos

Imagine que um analista de dados dessa aplicação de comércio eletrônico saiba que o tempo de entrega em algumas regiões foi afetado pelas condições climáticas locais. O analista quer saber quantos pedidos estão atrasados, onde os clientes afetados estão localizados e quais foram os produtos mais afetados. Em vez de investigar as fontes de informação separadamente, o analista usa o Athena para unir dados em uma única consulta federada.

**Example**  

```
SELECT 
     t2.product_name AS product, 
     t2.product_category AS category, 
     t3.customer_region AS region, 
     count(t1.order_id) AS impacted_orders 
FROM my_dynamodb.default.orders t1 
JOIN my_mysql.products.catalog t2 ON t1.product_id = t2.product_id 
JOIN my_documentdb.default.customers t3 ON t1.customer_id = t3.customer_id 
WHERE 
     t1.order_status = 'PENDING'
     AND t1.order_date between '2022-01-01' AND '2022-01-05' 
GROUP BY 1, 2, 3 
ORDER BY 4 DESC
```

## Consultar visualizações federadas
<a name="running-federated-queries-federated-views"></a>

Ao consultar fontes federadas, é possível usar visualizações para ofuscar as fontes de dados subjacentes ou ocultar uniões complexas de outros analistas que consultam os dados.

### Considerações e limitações
<a name="running-federated-queries-federated-views-considerations"></a>
+ As visualizações federadas necessitam do mecanismo Athena versão 3. 
+ As visualizações federadas são armazenadas no AWS Glue, não na fonte de dados subjacente.
+ As visualizações federadas não são compatíveis com fontes de dados [registradas como um Glue Data Catalog](register-connection-as-gdc.md).
+ As visualizações criadas com catálogos federados devem usar uma sintaxe de nome totalmente qualificada, como no seguinte exemplo:

  ```
  "ddbcatalog"."default"."customers"
  ```
+ Os usuários que executam consultas em fontes federadas devem ter permissão para consultar fontes federadas.
+ A permissão `athena:GetDataCatalog` é necessária para visualizações federadas. Para obter mais informações, consulte [Permitir acesso a consultas federadas do Athena: exemplos de política](federated-query-iam-access.md).

### Exemplos
<a name="running-federated-queries-federated-views-examples"></a>

O exemplo a seguir cria uma visualização denominada `customers` nos dados armazenados em uma fonte de dados federada.

**Example**  

```
CREATE VIEW customers AS
SELECT *
FROM my_federated_source.default.table
```

O exemplo de consulta a seguir mostra uma consulta que faz referência à visualização `customers` em vez da fonte de dados federada subjacente.

**Example**  

```
SELECT id, SUM(order_amount)
FROM customers
GROUP by 1
ORDER by 2 DESC
LIMIT 50
```

O exemplo a seguir cria uma visualização denominada `order_summary` que combina dados de uma fonte de dados federada e de uma fonte de dados do Amazon S3. Da fonte federada, que já foi criada no Athena, a visualização usa as tabelas `person` e `profile`. No Amazon S3, a visualização usa as tabelas `purchase` e `payment`. Para se referir ao Amazon S3, a instrução usa a palavra-chave `awsdatacatalog`. A fonte de dados federada usa a sintaxe de nome totalmente qualificada *federated\$1source\$1name*.*federated\$1source\$1database*.*federated\$1source\$1table*.

**Example**  

```
CREATE VIEW default.order_summary AS
SELECT *
FROM federated_source_name.federated_source_database."person" p
    JOIN federated_source_name.federated_source_database."profile" pr ON pr.id = p.id
    JOIN awsdatacatalog.default.purchase i ON p.id = i.id
    JOIN awsdatacatalog.default.payment pay ON pay.id = p.id
```

### Recursos adicionais
<a name="running-federated-queries-federated-views-additional-resources"></a>
+ Para ver um exemplo de uma exibição federada que está desacoplada de sua fonte original e está disponível para análise sob demanda em um modelo multiusuário, consulte [Estenda seu data mesh com o Amazon Athena e visualizações federadas](https://aws.amazon.com/blogs/big-data/extend-your-data-mesh-with-amazon-athena-and-federated-views/) no *Blog de Big Data da AWS*. 
+ Para obter mais informações sobre como trabalhar com visualizações no Athena, consulte [Trabalhar com visualizações](views.md).

# Usar consultas de passagem federadas
<a name="federated-query-passthrough"></a>

No Athena, você pode realizar consultas em fontes de dados federadas usando a linguagem de consulta da própria fonte de dados e enviar a consulta completa para execução na fonte de dados. Essas consultas são chamadas de consultas de passagem. Para executar consultas de passagem, você usa uma função de tabela na sua consulta do Athena. Você inclui em um dos argumentos da função de tabela a consulta de passagem que será realizada na fonte de dados. As consultas de passagem retornam uma tabela que você pode analisar usando o Athena SQL.

## Conectores compatíveis
<a name="federated-query-passthrough-supported-connectors"></a>

Os seguintes conectores de fonte de dados do Athena são compatíveis com consultas de passagem.
+ [Azure Data Lake Storage](connectors-adls-gen2.md)
+ [Azure Synapse](connectors-azure-synapse.md)
+ [Cloudera Hive](connectors-cloudera-hive.md)
+ [Cloudera Impala](connectors-cloudera-impala.md)
+ [CloudWatch](connectors-cloudwatch.md)
+ [Db2](connectors-ibm-db2.md)
+ [Db2 iSeries](connectors-ibm-db2-as400.md)
+ [DocumentDB](connectors-docdb.md) 
+ [DynamoDB](connectors-dynamodb.md) 
+ [HBase](connectors-hbase.md)
+ [Google BigQuery](connectors-bigquery.md)
+ [Hortonworks](connectors-hortonworks.md)
+ [MySQL](connectors-mysql.md)
+ [Neptune](connectors-neptune.md)
+ [OpenSearch](connectors-opensearch.md) 
+ [Oracle](connectors-oracle.md)
+ [PostgreSQL](connectors-postgresql.md)
+ [Redshift](connectors-redshift.md)
+ [SAP HANA](connectors-sap-hana.md)
+ [Snowflake](connectors-snowflake.md)
+ [SQL Server](connectors-microsoft-sql-server.md)
+ [Teradata](connectors-teradata.md)
+ [Timestream](connectors-timestream.md)
+ [Vertica](connectors-vertica.md)

## Considerações e limitações
<a name="federated-query-passthrough-considerations-and-limitations"></a>

Ao usar consultas de passagem no Athena, considere os seguintes pontos:
+ A passagem de consultas só é compatível com instruções `SELECT` ou operações de leitura do Athena.
+ O desempenho da consulta poderá variar de acordo com a configuração da fonte de dados.
+ A passagem de consulta não é compatível com o controle de acesso detalhado do Lake Formation.
+ As passagens de consulta não são compatíveis com fontes de dados [registradas como um Glue Data Catalog](register-connection-as-gdc.md).

## Sintaxe
<a name="federated-query-passthrough-syntax"></a>

A sintaxe geral de passagem de consultas do Athena é a seguinte.

```
SELECT * FROM TABLE(catalog.system.function_name(arg1 => 'arg1Value'[, arg2 => 'arg2Value', ...]))
```

Observe o seguinte:
+ **catálogo**: o nome do conector federado ou o nome do catálogo de dados do Athena de destino.
+ **system**: o namespace que contém a função. Todas as implementações do conector Athena usam esse namespace.
+ **function\$1name**: o nome da função que envia a consulta de passagem para a fonte de dados. Isso geralmente é chamado de `query`. A combinação `catalog.system.function_name` é o caminho completo de resolução para a função.
+ **arg1, arg2 etc.**: argumentos da função. O usuário deve passá-los para a função. Na maioria dos casos, essa é a string de consulta que é passada para a fonte de dados.

Para a maioria das fontes de dados, o primeiro e único argumento é `query`, seguido pelo operador de seta `=>` e pela string de consulta.

```
SELECT * FROM TABLE(catalog.system.query(query => 'query string'))
```

Para simplificar, você pode omitir o argumento nomeado opcional `query` e o operador de seta `=>`.

```
SELECT * FROM TABLE(catalog.system.query('query string'))
```

Você pode simplificar ainda mais a consulta removendo o nome do `catalog` se a consulta for executada no contexto do catálogo de destino.

```
SELECT * FROM TABLE(system.query('query string'))
```

Se a fonte de dados exigir mais do que a string de consulta, use argumentos nomeados na ordem esperada pela fonte de dados. Por exemplo, a expressão `arg1 => 'arg1Value'` contém o primeiro argumento e seu valor. O nome *arg1* é específico da fonte de dados e pode diferir entre os conectores.

```
SELECT * FROM TABLE(
        system.query(
            arg1 => 'arg1Value',
            arg2 => 'arg2Value',
            arg3 => 'arg3Value'
        ));
```

O exposto acima também pode ser simplificado omitindo-se os nomes dos argumentos. Porém, você deve seguir a ordem da assinatura do método. Consulte a documentação de cada conector para obter mais informações sobre a assinatura da função.

```
SELECT * FROM TABLE(catalog.system.query('arg1Value', 'arg2Value', 'arg3Value'))
```

Você pode executar várias consultas de passagem por diferentes conectores do Athena utilizando o caminho completo de resolução da função, como no exemplo a seguir.

```
SELECT c_customer_sk 
    FROM TABLE (postgresql.system.query('select * from customer limit 10'))
UNION
SELECT c_customer_sk 
    FROM TABLE(dynamodb.system.query('select * from customer')) LIMIT 10
```

Você pode usar consultas de passagem como parte de uma visualização federada. As mesmas limitações se aplicam. Para obter mais informações, consulte [visualizações federadas de consultas](https://docs.aws.amazon.com/athena/latest/ug/running-federated-queries.html#running-federated-queries-federated-views).

```
CREATE VIEW catalog.database.ViewName AS
    SELECT * FROM TABLE (
        catalog.system.query('query')
    )
```

Para obter informações sobre a sintaxe exata a ser usada com um determinado conector, consulte a documentação do conector individual.

### Uso de aspas
<a name="federated-query-passthrough-syntax-quotation-marks"></a>

Os valores dos argumentos, incluindo a string de consulta que você transmite, devem estar entre aspas simples, como no exemplo a seguir.

```
SELECT * FROM TABLE(system.query(query => 'SELECT * FROM testdb.persons LIMIT 10'))
```

Quando a string de consulta estiver entre aspas duplas, a consulta vai falhar. A consulta a seguir falha com a mensagem de erro COLUMN\$1NOT\$1FOUND: line 1:43: Column 'select \$1 from testdb.persons limit 10' cannot be resolved.

```
SELECT * FROM TABLE(system.query(query => "SELECT * FROM testdb.persons LIMIT 10"))
```

Para escapar uma aspas simples, adicione uma aspas simples ao original (p. ex., `terry's_group` para `terry''s_group`).

## Exemplos
<a name="federated-query-passthrough-sql-based-connectors-examples"></a>

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        catalog.system.query(
            query => 'SELECT * FROM customer LIMIT 10;'
        ))
```

A instrução a seguir executa a mesma consulta, mas elimina o argumento nomeado opcional `query` e o operador de seta `=>`.

```
SELECT * FROM TABLE(
        catalog.system.query(
            'SELECT * FROM customer LIMIT 10;'
        ))
```

Isso também pode ser encapsulado em uma visualização federada para facilitar a reutilização. Quando usado com uma visualização, você deve usar o caminho completo de resolução da função.

```
CREATE VIEW AwsDataCatalog.default.example_view AS
    SELECT * FROM TABLE (
        catalog.system.query('SELECT * FROM customer LIMIT 10;')
    )
```

## Optar por não usar consulta de passagem
<a name="federated-query-passthrough-sql-based-connectors-opting-out"></a>

Para desabilitar as consultas de passagem, adicione uma variável de ambiente do Lambda denominada `enable_query_passthrough` e defina-a como `false`.

# Noções básicas de qualificadores de nomes de tabelas federadas
<a name="tables-qualifiers"></a>

O Athena utiliza os seguintes termos para se referir às hierarquias de objetos de dados:
+ **Fonte de dados**: um grupo de bancos de dados
+ **Banco de dados**: um grupo de tabelas
+ **Tabela**: dados organizados como um grupo de linhas ou colunas

Às vezes, esses objetos também são chamados por nomes alternativos, mas equivalentes, como:
+ Às vezes uma fonte de dados é denominada catálogo.
+ Às vezes um banco de dados é denominado esquema.

## Termos de fontes de dados federadas
<a name="tables-qualifiers-terms-in-federated-data-sources"></a>

Ao consultar fontes de dados federadas, a fonte de dados subjacente pode não usar a mesma terminologia do Athena. Lembre-se dessa distinção ao gravar suas consultas federadas. As seções a seguir descrevem como os termos de objetos de dados do Athena correspondem aos das fontes de dados federadas.

### Amazon Redshift
<a name="tables-qualifiers-redshift"></a>

Um *banco de dados* do Amazon Redshift é um grupo de *esquemas* do Redshift que contém um grupo de *tabelas* Redshift.


****  

| Athena | Redshift | 
| --- | --- | 
| Fonte de dados do Redshift | Uma função do Lambda do conector Redshift configurada para apontar para um database do Redshift. | 
| data\$1source.database.table | database.schema.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_Redshift_connector_data_source.Redshift_schema_name.Redshift_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para o Redshift](connectors-redshift.md).

### Cloudera Hive
<a name="tables-qualifiers-cloudera-hive"></a>

Um *servidor* ou *cluster* do Cloudera Hive é um grupo de *bancos de dados* do Cloudera Hive que contém um grupo de *tabelas* Cloudera Hive.


****  

| Athena | Hive | 
| --- | --- | 
| Fonte de dados do Cloudera Hive | Função do Lambda do conector do Cloudera Hive configurada para apontar para um server Cloudera Hive. | 
| data\$1source.database.table | server.database.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_Cloudera_Hive_connector_data_source.Cloudera_Hive_database_name.Cloudera_Hive_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para o Cloudera Hive](connectors-cloudera-hive.md).

### Cloudera Impala
<a name="tables-qualifiers-cloudera-impala"></a>

Um *servidor* ou *cluster* do Impala é um grupo de *bancos de dados* do Impala que contém um grupo de *tabelas* Impala.


****  

| Athena | Impala | 
| --- | --- | 
| Fonte de dados do Impala | Função do Lambda do conector do Impala configurada para apontar para um server Impala. | 
| data\$1source.database.table | server.database.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_Impala_connector_data_source.Impala_database_name.Impala_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para o Cloudera Impala](connectors-cloudera-impala.md).

### MySQL
<a name="tables-qualifiers-mysql"></a>

Um *servidor* MySQL é um grupo de *bancos de dados* MySQL que contém um grupo de *tabelas* MySQL.


****  

| Athena | MySQL | 
| --- | --- | 
| Fonte de dados do MySQL | Função do Lambda do conector do MySQL configurada para apontar para um server MySQL. | 
| data\$1source.database.table | server.database.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_MySQL_connector_data source.MySQL_database_name.MySQL_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para o MySQL](connectors-mysql.md).

### Oracle
<a name="tables-qualifiers-oracle"></a>

Um *servidor* (ou *banco de dados*) Oracle é um grupo de *esquemas* do Oracle que contém um grupo de *tabelas* do Oracle.


****  

| Athena | Oracle | 
| --- | --- | 
| Fonte de dados do Oracle | Função do Lambda do conector do Oracle configurada para apontar para um server Oracle. | 
| data\$1source.database.table | server.schema.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_Oracle_connector_data_source.Oracle_schema_name.Oracle_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para Oracle](connectors-oracle.md).

### Postgres
<a name="tables-qualifiers-postgres"></a>

Um *servidor* (ou *cluster*) Postgres é um grupo de *bancos de dados* do Postgres. Um *banco de dados* do Postgres é um grupo de *esquemas* do Postgres que contém um grupo de *tabelas* Postgres.


****  

| Athena | Postgres | 
| --- | --- | 
| Fonte de dados do Postgres | Função do Lambda do conector do Postgres configurada para apontar para um server e database do Postgres. | 
| data\$1source.database.table | server.database.schema.table | 

Consulta de exemplo

```
SELECT * FROM 
Athena_Postgres_connector_data_source.Postgres_schema_name.Postgres_table_name
```

Para obter mais informações sobre o conector, consulte [Conector do Amazon Athena para o PostgreSQL](connectors-postgresql.md).

# Desenvolver um conector de fonte de dados com uso do SDK do Athena Query Federation
<a name="connect-data-source-federation-sdk"></a>

Para criar seus próprios conectores de fonte de dados, você pode usar o [Athena Query Federation SDK](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). O Athena Query Federation SDK define um conjunto de interfaces e protocolos de conexão que você pode usar para permitir que o Athena delegue partes do plano de execução de consultas ao código que você escreve e implanta. O SDK inclui um conjunto de conectores e um exemplo de conector.

Conectores personalizados não usam o Glue Connections para centralizar as propriedades de configuração no Glue. A configuração da conexão é feita por meio do Lambda.

Você também pode personalizar os [conectores predefinidos](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) do Amazon Athena para uso próprio. Você pode modificar uma cópia do código-fonte do GitHub e usar a [ferramenta de publicação do conector](https://github.com/awslabs/aws-athena-query-federation/wiki/Connector_Publish_Tool) para criar seu próprio pacote do AWS Serverless Application Repository. Depois de implantar o conector dessa maneira, você poderá usá-lo em suas consultas do Athena.

Para saber sobre como baixar o SDK e obter instruções detalhadas para gravar seu próprio conector, consulte [Example Athena connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-example) (Exemplo de conector do Athena) no GitHub.

# Trabalhar com conectores de fonte de dados do Athena para o Apache Spark
<a name="connectors-spark"></a>

Alguns conectores de fonte de dados do Athena estão disponíveis como conectores DSV2 do Spark. Os nomes dos conectores DSV2 do Spark têm um  sufixo `-dsv2` (por exemplo, `athena-dynamodb-dsv2`).

A seguir, os conectores DSV2 atualmente disponíveis, seu nome de classe do Spark `.format()` e os links para a documentação sobre consultas federadas do Amazon Athena correspondente:


| Conector DSV2 | Nome da classe do Spark .format() | Documentação | 
| --- | --- | --- | 
| athena-cloudwatch-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.CloudwatchTableProvider | [CloudWatch](connectors-cloudwatch.md) | 
| athena-cloudwatch-metrics-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.metrics.CloudwatchMetricsTableProvider | [métricas do CloudWatch](connectors-cwmetrics.md) | 
| atena-aws-cmdb-dsv2 | com.amazonaws.athena.connectors.dsv2.aws.cmdb.AwsCmdbTableProvider | [CMDB](connectors-cmdb.md) | 
| atena-dynamodb-dsv2 | com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider | [DynamoDB](connectors-dynamodb.md) | 

Para baixar arquivos `.jar` para os conectores DSV2, visite a página [DSV2 da consulta federada do Amazon Athena](https://github.com/awslabs/aws-athena-query-federation-dsv2) no GitHub e veja a seção **Lançamentos**, **Lançamento *<versão>***, **Ativos**.

## Especificar o jar para o Spark
<a name="connectors-spark-specifying-the-jar-to-spark"></a>

Para usar os conectores DSV2 do Athena com o Spark, você envia o arquivo `.jar` do conector para o ambiente do Spark que está usando. As seções a seguir descrevem casos específicos.

### Athena para Spark
<a name="connectors-spark-ate"></a>

Para obter informações sobre como adicionar arquivos `.jar` personalizados e configurações personalizadas ao Amazon Athena para Apache Spark, consulte [Usar as propriedades do Spark para especificar uma configuração personalizada](notebooks-spark-custom-jar-cfg.md).

### Spark em geral
<a name="connectors-spark-general"></a>

Para passar arquivo `.jar` do conector para o Spark, use o comando `spark-submit` e especifique o Aarquivo `.jar` na opção `--jars`, como no seguinte exemplo:

```
spark-submit \ 
  --deploy-mode cluster \ 
  --jars https://github.com/awslabs/aws-athena-query-federation-dsv2/releases/download/some_version/athena-dynamodb-dsv2-some_version.jar
```

### Spark no Amazon EMR
<a name="connectors-spark-emr"></a>

Para executar um comando `spark-submit` com o  parâmetro `--jars` no Amazon EMR, você deve adicionar uma etapa ao cluster do Spark no Amazon. Para obter detalhes sobre como usar `spark-submit` no Amazon EMR, consulte [Adicionar uma etapa do Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-submit-step.html) no *Guia de lançamento do Amazon EMR.*

### Spark para ETL do AWS Glue
<a name="connectors-spark-glue-etl"></a>

Para ETL do AWS Glue, você pode passar a URL GitHub.com do arquivo `.jar`  para o argumento `--extra-jars` do comando `aws glue start-job-run`. A documentação do AWS Glue descreve o parâmetro `--extra-jars` seguindo um caminho do Amazon S3, mas o parâmetro também pode usar uma URL HTTPS. Para obter mais informações, consulte [Referência de parâmetros de trabalho](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html#w5aac32c13c11) no *Guia do desenvolvedor do AWS Glue*.

## Consultar o conector no Spark
<a name="connectors-spark-querying-the-connector"></a>

Para enviar o equivalente à sua consulta federada existente do Athena no Apache Spark, use a função `spark.sql()`. Por exemplo, suponhamos que você tenha a consulta do Athena a seguir e deseje usar no Apache Spark.

```
SELECT somecola, somecolb, somecolc 
FROM ddb_datasource.some_schema_or_glue_database.some_ddb_or_glue_table 
WHERE somecola > 1
```

Para realizar a mesma consulta no Spark usando o conector DSV2 do Amazon Athena para DynamoDB, use o seguinte código:

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load()) 
 
dynamoDf.createOrReplaceTempView("ddb_spark_table") 
 
spark.sql(''' 
SELECT somecola, somecolb, somecolc 
FROM ddb_spark_table 
WHERE somecola > 1 
''')
```

## Especificar parâmetros do
<a name="connectors-spark-parameters"></a>

As versões DSV2 dos conectores de fonte de dados Athena usam os mesmos parâmetros dos conectores de fonte de dados Athena correspondentes. Para obter informações sobre parâmetros, consulte a documentação do conector de fonte de dados do Athena correspondente.

No código do PySpark, use a sintaxe a seguir para configurar os parâmetros.

```
spark.read.option("athena.connectors.conf.parameter", "value")
```

Por exemplo, o código a seguir define o parâmetro `disable_projection_and_casing` do conector Amazon Athena para o DynamoDB como `always`.

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .option("athena.connectors.conf.disable_projection_and_casing", "always") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load())
```

# Usar o Amazon DataZone no Athena
<a name="datazone-using"></a>

Você pode usar o [Amazon DataZone](https://aws.amazon.com/datazone) para compartilhar, pesquisar e descobrir dados em grande escala além dos limites organizacionais. O DataZone simplifica sua experiência em todos os serviços de análise da AWS, como o Athena, o AWS Glue e o AWS Lake Formation. Por exemplo, se você tiver petabytes de dados em diferentes fontes de dados, poderá usar o Amazon DataZone para criar agrupamentos de pessoas, dados e ferramentas com base nos casos de uso comercial. Para obter mais informações, consulte [O que é o Amazon DataZone?](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html).

No Athena, você pode usar o editor de consultas para acessar e consultar os ambientes do DataZone. Um ambiente do DataZone especifica uma combinação de projeto e domínio do DataZone. Ao usar um ambiente do DataZone no console do Athena, você assume o perfil do IAM do ambiente do DataZone e só vê os bancos de dados e as tabelas que pertencem a esse ambiente. As permissões são determinadas pelos perfis que você especifica no DataZone.

No Athena, você pode usar o seletor **Ambiente do DataZone** na página do editor de consultas para escolher um ambiente do DataZone.

**Para abrir um ambiente do DataZone no Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. **No canto superior direito do console do Athena, ao lado de **Grupo de trabalho**, escolha Ambiente do DataZone**.
**nota**  
A opção **Ambiente do DataZone** só está presente quando você tem um ou mais domínios disponíveis no DataZone.   
![\[Escolha Ambiente do DataZone.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datazone-using-1.png)

1. Use o seletor **Ambiente do DataZone** para escolher um ambiente do DataZone.  
![\[Escolha um ambiente do DataZone\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datazone-using-2.png)

1. Na caixa de diálogo **Alternar para o ambiente do DataZone**, verifique se o ambiente é o que você deseja e escolha **Alternar para o ambiente do DataZone**.  
![\[Confirme a mudança para um ambiente do DataZone.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datazone-using-3.png)

Para obter mais informações sobre como começar a usar o DataZone e o Athena, consulte o tutorial [Getting started](https://docs.aws.amazon.com/datazone/latest/userguide/getting-started.html) no *Amazon DataZone User Guide*.

# Usar um metastore externa do Hive
<a name="connect-to-data-source-hive"></a>

Você pode usar o conector de dados do Amazon Athena para o metastore externo do Hive para consultar conjuntos de dados no Amazon S3 que usam um metastore do Apache Hive. Não é necessária nenhuma migração de metadados para o AWS Glue Data Catalog. No console de gerenciamento do Athena, configure uma função do Lambda para se comunicar com o metastore do Hive que está em sua VPC privada e conectá-la ao metastore. A conexão do Lambda com o metastore do Hive é protegida por um canal privado do Amazon VPC e não usa a Internet pública. Você pode usar seu próprio código de função do Lambda ou a implementação padrão do conector de dados do Athena para o metastore externo do Hive.

**Topics**
+ [

## Visão geral de recursos
](#connect-to-a-data-source-hive-features)
+ [

## Fluxo de trabalho
](#connect-to-data-source-hive-workflow)
+ [

## Considerações e limitações
](#connect-to-a-data-source-hive-considerations)
+ [

# Conectar o Athena a um metastore do Apache Hive
](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md)
+ [

# Usar o AWS Serverless Application Repository para implementar um conector de fonte de dados do Hive
](connect-data-source-sar-hive.md)
+ [

# Conectar o Athena a um metastore do Hive com uso de um perfil de execução do IAM existente
](connect-data-source-hive-existing-iam-role.md)
+ [

# Configurar o Athena para usar um conector de metastore do Hive implantado
](connect-data-source-hive-existing-lambda.md)
+ [

# Omitir o nome do catálogo em consultas do metastore externo do Hive
](datastores-hive-default-catalog.md)
+ [

# Trabalhar com visualizações do Hive
](hive-views.md)
+ [

# Usar a AWS CLI com metastores do Hive
](datastores-hive-cli.md)
+ [

# Modificar o conector externo do Hive metastore do Athena
](datastores-hive-reference-implementation.md)

## Visão geral de recursos
<a name="connect-to-a-data-source-hive-features"></a>

Com o conector de dados do Athena para metastore externo do Hive, você pode executar as seguintes tarefas:
+ Use o console do Athena para registrar catálogos personalizados e usá-los para executar consultas.
+ Defina funções do Lambda para diferentes metastores externos do Hive e adicione-as às consultas do Athena.
+ Use o AWS Glue Data Catalog e os metastores externos do Hive na mesma consulta do Athena.
+ Especifique um catálogo no contexto de execução da consulta como o catálogo padrão atual. Isso remove a necessidade de prefixar nomes de catálogo para nomes de banco de dados em suas consultas. Em vez de usar a sintaxe `catalog.database.table`, você pode usar `database.table`.
+ Use uma variedade de ferramentas para executar consultas que fazem referência a metastores externos do Hive. Você pode usar o console do Athena, a AWS CLI, o AWS SDK, as APIs do Athena e os drivers JDBC e ODBC atualizados do Athena. Os drivers atualizados são compatíveis com catálogos personalizados.

### Suporte à API
<a name="connect-to-a-data-source-hive-features-api"></a>

O conector de dados do Athena para metastore externo do Hive permite operações da API de registro de catálogo e da API de metadados.
+ **Registro do catálogo**: registre catálogos personalizados para metastores externos do Hive e [origens de dados federadas](federated-queries.md). 
+ **Metadados**: use as APIs de metadados para fornecer informações de banco de dados e tabela para o AWS Glue e qualquer catálogo que você registrar no Athena.
+ **Cliente JAVA SDK do Athena**: use as APIs de registro de catálogo, as APIs de metadados e o suporte para catálogos na operação `StartQueryExecution` no cliente Java SDK atualizado do Athena.

### Implementação de referência
<a name="connect-to-a-data-source-hive-features-reference-implementation"></a>

O Athena oferece uma implementação de referência para a função do Lambda que se conecta a metastores externos do Hive. A implementação de referência é fornecida no GitHub como um projeto de código aberto no [metastore do Athena Hive](https://github.com/awslabs/aws-athena-hive-metastore).

A implementação de referência está disponível como os dois aplicativos do AWS SAM a seguir no AWS Serverless Application Repository (SAR). Você pode usar qualquer uma dessas aplicações no SAR para criar as próprias funções do Lambda.
+ `AthenaHiveMetastoreFunction`: arquivo Uber `.jar` da função do Lambda. Um "uber" JAR (também conhecido como fat JAR ou JAR com dependências) é um arquivo `.jar` com um programa Java e as respectivas dependências em um único arquivo. 
+ `AthenaHiveMetastoreFunctionWithLayer`: a camada do Lambda e o arquivo `.jar` fino da função do Lambda.

## Fluxo de trabalho
<a name="connect-to-data-source-hive-workflow"></a>

O diagrama a seguir mostra como o Athena interage com o metastore externo do Hive.

![\[Como o Athena interage com o metastore externo do Hive.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-to-data-source-hive-workflow.png)


Neste fluxo de trabalho, o metastore do Hive conectado ao banco de dados está dentro da sua VPC. Você usa o Hive Server2 para gerenciar sua metastore do Hive usando a CLI do Hive.

O fluxo de trabalho para uso de metastores externos do Hive do Athena inclui as etapas a seguir.

1. Crie uma função do Lambda que conecte o Athena ao metastore do Hive que reside em sua VPC.

1. Registre um nome de catálogo exclusivo para seu metastore do Hive e um nome de função correspondente em sua conta.

1. Ao executar uma consulta DML ou DDL do Athena que usa o nome do catálogo, o mecanismo de consulta do Athena chama o nome da função do Lambda que você associou ao nome do catálogo.

1. Ao usar AWS PrivateLink, a função do Lambda se comunica com o metastore externo do Hive em sua VPC e recebe respostas às solicitações de metadados. O Athena usa os metadados do metastore externo do Hive da mesma forma que usa os metadados do padrão AWS Glue Data Catalog.

## Considerações e limitações
<a name="connect-to-a-data-source-hive-considerations"></a>

Ao usar o conector de dados do Athena para metastore externo do Hive, considere os seguintes pontos:
+ É possível usar CTAS para criar uma tabela em um metastore do Hive externo.
+ É possível usar INSERT INTO para inserir dados em um metastore do Hive externo.
+ O suporte de DDL para metastore externo do Hive está limitado às instruções a seguir.
  + ALTER DATABASE SET DBPROPERTIES
  + ALTER TABLE ADD COLUMNS
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DROP PARTITION
  + ALTER TABLE RENAME PARTITION
  + ALTER TABLE REPLACE COLUMNS
  + ALTER TABLE SET LOCATION
  + ALTER TABLE SET TBLPROPERTIES
  + CREATE DATABASE
  + CRIAR TABELA
  + CREATE TABLE AS
  + DESCRIBE TABLE
  + DROP DATABASE
  + DESCARTAR TABELA
  + SHOW COLUMNS
  + SHOW CREATE TABLE
  + SHOW PARTITIONS
  + SHOW SCHEMAS
  + SHOW TABLES
  + SHOW TBLPROPERTIES
+ O número máximo de catálogos registrados que é possível ter é 1.000.
+ A autenticação Kerberos para o metastore do Hive não é compatível.
+ Para usar o driver JDBC com um metastore externo do Hive ou com [consultas federadas](federated-queries.md), inclua`MetadataRetrievalMethod=ProxyAPI` na string de conexão do JDBC. Para obter informações sobre o driver JDBC, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md).
+ As colunas ocultas do Hive `$path`, `$bucket`, `$file_size`, `$file_modified_time`, `$partition` e `$row_id` não podem ser usadas para filtragem de controle de acesso detalhada. 
+ Não há suporte para o controle de acesso detalhado para tabelas de sistema ocultas do Hive, como `example_table$partitions` ou `example_table$properties`.

### Permissões
<a name="connect-to-a-data-source-hive-considerations-permissions"></a>

Conectores de dados predefinidos e personalizados podem exigir acesso aos recursos a seguir para funcionar corretamente. Verifique as informações do conector que você usa para confirmar se você configurou a VPC corretamente. Para obter informações sobre as permissões do IAM necessárias para executar consultas e criar um conector de origem dos dados no Athena, consulte [Permitir a um metastore do Hive externo acesso a um conector de dados do Athena](hive-metastore-iam-access.md) e [Permitir acesso da função do Lambda aos metastores externos do Hive](hive-metastore-iam-access-lambda.md).
+ **Amazon S3**: além de gravar os resultados das consultas no local específico do Athena no Amazon S3, os conectores de dados gravam em um bucket de vazamento no Amazon S3. São necessárias conectividade e permissões para esse local do Amazon S3. Para obter mais informações, consulte [Local de vazamento no Amazon S3](#connect-to-data-source-hive-spill-location) mais adiante neste tópico.
+ **Athena**: o acesso é necessário para conferir o status da consulta e evitar verificação em excesso.
+ **AWS Glue**: o acesso será necessário se o conector usar AWS Glue para metadados complementares ou primários.
+ **AWS Key Management Service**
+ **Políticas**: o metastore do Hive, o Athena Query Federation e as UDFs exigem políticas além da [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy). Para obter mais informações, consulte [Gerenciamento de identidade e acesso no Athena](security-iam-athena.md).

### Local de vazamento no Amazon S3
<a name="connect-to-data-source-hive-spill-location"></a>

Devido ao [limite](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) de tamanho de resposta da função do Lambda, as respostas que o ultrapassam são vazadas para um local no Amazon S3 especificado quando você cria a função do Lambda. O Athena lê essas respostas diretamente do Amazon S3. 

**nota**  
O Athena não remove os arquivos de resposta do Amazon S3. Recomendamos configurar uma política de retenção para excluir arquivos de resposta automaticamente. 

# Conectar o Athena a um metastore do Apache Hive
<a name="connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore"></a>

Para conectar o Athena a um metastore do Apache Hive, crie e configure uma função do Lambda. Para uma implementação básica, execute todas as etapas necessárias no console de gerenciamento do Athena.

**nota**  
O procedimento a seguir requer que você tenha permissão para criar uma função personalizada do IAM para a função do Lambda. Se você não tiver permissão para criar uma função personalizada, poderá usar a [implementação de referência](connect-to-data-source-hive.md#connect-to-a-data-source-hive-features-reference-implementation) do Athena para criar uma função do Lambda separadamente e, depois, usar o console do AWS Lambda para escolher uma função existente do IAM para essa função. Para obter mais informações, consulte [Conectar o Athena a um metastore do Hive com uso de um perfil de execução do IAM existente](connect-data-source-hive-existing-iam-role.md).

**Para conectar o Athena a um metastore do Hive**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Escolha **Fontes de dados e catálogos**.

1. No canto superior direito do console, escolha **Create data source** (Criar origem dos dados).

1. Na página **Choose a data source** (Escolher uma origem dos dados), em **Data sources** (Origens de dados), escolha **S3 - Apache Hive metastore**.

1. Escolha **Próximo**.

1. Na seção **Data source details** (Detalhes da origem dos dados), em **Data source name** (Nome da origem dos dados), insira o nome que deseja usar em suas instruções SQL ao consultar a origem dos dados pelo Athena. O nome pode ter até 127 caracteres e deve ser exclusivo na sua conta. Ele não poderá ser alterado após a criação. Os caracteres válidos são a-z, A-Z, 0-9, \$1 (sublinhado), @ (arroba) e - (hífen). Os nomes `awsdatacatalog`, `hive`, `jmx` e `system` são reservados pelo Athena e não podem ser usados como nomes de origens dos dados. 

1. Em ‭**Função do Lambda**, escolha **Criar função do Lambda** e, em seguida, **Criar uma nova função do Lambda no AWS Lambda**

   A página **AthenaHiveMetastoreFunction** é aberta no console do AWS Lambda. A página inclui informações detalhadas sobre o conector.  
![\[A página AthenaHiveMetastoreFunction no console do AWS Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-to-data-source-hive-4.png)

1. Em **Application settings** (Configurações da aplicação), insira os parâmetros para a função do Lambda.
   + **LambdaFuncName**: especifique um nome para a função. Por exemplo, **myHiveMetastore**.
   + **SpillLocation**: especifique um local do Amazon S3 nessa conta para armazenar os metadados de vazamento, caso o tamanho da resposta da função do Lambda exceda 4 MB.
   + **HMSUris**: insira o URI do host do metastore do Hive que usa o protocolo Thrift na porta 9083. Use a sintaxe `thrift://<host_name>:9083`.
   + **LambdaMemory**: especifique um valor entre 128 MB e 3008 MB. A função do Lambda aloca os ciclos de CPU proporcionalmente à quantidade de memória que você configura. O padrão é 1024.
   + **LambdaTimeout**: especifique o tempo máximo de execução de invocação do Lambda permitido em segundos de 1 a 900 (900 segundos são 15 minutos). O padrão é 300 segundos (5 minutos).
   + **VPCSecurityGroupIds**: insira uma lista separada por vírgulas de IDs de grupo de segurança da VPC para o metastore do Hive.
   + **VPCSubnetIds**: insira uma lista separada por vírgulas de IDs de sub-rede da VPC para o metastore do Hive.

1. Selecione **I acknowledge that this app creates custom IAM roles** (Eu reconheço que este aplicativo cria funções personalizadas do IAM e, em seguida, escolha **Deploy** (Implantar).  
![\[Implantar a aplicação de função do Lambda pelo console do AWS Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-to-data-source-hive-4a.png)

   Quando a implantação for concluída, sua função será exibida na lista de aplicações do Lambda. Agora que a função do metastore do Hive foi implantada em sua conta, você pode configurar o Athena para usá-la.

1. Retorne à página **Enter data source details** (Inserir detalhes da origem dos dados) do console do Athena.

1. Na seção **Lambda function** (Função do Lambda), escolha o ícone de atualização ao lado da caixa de pesquisa de funções do Lambda. Atualizar a lista de funções disponíveis faz com que a função recém-criada apareça na lista.

1. Escolha o nome da função que você acabou de criar no console do Lambda. O ARN da função do Lambda é exibido.

1. (Opcional) Para **Tags**, adicione pares de chave-valor a associar com essa origem dos dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise os detalhes da origem dos dados e escolha **Create data source** (Criar origem dos dados). 

1. A seção **Data source details** (Detalhes da origem dos dados) da página de sua origem dos dados mostra informações sobre o novo conector. 

   Agora você poderá usar o **Data source name** (Nome da origem dos dados) especificado para fazer referência ao metastore do Hive em suas consultas SQL no Athena. Nas consultas SQL, use a seguinte sintaxe de exemplo, substituindo `hms-catalog-1` pelo nome do catálogo especificado anteriormente.

   ```
   SELECT * FROM hms-catalog-1.CustomerData.customers 
   ```

1. Para obter informações sobre como visualizar, editar ou excluir as origens dos dados criadas, consulte [Gerenciar suas fontes de dados](data-sources-managing.md).

# Usar o AWS Serverless Application Repository para implementar um conector de fonte de dados do Hive
<a name="connect-data-source-sar-hive"></a>

Para implantar um conector de origem dos dados do Athena para Hive, você pode usar o [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) em vez de começar com o console do Athena. Use AWS Serverless Application Repository para encontrar o conector que deseja usar, forneça os parâmetros que o conector exige e implante o conector em sua conta. Depois de implantar o conector, você usa o console do Athena para disponibilizar a origem dos dados para o Athena.

**Como usar o AWS Serverless Application Repository para implantar um conector de fonte de dados do Hive em sua conta**

1. Faça login no Console de gerenciamento da AWS e abra o **Repositório de aplicativos sem servidor**.

1. No painel de navegação, escolha **Aplicativos disponíveis**.

1. Selecione a opção **Show apps that create custom IAM roles or resource policies** (Mostrar aplicações que criam funções personalizadas do IAM ou políticas de recursos).

1. Na caixa de pesquisa, insira **Hive**. Os conectores exibidos incluem estes dois:
   + **AthenaHiveMetastoreFunction**: arquivo Uber `.jar` da função do Lambda.
   + **AthenaHiveMetastoreFunctionWithLayer**: a camada do Lambda e o arquivo `.jar` fino da função do Lambda.

    Os dois aplicativos têm a mesma funcionalidade e diferem apenas em sua implementação. É possível usar qualquer um para criar uma função do Lambda que conecta o Athena ao seu metastore do Hive.

1. Escolha o nome do conector que você deseja usar. Este tutorial usa **AthenaHiveMetastoreFunction**.  
![\[Escolha o nome do conector de origem dos dados do Athena para Hive.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-data-source-sar-hive-1.png)

1. Em **Application settings** (Configurações da aplicação), insira os parâmetros para a função do Lambda.
   + **LambdaFuncName**: especifique um nome para a função. Por exemplo, **myHiveMetastore**.
   + **SpillLocation**: especifique um local do Amazon S3 nessa conta para armazenar os metadados de vazamento, caso o tamanho da resposta da função do Lambda exceda 4 MB.
   + **HMSUris**: insira o URI do host do metastore do Hive que usa o protocolo Thrift na porta 9083. Use a sintaxe `thrift://<host_name>:9083`.
   + **LambdaMemory**: especifique um valor entre 128 MB e 3008 MB. A função do Lambda aloca os ciclos de CPU proporcionalmente à quantidade de memória que você configura. O padrão é 1024.
   + **LambdaTimeout**: especifique o tempo máximo de execução de invocação do Lambda permitido em segundos de 1 a 900 (900 segundos são 15 minutos). O padrão é 300 segundos (5 minutos).
   + **VPCSecurityGroupIds**: insira uma lista separada por vírgulas de IDs de grupo de segurança da VPC para o metastore do Hive.
   + **VPCSubnetIds**: insira uma lista separada por vírgulas de IDs de sub-rede da VPC para o metastore do Hive.

1. Na parte inferior direita da página **Application details** (Detalhes da aplicação), selecione **I acknowledge that this app creates custom IAM roles** (Eu reconheço que esta aplicação cria funções personalizadas do IAM) e escolha **Deploy** (Implantar).

Neste ponto, você pode configurar o Athena para usar sua função do Lambda para se conectar ao metastore do Hive. Para obter as etapas, consulte [Configurar o Athena para usar um conector de metastore do Hive implantado](connect-data-source-hive-existing-lambda.md).

# Conectar o Athena a um metastore do Hive com uso de um perfil de execução do IAM existente
<a name="connect-data-source-hive-existing-iam-role"></a>

Para conectar seu metastore externo do Hive ao Athena com uma função do Lambda que usa uma função do IAM existente, você pode usar a implementação de referência do Athena do conector Athena para o metastore externo do Hive.

Veja abaixo as três etapas principais:

1. **[Clonar e criar](#connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function)**: clone a implementação de referência do Athena e crie o arquivo JAR que contém o código da função do Lambda.

1. **[Console do AWS Lambda](#connect-data-source-hive-existing-iam-role-aws-lambda-console)**: no console do AWS Lambda, crie uma função do Lambda, atribua a ela uma função de execução do IAM existente e carregue o código da função que você gerou.

1. **[Console do Amazon Athena](connect-data-source-hive-existing-lambda.md)**: no console do Amazon Athena, crie um nome da origem dos dados que você pode usar para referenciar o metastore externo do Hive em suas consultas do Athena.

Se você já tiver permissões para criar uma função personalizada do IAM, poderá usar um fluxo de trabalho mais simples que use o console do Athena e o AWS Serverless Application Repository para criar e configurar uma função do Lambda. Para obter mais informações, consulte [Conectar o Athena a um metastore do Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md).

## Pré-requisitos
<a name="connect-data-source-hive-existing-iam-role-prerequisites"></a>
+ O Git deve estar instalado no sistema.
+ Você deve ter o [Apache Maven](https://maven.apache.org/) instalado.
+ Você tem uma função de execução do IAM que pode atribuir à função do Lambda. Para obter mais informações, consulte [Permitir acesso da função do Lambda aos metastores externos do Hive](hive-metastore-iam-access-lambda.md).

## Clonar e criar a função do Lambda
<a name="connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function"></a>

O código da função para a implementação de referência do Athena é um projeto do Maven localizado no GitHub em [awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore). Para obter informações detalhadas sobre o projeto, consulte o arquivo README correspondente no GitHub ou o tópico [Modificar o conector externo do Hive metastore do Athena](datastores-hive-reference-implementation.md) nesta documentação.

**Para clonar e criar o código da função do Lambda**

1. Insira o seguinte comando para clonar a implementação de referência do Athena:

   ```
   git clone https://github.com/awslabs/aws-athena-hive-metastore
   ```

1. Execute este comando para criar o arquivo `.jar` para a função do Lambda:

   ```
   mvn clean install
   ```

   Após a compilação bem-sucedida do projeto, o seguinte arquivo `.jar` será criado na pasta de destino do projeto:

   `hms-lambda-func-1.0-SNAPSHOT-withdep.jar`

   Na próxima seção, use o console do AWS Lambda para carregar esse arquivo em sua conta da Amazon Web Services.

## Criar e configurar a função do Lambda no console do AWS Lambda
<a name="connect-data-source-hive-existing-iam-role-aws-lambda-console"></a>

Nesta seção, use o console do AWS Lambda para criar uma função que aplique uma função de execução do IAM existente. Depois de configurar uma VPC para a função, carregue o código da função e configure as variáveis de ambiente dela.

### Criar a função do Lambda
<a name="connect-data-source-hive-existing-iam-role-create-the-lambda-function"></a>

Nesta etapa, crie uma função no console do AWS Lambda que use uma função do IAM existente.

**Para criar uma função do Lambda que usa uma função do IAM existente**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Selecione **Funções** no painel de navegação.

1. Escolha **Create function** (Criar função).

1. Escolha **Author from scratch** (Criar do zero).

1. Em **Function name** (Nome da função), insira o nome da sua função do Lambda (por exemplo, **EHMSBasedLambda**).

1. Em **Runtime** (Tempo de execução), escolha **Java 8**.

1. Em **Permissions** (Permissões), expanda **Change default execution role** (Alterar função de execução padrão).

1. Para **Execution role (Função de execução)**, selecione **Use an existing role (Usar uma função existente)**.

1. Em **Existing role** (Função existente), escolha a função de execução do IAM que sua função do Lambda usará com o Athena (este exemplo usa uma função chamada `AthenaLambdaExecutionRole`).

1. Expanda **Advanced settings (Configurações avançadas)**.

1. Selecione **Enable Network** (Habilitar rede).

1. Em **VPC**, escolha a VPC à qual sua função terá acesso.

1. Em **Subnets** (Sub-redes), escolha as sub-redes VPC para o Lambda usar.

1. Em **Security groups** (Grupos de segurança), escolha os grupos de segurança da VPC para o Lambda usar.

1. Escolha a opção **Criar função**. O console do AWS Lambda abre a página de configuração da sua função e começa a criá-la.

### Carregar o código e configurar a função do Lambda
<a name="connect-data-source-hive-existing-iam-role-upload-and-configure"></a>

Quando o console informar que sua função foi criada com êxito, você estará pronto para carregar o código da função e configurar as variáveis de ambiente.

**Para carregar o código da função do Lambda e configurar as variáveis de ambiente**

1. No console do Lambda, certifique-se de que você está na guia **Code** (Código) da página da função que você especificou.

1. Em **Code source** (Fonte do código), escolha **Upload from** (Carregar de) e escolha **.zip or jar file** (Arquivo .zip ou .jar).

1. Carregue o arquivo `hms-lambda-func-1.0-SNAPSHOT-withdep.jar` que você gerou.

1. Em sua página da função Lambda, escolha a guia **Configuration** (Configuração).

1. No painel à esquerda, escolha **Environment variables** (Variáveis de ambiente).

1. Em **Variáveis de ambiente**, selecione **Editar**.  
![\[Escolha Edit para editar as variáveis de ambiente da função do Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-5.png)

1. Na página **Edit environment variables** (Editar variáveis de ambiente), use a opção **Add environment variable** (Adicionar variável de ambiente) para adicionar as seguintes chaves e valores da variável de ambiente:
   + **HMS\$1URIS**: use a sintaxe a seguir para inserir o URI do host do metastore do Hive que usa o protocolo Thrift na porta 9083.

     ```
     thrift://<host_name>:9083
     ```
   + **SPILL\$1LOCATION**: especifique um local do Amazon S3 na sua conta da Amazon Web Services para armazenar os metadados de vazamento, caso o tamanho da resposta da função do Lambda exceda 4 MB.  
![\[Especificar valores para as variáveis de ambiente da função do Lambda.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-6.png)

1. Escolha **Salvar**.

Neste ponto, você está pronto para configurar o Athena para usar sua função do Lambda para se conectar ao metastore do Hive. Para obter as etapas, consulte [Configurar o Athena para usar um conector de metastore do Hive implantado](connect-data-source-hive-existing-lambda.md).

# Configurar o Athena para usar um conector de metastore do Hive implantado
<a name="connect-data-source-hive-existing-lambda"></a>

Depois de implantar um conector de origem dos dados do Lambda em sua conta, como `AthenaHiveMetastoreFunction`, você pode configurar o Athena para usá-lo. Para isso, crie um nome de origem dos dados que faça referência a sua metastore externa do Hive para usar em suas consultas do Athena.

**Para conectar o Athena ao metastore do Hive usando uma função do Lambda existente**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Escolha **Fontes de dados e catálogos**.

1. Na página **Fontes de dados e catálogos**, escolha **Criar fonte de dados**.

1. Na página **Choose a data source** (Escolher uma origem dos dados), em **Data sources** (Origens de dados), escolha **S3 - Apache Hive metastore**.

1. Escolha **Próximo**.

1. Na seção **Data source details** (Detalhes da origem dos dados), em **Data source name** (Nome da origem dos dados), insira o nome que deseja usar em suas instruções SQL ao consultar a origem dos dados pelo Athena (por exemplo, `MyHiveMetastore`). O nome pode ter até 127 caracteres e deve ser exclusivo na sua conta. Ele não poderá ser alterado após a criação. Os caracteres válidos são a-z, A-Z, 0-9, \$1 (sublinhado), @ (arroba) e - (hífen). Os nomes `awsdatacatalog`, `hive`, `jmx` e `system` são reservados pelo Athena e não podem ser usados como nomes de origens dos dados. 

1. Na seção **Connection details** (Detalhes da conexão), use a caixa **Select or enter a Lambda function** (Selecionar ou inserir uma função do Lambda) para escolher o nome da função que você acabou de criar. O ARN da função do Lambda é exibido.

1. (Opcional) Para **Tags**, adicione pares de chave-valor a associar com essa origem dos dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise os detalhes da origem dos dados e escolha **Create data source** (Criar origem dos dados). 

1. A seção **Data source details** (Detalhes da origem dos dados) da página de sua origem dos dados mostra informações sobre o novo conector.

   Agora você poderá usar o **Data source name** (Nome da origem dos dados) especificado para fazer referência ao metastore do Hive em suas consultas SQL no Athena.

   Nas consultas SQL, use a seguinte sintaxe de exemplo, substituindo `ehms-catalog` pelo nome da origem dos dados especificada anteriormente.

   ```
   SELECT * FROM ehms-catalog.CustomerData.customers 
   ```

1. Para visualizar, editar ou excluir as fontes de dados criadas, consulte [Gerenciar suas fontes de dados](data-sources-managing.md).

# Omitir o nome do catálogo em consultas do metastore externo do Hive
<a name="datastores-hive-default-catalog"></a>

Ao executar consultas DML e DDL em metastores externos do Hive, você pode simplificar a sintaxe da consulta omitindo o nome do catálogo se esse nome estiver selecionado no editor de consulta. Certas restrições se aplicam a essa funcionalidade.

## Instruções DML
<a name="datastores-hive-default-catalog-dml-statements"></a>

**Como executar consultas com catálogos registrados**

1. Você pode colocar o nome da origem dos dados antes do banco de dados usando a sintaxe `[[data_source_name].database_name].table_name`, como no exemplo a seguir.

   ```
   select * from  "hms-catalog-1".hms_tpch.customer limit 10;
   ```

1. Quando a origem dos dados que você deseja usar já estiver selecionada no editor de consultas, você poderá omitir o nome da consulta, como no exemplo a seguir.

   ```
   select * from hms_tpch.customer limit 10:
   ```  
![\[Uma consulta DML usando uma origem dos dados padrão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datastores-hive-default-catalog-2.png)

1. Quando você usa várias origens dos dados em uma consulta, pode omitir somente o nome da origem dos dados padrão e especificar o nome completo de qualquer origem dos dados não padrão. 

   Por exemplo, suponha que `AwsDataCatalog` esteja selecionado como origem dos dados padrão no editor de consultas. A instrução `FROM` no trecho de consulta a seguir qualifica totalmente os nomes das duas primeiras origens dos dados, mas omite o nome da terceira porque ela está no catálogo de dados do AWS Glue.

   ```
   ...
   FROM ehms01.hms_tpch.customer,
            "hms-catalog-1".hms_tpch.orders,
            hms_tpch.lineitem
   ...
   ```

## Instruções DDL
<a name="datastores-hive-default-catalog-ddl-statements"></a>

As instruções DDL do Athena a seguir permitem prefixos de nome de catálogo. Prefixos de nome de catálogo em outras instruções DDL causam erros de sintaxe.

```
SHOW TABLES [IN [catalog_name.]database_name] ['regular_expression']

SHOW TBLPROPERTIES [[catalog_name.]database_name.]table_name [('property_name')]

SHOW COLUMNS IN [[catalog_name.]database_name.]table_name

SHOW PARTITIONS [[catalog_name.]database_name.]table_name

SHOW CREATE TABLE [[catalog_name.][database_name.]table_name

DESCRIBE [EXTENDED | FORMATTED] [[catalog_name.][database_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]
```

Assim como acontece com as instruções DML, você pode omitir a origem dos dados e os prefixos do banco de dados da consulta quando a origem dos dados e o banco de dados são selecionados no editor de consultas.

Na imagem a seguir, a origem dos dados `hms-catalog-1` e o banco de dados `hms_tpch` são selecionados no editor de consultas. A instrução `show create table customer` é bem-sucedida mesmo que o prefixo `hms-catalog-1` e o nome do banco de dados `hms_tpch` sejam omitidos da consulta em si.

![\[Uma instrução DDL que usa o catálogo padrão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datastores-hive-default-catalog-4.png)


## Especificar uma origem de dados padrão em uma string de conexão JDBC
<a name="datastores-hive-default-catalog-jdbc"></a>

Ao usar o driver JDBC do Athena para conectar o Athena a um metastore externo do Hive, você pode usar o parâmetro `Catalog` para especificar o nome da origem de dados padrão na string de conexão em um editor SQL, como o [SQL Workbench](https://www.sql-workbench.eu/index.html).

**nota**  
Para baixar os drivers JDBC do Athena mais recentes, consulte [Usar o Athena com o driver JDBC](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html).

A cadeia de conexão a seguir especifica a origem dos dados padrão*hms-catalog-name*.

```
    jdbc:awsathena://AwsRegion=us-east-1;S3OutputLocation=s3://amzn-s3-demo-bucket/lambda/results/;Workgroup=AmazonAthenaPreviewFunctionality;Catalog=hms-catalog-name;
```

A imagem a seguir mostra um exemplo de URL de conexão JDBC como configurado no SQL Workbench.

![\[Configurar um URL de conexão JDBC no SQL Workbench.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/datastores-hive-default-catalog-jdbc-1.jpg)


# Trabalhar com visualizações do Hive
<a name="hive-views"></a>

Você pode usar o Athena para consultar visualizações existentes em seus metastores externos do Apache Hive. O Athena traduz as visualizações dinamicamente em tempo de execução sem alterar a visualização original ou armazenar a tradução.

Por exemplo, suponha que você tenha uma visualização do Hive que usa uma sintaxe semelhante a `LATERAL VIEW explode()`, não compatível com o Athena, como mostrado a seguir:

```
CREATE VIEW team_view AS 
SELECT team, score 
FROM matches 
LATERAL VIEW explode(scores) m AS score
```

O Athena traduz a string de consulta da visualização do Hive em uma instrução que o Athena pode executar, como esta:

```
SELECT team, score
FROM matches
CROSS JOIN UNNEST(scores) AS m (score)
```

Para obter informações sobre como conectar um metastore externo do Hive ao Athena, consulte [Usar um metastore externa do Hive](connect-to-data-source-hive.md).

## Considerações e limitações
<a name="hive-views-considerations-and-limitations"></a>

Ao consultar visualizações do Hive no Athena, considere os seguintes pontos:
+ O Athena não oferece suporte à criação de visualizações do Hive. Você pode criar visualizações do Hive no seu metastore externo do Hive, que pode então ser consultado usando o Athena.
+ O Athena não oferece suporte a UDFs personalizadas para visualizações do Hive.
+ Devido a um problema conhecido no console do Athena, as visualizações do Hive aparecem na lista de tabelas, e não na lista de visualizações.
+ Embora o processo de tradução seja automático, certas funções do Hive não são compatíveis com exibições do Hive ou exigem um tratamento especial. Para obter mais informações, consulte a seção a seguir:

## Limitações de suporte às funções do Hive
<a name="hive-views-function-limitations"></a>

Esta seção destaca as funções do Hive que não são compatíveis com visualizações do Hive no Athena ou que exigem um tratamento especial. Como o Athena atualmente oferece suporte principalmente a funções do Hive 2.2.0, funções disponíveis somente em versões superiores (como Hive 4.0.0) não são compatíveis. Para obter uma lista completa de funções do Hive, consulte o [manual de idioma de UDFs do Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Funções agregadas
<a name="hive-views-aggregate-functions"></a>

#### Funções agregadas que exigem tratamento especial
<a name="hive-views-aggregate-functions-special-handling"></a>

A função agregada a seguir para visualizações do Hive exige um tratamento especial.
+ **Avg**: em vez de `avg(INT i)`, use `avg(CAST(i AS DOUBLE))`.

#### Funções agregadas sem suporte
<a name="hive-views-aggregate-functions-not-supported"></a>

O Athena não oferece suporte às funções agregadas do Hive a seguir para visualizações do Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

O Athena não oferece suporte a funções de regressão como `regr_count`, `regr_r2` e `regr_sxx` para visualizações do Hive.

### Funções de data sem suporte
<a name="hive-views-date-functions-not-supported"></a>

O Athena não oferece suporte às funções de data do Hive a seguir para visualizações do Hive.

```
date_format(date/timestamp/string ts, string fmt)
day(string date)
dayofmonth(date)
extract(field FROM source)
hour(string date)
minute(string date)
month(string date)
quarter(date/timestamp/string)
second(string date)
weekofyear(string date)
year(string date)
```

### Funções de mascaramento sem suporte
<a name="hive-views-masking-functions-not-supported"></a>

O Athena não oferece suporte a funções de mascaramento do Hive como `mask()` e `mask_first_n()` para visualizações do Hive.

### Funções diversas
<a name="hive-views-miscellaneous-functions"></a>

#### Funções diversas que exigem tratamento especial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

As funções diversas para visualizações do Hive a seguir exigem tratamento especial.
+ **md5**: o Athena oferece suporte a `md5(binary)`, mas não a `md5(varchar)`.
+ **explode**: o Athena oferece suporte a `explode` quando usada com a seguinte sintaxe:

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **posexplode**: o Athena oferece suporte a `posexplode` quando usada com a seguinte sintaxe:

  ```
  LATERAL VIEW [OUTER] POSEXPLODE(<argument>)           
  ```

  Na saída `(pos, val)`, o Athena trata a coluna `pos` como `BIGINT`. Por isso, poderá ser necessário converter a coluna `pos` em `BIGINT` para evitar uma visualização obsoleta. O exemplo a seguir ilustra essa técnica.

  ```
  SELECT CAST(c AS BIGINT) AS c_bigint, d 
  FROM table LATERAL VIEW POSEXPLODE(<argument>) t AS c, d
  ```

#### Funções diversas sem suporte
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

O Athena não oferece suporte às funções do Hive a seguir para visualizações do Hive.

```
aes_decrypt
aes_encrypt
current_database
current_user
inline
java_method
logged_in_user
reflect
sha/sha1/sha2
stack
version
```

### Operadores
<a name="hive-views-operators"></a>

#### Operadores que exigem tratamento especial
<a name="hive-views-operators-special-handling"></a>

Os operadores para visualizações do Hive a seguir exigem tratamento especial.
+ **Operador de módulo (%)**: como o tipo `DOUBLE` implicitamente converte em `DECIMAL(x,y)`, a sintaxe a seguir pode gerar uma mensagem de erro View is stale (Visualização obsoleta):

  ```
  a_double % 1.0 AS column
  ```

  Para contornar esse problema, use `CAST`, como no exemplo a seguir.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Operador de divisão (/)**: no Hive , `int` dividido por `int` gera um `double`. No Athena, a mesma operação gera um truncado `int`.

#### Operadores sem suporte
<a name="hive-views-operators-not-supported"></a>

O Athena não oferece suporte aos operadores a seguir para visualizações do Hive.

**\$1A**: bitwise `NOT`

**A ^ b**: bitwise `XOR`

**A & b**: bitwise `AND`

**A \$1 b**: bitwise `OR`

**A <=> b**: retorna o mesmo resultado que o operador igual a (`=`) para operandos não nulos. Retornará `TRUE` se ambos forem `NULL`, ou `FALSE` se um deles for `NULL`.

### Funções de string
<a name="hive-views-string-functions"></a>

#### Funções de string que exigem tratamento especial
<a name="hive-views-string-functions-special-handling"></a>

As funções de string para visualizações do Hive a seguir exigem tratamento especial.
+ **chr(bigint\$1double a)**: o Hive permite argumentos negativos; o Athena não.
+ **instr(string str, string substr)**: como o mapeamento do Athena para a função `instr` retorna `BIGINT` em vez de `INT`, use a seguinte sintaxe:

  ```
  CAST(instr(string str, string substr) as INT)         
  ```

  Sem essa etapa, a visualização será considerada obsoleta.
+ **length(string a)**: como o mapeamento do Athena para a função `length` retorna `BIGINT` em vez de `INT`, use a seguinte sintaxe para que a visualização não seja considerada obsoleta:

  ```
  CAST(length(string str) as INT)
  ```

#### Funções de string sem suporte
<a name="hive-views-string-functions-not-supported"></a>

O Athena não oferece suporte às funções de string do Hive a seguir para visualizações do Hive.

```
ascii(string str)
character_length(string str)
decode(binary bin, string charset)
encode(string src, string charset)
elt(N int,str1 string,str2 string,str3 string,...)
field(val T,val1 T,val2 T,val3 T,...)
find_in_set(string str, string strList)
initcap(string A)
levenshtein(string A, string B)
locate(string substr, string str[, int pos])
octet_length(string str)
parse_url(string urlString, string partToExtract [, string keyToExtract])
printf(String format, Obj... args)
quote(String text)
regexp_extract(string subject, string pattern, int index)
repeat(string str, int n)
sentences(string str, string lang, string locale)
soundex(string A)
space(int n)
str_to_map(text[, delimiter1, delimiter2])
substring_index(string A, string delim, int count)
```

### Funções XPath sem suporte
<a name="hive-views-xpath-functions-not-supported"></a>

O Athena não oferece suporte a funções XPath do Hive como `xpath`, `xpath_short` e `xpath_int` para visualizações do Hive.

## Solução de problemas
<a name="hive-views-troubleshooting"></a>

Ao usar visualizações do Hive no Athena, você poderá encontrar os seguintes problemas:
+ **View *<view name>* is stale** (A visualização <nome da visualização> está obsoleta): esta mensagem geralmente indica uma não correspondência de tipo entre a visualização no Hive e no Athena. Se a mesma função no [manual de idioma de UDFs do Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) e na documentação sobre [funções e operadores do Presto](https://prestodb.io/docs/current/functions.html) tiver assinaturas diferentes, tente converter o tipo de dado sem correspondência.
+ **Function not registered** (Função não registrada): o Athena atualmente não oferece suporte à função. Para obter mais informações, consulte as seções anteriores neste documento.

# Usar a AWS CLI com metastores do Hive
<a name="datastores-hive-cli"></a>

É possível usar os comandos da CLI `aws athena` para gerenciar os catálogos de dados do metastore do Hive que você usa com o Athena. Depois de definir um ou mais catálogos para usar com o Athena, você poderá referenciar esses catálogos em seus comandos DDL e DML `aws athena`.

## Usar a AWS CLI para gerenciar catálogos de metastore do Hive
<a name="datastores-hive-cli-manage-hive-catalogs"></a>

### Registrar um catálogo: create-data-catalog
<a name="datastores-hive-cli-registering-a-catalog"></a>

Para registrar um catálogo de dados, use o comando `create-data-catalog`. Use o parâmetro `name` para especificar o nome que você deseja usar para o catálogo. Insira o ARN da função do Lambda na opção `metadata-function` do argumento `parameters`. Para criar tags para o novo catálogo, use o parâmetro `tags` com um ou mais pares de argumentos `Key=key,Value=value` separados por espaço.

O exemplo a seguir registra o catálogo de metastore do Hive chamado `hms-catalog-1`. O comando foi formatado para legibilidade.

```
$ aws athena create-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "Hive Catalog 1"
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3,sdk-version=1.0" 
 --tags Key=MyKey,Value=MyValue
 --region us-east-1
```

### Mostrar detalhes do catálogo: get-data-catalog
<a name="datastores-hive-cli-showing-details-of-a-catalog"></a>

Para mostrar os detalhes de um catálogo, passe o nome do catálogo para o comando `get-data-catalog`, como no exemplo a seguir.

```
$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "DataCatalog": {
        "Name": "hms-catalog-1",
        "Description": "Hive Catalog 1",
        "Type": "HIVE",
        "Parameters": {
            "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
            "sdk-version": "1.0"
        }
    }
}
```

### Listar catálogos registrados: list-data-catalogs
<a name="datastores-hive-cli-listing-registered-catalogs"></a>

Para listar os catálogos registrados, use o comando `list-data-catalogs` e, opcionalmente, especifique uma região, como no exemplo a seguir. Os catálogos listados sempre incluem o AWS Glue.

```
$ aws athena list-data-catalogs --region us-east-1
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "DataCatalogs": [
        {
            "CatalogName": "AwsDataCatalog",
            "Type": "GLUE"
        },
        {
            "CatalogName": "hms-catalog-1",
            "Type": "HIVE",
            "Parameters": {
                "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
                "sdk-version": "1.0"
            }
        }
    ]
}
```

### Atualizar um catálogo: update-data-catalog
<a name="datastores-hive-cli-updating-a-catalog"></a>

Para atualizar um catálogo de dados, use o comando `update-data-catalog`, como no exemplo a seguir. O comando foi formatado para legibilidade.

```
$ aws athena update-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "My New Hive Catalog Description" 
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new,sdk-version=1.0" 
 --region us-east-1
```

### Excluir um catálogo: delete-data-catalog
<a name="datastores-hive-cli-deleting-a-catalog"></a>

Para excluir um catálogo de dados, use o comando `delete-data-catalog`, como no exemplo a seguir.

```
$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1
```

### Mostrar detalhes do banco de dados: get-database
<a name="datastores-hive-cli-showing-details-of-a-database"></a>

Para mostrar os detalhes de um banco de dados, passe o nome do catálogo e do banco de dados para o comando `get-database`, como no exemplo a seguir.

```
$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "Database": {
        "Name": "mydb",
        "Description": "My database",
        "Parameters": {
            "CreatedBy": "Athena",
            "EXTERNAL": "TRUE"
        }
    }
}
```

### Listar bancos de dados em um catálogo: list-databases
<a name="datastores-hive-cli-listing-databases"></a>

Para listar os bancos de dados em um catálogo, use o comando `list-databases` e, opcionalmente, especifique uma região, como no exemplo a seguir.

```
$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "DatabaseList": [
        {
            "Name": "default"
        },
        {
            "Name": "mycrawlerdatabase"
        },
        {
            "Name": "mydatabase"
        },
        {
            "Name": "sampledb",
            "Description": "Sample database",
            "Parameters": {
                "CreatedBy": "Athena",
                "EXTERNAL": "TRUE"
            }
        },
        {
            "Name": "tpch100"
        }
    ]
}
```

### Mostrar detalhes da tabela: get-table-metadata
<a name="datastores-hive-cli-showing-details-of-a-table"></a>

Para mostrar os metadados de uma tabela, incluindo nomes de coluna e tipos de dados, passe o nome do catálogo, banco de dados e o nome da tabela para o comando `get-table-metadata`, como no exemplo a seguir.

```
$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "TableMetadata": {
        "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        }
}
```

### Visualizar metadados de todas as tabelas em um banco de dados: list-table-metadata
<a name="datastores-hive-cli-showing-all-table-metadata"></a>

Para mostrar os metadados de todas as tabelas em um banco de dados, passe o nome do catálogo e do nome do banco de dados para o comando `list-table-metadata`. O comando `list-table-metadata` é semelhante ao comando `get-table-metadata`, exceto que você não especifica um nome de tabela. Para limitar o número de resultados, você pode usar a opção `--max-results`, como no exemplo a seguir. 

```
$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "TableMetadataList": [
        {
            "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        },
        {
            "Name": "clearinghouse_data",
            "CreateTime": 1589255544.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "location",
                    "Type": "string"
                },
                {
                    "Name": "stock_count",
                    "Type": "int"
                },
                {
                    "Name": "quantity_shipped",
                    "Type": "int"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "location": "s3://amzn-s3-demo-bucket/",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "transient_lastDdlTime": "1589255544"
            }
        }
    ],
    "NextToken": "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJ0Ljk0YWZjYjk1MjJjNTQ1YmU4Y2I5OWE5NTg0MjFjYTYzIn0sIlJBTkdFX0tFWSI6eyJzIjoiY2xlYXJpbmdob3VzZV9kYXRhIn19LCJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE1ODkzNDIwMjIsIm5hbm9zIjo2NTUwMDAwMDB9fQ=="
}
```

## Executar instruções DDL e DML
<a name="datastores-hive-cli-running-ddl-and-dml"></a>

Ao usar a AWS CLI para executar instruções DDL e DML, você pode passar o nome do catálogo de metastore do Hive de uma das duas maneiras:
+ Diretamente para as declarações que são compatíveis com ele.
+ Para o parâmetro `--query-execution-context` de `Catalog`.

### Instruções DDL
<a name="datastores-hive-cli-ddl-statements"></a>

O exemplo a seguir passa o nome do catálogo diretamente como parte da instrução DDL `show create table`. O comando foi formatado para legibilidade.

```
$ aws athena start-query-execution 
 --query-string "show create table hms-catalog-1.hms_tpch_partitioned.lineitem" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

A instrução DDL `show create table` de exemplo a seguir usa o parâmetro `Catalog` de `--query-execution-context` para passar o nome do catálogo de metastore do Hive `hms-catalog-1`. O comando foi formatado para legibilidade.

```
$ aws athena start-query-execution 
 --query-string "show create table lineitem" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

### Instruções DML
<a name="datastores-hive-cli-dml-statements"></a>

O exemplo da instrução DML `select` a seguir passa o nome do catálogo diretamente para a consulta. O comando foi formatado para legibilidade.

```
$ aws athena start-query-execution
 --query-string "select * from hms-catalog-1.hms_tpch_partitioned.customer limit 100" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

O seguinte exemplo da instrução DML `select` usa o parâmetro `Catalog` de `--query-execution-context` para passar o nome do catálogo de metastore do Hive `hms-catalog-1`. O comando foi formatado para legibilidade.

```
$ aws athena start-query-execution 
 --query-string "select * from customer limit 100" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

# Modificar o conector externo do Hive metastore do Athena
<a name="datastores-hive-reference-implementation"></a>

Se você tiver requisitos especiais, poderá modificar o conector Athena para o metastore externo do Hive para seu próprio uso. O Athena oferece uma implementação de referência do conector no GitHub.com em [https://github.com/awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore). A maioria dos casos de uso não exige que você modifique a implementação de referência. No entanto, se necessário, é possível modificar o código-fonte e criar você mesmo os artefatos.

A implementação de referência é um projeto [Apache Maven](https://maven.apache.org/) que tem os seguintes módulos:
+ `hms-service-api`: contém as operações de API entre a função do Lambda e os clientes dos serviços do Athena. Essas operações da API são definidas na interface do `HiveMetaStoreService`. Como este é um contrato de serviço, você não deve alterar nada neste módulo.
+ `hms-lambda-handler`: um conjunto de manipuladores padrão do Lambda que processa todas as chamadas de API de metastore do Hive. A classe `MetadataHandler` é o dispatcher para todas as chamadas da API. Você não precisa alterar este pacote.
+ `hms-lambda-func`: um exemplo de função do Lambda que tem os componentes a seguir.
  + `HiveMetaStoreLambdaFunc` – um exemplo de função do Lambda que estende `MetadataHandler`.
  + `ThriftHiveMetaStoreClient`: um cliente Thrift que se comunica com o metastore do Hive. Esse cliente foi escrito para o Hive 2.3.0. Se você usar uma versão diferente do Hive, talvez seja necessário atualizar essa classe para garantir que os objetos de resposta sejam compatíveis.
  + `ThriftHiveMetaStoreClientFactory`: controla o comportamento da função do Lambda. Por exemplo, você pode fornecer seu próprio conjunto de provedores de manipuladores substituindo o método `getHandlerProvider()`.
  + `hms.properties`: configura a função do Lambda. A maioria dos casos requer a atualização de apenas as duas propriedades a seguir.
    + `hive.metastore.uris` – o URI do metastore do Hive no formato `thrift://<host_name>:9083`.
    + `hive.metastore.response.spill.location`: o local do Amazon S3 para armazenar objetos de resposta quando os tamanhos excedem um determinado limite (por exemplo, 4 MB). O limite é definido na propriedade `hive.metastore.response.spill.threshold`. Não é recomendável alterar o valor padrão.
**nota**  
Essas duas propriedades podem ser substituídas pelas [variáveis de ambiente do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html) `HMS_URIS` e `SPILL_LOCATION`. Use essas variáveis em vez de recompilar o código-fonte da função do Lambda para usar a função com um metastore do Hive ou local de vazamento diferente.
+ `hms-lambda-layer`: um projeto de montagem do Maven que coloca `hms-service-api`, `hms-lambda-handler` e suas dependências em um arquivo `.zip`. O arquivo `.zip` é registrado como uma camada do Lambda para uso por várias funções do Lambda.
+ `hms-lambda-rnp`: registra as respostas de uma função do Lambda e, em seguida, usa-as para reproduzir a resposta. É possível usar esse modelo para simular respostas do Lambda para testes.

## Criar seus próprios artefatos
<a name="datastores-hive-reference-implementation-building-the-artifacts-yourself"></a>

Após modificar o código-fonte, é possível criar os artefatos você mesmo e carregá-los em um local do Amazon S3.

Antes de criar os artefatos, atualize as propriedades `hive.metastore.uris` e `hive.metastore.response.spill.location` no arquivo `hms.properties` no módulo `hms-lambda-func`.

Para criar os artefatos, você deve ter o Apache Maven instalado e executar o comando `mvn install`. Isso gera o arquivo `.zip` de camada na pasta de saída chamada `target` no módulo `hms-lambda-layer` e o arquivo `.jar` da função do Lambda no módulo `hms-lambd-func`.

# Gerenciar suas fontes de dados
<a name="data-sources-managing"></a>

Você pode usar a página **Fontes de dados e catálogos** do console do Athena para gerenciar as fontes de dados que você cria.

**Como exibir uma fonte de dados**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Fontes de dados e catálogos**.

1. Na lista de origens dos dados, escolha o nome da origens dos dados que deseja exibir.
**nota**  
Os itens na coluna **Data source name** (Nome da fonte de dados) correspondem à saída da ação da API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html) e do comando da CLI [list-data-catalogs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/list-data-catalogs.html).

**Como editar uma fonte de dados**

1. Na página **Fontes de dados e catálogos**, execute um dos seguintes procedimentos:
   + Selecione o botão ao lado do nome do catálogo e escolha **Actions** (Ações), **Edit** (Editar). 
   + Escolha o nome da origem dos dados. Em seguida, na página de detalhes, escolha **Actions** (Ações), **Edit** (Editar).

1. Na página **Edit** (Editar), é possível escolher uma função do Lambda diferente para a origem dos dados, alterar a descrição ou adicionar etiquetas personalizadas. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Salvar**.

1. Para editar seu **AwsDataCatalog** na origem dos dados, escolha o link **AwsDataCatalog** para abrir a página de detalhes. Em seguida, na página de detalhes, escolha o link para o console do AWS Glue, onde você pode editar seu catálogo.

**Para compartilhar uma origem dos dados**  
Para obter informações sobre como compartilhar origens dos dados, visite os links a seguir.
+ Para origens dos dados não baseadas Lambda não Hive, consulte [Habilitar consultas federadas entre contas](xacct-fed-query-enable.md).
+ Para AWS Glue Data Catalogs, veja [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).

**Como excluir uma fonte de dados**

1. Na página **Fontes de dados e catálogos**, execute um dos seguintes procedimentos:
   + Selecione o botão ao lado do nome do catálogo e escolha **Actions** (Ações), **Delete** (Excluir). 
   + Escolha o nome da origem dos dados e, na página de detalhes, escolha **Actions** (Ações), **Delete** (Excluir).
**nota**  
O **AwsDataCatalog** é a origem dos dados padrão da sua conta e não pode ser excluído.

   Você é avisado que, ao excluir uma origem dos dados, seu catálogo de dados, tabelas e exibições correspondentes são removidos do editor de consultas. As consultas salvas que usavam a origem dos dados não serão mais executadas no Athena.

1. Para confirmar a exclusão, digite o nome da origem dos dados e escolha **Delete** (Excluir).

# Conectar ao Amazon Athena com drivers JDBC e ODBC
<a name="athena-bi-tools-jdbc-odbc"></a>

Para explorar e visualizar os dados com as ferramentas de business intelligence, fazer download, instalar e configurar um driver Open Database Connectivity (ODBC) ou Java Database Connectivity (JDBC).

**Topics**
+ [Conectar ao Athena com JDBC](connect-with-jdbc.md)
+ [Conectar ao Athena com ODBC](connect-with-odbc.md)
+ [Usar a propagação de identidade confiável com drivers](using-trusted-identity-propagation.md)

Consulte também os seguintes tópicos da Central de Conhecimento da AWS e do blog de big data da AWS:
+ [How can I use my IAM role credentials or switch to another IAM role when connecting to Athena using the JDBC driver? (Como posso usar minhas credenciais de função do IAM ou alternar para outra função do IAM ao me conectar ao Athena usando o driver JDBC?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-iam-jdbc-driver/) 
+ [Como estabelecer a confiança entre o ADFS e a AWS e usar as credenciais do Active Directory para se conectar ao Amazon Athena com o driver ODBC](https://aws.amazon.com/blogs/big-data/setting-up-trust-between-adfs-and-aws-and-using-active-directory-credentials-to-connect-to-amazon-athena-with-odbc-driver/) 

# Conectar ao Amazon Athena com JDBC
<a name="connect-with-jdbc"></a>

O Amazon Athena oferece dois drivers JDBC, as versões 2.x e 3.x. O driver Athena JDBC 3.x é o driver de nova geração que oferece melhor desempenho e compatibilidade. O driver JDBC 3.x é compatível com a leitura de resultados de consultas diretamente no Amazon S3, o que melhora o desempenho de aplicações que consomem resultados de consultas de grande porte. O novo driver também tem menos dependências de terceiros, o que facilita a integração com ferramentas de BI e aplicações personalizadas. Na maioria dos casos, você pode usar o novo driver sem alterações ou com o mínimo de alterações na configuração existente.
+ Para baixar o driver JDBC 3.x, consulte [Driver JDBC 3.x do Athena](jdbc-v3-driver.md). 
+ Para baixar o driver JDBC 2.x, consulte [Driver JDBC 2.x do Athena](jdbc-v2.md). 

**Topics**
+ [

# Driver JDBC 3.x do Athena
](jdbc-v3-driver.md)
+ [

# Driver JDBC 2.x do Athena
](jdbc-v2.md)

# Driver JDBC 3.x do Athena
<a name="jdbc-v3-driver"></a>

Você pode usar uma conexão JDBC para se conectar ao Amazon Athena em muitas ferramentas e aplicações de clientes SQL de terceiros.

## Requisitos do sistema
<a name="jdbc-v3-driver-system-requirements"></a>
+ Ambiente de runtime do Java 8 (ou superior)
+ Pelo menos 20 MB de espaço em disco disponível

## Considerações e limitações
<a name="jdbc-v3-driver-considerations-and-limitations"></a>

A seguir estão algumas considerações e limitações do driver JDBC 3.x. do Athena.
+ **Registro em log**: o driver 3.x usa o [SLF4J](https://www.slf4j.org/manual.html), que é uma camada de abstração que permite o uso de qualquer um dos diversos sistemas de registro em log em runtime.
+ **Criptografia**: quando usa o captador do Amazon S3 com a opção de criptografia do `CSE_KMS`, o cliente do Amazon S3 não pode descriptografar os resultados armazenados em um bucket do Amazon S3. Se você precisar de criptografia `CSE_KMS`, poderá continuar a usar o buscador de streaming. Está nos planos a compatibilidade com a criptografia `CSE_KMS` com o buscador Amazon S3.

## Download do driver JDBC 3.x
<a name="jdbc-v3-driver-download"></a>

Esta seção contém informações de download e licença para o driver JDBC 3.x.

**Importante**  
Quando você usar o driver JDBC 3.x, preste atenção aos seguintes requisitos:  
**Porta 444 aberta**: mantenha a porta 444, que o Athena usa para fazer uma transmissão dos resultados das consultas, aberta para o tráfego de saída. Ao usar um endpoint do PrivateLink para se conectar ao Athena, verifique se o grupo de segurança anexado ao endpoint do PrivateLink está aberto para o tráfego de entrada na porta 444. 
**Política athena:GetQueryResultsStream**: adicione a ação de política `athena:GetQueryResultsStream` para as entidades principais do IAM que usam o driver JDBC. Essa ação de política não é exposta diretamente com a API. Ela apenas é usada com drivers ODBC e JDBC como parte do suporte a resultados de transmissão. Para visualizar um exemplo de política, consulte [AWSPolítica gerenciada : AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy). 

Para baixar o driver JDBC versão 3.x do Amazon Athena, acesse os links a seguir.

### Jar com dependências do driver JDBC
<a name="jdbc-v3-driver-download-uber-jar"></a>

O download a seguir empacota o driver e todas as suas dependências no mesmo arquivo `.jar`. Esse download é comumente usado para clientes SQL de terceiros.

[3.7.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.7.0/athena-jdbc-3.7.0-with-dependencies.jar)

### Jar sem dependências do driver JDBC
<a name="jdbc-v3-driver-download-lean-jar"></a>

O download a seguir é um arquivo `.zip` que contém o `.jar` sem dependências para o driver e arquivos `.jar` separados para as dependências do driver. Esse download é comumente usado para aplicações personalizadas que podem ter dependências conflitantes com as dependências que o driver usa. Esse download é útil se você quiser escolher quais dependências do driver incluir no jar sem dependências e quais excluir se a aplicação personalizada já contiver uma ou mais dependências.

[3.7.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.7.0/athena-jdbc-3.7.0-lean-jar-and-separate-dependencies-jars.zip)

### Licença
<a name="jdbc-v3-driver-license"></a>

O link a seguir contém o contrato de licença do driver JDBC 3.x.

[Licença](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.7.0/LICENSE.txt)

## Propagação de identidade confiável com JDBC
<a name="jdbc-v3-driver-trusted-identity"></a>

Agora é possível se conectar ao Amazon Athena usando drivers JDBC com recursos de login único por meio do Centro de Identidade do AWS Identity and Access Management. Quando você acessa o Athena a partir de ferramentas como PowerBI, Tableau ou DBeaver, sua identidade e permissões são propagadas automaticamente para o Athena por meio do Centro de Identidade do IAM. Para obter mais informações, consulte [Usar a propagação de identidade confiável com drivers do Amazon Athena](using-trusted-identity-propagation.md).

**Topics**
+ [

## Requisitos do sistema
](#jdbc-v3-driver-system-requirements)
+ [

## Considerações e limitações
](#jdbc-v3-driver-considerations-and-limitations)
+ [

## Download do driver JDBC 3.x
](#jdbc-v3-driver-download)
+ [

## Propagação de identidade confiável com JDBC
](#jdbc-v3-driver-trusted-identity)
+ [

# Conceitos básicos do driver JDBC 3.x
](jdbc-v3-driver-getting-started.md)
+ [

# Parâmetros de conexão do JDBC 3.x do Amazon Athena
](jdbc-v3-driver-connection-parameters.md)
+ [

# Outra configuração do JDBC 3.x
](jdbc-v3-driver-other-configuration.md)
+ [

# Notas de versão do JDBC 3.x do Amazon Athena
](jdbc-v3-driver-release-notes.md)
+ [

# Versões anteriores do driver JDBC 3.x driver do Athena
](jdbc-v3-driver-previous-versions.md)

# Conceitos básicos do driver JDBC 3.x
<a name="jdbc-v3-driver-getting-started"></a>

Use as informações desta seção para começar a usar o driver JDBC 3.x do Amazon Athena.

**Topics**
+ [

## Instruções de instalação
](#jdbc-v3-driver-installation-instructions)
+ [

## Executar o driver
](#jdbc-v3-driver-running-the-driver)
+ [

## Configurar o driver
](#jdbc-v3-driver-configuring-the-driver)
+ [

## Atualizar o driver Athena JDBC v2
](#jdbc-v3-driver-upgrading-from-the-athena-jdbc-v2-driver-to-v3)

## Instruções de instalação
<a name="jdbc-v3-driver-installation-instructions"></a>

Você pode usar o driver JDBC 3.x em uma aplicação personalizada ou em um cliente SQL de terceiros.

### Em uma aplicação personalizada
<a name="jdbc-v3-driver-installation-in-a-custom-application"></a>

Baixe o arquivo `.zip` que contém o jar do driver e suas dependências. Cada dependência tem seu próprio arquivo `.jar`. Adicione o jar do driver como uma dependência na sua aplicação personalizada. Adicione seletivamente as dependências do jar do driver, com base em você já ter ou não adicionado essas dependências à aplicação de outra fonte.

### Em um cliente SQL de terceiros
<a name="jdbc-v3-driver-installation-in-a-third-party-sql-client"></a>

Baixe o arquivo jar com dependências do driver e adicione-o ao cliente SQL de terceiros seguindo as instruções para esse cliente.

## Executar o driver
<a name="jdbc-v3-driver-running-the-driver"></a>

Para executar o driver, você pode usar uma aplicação personalizada ou um cliente SQL de terceiros.

### Em uma aplicação personalizada
<a name="jdbc-v3-driver-running-in-a-custom-application"></a>

Use a interface JDBC para interagir com o driver JDBC em um programa. O código a seguir mostra um exemplo de aplicação Java personalizada.

```
public static void main(String args[]) throws SQLException {
    Properties connectionParameters = new Properties();
    connectionParameters.setProperty("Workgroup", "primary");
    connectionParameters.setProperty("Region", "us-east-2");
    connectionParameters.setProperty("Catalog", "AwsDataCatalog");
    connectionParameters.setProperty("Database","sampledatabase");
    connectionParameters.setProperty("OutputLocation","s3://amzn-s3-demo-bucket");
    connectionParameters.setProperty("CredentialsProvider","DefaultChain");
    String url = "jdbc:athena://";
    AthenaDriver driver = new AthenaDriver();
    Connection connection = driver.connect(url, connectionParameters);
    Statement statement = connection.createStatement();
    String query = "SELECT * from sample_table LIMIT 10";
    ResultSet resultSet = statement.executeQuery(query);
    printResults(resultSet); // A custom-defined method for iterating over a
                             // result set and printing its contents
}
```

### Em um cliente SQL de terceiros
<a name="jdbc-v3-driver-running-in-a-third-party-sql-client"></a>

Siga a documentação do cliente SQL que você está usando. Normalmente, você usa a interface gráfica do usuário do cliente SQL para inserir e enviar a consulta, e os resultados da consulta são exibidos na mesma interface.

## Configurar o driver
<a name="jdbc-v3-driver-configuring-the-driver"></a>

Você pode usar os parâmetros de conexão para configurar o driver JDBC do Amazon Athena. Para obter os parâmetros de conexão compatíveis, consulte [Parâmetros de conexão do JDBC 3.x do Amazon Athena](jdbc-v3-driver-connection-parameters.md).

### Em uma aplicação personalizada
<a name="jdbc-v3-driver-configuring-in-a-custom-application"></a>

Para definir os parâmetros de conexão do driver JDBC em uma aplicação personalizada, faça um dos seguintes procedimentos:
+ Adicione os nomes dos parâmetros e seus valores a um objeto `Properties`. Quando você chamar `Connection#connect`, passe esse objeto junto com a URL. Para obter um exemplo, consulte o exemplo de aplicação Java em [Executar o driver](#jdbc-v3-driver-running-the-driver).
+ Na string de conexão (a URL), use o formato a seguir para adicionar os nomes dos parâmetros e seus valores diretamente após o prefixo do protocolo.

  ```
  <parameterName>=<parameterValue>;
  ```

  Use um ponto e vírgula no final de cada par nome/valor do parâmetro e não deixe espaço em branco após o ponto e vírgula, como no exemplo a seguir.

  ```
  String url = "jdbc:athena://WorkGroup=primary;Region=us-east-1;...;";AthenaDriver driver = new AthenaDriver();Connection connection = driver.connect(url, null);
  ```
**nota**  
Se um parâmetro for especificado tanto na string de conexão quanto no objeto `Properties`, o valor na string de conexão terá precedência. Não é recomendável especificar o mesmo parâmetro em ambos os lugares.
+ Adicione os valores dos parâmetros como argumentos aos métodos de `AthenaDataSource`, como no exemplo a seguir.

  ```
  AthenaDataSource dataSource = new AthenaDataSource();
      dataSource.setWorkGroup("primary");
      dataSource.setRegion("us-east-2");
      ...
      Connection connection = dataSource.getConnection();
      ...
  ```

### Em um cliente SQL de terceiros
<a name="jdbc-v3-driver-configuring-in-a-third-party-sql-client"></a>

Siga as instruções do cliente SQL que você estiver usando. Normalmente, o cliente fornece uma interface gráfica de usuário para inserir os nomes dos parâmetros e seus valores.

## Atualizar o driver Athena JDBC v2
<a name="jdbc-v3-driver-upgrading-from-the-athena-jdbc-v2-driver-to-v3"></a>

A maioria dos parâmetros de conexão do JDBC versão 3 é compatível retroativamente com o driver JDBC versão 2 (Simba). Isso significa que uma string de conexão da versão 2 pode ser reutilizada com a versão 3 do driver. Porém, alguns parâmetros de conexão foram alterados. Essas mudanças estão descritas aqui. Ao atualizar para o driver JDBC versão 3, atualize a configuração existente, se for o caso.

### Classe do driver
<a name="jdbc-v3-driver-upgrading-driver-class"></a>

Algumas ferramentas de BI solicitam que você forneça a classe do driver, encontrada no arquivo `.jar` do driver JDBC. A maioria das ferramentas encontra essa classe automaticamente. O nome totalmente qualificado da classe no driver da versão 3 é `com.amazon.athena.jdbc.AthenaDriver`. No driver da versão 2, a classe era `com.simba.athena.jdbc.Driver`.

### String de conexão
<a name="jdbc-v3-driver-upgrading-connection-string"></a>

O driver da versão 3 usa `jdbc:athena://` como protocolo no início do URL da string de conexão do JDBC. O driver da versão 3 também é compatível com o protocolo `jdbc:awsathena://` da versão 2, mas o uso do protocolo da versão 2 foi descontinuado. Para evitar comportamentos indefinidos, a versão 3 não aceita strings de conexão que comecem com `jdbc:awsathena://` se a versão 2 (ou qualquer outro driver que aceite strings de conexão que comecem com `jdbc:awsathena://`) tiver sido registrada com a classe [DriverManager](https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html).

### Provedores de credenciais
<a name="jdbc-v3-driver-upgrading-credentials-providers"></a>

O driver da versão 2 usa nomes totalmente qualificados para identificar os diferentes provedores de credenciais (por exemplo, `com.simba.athena.amazonaws.auth.DefaultAWSCredentialsProviderChain`). O driver da versão 3 usa nomes mais curtos (por exemplo, `DefaultChain`). Os novos nomes são descritos nas seções correspondentes para cada provedor de credenciais.

[Os provedores de credenciais personalizadas escritos para o driver da versão 2 precisam ser modificados para que o driver da versão 3 implemente a interface [AWSCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.html) a partir do novo AWS SDK para Java em vez da interface AWSCredentialsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html) a partir do AWS SDK para Java anterior.

`PropertiesFileCredentialsProvider` não é suportado no driver JDBC 3.x. O provedor foi usado no driver JDBC 2.x, mas pertence à versão anterior do AWS SDK para Java, que está chegando ao fim do suporte. Para obter a mesma funcionalidade no driver JDBC 3.x, use o provedor [Credenciais do perfil de configuração da AWS](jdbc-v3-driver-aws-configuration-profile-credentials.md).

### Nível de log
<a name="jdbc-v3-driver-upgrading-log-level"></a>

A tabela a seguir mostra as diferenças nos parâmetros de `LogLevel` dos drivers JDBC versão 2 e versão 3.


****  

| Versão do driver JDBC | Nome do parâmetro | Tipo de parâmetro | Valor padrão | Possíveis valores | Exemplo de string de conexão | 
| --- | --- | --- | --- | --- | --- | 
| v2 | LogLevel | Opcional | 0 | 0-6 | LogLevel=6; | 
| v3 | LogLevel | Opcional | TRACE | OFF, ERROR, WARN, INFO, DEBUG, TRACE | LogLevel=INFO; | 

### Recuperação da ID da consulta
<a name="jdbc-v3-driver-upgrading-query-id-retrieval"></a>

No driver da versão 2, você desempacota uma instância de `Statement` em `com.interfaces.core.IStatementQueryInfoProvider`, uma interface que tem dois métodos: `#getPReparedQueryId` e `#getQueryId`. Você pode usar esses métodos para obter o ID de execução da consulta que foi executada.

No driver da versão 3, você desempacota as instâncias `Statement`, `PreparedStatement` e `ResultSet` na interface `com.amazon.athena.jdbc.AthenaResultSet`. A interface tem um método: `#getQueryExecutionId`.

# Parâmetros de conexão do JDBC 3.x do Amazon Athena
<a name="jdbc-v3-driver-connection-parameters"></a>

Os parâmetros de conexão compatíveis são divididos aqui em três seções: [Parâmetros básicos de conexão](jdbc-v3-driver-basic-connection-parameters.md), [Parâmetros avançados de conexão](jdbc-v3-driver-advanced-connection-parameters.md) e [Parâmetros de conexão de autenticação](jdbc-v3-driver-authentication-connection-parameters.md). As seções Parâmetros de conexão avançados e Parâmetros de conexão de autenticação têm subseções que agrupam os parâmetros relacionados.

**Topics**
+ [

# Parâmetros básicos de conexão
](jdbc-v3-driver-basic-connection-parameters.md)
+ [

# Parâmetros avançados de conexão
](jdbc-v3-driver-advanced-connection-parameters.md)
+ [

# Parâmetros de conexão de autenticação
](jdbc-v3-driver-authentication-connection-parameters.md)

# Parâmetros básicos de conexão
<a name="jdbc-v3-driver-basic-connection-parameters"></a>

As seções a seguir descrevem os parâmetros básicos de conexão do driver JDBC 3.x.

## Região
<a name="jdbc-v3-driver-region"></a>

A Região da AWS onde as consultas serão executadas. Para conferir a lista de regiões, consulte [Amazon Athena endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/athena.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Região | AwsRegion (obsoleto) | Obrigatório (mas se não for fornecido, será pesquisado usando [DefaultAwsRegionProviderChain](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/regions/providers/DefaultAwsRegionProviderChain.html))  | nenhuma | 

## Catálogo
<a name="jdbc-v3-driver-catalog"></a>

O catálogo que contém os bancos de dados e as tabelas que serão acessados com o driver. Para obter mais informações sobre o catálogo de dados, consulte [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Catálogo | nenhuma | Opcional | AwsDataCatalog | 

## Banco de dados
<a name="jdbc-v3-driver-database"></a>

A banco de dados em que as consultas serão executadas. As tabelas que não são explicitamente qualificadas com um nome de banco de dados são resolvidas para esse banco de dados. Para obter informações sobre bancos de dados, consulte [Banco de dados](https://docs.aws.amazon.com/athena/latest/APIReference/API_Database.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Banco de dados | Schema | Opcional | padrão | 

## Grupo de trabalho
<a name="jdbc-v3-driver-workgroup"></a>

O grupo de trabalho no qual as consultas serão executadas. Para obter mais informações sobre grupos de trabalho, consulte [Grupo de trabalho](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| WorkGroup | nenhuma | Opcional | principal | 

## Local de saída
<a name="jdbc-v3-driver-output-location"></a>

O local do Amazon S3 em que os resultados de consultas serão armazenados. Para obter informações sobre o local de saída, consulte [ResultConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OutputLocation | S3OutputLocation (obsoleto) | Obrigatório (a menos que o grupo de trabalho especifique um local de saída) | nenhuma | 

# Parâmetros avançados de conexão
<a name="jdbc-v3-driver-advanced-connection-parameters"></a>

As seções a seguir descrevem os parâmetros avançados de conexão para o driver JDBC 3.x.

**Topics**
+ [

## Parâmetros da criptografia de resultados
](#jdbc-v3-driver-result-encryption-parameters)
+ [

## Parâmetros de busca de resultados
](#jdbc-v3-driver-result-fetching-parameters)
+ [

## Parâmetros de configuração do resultado
](#jdbc-v3-driver-result-config)
+ [

## Parâmetros de reutilização dos resultados da consulta
](#jdbc-v3-driver-query-result-reuse-parameters)
+ [

## Parâmetros de sondagem da execução de uma consulta
](#jdbc-v3-driver-query-execution-polling-parameters)
+ [

## Parâmetros de substituição de endpoint
](#jdbc-v3-driver-endpoint-override-parameters)
+ [

## Parâmetros de configuração de proxy
](#jdbc-v3-driver-proxy-configuration-parameters)
+ [

## Parâmetros de registro em log
](#jdbc-v3-driver-logging-parameters)
+ [

## Nome da aplicação
](#jdbc-v3-driver-application-name)
+ [

## Teste de conexão
](#jdbc-v3-driver-connection-test)
+ [

## Número de novas tentativas
](#jdbc-v3-driver-number-of-retries)
+ [

## Tempo limite de rede
](#jdbc-v3-driver-networktimeoutmillis)

## Parâmetros da criptografia de resultados
<a name="jdbc-v3-driver-result-encryption-parameters"></a>

Observe os seguintes pontos:
+ A chave do AWS KMS deve ser especificada quando `EncryptionOption` é `SSE_KMS` ou `CSE_KMS`.
+ A chave do AWS KMS não pode ser especificada quando a `EncryptionOption` não está especificada ou quando a `EncryptionOption` é `SSE_S3`.

### Opção de criptografia
<a name="jdbc-v3-driver-encryption-option"></a>

O tipo de criptografia a ser usado nos resultados de consultas quando eles são armazenados no Amazon S3. Para obter mais informações sobre as opções de criptografia, consulte [EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html) na *Amazon Athena API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Possíveis valores | 
| --- | --- | --- | --- | --- | 
| EncryptionOption | S3OutputEncOption (obsoleto) | Opcional | nenhuma | SSE\$1S3, SSE\$1KMS, CSE\$1KMS | 

### Chave do KMS
<a name="jdbc-v3-driver-kms-key"></a>

O ARN ou ID da chave do KMS, se `SSE_KMS` ou `CSE_KMS` for escolhido como a opção de criptografia. Para obter mais informações, consulte [EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html) na *Amazon Athena API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| KmsKey | S3OutputEncKMSKey (obsoleto) | Opcional | nenhuma | 

## Parâmetros de busca de resultados
<a name="jdbc-v3-driver-result-fetching-parameters"></a>

### Buscador de resultados
<a name="jdbc-v3-driver-result-fetcher"></a>

O buscador que será usado para baixar resultados das consultas.

O buscador de resultados padrão, `auto`, baixa os resultados das consultas diretamente do Amazon S3 sem usar as APIs do Athena. Quando não é possível fazer o download direto do S3, como nos casos em que os resultados da consulta estão criptografados com a opção `CSE_KMS`, o Athena automaticamente usa a API `GetQueryResultsStream` como alternativa.

O uso do buscador `auto` é recomendado na maioria das situações. Se suas políticas do IAM ou as políticas para o bucket do S3 usarem a condição [s3:CalledVia](security-iam-athena-calledvia.md) com a finalidade de limitar o acesso às solicitações de objetos do S3 provenientes do Athena, o buscador `auto` tentará primeiro fazer o download dos resultados do S3 e, em seguida, recorrerá à API `GetQueryResultsStream`. Nessa situação, é possível configurar o ResultFetcher para `GetQueryResultsStream`, evitando uma chamada de API adicional.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Possíveis valores | 
| --- | --- | --- | --- | --- | 
| ResultFetcher | nenhuma | Opcional | auto | auto, S3, GetQueryResults e GetQueryResultsStream | 

### Tamanho da busca
<a name="jdbc-v3-driver-fetch-size"></a>

O valor desse parâmetro é usado como o mínimo para buffers internos e como tamanho das páginas de destino ao buscar resultados. O valor 0 (zero) significa que o driver deve usar seus próprios padrões conforme descrito abaixo. O valor máximo é 1.000.000.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| FetchSize | RowsToFetchPerBlock (obsoleto) | Opcional | 0 | 
+ O buscador `GetQueryResults` sempre usará um tamanho de página de 1.000, que é o valor máximo permitido para a chamada de API. Quando o tamanho da busca é maior do de 1.000, várias chamadas sucessivas de API são feitas para preencher o buffer acima do mínimo.
+ O buscador `GetQueryResultsStream` usa o tamanho de busca configurado como o tamanho de página, ou 10.000 por padrão.
+ O buscador `S3` usa o tamanho de busca configurado como o tamanho de página, ou 10.000 por padrão.

## Parâmetros de configuração do resultado
<a name="jdbc-v3-driver-result-config"></a>

### Expected bucket owner (Proprietário esperado do bucket)
<a name="jdbc-v3-driver-exp-bucket-owner"></a>

O ID da conta do proprietário esperado do bucket do S3. Se o ID da conta que você fornecer não corresponder ao proprietário real do bucket, a solicitação falhará. Para obter mais informações sobre como verificar o proprietário do bucket do S3, consulte [Verificar a propriedade do bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html#bucket-owner-condition-use).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ExpectedBucketOwner | nenhuma | Opcional | nenhuma | 

### Opção ACL
<a name="jdbc-v3-driver-acl"></a>

Indica que uma ACL predefinida do Amazon S3 deve ser configurada para controlar o proprietário dos resultados da consulta armazenados. Para mais informações sobre `AclOption`, consulte [AclConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_AclConfiguration.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Possíveis valores | 
| --- | --- | --- | --- | --- | 
| AclOption | nenhuma | Opcional | nenhuma | BUCKET\$1OWNER\$1FULL\$1CONTROL | 

## Parâmetros de reutilização dos resultados da consulta
<a name="jdbc-v3-driver-query-result-reuse-parameters"></a>

### Habilitar a reutilização de resultados
<a name="jdbc-v3-driver-enable-result-reuse"></a>

Especifica se os resultados anteriores para a mesma consulta poderão reutilizados quando uma consulta for executada. Para obter informações sobre a reutilização de resultados de consulta, consulte [ResultReuseByAgeConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultReuseByAgeConfiguration.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| EnableResultReuseByAge | nenhuma | Opcional | FALSE | 

### Idade máxima para reutilização dos resultados
<a name="jdbc-v3-driver-result-reuse-max-age"></a>

Especifica, em minutos, a idade máxima do resultado de uma consulta anterior que o Athena deve considerar para reutilização. Para obter informações sobre a idade máxima para reutilização de resultados, consulte [ResultReuseByAgeConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultReuseByAgeConfiguration.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| MaxResultReuseAgeInMinutes | nenhuma | Opcional | 60 | 

## Parâmetros de sondagem da execução de uma consulta
<a name="jdbc-v3-driver-query-execution-polling-parameters"></a>

### Intervalo mínimo para a sondagem da execução de uma consulta
<a name="jdbc-v3-driver-minimum-query-execution-polling-interval"></a>

O tempo mínimo, em milissegundos, a ser aguardado antes de sondar o Athena sobre o status da execução de uma consulta.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| MinQueryExecutionPollingIntervalMillis | MinQueryExecutionPollingInterval (obsoleto) | Opcional | 100 | 

### Intervalo máximo para sondagem da execução de uma consulta
<a name="jdbc-v3-driver-maximum-query-execution-polling-interval"></a>

O tempo máximo, em milissegundos, a ser aguardado antes de sondar o Athena sobre o status da execução de uma consulta.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| MaxQueryExecutionPollingIntervalMillis | MaxQueryExecutionPollingInterval (obsoleto) | Opcional | 5000 | 

### Multiplicador do intervalo de sondagem da execução de uma consulta
<a name="jdbc-v3-driver-query-execution-polling-interval-multiplier"></a>

O fator de aumento do período de sondagem. Por padrão, a sondagem começa com o valor de `MinQueryExecutionPollingIntervalMillis` e dobra a cada sondagem até atingir o valor de `MaxQueryExecutionPollingIntervalMillis`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| QueryExecutionPollingIntervalMultiplier | nenhuma | Opcional | 2 | 

## Parâmetros de substituição de endpoint
<a name="jdbc-v3-driver-endpoint-override-parameters"></a>

### Substituição do endpoint do Athena
<a name="jdbc-v3-driver-athena-endpoint-override"></a>

O endpoint que o driver usará para fazer chamadas de API para o Athena.

Observe os seguintes pontos:
+ Se os protocolos `https://` ou `http://` não forem especificados na URL fornecida, o driver inserirá o prefixo `https://`.
+ Se esse parâmetro não for especificado, o driver usará um endpoint padrão.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AthenaEndpoint | EndpointOverride (obsoleto) | Opcional | nenhuma | 

### Substituição de endpoint de serviço de streaming do Athena
<a name="jdbc-v3-driver-athena-streaming-service-endpoint-override"></a>

O endpoint que o driver usará para baixar os resultados das consultas quando usar o serviço de streaming do Athena. O serviço de streaming do Athena está disponível na porta 444.

Observe os seguintes pontos:
+ Se os protocolos `https://` ou `http://` não forem especificados na URL fornecida, o driver inserirá o prefixo `https://`.
+ Se uma porta não for especificada na URL fornecida, o driver inserirá a porta 444 do serviço de streaming.
+ Se o parâmetro `AthenaStreamingEndpoint` não for especificado, o driver usará a substituição do `AthenaEndpoint`. Se nem o `AthenaStreamingEndpoint` nem a substituição do `AthenaEndpoint` forem especificados, o driver usará um endpoint de streaming padrão.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AthenaStreamingEndpoint | StreamingEndpointOverride (obsoleto) | Opcional | nenhuma | 

### Substituição de endpoint do LakeFormation
<a name="jdbc-v3-driver-athena-lake-formation-endpoint-override"></a>

O endpoint que o driver usará para o serviço Lake Formation quando usar a API [AssumeDecorateRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do AWS Lake Formation para recuperar credenciais temporárias. Se esse parâmetro não for especificado, o driver usará um endpoint padrão do Lake Formation.

Observe os seguintes pontos:
+ Se os protocolos `https://` ou `http://` não forem especificados na URL fornecida, o driver inserirá o prefixo `https://`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEndpoint |  LfEndpointOverride (obsoleto)  | Opcional | nenhuma | 

### Substituição de endpoint do S3
<a name="jdbc-v3-driver-athena-s3-endpoint-override"></a>

O endpoint que o driver usará para baixar os resultados das consultas quando usar o buscador do Amazon S3. Se esse parâmetro não for especificado, o driver usará um endpoint padrão do Amazon S3.

Observe os seguintes pontos:
+ Se os protocolos `https://` ou `http://` não forem especificados na URL fornecida, o driver inserirá o prefixo `https://`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| S3Endpoint | Nenhum | Opcional | nenhuma | 

### Substituição de endpoint do STS
<a name="jdbc-v3-driver-athena-sts-endpoint-override"></a>

O endpoint que o driver usará para o serviço AWS STS quando usar a API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS para recuperar as credenciais temporárias. Se esse parâmetro não for especificado, o driver usará um endpoint padrão do AWS STS.

Observe os seguintes pontos:
+ Se os protocolos `https://` ou `http://` não forem especificados na URL fornecida, o driver inserirá o prefixo `https://`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| StsEndpoint | StsEndpointOverride(obsoleto) | Opcional | nenhuma | 

### Substituição de endpoint OIDC de SSO
<a name="jdbc-v3-driver-athena-sso-oidc-endpoint-override"></a>

O endpoint que o driver usará ao utilizar `ClientConfiguration.endpointOverride` para substituir o endpoint HTTP padrão para o cliente SSO OIDC. Para obter mais informações, consulte [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| SSOOIDCEndpointOverride |  | Opcional | nenhuma | 

### Substituição do endpoint de SSO Admin
<a name="jdbc-v3-driver-athena-sso-admin-endpoint-override"></a>

O endpoint que o driver usará ao utilizar `ClientConfiguration.endpointOverride` para substituir o endpoint HTTP padrão para o cliente de SSO Admin. Para obter mais informações, consulte [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| SSOAdminEndpointOverride |  | Opcional | nenhuma | 

## Parâmetros de configuração de proxy
<a name="jdbc-v3-driver-proxy-configuration-parameters"></a>

### Host do proxy
<a name="jdbc-v3-driver-proxy-host"></a>

A URL do host proxy. Use esse parâmetro se você precisar que as solicitações do Athena passem por um proxy.

**nota**  
 Certifique-se de incluir o protocolo `https://` ou `http://` no início da URL do `ProxyHost`. 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyHost | nenhuma | Opcional | nenhuma | 

### Porta do proxy
<a name="jdbc-v3-driver-proxy-port"></a>

A porta a ser usada no host proxy. Use esse parâmetro se você precisar que as solicitações do Athena passem por um proxy.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyPort | nenhuma | Opcional | nenhuma | 

### Nome de usuário do proxy
<a name="jdbc-v3-driver-proxy-username"></a>

O nome de usuário para autenticação no servidor proxy. Use esse parâmetro se você precisar que as solicitações do Athena passem por um proxy.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyUsername | ProxyUID (obsoleto) | Opcional | nenhuma | 

### Senha do proxy
<a name="jdbc-v3-driver-proxy-password"></a>

A senha para a autenticação no servidor proxy. Use esse parâmetro se você precisar que as solicitações do Athena passem por um proxy.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyPassword | ProxyPWD (obsoleto) | Opcional | nenhuma | 

### Hosts isentos de proxy
<a name="jdbc-v3-driver-proxy-exempt-hosts"></a>

Um conjunto dos nomes de host aos quais o driver se conecta sem usar um proxy quando o uso de proxy está habilitado (ou seja, quando os parâmetros de conexão `ProxyHost` e `ProxyPort` estão definidos). Os hosts devem ser separados pelo caractere barra vertical (`|`) (por exemplo, `host1.com|host2.com`).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyExemptHosts | NonProxyHost | Opcional | nenhuma | 

### Proxy habilitado para provedores de identidades
<a name="jdbc-v3-driver-proxy-enabled-for-identity-providers"></a>

Especifica se um proxy deverá ser usado quando o driver se conectar a um provedor de identidades.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProxyEnabledForIdP | UseProxyForIdP | Opcional | FALSE | 

## Parâmetros de registro em log
<a name="jdbc-v3-driver-logging-parameters"></a>

Esta seção descreve os parâmetros relacionados a registro em log.

### Nível de log
<a name="jdbc-v3-driver-logging-parameters-log-level"></a>

Especifica o nível para o registro em log do driver. Nada é registrado em log, a menos que o parâmetro `LogPath` também esteja definido.

**nota**  
Recomendamos definir somente o parâmetro `LogPath`, a menos que você tenha requisitos especiais. Definir somente o parâmetro `LogPath` habilita o registro em log e usa o nível de log padrão `TRACE`. O nível do registro em log `TRACE` fornece o registro em log mais detalhado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Possíveis valores | 
| --- | --- | --- | --- | --- | 
| LogLevel | nenhuma | Opcional | TRACE | OFF, ERROR, WARN, INFO, DEBUG, TRACE | 

### Caminho do log.
<a name="jdbc-v3-driver-logging-parameters-log-path"></a>

O caminho para um diretório no computador que executa o driver no qual os logs do driver serão armazenados. Um arquivo de log com um nome exclusivo será criado no diretório especificado. Se definido, habilita o registro em log do driver.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LogPath | nenhuma | Opcional | nenhuma | 

## Nome da aplicação
<a name="jdbc-v3-driver-application-name"></a>

O nome da aplicação que usa o driver. Se um valor for especificado para esse parâmetro, esse valor será incluído na string de agente do usuário das chamadas de API que o driver fizer para o Athena.

**nota**  
Você também pode definir o nome da aplicação chamando `setApplicationName` no objeto `DataSource`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ApplicationName | nenhuma | Opcional | nenhuma | 

## Teste de conexão
<a name="jdbc-v3-driver-connection-test"></a>

Se definido como `TRUE`, o driver executa um teste de conexão toda vez que uma conexão JDBC é criada, mesmo que uma consulta não seja executada na conexão.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ConnectionTest | nenhuma | Opcional | TRUE | 

**nota**  
Um teste de conexão envia uma consulta `SELECT 1` ao Athena para verificar se a conexão foi configurada corretamente. Isso significa que dois arquivos serão armazenados no Amazon S3 (o conjunto de resultados e os metadados), e tarifas adicionais podem ser aplicadas de acordo com a [política de preços do Amazon Athena](https://aws.amazon.com/athena/pricing).

## Número de novas tentativas
<a name="jdbc-v3-driver-number-of-retries"></a>

O número máximo de vezes que o driver deve reenviar uma solicitação recuperável para o Athena.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| NumRetries | MaxErrorRetry (obsoleto) | Opcional | nenhuma | 

## Tempo limite de rede
<a name="jdbc-v3-driver-networktimeoutmillis"></a>

O tempo limite de rede controla a quantidade de tempo que o driver espera para que uma conexão de rede seja estabelecida. Isso inclui o tempo necessário para enviar solicitações de API. Em raras circunstâncias, pode ser útil alterar o tempo limite da rede. Por exemplo, você pode querer aumentar o tempo limite para pausas longas na coleta de resíduos. Definir este parâmetro de conexão é equivalente a usar o método `setNetworkTimeout` em um objeto `Connection`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
|  NetworkTimeoutMillis  | nenhuma | Opcional | nenhuma | 

# Parâmetros de conexão de autenticação
<a name="jdbc-v3-driver-authentication-connection-parameters"></a>

O driver JDBC 3.x do Athena é compatível com vários métodos de autenticação. Os parâmetros de conexão necessários dependem do método de autenticação usado.

**Topics**
+ [IAM](jdbc-v3-driver-iam-credentials.md)
+ [Padrão](jdbc-v3-driver-default-credentials.md)
+ [Perfil de configuração da AWS](jdbc-v3-driver-aws-configuration-profile-credentials.md)
+ [Perfil da instância](jdbc-v3-driver-instance-profile-credentials.md)
+ [Personalizada](jdbc-v3-driver-custom-credentials.md)
+ [JWT](jdbc-v3-driver-jwt-credentials.md)
+ [Propagação de identidade confiável JWT](jdbc-v3-driver-jwt-tip-credentials.md)
+ [Propagação de identidade confiável via navegador](jdbc-v3-driver-browser-oidc-tip-credentials.md)
+ [Azure AD](jdbc-v3-driver-azure-ad-credentials.md)
+ [Okta](jdbc-v3-driver-okta-credentials.md)
+ [Ping](jdbc-v3-driver-ping-credentials.md)
+ [AD FS](jdbc-v3-driver-adfs-credentials.md)
+ [Azure AD do navegador](jdbc-v3-driver-browser-azure-ad-credentials.md)
+ [SAML do navegador](jdbc-v3-driver-browser-saml-credentials.md)
+ [DataZone IdC](jdbc-v3-driver-datazone-idc.md)
+ [DataZone IAM](jdbc-v3-driver-datazone-iamcp.md)

# Credenciais do IAM
<a name="jdbc-v3-driver-iam-credentials"></a>

Você pode usar suas credenciais do IAM para se conectar ao Amazon Athena com o driver JDBC definindo os parâmetros de conexão a seguir.

## Usuário
<a name="jdbc-v3-driver-user"></a>

Seu ID de chave de acesso da AWS. Para obter informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | AccessKeyId | Obrigatório | nenhuma | 

## Senha
<a name="jdbc-v3-driver-password"></a>

O ID da chave secreta da AWS. Para obter informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | SecretAccessKey | Opcional | nenhuma | 

## Token de sessão
<a name="jdbc-v3-driver-session-token"></a>

Caso esteja usando credenciais temporárias da AWS, você deve especificar o token da sessão. Para obter informações sobre credenciais temporárias, consulte [Credenciais de segurança temporárias no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html), no *Guia do usuário do IAM*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| SessionToken | nenhuma | Opcional | nenhuma | 

# Credenciais padrão
<a name="jdbc-v3-driver-default-credentials"></a>

Você pode usar as credenciais padrão que configura no sistema cliente para se conectar ao Amazon Athena definido os parâmetros de conexão a seguir. Para obter informações sobre o uso de credenciais padrão, consulte [Usar a cadeia de fornecedores de credenciais padrão](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default) no *Guia do desenvolvedor do AWS SDK para Java*.

## Provedor de credenciais
<a name="jdbc-v3-driver-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `DefaultChain`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | DefaultChain | 

# Credenciais do perfil de configuração da AWS
<a name="jdbc-v3-driver-aws-configuration-profile-credentials"></a>

Você pode usar as credenciais armazenadas em um perfil de configuração da AWS definindo os parâmetros de conexão a seguir. Os perfis de configuração da AWS geralmente são armazenados em arquivos no diretório `~/.aws`. Para obter informações sobre os perfis de configuração da AWS, consulte [Use profiles](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-profiles.html) no *AWS SDK para Java Developer Guide*.

## Provedor de credenciais
<a name="jdbc-v3-driver-aws-configuration-profile-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `ProfileCredentials`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | ProfileCredentials | 

## Profile name
<a name="jdbc-v3-driver-profile-name"></a>

O nome do perfil de configuração da AWS cujas credenciais devem ser usadas para autenticar a solicitação ao Athena.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ProfileName | nenhuma | Obrigatório | nenhuma | 

**nota**  
O nome do perfil também pode ser especificado como o valor do parâmetro `CredentialsProviderArguments`, embora esse uso esteja obsoleto.

# Credenciais de perfil de instância
<a name="jdbc-v3-driver-instance-profile-credentials"></a>

Esse tipo de autenticação é usado em instâncias do Amazon EC2. Um *perfil de instância* é um perfil associado a uma instância do Amazon EC2. O uso de um provedor de credenciais de perfil de instância delega o gerenciamento de credenciais da AWS ao Serviço de metadados de instância do Amazon EC2. Isso elimina a necessidade de desenvolvedores armazenarem credenciais permanentemente na instância do Amazon EC2 ou de se preocuparem com o rodízio ou o gerenciamento de credenciais temporárias.

## Provedor de credenciais
<a name="jdbc-v3-driver-instance-profile-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `InstanceProfile`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | InstanceProfile | 

# Credenciais personalizadas
<a name="jdbc-v3-driver-custom-credentials"></a>

Você pode usar esse tipo de autenticação para fornecer suas próprias credenciais usando uma classe Java que implemente a interface [AwsCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.html).

## Provedor de credenciais
<a name="jdbc-v3-driver-custom-credentials-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como o nome de classe totalmente qualificado da classe personalizada que implementa a interface [AwsCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.html). No runtime, essa classe deve estar no caminho da classe Java da aplicação que usa o driver JDBC.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | O nome da classe totalmente qualificado da implementação personalizada do AwsCredentialsProvider | 

## Argumentos do provedor de credenciais
<a name="jdbc-v3-driver-credentials-provider-arguments"></a>

Uma lista separada por vírgulas de argumentos de string para o construtor do provedor de credenciais personalizadas.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| CredentialsProviderArguments | AwsCredentialsProviderArguments (obsoleto) | Opcional | nenhuma | 

# Credenciais do JWT
<a name="jdbc-v3-driver-jwt-credentials"></a>

Com esse tipo de autenticação, você pode usar um token Web JSON (JWT) obtido de um provedor de identidades externo como parâmetro de conexão para autenticação no Athena. O provedor externo de credenciais já deve ser federado com a AWS.

## Provedor de credenciais
<a name="jdbc-v3-driver-jwt-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `JWT`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | JWT | 

## Token de identidade Web JWT
<a name="jdbc-v3-driver-jwt-web-identity-token"></a>

O token JWT obtido de um provedor de identidades federado externo. Esse token será usado para autenticação no Athena.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtWebIdentityToken | web\$1identity\$1token (obsoleto) | Obrigatório | nenhuma | 

## ARN de perfil do JWT
<a name="jdbc-v3-driver-jwt-role-arn"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtRoleArn | role\$1arn (obsoleto) | Obrigatório | nenhuma | 

## Nome da sessão do perfil do JWT
<a name="jdbc-v3-driver-jwt-role-session-name"></a>

O nome da sessão quando você usa as credenciais do JWT para autenticação. O nome pode ser qualquer nome que você escolher.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtRoleSessionName | role\$1session\$1name (obsoleto) | Obrigatório | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-jwt-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

# JWT com integração ao Centro de Identidade
<a name="jdbc-v3-driver-jwt-tip-credentials"></a>

Esse tipo de autenticação permite usar um JSON Web Token (JWT) obtido de um provedor de identidades externo como parâmetro de conexão para autenticação no Athena. É possível usar este plug-in para habilitar o suporte para identidades corporativas por meio da propagação de identidade confiável. Para obter mais informações sobre como usar a propagação de identidade confiável com drivers, consulte [Usar a propagação de identidade confiável com drivers do Amazon Athena](using-trusted-identity-propagation.md). Você também pode [configurar e implantar recursos usando o CloudFormation](using-trusted-identity-propagation-cloudformation.md).

Com a propagação de identidade confiável, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html).

## Provedor de credenciais
<a name="jdbc-v3-driver-jwt-tip-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `JWT_TIP`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | JWT\$1TIP | 

## Token de identidade Web JWT
<a name="jdbc-v3-driver-jwt-tip-web-identity-token"></a>

O token JWT obtido de um provedor de identidades federado externo. Esse token será usado para autenticação no Athena. O cache de token é habilitado por padrão e permite que o mesmo token de acesso do Centro de Identidade seja usado em todas as conexões de driver. Recomendamos fornecer um novo token JWT ao "Testar a conexão", pois o token trocado está presente somente quando a instância do driver está ativa.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtWebIdentityToken | web\$1identity\$1token (obsoleto) | Obrigatório | nenhuma | 

## WorkgroupArn
<a name="jdbc-v3-driver-jwt-tip-workgroup-arn"></a>

O nome do recurso da Amazon (ARN) do grupo de trabalho do Amazon Athena. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| WorkGroupArn | nenhuma | Obrigatório | primary | 

## ARN de perfil de aplicação JWT
<a name="jdbc-v3-driver-jwt-tip-application-role-arn"></a>

O ARN da função a ser assumida Esse perfil é usado para a troca de JWT, obtenção do ARN da aplicação gerenciada pelo cliente do Centro de Identidade do IAM por meio de tags de grupo de trabalho e obtenção do ARN do perfil de acesso. Para obter mais informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ApplicationRoleArn | nenhuma | Obrigatório | nenhuma | 

## Nome da sessão do perfil do JWT
<a name="jdbc-v3-driver-jwt-tip-role-session-name"></a>

O nome da sessão ao autenticar com credenciais JWT. Pode ser qualquer nome de sua escolha.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtRoleSessionName | role\$1session\$1name (obsoleto) | Obrigatório | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-jwt-tip-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## ARN do perfil de acesso JWT
<a name="jdbc-v3-driver-jwt-tip-access-role-arn"></a>

O ARN da função a ser assumida Esse é o perfil assumido pelo serviço Athena para fazer chamadas em seu nome. Para obter informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *Referência da API do AWS Security Token Service*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AccessRoleArn | nenhuma | Opcional | nenhuma | 

## ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM
<a name="jdbc-v3-driver-jwt-tip-customer-idc-application-arn"></a>

O ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM. Para obter mais informações, consulte [Aplicações gerenciadas pelo cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| CustomerIdcApplicationArn | nenhuma | Opcional | nenhuma | 

# Baseado em navegador com integração ao Centro de Identidade
<a name="jdbc-v3-driver-browser-oidc-tip-credentials"></a>

Esse tipo de autenticação permite buscar um novo JSON Web Token (JWT) de um provedor de identidades externo e autenticá-lo com o Athena. É possível usar este plug-in para habilitar o suporte para identidades corporativas por meio da propagação de identidade confiável. Para obter mais informações sobre como usar a propagação de identidade confiável com drivers, consulte [Usar a propagação de identidade confiável com drivers do Amazon Athena](using-trusted-identity-propagation.md). Você também pode [configurar e implantar recursos usando o CloudFormation](using-trusted-identity-propagation-cloudformation.md).

Com a propagação de identidade confiável, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html).

**nota**  
O plug-in foi projetado especificamente para ambientes de área de trabalho de usuário único. Em ambientes compartilhados, como o Windows Server, os administradores do sistema são responsáveis por estabelecer e manter os limites de segurança entre os usuários.

## Provedor de credenciais
<a name="jdbc-v3-driver-browser-oidc-tip-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `BrowserOidcTip`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | BrowserOidcTip | 

## URL de configuração bem conhecido do IDP
<a name="jdbc-v3-driver-browser-oidc-tip-idp-well-known-config"></a>

O URL de configuração bem conhecido do IDP é o endpoint que fornece os detalhes de configuração do OpenID Connect para seu provedor de identidades. Esse URL geralmente termina com `.well-known/openid-configuration` e contém metadados essenciais sobre os endpoints de autenticação, os recursos compatíveis e as chaves de assinatura de token. Por exemplo, se você estiver usando o *Okta*, o URL poderá ser similar a `https://your-domain.okta.com/.well-known/openid-configuration`.

Para a solução de problemas: se você receber erros de conexão, verifique se esse URL pode ser acessado pela sua rede e retorna um JSON de configuração válido do *OpenID Connect*. O URL deve poder ser acessado pelo cliente onde o driver está instalado e deve ser fornecido pelo administrador do provedor de identidades.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpWellKnownConfigurationUrl | nenhuma | Obrigatório | nenhuma | 

## Identificador de cliente
<a name="jdbc-v3-driver-browser-oidc-tip-client-id"></a>

O identificador de cliente emitido para a aplicação pelo provedor do OpenID Connect.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OidcClientId | nenhuma | Obrigatório | nenhuma | 

## WorkgroupArn
<a name="jdbc-v3-driver-browser-oidc-tip-workgroup-arn"></a>

O nome do recurso da Amazon (ARN) do grupo de trabalho do Amazon Athena que contém as tags de configuração da propagação de identidade confiável. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html). 

**nota**  
Esse parâmetro é diferente do parâmetro `Workgroup` que especifica onde as consultas serão executadas. Você deve definir os dois parâmetros:  
`WorkgroupArn`: aponta para o grupo de trabalho que contém as tags de configuração de propagação de identidade confiável
`Workgroup`: especifica o grupo de trabalho em que as consultas serão executadas
Embora normalmente façam referência ao mesmo grupo de trabalho, ambos os parâmetros devem ser definidos explicitamente para uma operação adequada.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| WorkGroupArn | nenhuma | Obrigatório | primary | 

## ARN de perfil de aplicação JWT
<a name="jdbc-v3-driver-browser-oidc-tip-application-role-arn"></a>

O ARN do perfil que será assumido na troca do JWT. Esse perfil é usado para a troca de JWT, obtenção do ARN da aplicação gerenciada pelo cliente do Centro de Identidade do IAM por meio de tags de grupo de trabalho e obtenção do ARN do perfil de acesso. Para obter mais informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html). 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ApplicationRoleArn | nenhuma | Obrigatório | nenhuma | 

## Nome da sessão do perfil do JWT
<a name="jdbc-v3-driver-browser-oidc-tip-role-session-name"></a>

Um nome para a sessão do IAM. Esse pode ser qualquer nome que você deseje usar, mas, em geral, você passa o nome ou identificador que está associado ao usuário que está usando a aplicação. Dessa forma, as credenciais de segurança temporárias que a aplicação usa estão associadas a esse usuário. 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| JwtRoleSessionName | role\$1session\$1name (obsoleto) | Obrigatório | nenhuma | 

## Segredo do cliente
<a name="jdbc-v3-driver-browser-oidc-tip-client-secret"></a>

O clientSecret é uma chave confidencial emitida pelo seu provedor de identidades que é usada para autenticar sua aplicação (cliente). Embora esse parâmetro seja opcional e possa não ser necessário para todos os fluxos de autenticação, ele fornece uma camada adicional de segurança quando usado. Se sua configuração de IDP exigir um segredo de cliente, você deverá incluir esse parâmetro com o valor fornecido pelo administrador do provedor de identidades.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OidcClientSecret | nenhuma | Opcional | nenhuma | 

## Escopo
<a name="jdbc-v3-driver-browser-oidc-tip-scope"></a>

O escopo especifica o nível de acesso que sua aplicação está solicitando do provedor de identidades. Você deve incluir `openid` no escopo para receber um token de ID contendo reivindicações essenciais de identidade do usuário. Seu escopo pode precisar incluir permissões adicionais, como `email` ou `profile`, dependendo de quais reivindicações de usuário seu provedor de identidades (como *Microsoft Entra ID*) está configurado para incluir no token de ID. Essas reivindicações são essenciais para o mapeamento adequado da *Propagação de identidade confiável*. Se o mapeamento de identidades de usuários falhar, verifique se seu escopo inclui todas as permissões necessárias e se seu provedor de identidades está configurado para incluir as reivindicações necessárias no token de ID. Essas reivindicações devem corresponder à configuração de mapeamento do *Emissor de tokens confiáveis* no Centro de Identidade do IAM. 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Escopo | nenhuma | Opcional | openid email offline\$1access | 

## Duração da sessão da função
<a name="jdbc-v3-driver-browser-oidc-tip-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## ARN do perfil de acesso JWT
<a name="jdbc-v3-driver-browser-oidc-tip-access-role-arn"></a>

O ARN do perfil que o Athena assume para fazer chamadas em seu nome. Para obter informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *Referência da API do AWS Security Token Service*. 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AccessRoleArn | nenhuma | Opcional | nenhuma | 

## ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM
<a name="jdbc-v3-driver-browser-oidc-tip-customer-idc-application-arn"></a>

O ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM. Para obter mais informações, consulte [Aplicações gerenciadas pelo cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps.html).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| CustomerIdcApplicationArn | nenhuma | Opcional | nenhuma | 

## Número da porta do provedor de identidades
<a name="jdbc-v3-driver-browser-oidc-tip-idp-port-number"></a>

O número da porta local a ser usada para o servidor de retorno de chamada do OAuth 2.0. Isso é usado como redirect\$1uri, e você precisará inseri-lo na lista de permissões em sua aplicação do IDP. O redirect\$1uri padrão gerado é: http://localhost:7890/athena

**Atenção**  
Em ambientes compartilhados, como Windows Terminal Servers ou Remote Desktop Services, a porta de loopback (padrão: 7890) é compartilhada entre todos os usuários na mesma máquina. Os administradores do sistema podem mitigar possíveis riscos de sequestro de portas por meio de:  
Configuração de números de porta diferentes para diferentes grupos de usuários
Uso de políticas de segurança do Windows para restringir o acesso às portas
Implementação do isolamento de rede entre as sessões do usuário
Se esses controles de segurança não puderem ser implementados, recomendamos usar o plug-in de [propagação de identidade confiável via JWT](jdbc-v3-driver-jwt-tip-credentials.md), que não requer uma porta de loopback.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpPortNumber | nenhuma | Opcional | 7890 | 

## Tempo limite de resposta do provedor de identidades
<a name="jdbc-v3-driver-browser-oidc-tip-idp-response-timeout"></a>

O tempo limite em segundos para aguardar a resposta de retorno de chamada do OAuth 2.0.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpResponseTimeout | nenhuma | Opcional | 120 | 

## Habilitar o armazenamento em cache de tokens
<a name="jdbc-v3-driver-browser-oidc-tip-enable-token-caching"></a>

O parâmetro EnableTokenCaching determina se o driver armazena em cache o token de autenticação entre as conexões. Definir EnableTokenCaching como true reduz os prompts de autenticação e melhora a experiência do usuário, mas deve ser usado com cautela. Essa configuração é mais adequada para ambientes de área de trabalho de usuário único. Em ambientes compartilhados como o Windows Server, é recomendável mantê-lo desabilitado para evitar o possível compartilhamento de tokens entre usuários com strings de conexão semelhantes. 

Para implantações empresariais usando ferramentas como o Tableau Server, recomendamos usar o plug-in de [propagação de identidade confiável via JWT](jdbc-v3-driver-jwt-tip-credentials.md) em vez desse método de autenticação. 


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| EnableTokenCaching | nenhuma | Opcional | FALSE | 

# Credenciais do Azure AD
<a name="jdbc-v3-driver-azure-ad-credentials"></a>

Um mecanismo de autenticação baseado em SAML que permite a autenticação no Athena usando o provedor de identidades do Azure AD. Esse método pressupõe que uma federação já tenha sido configurada entre o Athena e o Azure AD.

**nota**  
Alguns dos nomes de parâmetros presentes nesta seção têm aliases. Os aliases são equivalentes funcionais dos nomes dos parâmetros e foram fornecidos para disponibilizar a compatibilidade retroativa com o driver JDBC 2.x. Como os nomes dos parâmetros foram aprimorados para seguir uma convenção de nomenclatura mais clara e consistente, recomendamos que você os use em vez dos aliases, que foram descontinuados. 

## Provedor de credenciais
<a name="jdbc-v3-driver-azure-ad-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `AzureAD`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | AzureAD | 

## Usuário
<a name="jdbc-v3-driver-azure-ad-user"></a>

O endereço de e-mail do usuário do Azure AD a ser usado para autenticação no Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | UID (obsoleto) | Obrigatório | nenhuma | 

## Senha
<a name="jdbc-v3-driver-azure-ad-password"></a>

A senha do usuário do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | PWD (obsoleto) | Obrigatório | nenhuma | 

## ID de locatário do Azure AD
<a name="jdbc-v3-driver-azure-ad-tenant-id"></a>

O ID de locatário da aplicação do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AzureAdTenantId | tenant\$1id (obsoleto) | Obrigatório | nenhuma | 

## ID de cliente do Azure AD
<a name="jdbc-v3-driver-azure-ad-client-id"></a>

O ID de cliente da aplicação do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AzureAdClientId | client\$1id (obsoleto) | Obrigatório | nenhuma | 

## Segredo de cliente do Azure AD
<a name="jdbc-v3-driver-azure-ad-client-secret"></a>

O segredo de cliente da aplicação do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AzureAdClientSecret | client\$1secret (obsoleto) | Obrigatório | nenhuma | 

## Perfil preferencial
<a name="jdbc-v3-driver-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-lake-formation-enabled"></a>

Especifica se a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation deverá ser usada para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | nenhuma | Opcional | FALSE | 

# Credenciais do Okta
<a name="jdbc-v3-driver-okta-credentials"></a>

Um mecanismo de autenticação baseado em SAML que permite a autenticação no Athena usando o provedor de identidades do Okta. Esse método pressupõe que uma federação já tenha sido configurada entre o Athena e o Okta.

## Provedor de credenciais
<a name="jdbc-v3-driver-okta-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `Okta`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | Okta | 

## Usuário
<a name="jdbc-v3-driver-okta-user"></a>

O endereço de e-mail do usuário do Okta a ser usado para autenticação no Okta.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | UID (obsoleto) | Obrigatório | nenhuma | 

## Senha
<a name="jdbc-v3-driver-okta-password"></a>

A senha para o usuário do Okta.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | PWD (obsoleto) | Obrigatório | nenhuma | 

## Nome de host do Okta
<a name="jdbc-v3-driver-okta-host-name"></a>

O URL de sua organização Okta. É possível extrair o parâmetro `idp_host` do URL do **link de incorporação** em sua aplicação Okta. Para obter as etapas, consulte [Recuperar informações de configuração de ODBC do Okta](odbc-okta-plugin.md#odbc-okta-plugin-retrieve-odbc-configuration-information-from-okta). O primeiro segmento depois de `https://`, até `okta.com`, inclusive, é o host de IdP (por exemplo, `trial-1234567.okta.com` para uma URL que começa com `https://trial-1234567.okta.com`).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OktaHostName | IdP\$1Host (obsoleto) | Obrigatório | nenhuma | 

## ID da aplicação do Okta
<a name="jdbc-v3-driver-okta-application-id"></a>

O identificador de duas partes da aplicação. Você pode extrair o ID da aplicação da URL do **link embutido** na aplicação do Okta. Para obter as etapas, consulte [Recuperar informações de configuração de ODBC do Okta](odbc-okta-plugin.md#odbc-okta-plugin-retrieve-odbc-configuration-information-from-okta). O ID da aplicação são os dois últimos segmentos do URL, inclusive a barra no meio. Os segmentos são duas strings de 20 caracteres com uma mistura de números e letras maiúsculas e minúsculas (por exemplo, )., `Abc1de2fghi3J45kL678/abc1defghij2klmNo3p4`).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OktaAppId | App\$1ID (obsoleto) | Obrigatório | nenhuma | 

## Nome da aplicação do Okta
<a name="jdbc-v3-driver-okta-application-name"></a>

O nome da aplicação do Okta.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OktaAppName | App\$1Name (obsoleto) | Obrigatório | nenhuma | 

## Tipo de MFA do Okta
<a name="jdbc-v3-driver-okta-mfa-type"></a>

Se você configurou o Okta para exigir a autenticação multifator (MFA), precisará especificar o tipo de MFA do Okta e os parâmetros adicionais, dependendo do segundo fator que quiser usar.

O tipo de MFA do Okta é o segundo tipo de fator de autenticação (depois da senha) a ser usado para autenticação no Okta. Os segundos fatores compatíveis incluem as notificações por push enviadas pela aplicação Okta Verify e as senhas temporárias de uso único (TOTPs) geradas pelo Okta Verify, pelo Google Authenticator ou enviadas por SMS. As políticas de segurança de cada organização determinam se a MFA é necessária ou não para o login do usuário.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Possíveis valores | 
| --- | --- | --- | --- | --- | 
| OktaMfaType | okta\$1mfa\$1type (obsoleto) | Obrigatório, se o Okta for configurado para exigir MFA | nenhuma | oktaverifywithpush, oktaverifywithtotp, googleauthenticator, smsauthentication | 

## Número de telefone do Okta
<a name="jdbc-v3-driver-okta-phone-number"></a>

O número de telefone para o qual o Okta enviará uma senha temporária de uso único por SMS quando o tipo de `smsauthentication` MFA for escolhido. O número de telefone deve ser um número de telefone nos EUA ou no Canadá.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OktaPhoneNumber | okta\$1phone\$1number (obsoleto) | Obrigatório, se OktaMfaType for smsauthentication | nenhuma | 

## Tempo de espera da MFA do Okta
<a name="jdbc-v3-driver-okta-mfa-wait-time"></a>

A duração, em segundos, de espera até que o usuário confirme o recebimento de uma notificação por push do Okta antes que o driver gere uma exceção de tempo limite.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| OktaMfaWaitTime | okta\$1mfa\$1wait\$1time (obsoleto) | Opcional | 60 | 

## Perfil preferencial
<a name="jdbc-v3-driver-okta-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-role-okta-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-okta-lake-formation-enabled"></a>

Especifica se a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation deverá ser usada para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | nenhuma | Opcional | FALSE | 

# Uso do Ping
<a name="jdbc-v3-driver-ping-credentials"></a>

Um mecanismo de autenticação baseado em SAML que permite a autenticação no Athena usando o provedor de identidades Ping Federate. Esse método pressupõe que uma federação já tenha sido configurada entre o Athena e o Ping Federate.

## Provedor de credenciais
<a name="jdbc-v3-driver-ping-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `Ping`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | Ping | 

## Usuário
<a name="jdbc-v3-driver-ping-user"></a>

O endereço de e-mail do usuário do Ping Federate a ser usado para autenticação no Ping Federate.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | UID (obsoleto) | Obrigatório | nenhuma | 

## Senha
<a name="jdbc-v3-driver-ping-password"></a>

A senha do usuário do Ping Federate.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | PWD (obsoleto) | Obrigatório | nenhuma | 

## PingHostName
<a name="jdbc-v3-driver-ping-host-name"></a>

O endereço do servidor Ping. Para encontrar seu endereço, acesse o URL a seguir e visualize o campo **Endpoint da aplicação de SSO**.

```
https://your-pf-host-#:9999/pingfederate/your-pf-app#/spConnections
```


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PingHostName | IdP\$1Host (obsoleto) | Obrigatório | nenhuma | 

## PingPortNumber
<a name="jdbc-v3-driver-ping-port-number"></a>

O número da porta a ser usada para se conectar ao host de IdP.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PingPortNumber | IdP\$1Port (obsoleto) | Obrigatório | nenhuma | 

## PingPartnerSpId
<a name="jdbc-v3-driver-ping-partner-spid"></a>

O endereço do provedor de serviços. Para encontrar o endereço do provedor de serviços, acesse o URL a seguir e visualize o campo **Endpoint da aplicação de SSO**.

```
https://your-pf-host-#:9999/pingfederate/your-pf-app#/spConnections
```


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
|  PingPartnerSpId  | Partner\$1SPID (obsoleto) | Obrigatório | nenhuma | 

## Perfil preferencial
<a name="jdbc-v3-driver-ping-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-role-ping-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-ping-lake-formation-enabled"></a>

Especifica se a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation deverá ser usada para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | nenhuma | Opcional | FALSE | 

# Credenciais do AD FS
<a name="jdbc-v3-driver-adfs-credentials"></a>

Um mecanismo de autenticação baseado em SAML que viabiliza a autenticação no Athena usando o Microsoft Active Directory Federation Services (AD FS). Esse método pressupõe que o usuário já configurou uma federação entre o Athena e o AD FS.

## Provedor de credenciais
<a name="jdbc-v3-driver-adfs-credentials-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `ADFS`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | ADFS | 

## Usuário
<a name="jdbc-v3-driver-adfs-credentials-user"></a>

O endereço de e-mail do usuário do AD FS a ser usado para autenticação no AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | UID (obsoleto) | Necessário para a autenticação baseada em formulário. Opcional para a autenticação integrada do Windows. | nenhuma | 

## Senha
<a name="jdbc-v3-driver-adfs-credentials-password"></a>

A senha do usuário do AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | PWD (obsoleto) | Necessário para a autenticação baseada em formulário. Opcional para a autenticação integrada do Windows. | nenhuma | 

## Nome de host do ADFS
<a name="jdbc-v3-driver-adfs-credentials-adfshostname"></a>

O endereço do servidor AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AdfsHostName | IdP\$1Host (obsoleto) | Obrigatório | nenhuma | 

## Número da porta do ADFS
<a name="jdbc-v3-driver-adfs-credentials-adfsportnumber"></a>

O número da porta a ser usada para se conectar ao servidor do AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AdfsPortNumber | IdP\$1Port (obsoleto) | Obrigatório | nenhuma | 

## Parte confiável do ADFS
<a name="jdbc-v3-driver-adfs-credentials-adfsrelyingparty"></a>

A parte confiável. Use esse parâmetro para substituir o URL do endpoint da parte confiável do AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AdfsRelyingParty | LoginToRP (obsoleto) | Opcional | urn:amazon:webservices | 

## WIA habilitado no ADFS
<a name="jdbc-v3-driver-adfs-credentials-adfswiaenabled"></a>

Booliano. Use esse parâmetro para habilitar a autenticação integrada do Windows (WIA) com o AD FS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AdfsWiaEnabled | none | Opcional | FALSE | 

## Perfil preferencial
<a name="jdbc-v3-driver-adfs-credentials-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *Referência do API do AWS Security Token Service*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-adfs-credentials-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *Referência de APIs do AWS Security Token Service*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-adfs-credentials-lake-formation-enabled"></a>

Especifica se deve usar a ação da API [https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation para recuperar as credenciais temporárias do IAM em vez da ação de API [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | none | Opcional | FALSE | 

# Credenciais do Browser Azure AD
<a name="jdbc-v3-driver-browser-azure-ad-credentials"></a>

O Browser Azure AD é um mecanismo de autenticação baseado em SAML que funciona com o provedor de identidades do Azure AD e é compatível com autenticação multifator. Ao contrário do mecanismo padrão de autenticação do Azure AD, esse mecanismo não requer nome de usuário, senha ou segredo do cliente nos parâmetros de conexão. Assim como o mecanismo de autenticação padrão do Azure AD, o Browser Azure AD também pressupõe que o usuário já tenha configurado a federação entre o Athena e o Azure AD.

## Provedor de credenciais
<a name="jdbc-v3-driver-browser-azure-ad-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `BrowserAzureAD`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | BrowserAzureAD | 

## ID de locatário do Azure AD
<a name="jdbc-v3-driver-browser-azure-ad-azure-ad-tenant-id"></a>

O ID de locatário da aplicação do Azure AD


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AzureAdTenantId | tenant\$1id (obsoleto) | Obrigatório | nenhuma | 

## ID de cliente do Azure AD
<a name="jdbc-v3-driver-browser-azure-ad-azure-ad-client-id"></a>

O ID de cliente da aplicação do Azure AD


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| AzureAdClientId | client\$1id (obsoleto) | Obrigatório | nenhuma | 

## Tempo limite de resposta do provedor de identidades
<a name="jdbc-v3-driver-identity-provider-response-timeout"></a>

O período de tempo, em segundos, até o driver parar de esperar a resposta SAML do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpResponseTimeout | idp\$1response\$1timeout (obsoleto) | Opcional | 120 | 

## Perfil preferencial
<a name="jdbc-v3-driver-browser-azure-ad-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-browser-azure-ad-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-browser-azure-ad-lake-formation-enabled"></a>

Especifica se a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation deverá ser usada para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | nenhuma | Opcional | FALSE | 

# Credenciais do Browser SAML
<a name="jdbc-v3-driver-browser-saml-credentials"></a>

O Browser SAML é um plug-in de autenticação genérico que pode funcionar com provedores de identidades baseados em SAML e é compatível com autenticação multifator.

## Provedor de credenciais
<a name="jdbc-v3-driver-browser-saml-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `BrowserSaml`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | BrowserSaml | 

## URL de login de autenticação única
<a name="jdbc-v3-driver-single-sign-on-login-url"></a>

O URL de autenticação única para a aplicação no provedor de identidades baseado em SAMAL.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| SsoLoginUrl | login\$1url (obsoleto) | Obrigatório | nenhuma | 

## Escutar porta
<a name="jdbc-v3-driver-listen-port"></a>

O número da porta que é usada para receber a resposta do SAML. Esse valor deve corresponder à URL com a qual você configurou o provedor de identidades baseado em SAML (por exemplo, `http://localhost:7890/athena`).


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ListenPort | listen\$1port (obsoleto) | Opcional | 7890 | 

## Tempo limite de resposta do provedor de identidades
<a name="jdbc-v3-driver-single-sign-on-login-url-identity-provider-response-timeout"></a>

O período de tempo, em segundos, até o driver parar de esperar a resposta SAML do Azure AD.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpResponseTimeout | idp\$1response\$1timeout (obsoleto) | Opcional | 120 | 

## Perfil preferencial
<a name="jdbc-v3-driver-single-sign-on-login-url-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| PreferredRole | preferred\$1role (obsoleto) | Opcional | nenhuma | 

## Duração da sessão da função
<a name="jdbc-v3-driver-single-sign-on-login-url-role-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| RoleSessionDuration | Duration (obsoleto) | Opcional | 3600 | 

## Lake Formation habilitado
<a name="jdbc-v3-driver-single-sign-on-login-url-lake-formation-enabled"></a>

Especifica se a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation deverá ser usada para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| LakeFormationEnabled | nenhuma | Opcional | FALSE | 

# Provedor de credenciais DataZone IdC
<a name="jdbc-v3-driver-datazone-idc"></a>

Um mecanismo de autenticação que permite a conexão com dados controlados pelo DataZone no Athena usando o Centro de Identidade do IAM.

## Provedor de credenciais
<a name="jdbc-v3-driver-datazone-idc-credentials-provider"></a>

O provedor de credenciais que será usado para autenticar solicitações à AWS. Defina o valor desse parâmetro como `DataZoneIdc`. Observe que o alias `AWSCredentialsProviderClass` está obsoleto; em vez disso, use o nome do parâmetro `CredentialsProvider`.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | Valor a ser usado | 
| --- | --- | --- | --- | --- | 
| CredentialsProvider | AWSCredentialsProviderClass (obsoleto) | Obrigatório | nenhuma | DataZoneIdc | 

## Identificador de domínio DataZone
<a name="jdbc-v3-driver-datazone-idc-datazone-domain-identifier"></a>

Identificador do domínio DataZone a ser usado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneDomainId | nenhuma | Obrigatório | nenhuma | 

## Identificador de ambiente DataZone
<a name="jdbc-v3-driver-datazone-idc-datazone-environment-identifier"></a>

Identificador do ambiente DataZone a ser usado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneEnvironmentId | nenhuma | Obrigatório | nenhuma | 

## Região de domínio DataZone
<a name="jdbc-v3-driver-datazone-idc-datazone-domain-region"></a>

O local Região da AWS é onde seu domínio DataZone é provisionado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneDomainRegion | nenhuma | Obrigatório | nenhuma | 

## Região
<a name="jdbc-v3-driver-datazone-idc-region"></a>

O local Região da AWS onde seu ambiente DataZone e o grupo de trabalho Athena são provisionados.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Região | nenhuma | Obrigatório | nenhuma | 

## URL do emissor do Centro de Identidade do IAM
<a name="jdbc-v3-driver-datazone-idc-iam-identity-center-issuer-url"></a>

O URL do emissor da instância do Centro de Identidade do IAM que o domínio DataZone usa.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdentityCenterIssuerUrl | nenhuma | Obrigatório | nenhuma | 

## Substituição de endpoint do DataZone
<a name="jdbc-v3-driver-datazone-idc-datazone-endpoint-override"></a>

O endpoint da API DataZone a ser usado em vez do padrão para a Região da AWS fornecida.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneEndpointOverride | nenhuma | Opcional | nenhuma | 

## Habilitar o armazenamento em cache de tokens
<a name="jdbc-v3-driver-datazone-idc-enable-token-caching"></a>

Quando habilitado, permite que o mesmo token de acesso do Centro de Identidade do IAM seja usado nas conexões do driver. Isso impede que ferramentas SQL que criam várias conexões de driver iniciem várias janelas do navegador. Se você habilitar esse parâmetro, recomendamos que você feche a ferramenta SQL imediatamente após usá-la para limpar o cache de tokens e exigir uma nova autenticação.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| EnableTokenCaching | nenhuma | Opcional | FALSE | 

## Escutar porta
<a name="jdbc-v3-driver-datazone-idc-listen-port"></a>

O número da porta que escuta a resposta do Centro de Identidade do IAM.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| ListenPort | nenhuma | Opcional | 8000 | 

## Tempo limite de resposta do provedor de identidades
<a name="jdbc-v3-driver-datazone-idc-identity-provider-response-time-out"></a>

O período de tempo, em segundos, até o driver parar de esperar a resposta do Centro de Identidade do IAM.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| IdpResponseTimeout | nenhuma | Opcional | 120 | 

# Provedor de credenciais DataZone IAM
<a name="jdbc-v3-driver-datazone-iamcp"></a>

Um mecanismo de autenticação que usa credenciais do IAM para se conectar a dados governados pelo DataZone no Athena.

## Identificador de domínio DataZone
<a name="jdbc-v3-driver-datazone-iamcp-datazone-domain-identifier"></a>

Identificador do domínio DataZone a ser usado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneDomainId | nenhuma | Obrigatório | nenhuma | 

## Identificador de ambiente DataZone
<a name="jdbc-v3-driver-datazone-iamcp-datazone-environment-identifier"></a>

Identificador do ambiente DataZone a ser usado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneEnvironmentId | nenhuma | Obrigatório | nenhuma | 

## Região de domínio DataZone
<a name="jdbc-v3-driver-datazone-iamcp-datazone-domain-region"></a>

O local Região da AWS é onde seu domínio DataZone é provisionado.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneDomainRegion | nenhuma | Obrigatório | nenhuma | 

## Substituição de endpoint do DataZone
<a name="jdbc-v3-driver-datazone-iamcp-datazone-endpoint-override"></a>

O endpoint da API DataZone a ser usado em vez do padrão para a Região da AWS fornecida.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| DataZoneEndpointOverride | nenhuma | Opcional | nenhuma | 

## Usuário
<a name="jdbc-v3-driver-datazone-iamcp-user"></a>

Seu ID de chave de acesso da AWS. Para obter mais informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Usuário | AccessKeyId | Opcional | nenhuma | 

## Senha
<a name="jdbc-v3-driver-datazone-iamcp-password"></a>

O ID da chave secreta da AWS. Para obter mais informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| Nome do parâmetro | Alias | Tipo de parâmetro | Valor padrão | 
| --- | --- | --- | --- | 
| Senha | SecretAccessKey | Opcional | nenhuma | 

# Outra configuração do JDBC 3.x
<a name="jdbc-v3-driver-other-configuration"></a>

As seções a seguir descrevem algumas configurações adicionais para o driver JDBC 3.x.

## Tempo limite de rede
<a name="jdbc-v3-driver-network-timeout"></a>

O tempo limite de rede controla a quantidade de tempo em milissegundos que o driver espera para que uma conexão de rede seja estabelecida. Isso inclui o tempo necessário para enviar solicitações de API. Após esse período, o driver gera uma exceção de tempo limite. Em raras circunstâncias, pode ser útil alterar o tempo limite da rede. Por exemplo, você pode querer aumentar o tempo limite para pausas longas na coleta de resíduos.

Para configurá-lo, chame o método `setNetworkTimeout` em um objeto `Connection` JDBC. Esse valor pode ser alterado durante o ciclo de vida da conexão JDBC. Para ter mais informações, consulte [setNetworkTimeout](https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#setNetworkTimeout-java.util.concurrent.Executor-int-) na documentação do Oracle JDBC API. Usar o método `setNetworkTimeout` equivale a definir o parâmetro de conexão [Tempo limite de rede](jdbc-v3-driver-advanced-connection-parameters.md#jdbc-v3-driver-networktimeoutmillis). 

O exemplo a seguir define o tempo limite de rede como 5.000 milissegundos.

```
...
AthenaDriver driver = new AthenaDriver();
Connection connection = driver.connect(url, connectionParameters);
connection.setNetworkTimeout(null, 5000);
...
```

## Tempo limite de consulta
<a name="jdbc-v3-driver-query-timeout"></a>

O tempo, em segundos, que o driver aguardará a conclusão de uma consulta no Athena após enviá-la. Após esse período, o driver tenta cancelar a consulta enviada e gera uma exceção de tempo limite.

O tempo limite da consulta não pode ser definido como um parâmetro de conexão. Para configurá-lo, chame o método `setQueryTimeout` em um objeto `Statement` JDBC. Esse valor pode ser alterado durante o ciclo de vida de uma instrução JDBC. O valor padrão desse parâmetro é `0` (zero). Um valor `0` significa que as consultas podem ser executadas até a sua conclusão (respeitados os [Service Quotas](service-limits.md)).

Os exemplos a seguir definem o tempo limite de consulta como 5.000 milissegundos.

```
...
AthenaDriver driver = new AthenaDriver();
Connection connection = driver.connect(url, connectionParameters);
Statement statement = connection.createStatement();
statement.setQueryTimeout(5);
...
```

# Notas de versão do JDBC 3.x do Amazon Athena
<a name="jdbc-v3-driver-release-notes"></a>

Estas notas de versão fornece detalhes de melhorias e correções no driver JDBC 3.x do Amazon Athena.

## 3.7.0
<a name="jdbc-v3-driver-release-notes-2025-11-21"></a>

Lançado em 21/11/2025

### Melhorias
<a name="jdbc-v3-driver-release-notes-2025-11-21-improvements"></a>
+ **Plug-in de autenticação confiável de propagação de identidade do OIDC via navegador**: foi adicionado um novo plug-in de autenticação que permite a autenticação otimizada baseada em navegador com provedores de identidades do OpenID Connect (OIDC). Esse plug-in gerencia o fluxo completo do OAuth 2.0 por meio do seu navegador padrão, busca automaticamente o JSON Web Token (JWT) e se integra à propagação de identidade confiável. Projetado especificamente para ambientes de área de trabalho de usuário único, ele fornece uma experiência de autenticação mais simplificada em comparação com o tratamento manual do JWT. Para obter informações sobre a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html).

### Correções
<a name="jdbc-v3-driver-release-notes-2025-11-21-fixes"></a>
+ **Suporte aprimorado à precisão do carimbo de data e hora**: o driver agora oferece suporte total à precisão de milissegundos e nanossegundos nos valores de carimbos de data e hora retornados das consultas do Athena por meio do método `getTimestamp()`.
+ **Tratamento aprimorado de tipos complexos**: foram corrigidos problemas com a análise de tipos de dados aninhados (matrizes, estruturas e mapas) em ambas as operações de metadados gerais e `DatabaseMetaData#getColumns`, garantindo informações de tipo precisas para estruturas de dados complexas.
+ **Registro em log de erros aprimorado**: o registro em log foi aprimorado para falhas de busca de metadados do S3, fornecendo mensagens de erro mais claras e melhores informações de diagnóstico.

## 3.6.0
<a name="jdbc-v3-driver-release-notes-2025-09-10"></a>

Lançada em 10/9/2025

### Melhorias
<a name="jdbc-v3-driver-release-notes-2025-09-10-improvements"></a>
+ **Plug-in de autenticação de propagação de identidade confiável JWT**: foi adicionado um novo plug-in de autenticação para oferecer suporte à integração da propagação de identidade confiável do JWT com drivers JDBC. Esse tipo de autenticação permite usar um JSON Web Token (JWT) obtido de um provedor de identidades externo como parâmetro de conexão para autenticação no Athena. Com a propagação de identidade confiável, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html).
+ **Suporte a endpoints SSO OIDC e SSO Admin personalizados**: foi adicionado suporte a endpoints SSO OIDC e admin SSO personalizados no driver JDBC. Esse aprimoramento permite que você especifique seus próprios endpoints para serviços de SSO ao executar o JDBC por trás de VPCs.
+ **Atualização da versão do AWS SDK**: atualizamos a versão do AWS SDK usada no driver para 2.32.16 e atualizamos as dependências do projeto para a versão 3.6.0.

## 3.5.1
<a name="jdbc-v3-driver-release-notes-2025-07-17"></a>

lançada em 17/07/2025

### Melhorias
<a name="jdbc-v3-driver-release-notes-2025-07-17-improvements"></a>
+ **Recursos de registro em log**: registro em log aprimorado das buscas do S3, elevando o nível do log a `INFO` e adicionando métricas para contagens de linhas, desvios e comprimento de objetos. Implementado rastreamento do ciclo de vida das conexões e otimizada a performance geral do registro em log.
+ **Tratamento de caracteres especiais**: melhor tratamento dos caracteres especiais para padrões `LIKE` em nomes de esquemas e de catálogos.
+ **Gerenciamento do estado da conexão**: gerenciamento aprimorado do estado da conexão para evitar possíveis erros, evitando chamadas de API após a conexão ser fechada e adicionando verificações de segurança para operações de consulta durante o encerramento.

### Correções
<a name="jdbc-v3-driver-release-notes-2025-07-17-fixes"></a>
+ **Metadados de consultas DDL**: corrigido o problema de `NoSuchKeyFound` com o tratamento de metadados de consultas DDL.

## 3.5.0
<a name="jdbc-v3-driver-release-notes-2025-03-18"></a>

Liberado em 18/3/2025

### Melhorias
<a name="jdbc-v3-driver-release-notes-2025-03-18-improvements"></a>
+ **Parâmetros de configuração do resultado**: adição de suporte a dois novos parâmetros de conexão `ExpectedBucketOwner` e `AclOption`. Para obter mais informações, consulte [Parâmetros de configuração do resultado](jdbc-v3-driver-advanced-connection-parameters.md#jdbc-v3-driver-result-config).
+ **Versão do AWS SDK**: a versão do AWS SDK usada no driver foi atualizada para 2.30.22.

## 3.4.0
<a name="jdbc-v3-driver-release-notes-2025-02-18"></a>

Liberado em 18/2/2025

### Melhorias
<a name="jdbc-v3-driver-release-notes-2025-02-18-improvements"></a>
+ **Buscador de resultados**: agora, o driver seleciona automaticamente o método mais rápido para fazer o download dos resultados das consultas. Isso dispensa a necessidade de configurar manualmente o buscador na maioria das situações. Para obter mais informações, consulte [Parâmetros de busca de resultados](jdbc-v3-driver-advanced-connection-parameters.md#jdbc-v3-driver-result-fetching-parameters).

### Correções
<a name="jdbc-v3-driver-release-notes-2025-02-18-fixes"></a>
+ **ResultSet**: agora, o driver lida com a iteração sobre os conjuntos de resultados de instruções de DDL que não produzem objetos de resultados no S3. Além disso, o driver retorna um objeto `ResultSet` vazio, em vez de um objeto com anulação, quando `GetQueryResultsStream` retorna uma página completamente em branco.
+ **ResultsStream**: o processo de transmissão de resultados foi otimizado ao remover chamadas desnecessárias para contar o número de linhas nos buffers internos.
+ **getTables**: a chamada `GetTables` foi otimizada ao lidar com os tipos de tabela com base nas respostas `ListTableMetadata` e `GetTableMetadata`.

## 3.3.0
<a name="jdbc-v3-driver-release-notes-2024-10-30"></a>

Lançado em 30/10/2024

### Melhorias
<a name="jdbc-v3-driver-release-notes-2024-10-30-improvements"></a>
+ **Autenticação DataZone** — Foi adicionado suporte para os plug-ins de autenticação DataZone `DataZoneIdC` e `DataZoneIAM`. Para obter mais informações, consulte [Provedor de credenciais DataZone IdC](jdbc-v3-driver-datazone-idc.md) e [Provedor de credenciais DataZone IAM](jdbc-v3-driver-datazone-iamcp.md).
+ **Tempo limite da rede** — O tempo limite da rede agora pode ser definido usando o parâmetro de conexão `NetworkTimeoutMillis`. Anteriormente, ele só podia ser definido no próprio objeto `Connection`. Para obter mais informações, consulte [Tempo limite de rede](jdbc-v3-driver-other-configuration.md#jdbc-v3-driver-network-timeout).

### Correções
<a name="jdbc-v3-driver-release-notes-2024-10-30-fixes"></a>
+ **Manipulação de objetos vazios do S3** — O driver agora manipula objetos vazios no buscador do S3 em vez de lançar uma exceção Intervalo não satisfatório no Amazon S3.
+ **Registro** — O driver não registra mais a mensagem Itens solicitados para execução da consulta [...], mas a assinatura é cancelada após o consumo dos resultados da consulta.
+ **Strings de parâmetros vazios** — O driver agora manipula strings vazias presentes em um parâmetro de conexão como se o parâmetro não estivesse presente. Isso resolve problemas que ocorriam quando algumas ferramentas de BI passavam inadvertidamente strings vazias que causavam tentativas de autenticação não intencionais.

## 3.2.2
<a name="jdbc-v3-driver-release-notes-2024-07-29"></a>

lançada em 29/07/2024

### Melhorias
<a name="jdbc-v3-driver-release-notes-2024-07-29-improvements"></a>
+ **Mapeamento de tipos de dados**: melhoria na conformidade com a especificação JDBC alterando a forma como o driver mapeia os tipos de dados `tinyint`, `smallint`, `row` e `struct` para objetos Java.
+ **Atualização da versão do AWS SDK**: a versão do AWS SDK usada no driver foi atualizada para 2.26.23.

### Correções
<a name="jdbc-v3-driver-release-notes-2024-07-29-fixes"></a>
+ **Comentários**: corrigido um problema com comentários de linha no final de uma instrução.
+ **Listagem de banco de dados**: corrigido um problema no qual listar os bancos de dados poderia entrar em um loop infinito quando a última página retornada pela API `ListDatabases` paginada estivesse vazia.

## 3.2.1
<a name="jdbc-v3-driver-release-notes-2024-07-03"></a>

Lançado em 03/07/2024

### Melhorias
<a name="jdbc-v3-driver-release-notes-2024-07-03-improvements"></a>
+ **Provedor de credenciais de JWT** — Foi adicionado suporte para durações de sessão especificadas pelo usuário. Para obter mais informações, consulte [Duração da sessão da função](jdbc-v3-driver-jwt-credentials.md#jdbc-v3-driver-jwt-role-session-duration).

### Correções
<a name="jdbc-v3-driver-release-notes-2024-07-03-fixes"></a>
+ **Pool de threads** — Criado um `ThreadPoolExecutor` por conexão para tarefas assíncronas para evitar o uso do pool `ForkJoin`.
+ **Provedores de credenciais** — O host proxy agora é analisado para obter o esquema e o host quando o cliente HTTP está configurado para IdPs externos.
+ **Provedor de credenciais padrão** — Garantimos que o provedor de credenciais padrão não possa ser fechado pelo código do cliente.
+ **getColumns** — Corrigido um problema de propriedade da coluna `ORDINAL_COLUMN` no método `DatabaseMetaData#getColumns`.
+ **ResultSet** — Foi adicionado suporte para `Infinity`, `-Infinity` e `NaN` para `ResultSet.`. Corrigida uma discrepância entre o tipo de coluna retornado das operações de catálogo e o conjunto de resultados de uma consulta concluída.

## 3.2.0
<a name="jdbc-v3-driver-release-notes-2024-02-26"></a>

Lançado em 26/04/2024

### Melhorias
<a name="jdbc-v3-driver-release-notes-2024-02-26-improvements"></a>
+ **Desempenho da operação de catálogo**: o desempenho foi aprimorado para operações de catálogo que não usam caracteres curinga.
+ **Alteração do intervalo mínimo de pesquisa**: o padrão do intervalo mínimo de pesquisa foi modificado para reduzir o número de chamadas de API que o driver faz para o Athena. As conclusões de consultas ainda são detectadas o mais rápido possível.
+ **Possibilidade de descoberta de ferramentas de BI**: o driver ficou mais facilmente detectável para ferramentas de business intelligence.
+ **Mapeamento de tipos de dados**: o mapeamento de tipos de dados para os tipos de dados DDL do Athena `binary`, `array` e `struct`foi aprimorado.
+ **Versão do AWS SDK**: a versão do AWS SDK usada no driver foi atualizada para 2.25.34.

### Correções
<a name="jdbc-v3-driver-release-notes-2024-02-26-fixes"></a>
+ **Listagens de tabelas de catálogos federados**: corrigido um problema que fazia com que catálogos federados retornassem uma lista vazia de tabelas.
+ **getSchemas**: corrigido um problema que fazia com que o método JDBC [DatabaseMetaData\$1getSchemas](https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getSchemas--) buscasse bancos de dados somente do catálogo padrão, e não de todos os catálogos.
+ **getColumns**: corrigido um problema que fazia com que um catálogo nulo fosse retornado quando o método JDBC [DatabaseMetaData\$1getSchemas](https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getColumns-java.lang.String-java.lang.String-java.lang.String-java.lang.String-) era chamado com um nome de catálogo nulo.

## 3.1.0
<a name="jdbc-v3-driver-release-notes-2024-02-15"></a>

Lançado em 15/02/2024

### Melhorias
<a name="jdbc-v3-driver-release-notes-2024-02-15-improvements"></a>
+ Suporte adicionado para autenticação integrada do Windows por meio do Microsoft Active Directory Federation Services (AD FS) e autenticação com base em formulário.
+ Para compatibilidade com versões anteriores da versão 2.x, o subprotocolo JDBC `awsathena` agora é aceito, mas produz um aviso de depreciação. Em vez disso, use o subprotocolo JDBC `athena`.
+ `AwsDataCatalog` agora é o padrão para o parâmetro do catálogo, e `default` é o padrão para o parâmetro do banco de dados. Essas alterações garantem que os valores corretos do catálogo e do banco de dados atuais sejam retornados em vez de nulos.
+ Em conformidade com a especificação JDBC, `IS_AUTOINCREMENT` e `IS_GENERATEDCOLUMN` agora retornam uma string vazia em vez de `NO`.
+ O tipo de dados `int` do Athena agora é mapeado para o mesmo tipo de JDBC `integer` do Athena, em vez de para `other`.
+ Quando os metadados da coluna do Athena não contêm os campos opcionais `precision` e `scale`, o driver agora retorna zero para os valores correspondentes em uma coluna `ResultSet`.
+ A versão do AWS SDK foi atualizada para 2.21.39.

### Correções
<a name="jdbc-v3-driver-release-notes-2024-02-15-fixes"></a>
+ Foi corrigido um problema com `GetQueryResultsStream` que causava a ocorrência de uma exceção quando resultados de texto simples do Athena tinham uma contagem de colunas inconsistente com a contagem de colunas nos metadados de resultados do Athena.

## 3.0.0
<a name="jdbc-v3-driver-release-notes-2023-11-16"></a>

Lançado em 16/11/2023

O driver Athena JDBC 3.x é o driver de nova geração que oferece melhor desempenho e compatibilidade. O driver JDBC 3.x é compatível com a leitura de resultados de consultas diretamente no Amazon S3, o que melhora o desempenho de aplicações que consomem resultados de consultas de grande porte. O novo driver também tem menos dependências de terceiros, o que facilita a integração com ferramentas de BI e aplicações personalizadas.

# Versões anteriores do driver JDBC 3.x driver do Athena
<a name="jdbc-v3-driver-previous-versions"></a>

Recomendamos muito que você use a [versão mais recente](jdbc-v3-driver.md) do driver JDBC 3.x. A versão mais recente do driver contém as melhorias e correções mais recentes. Use uma versão mais antiga somente se sua aplicação apresentar incompatibilidades com a versão mais recente.

## Jar com dependências do driver JDBC
<a name="jdbc-v3-driver-download-uber-jar-previous"></a>

O download a seguir empacota o driver e todas as suas dependências no mesmo arquivo `.jar`. Esse download é comumente usado para clientes SQL de terceiros.
+ [3.6.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.6.0/athena-jdbc-3.6.0-with-dependencies.jar)
+ [uber jar 3.5.1](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.5.1/athena-jdbc-3.5.1-with-dependencies.jar)
+ [3.5.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.5.0/athena-jdbc-3.5.0-with-dependencies.jar)
+ [3.4.0 Uber JAR](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.4.0/athena-jdbc-3.4.0-with-dependencies.jar)
+ [3.3.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.3.0/athena-jdbc-3.3.0-with-dependencies.jar)
+ [3.2.2 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.2/athena-jdbc-3.2.2-with-dependencies.jar)
+ [3.2.1 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.1/athena-jdbc-3.2.1-with-dependencies.jar)
+ [3.2.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.0/athena-jdbc-3.2.0-with-dependencies.jar)
+ [3.1.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.1.0/athena-jdbc-3.1.0-with-dependencies.jar)
+ [3.0.0 uber jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.0.0/athena-jdbc-3.0.0-with-dependencies.jar)

## Jar sem dependências do driver JDBC
<a name="jdbc-v3-driver-download-lean-jar"></a>

O download a seguir é um arquivo `.zip` que contém o `.jar` sem dependências para o driver e arquivos `.jar` separados para as dependências do driver. Esse download é comumente usado para aplicações personalizadas que podem ter dependências conflitantes com as dependências que o driver usa. Esse download é útil se você quiser escolher quais dependências do driver incluir no jar sem dependências e quais excluir se a aplicação personalizada já contiver uma ou mais dependências.
+ [3.6.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.6.0/athena-jdbc-3.6.0-lean-jar-and-separate-dependencies-jars.zip)
+ [lean jar 3.5.1](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.5.1/athena-jdbc-3.5.1-lean-jar-and-separate-dependencies-jars.zip)
+ [3.5.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.5.0/athena-jdbc-3.5.0-lean-jar-and-separate-dependencies-jars.zip)
+ [3.4.0 Lean JAR](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.4.0/athena-jdbc-3.4.0-lean-jar-and-separate-dependencies-jars.zip)
+ [3.3.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.3.0/athena-jdbc-3.3.0-lean-jar-and-separate-dependencies-jars.zip)
+ [3.2.2 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.2/athena-jdbc-3.2.2-lean-jar-and-separate-dependencies-jars.zip)
+ [3.2.1 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.1/athena-jdbc-3.2.1-lean-jar-and-separate-dependencies-jars.zip)
+ [3.2.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.2.0/athena-jdbc-3.2.0-lean-jar-and-separate-dependencies-jars.zip)
+ [3.1.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.1.0/athena-jdbc-3.1.0-lean-jar-and-separate-dependencies-jars.zip)
+ [3.0.0 lean jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/3.0.0/athena-jdbc-3.0.0-lean-jar-and-separate-dependencies-jars.zip)

# Driver JDBC 2.x do Athena
<a name="jdbc-v2"></a>

Você pode usar uma conexão JDBC para conectar o Athena às ferramentas de inteligência de negócios e outras aplicações, como o [SQL Workbench](http://www.sql-workbench.eu/downloads.html). Para isso, use os links do Amazon S3 nesta página para baixar, instalar e configurar o driver JDBC 2.x do Athena. Para obter informações sobre como criar o URL da conexão JDBC, consulte o [guia de instalação e configuração do driver JDBC](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/Simba+Amazon+Athena+JDBC+Connector+Install+and+Configuration+Guide.pdf), disponível para download. Para obter informações sobre permissões, consulte [Controlar o acesso por conexões JDBC e ODBC](policy-actions.md). Para enviar comentários sobre o driver JDBC, envie um e-mail para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com). A partir da versão 2.0.24, duas versões do driver estão disponíveis: uma que inclui o AWS SDK e uma que não o inclui.

**Importante**  
Ao usar o driver JDBC, observe os seguintes requisitos:  
**Porta 444 aberta**: mantenha a porta 444, que o Athena usa para fazer uma transmissão dos resultados das consultas, aberta para o tráfego de saída. Ao usar um endpoint do PrivateLink para se conectar ao Athena, verifique se o grupo de segurança anexado ao endpoint do PrivateLink está aberto para o tráfego de entrada na porta 444. Se a porta 444 estiver bloqueada, você pode receber a mensagem de erro [Simba][AthenaJDBC](100123) Ocorreu um erro. Exceção durante a inicialização da coluna. 
**Política athena:GetQueryResultsStream**: adicione a ação de política `athena:GetQueryResultsStream` para as entidades principais do IAM que usam o driver JDBC. Essa ação de política não é exposta diretamente com a API. Ela apenas é usada com drivers ODBC e JDBC como parte do suporte a resultados de transmissão. Para visualizar um exemplo de política, consulte [AWSPolítica gerenciada : AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy). 
**Uso do driver JDBC para diversos catálogos de dados**: para usar o driver JDBC para diversos catálogos de dados com o Athena (por exemplo, ao usar um [metastore do Hive externo](connect-to-data-source-hive.md) ou [consultas federadas](federated-queries.md)), inclua `MetadataRetrievalMethod=ProxyAPI` em sua string de conexão JDBC. 
**Drivers 4.1**: a partir de 2023, a compatibilidade do driver para a versão 4.1 do JDBC será descontinuado. Nenhuma atualização adicional será lançada. Se você estiver usando um driver JDBC 4.1, é altamente recomendado fazer a migração para o driver 4.2. 

## Driver JDBC 2.x com AWS SDK
<a name="download-the-jdbc-driver"></a>

A versão 2.2.2 do driver JDBC está em conformidade com o padrão de dados de API do JDBC 4.2 e requer o JDK 8.0 ou posterior. Para obter informações sobre como verificar a versão do Java Runtime Environment (JRE) que você usa, consulte a [documentação](https://www.java.com/en/download/help/version_manual.html) do Java.

Use o link a seguir para baixar do arquivo `.jar` do driver JDBC 4.2.
+ [AthenaJDBC42-2.2.2.1000.jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/AthenaJDBC42-2.2.2.1000.jar)

O download do arquivo `.zip` contém o arquivo `.jar` para o JDBC 4.2 e inclui o SDK da AWS e a documentação, as notas de lançamento, as licenças e os contratos que o acompanham.
+ [SimbaAthenaJDBC-2.2.2.1000.zip](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/SimbaAthenaJDBC-2.2.2.1000.zip)

## Driver JDBC 2.x sem AWS SDK
<a name="download-the-jdbc-driver-no-sdk"></a>

A versão 2.2.2 do driver JDBC está em conformidade com o padrão de dados de API do JDBC 4.2 e requer o JDK 8.0 ou posterior. Para obter informações sobre como verificar a versão do Java Runtime Environment (JRE) que você usa, consulte a [documentação](https://www.java.com/en/download/help/version_manual.html) do Java.

Use o link a seguir para baixar o arquivo `.jar` do driver JDBC 4.2 sem o SDK da AWS.
+ [AthenaJDBC42-2.2.2.1001.jar](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1001/AthenaJDBC42-2.2.2.1001.jar)

O download do arquivo `.zip` contém o arquivo `.jar` para o JDBC 4.2 e a documentação, as notas de lançamento, as licenças e os contratos que o acompanham. O AWS SDK não está incluído.
+ [SimbaAthenaJDBC-2.2.2.1001.zip](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1001/SimbaAthenaJDBC-2.2.2.1001.zip)

## Notas da versão, contrato de licença e avisos do driver JDBC 2.x
<a name="atelong-jdbc-driver-license-agreement"></a>

Depois de fazer download da versão de que você precisa, leia as notas de release e revise o Contrato de licença e as notificações. 
+ [Notas de lançamento](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/release-notes.txt)
+ [Contrato de licença](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/LICENSE.txt)
+ [Notificações](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/NOTICES.txt)
+ [Licenças de terceiros](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/third-party-licenses.txt)

## Documentação do driver JDBC 2.x
<a name="jdbc-v2-documentation"></a>

Faça download da seguinte documentação do driver:
+ [Guia de instalação e configuração do driver JDBC](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/Simba+Amazon+Athena+JDBC+Connector+Install+and+Configuration+Guide.pdf). Use este guia para instalar e configurar o driver.
+ [Guia de migração do driver JDBC](https://downloads.athena.us-east-1.amazonaws.com/drivers/JDBC/SimbaAthenaJDBC-2.2.2.1000/docs/Simba+Amazon+Athena+JDBC+Connector+Migration+Guide.pdf). Use este guia para migrar de versões anteriores para a versão atual.

# Conectar ao Amazon Athena com ODBC
<a name="connect-with-odbc"></a>

O Amazon Athena oferece dois drivers ODBC, versões 1.x e 2.x. O driver ODBC 2.x do Athena é uma nova alternativa que é compatível com sistemas Linux, macOS ARM, macOS Intel e Windows 64 bits. O driver Athena 2.x oferece suporte a todos os plug-ins de autenticação compatíveis com o driver ODBC 1.x, e quase todos os parâmetros de conexão são compatíveis com versões anteriores.
+ Para baixar o driver ODBC 2.x, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md). 
+ Para baixar o driver ODBC 1.x, consulte [Driver ODBC 1.x do Athena](connect-with-odbc-driver-and-documentation-download-links.md).

**Topics**
+ [

# Amazon Athena ODBC 2.x
](odbc-v2-driver.md)
+ [

# Driver ODBC 1.x do Athena
](connect-with-odbc-driver-and-documentation-download-links.md)
+ [

# Usar o conector do Power BI para Amazon Athena
](connect-with-odbc-and-power-bi.md)

# Amazon Athena ODBC 2.x
<a name="odbc-v2-driver"></a>

Você pode usar uma conexão ODBC para se conectar ao Amazon Athena por muitas ferramentas e aplicações de clientes SQL de terceiros. Configure a conexão ODBC no computador cliente.

## Considerações e limitações
<a name="odbc-v2-driver-considerations-limitations"></a>

Para obter informações sobre como migrar o driver ODBC 1.x do Athena para o driver ODBC 2.x do Athena, consulte [Migrar para o driver ODBC 2.x](odbc-v2-driver-migrating.md).

## Download do driver ODBC 2.x
<a name="odbc-v2-driver-download"></a>

Para baixar o driver ODBC do Amazon Athena 2.x, acesse os links nesta página.

**Importante**  
Ao usar o driver ODBC 2.x, observe os seguintes requisitos:  
**Porta 444 aberta**: mantenha a porta 444, que o Athena usa para fazer uma transmissão dos resultados das consultas, aberta para o tráfego de saída. Ao usar um endpoint do PrivateLink para se conectar ao Athena, verifique se o grupo de segurança anexado ao endpoint do PrivateLink está aberto para o tráfego de entrada na porta 444. 
**Política athena:GetQueryResultsStream**: adicione a ação de política `athena:GetQueryResultsStream` às entidades principais do IAM que usam o driver ODBC. Essa ação de política não é exposta diretamente com a API. Ela apenas é usada com drivers ODBC e JDBC como parte do suporte a resultados de transmissão. Para visualizar um exemplo de política, consulte [AWSPolítica gerenciada : AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy). 

**Importante**  
**Atualização de segurança:** a versão 2.1.0.0 inclui aprimoramentos de segurança nos componentes de autenticação, processamento de consultas e segurança de transporte. Recomendamos a atualização para esta versão para usufruir dessas melhorias. Para obter detalhes, consulte [Notas da versão do ODBC 2.x do Amazon Athena](odbc-v2-driver-release-notes.md).

### Linux
<a name="connect-with-odbc-linux"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 2.1.0.0 para Linux 64 bits |  [Driver ODBC 2.1.0.0 para Linux de 64 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Linux/AmazonAthenaODBC-2.1.0.0.rpm)  | 

### macOS (ARM)
<a name="connect-with-odbc-macos-arm"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 2.1.0.0 para macOS 64 bits (ARM) |  [Driver ODBC 2.1.0.0 para macOS de 64 bits (ARM)](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Mac/arm/AmazonAthenaODBC-2.1.0.0_arm.pkg)  | 

### macOS (Intel)
<a name="connect-with-odbc-macos-intel"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 2.1.0.0 para macOS 64 bits (Intel) |  [Driver ODBC 2.1.0.0 para macOS de 64 bits (Intel)](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Mac/Intel/AmazonAthenaODBC-2.1.0.0_x86.pkg)  | 

### Windows
<a name="connect-with-odbc-windows"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 2.1.0.0 para Windows 64 bits |  [Driver ODBC 2.1.0.0 para Windows de 64 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Windows/AmazonAthenaODBC-2.1.0.0.msi)  | 

### Licenças
<a name="connect-with-odbc-licenses"></a>
+  [Licença da AWS](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/LICENSE.txt) 
+ [Licenças de terceiros](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/THIRD_PARTY_LICENSES.txt) 

## Propagação de identidade confiável com ODBC
<a name="odbc-v2-driver-trusted-identity"></a>

Agora você pode se conectar ao Amazon Athena usando drivers JDBC com recursos de login único por meio do Centro de Identidade do AWS Identity and Access Management. Quando você acessa o Athena a partir de ferramentas como PowerBI, Tableau ou DBeaver, sua identidade e permissões são propagadas automaticamente para o Athena por meio do Centro de Identidade do IAM. Para obter mais informações, consulte [Usar a propagação de identidade confiável com drivers do Amazon Athena](using-trusted-identity-propagation.md).

**Topics**
+ [

## Considerações e limitações
](#odbc-v2-driver-considerations-limitations)
+ [

## Download do driver ODBC 2.x
](#odbc-v2-driver-download)
+ [

## Propagação de identidade confiável com ODBC
](#odbc-v2-driver-trusted-identity)
+ [

# Conceitos básicos do driver ODBC 2.x
](odbc-v2-driver-getting-started.md)
+ [

# Parâmetros de conexão do ODBC 2.x do Athena
](odbc-v2-driver-connection-parameters.md)
+ [

# Migrar para o driver ODBC 2.x
](odbc-v2-driver-migrating.md)
+ [

# Solucionar problemas do driver ODBC 2.x
](odbc-v2-driver-troubleshooting.md)
+ [

# Notas da versão do ODBC 2.x do Amazon Athena
](odbc-v2-driver-release-notes.md)

# Conceitos básicos do driver ODBC 2.x
<a name="odbc-v2-driver-getting-started"></a>

Utilize as informações desta seção para começar a usar o driver ODBC 2.x do Amazon Athena. O driver é compatível com os sistemas operacionais Windows, Linux e macOS.

**Topics**
+ [

# Windows
](odbc-v2-driver-getting-started-windows.md)
+ [

# Linux
](odbc-v2-driver-getting-started-linux.md)
+ [

# macOS
](odbc-v2-driver-getting-started-macos.md)

# Windows
<a name="odbc-v2-driver-getting-started-windows"></a>

Se quiser usar um computador cliente com Windows para acessar o Amazon Athena, é necessário ter o driver ODBC do Amazon Athena.

## Requisitos do sistema Windows
<a name="odbc-v2-driver-system-requirements-windows"></a>

Instale o driver ODBC do Amazon Athena em computadores clientes que acessarão os bancos de dados do Amazon Athena diretamente em vez de usar um navegador da Web.

O sistema Windows que você usa deve atender aos seguintes requisitos:
+ Você tem direitos de administrador
+ Um dos seguintes sistemas operacionais:
  + Windows 11, 10 ou 8.1
  + Windows Server 2019, 2016 ou 2012
  + Arquitetura de processador compatível: x86\$164 (64 bits)
+ Pelo menos 100 MB de espaço em disco disponível
+ O [Microsoft Visual C\$1\$1 redistribuível para Visual Studio](https://visualstudio.microsoft.com/downloads/#microsoft-visual-c-redistributable-for-visual-studio-2022) para Windows de 64 bits está instalado.

## Instalar o driver ODBC do Amazon Athena
<a name="odbc-v2-driver-installing"></a>

**Para baixar e instalar o driver ODBC do Amazon Athena para Windows**

1. [Baixe](odbc-v2-driver.md#odbc-v2-driver-download) o arquivo de instalação `AmazonAthenaODBC-2.x.x.x.msi`.

1. Inicie o arquivo de instalação e escolha **Próximo**.

1. Para aceitar os termos do contrato de licença, marque a caixa de seleção e escolha **Próximo**.

1. Para alterar o local da instalação, escolha **Procurar**, navegue até a pasta desejada e escolha **OK**.

1. Para aceitar o local da instalação, escolha **Próximo**.

1. Escolha **Instalar**.

1. Quando a instalação terminar, escolha **Concluir**.

## Modos de definir as opções de configuração do driver
<a name="odbc-v2-driver-ways-to-set-options"></a>

Para controlar o comportamento do driver ODBC do Amazon Athena no Windows, é possível definir as opções de configuração do driver destes modos:
+ No programa **Administrador de Fonte de Dados ODBC**, ao configurar um nome de fonte de dados (DSN).
+ Adicionando ou alterando as chaves de registro do Windows no seguinte local:

  ```
  HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\YOUR_DSN_NAME
  ```
+ Definindo as opções do driver na string de conexão quando você se conecta de maneira programática.

## Configurar um nome de fonte de dados no Windows
<a name="odbc-v2-driver-configuring-dsn-on-windows"></a>

Depois de baixar e instalar o driver ODBC, é necessário adicionar uma entrada de nome de fonte de dados (DSN) ao computador cliente ou instância do Amazon EC2. As ferramentas de cliente SQL usam essa fonte de dados para se conectar ao banco de dados do Amazon Athena.

**Para criar uma entrada de DSN do sistema**

1. No menu **Iniciar** do Windows, clique com o botão direito do mouse em **Fontes de dados ODBC (64 bits)** e escolha **Mais**, **Executar como administrador**.

1. No **Administrador de fonte de dados ODBC**, escolha a guia **Drivers**.

1. Na coluna **Nome**, verifique se o **ODBC do Amazon Athena (x64)** está presente.

1. Execute um destes procedimentos:
   + Para configurar o driver para todos os usuários do computador, escolha a guia **DSN do sistema**. Como as aplicações que usam uma conta diferente para carregar dados podem não conseguir detectar DSNs de usuários de outra conta, é recomendável usar a opção de configuração de DSN do sistema.
**nota**  
Usar a opção **DSN do sistema** requer privilégios administrativos.
   + Para configurar o driver somente para sua conta de usuário, escolha a guia **DSN do usuário**.

1. Escolha **Adicionar**. A caixa de diálogo **Criar nova fonte de dados** é exibida.

1. Escolha o **ODBC do Amazon Athena (x64)** e depois **Concluir**.

1. Na caixa de diálogo **Configuração do ODBC do Amazon Athena**, insira as informações a seguir. Para obter informações detalhadas sobre essas opções, consulte [Principais parâmetros de conexão do ODBC 2.x](odbc-v2-driver-main-connection-parameters.md).
   + Em **Nome da fonte de dados**, insira o nome que você deseja usar para identificar a fonte de dados.
   + Em **Descrição**, insira uma descrição que ajude a identificar a fonte de dados.
   + Em **Região**, insira o nome da Região da AWS em que você usará o Athena (por exemplo, ** us-west-1**).
   + Em **Catálogo**, insira o nome do catálogo do Amazon Athena. O padrão é **AWSDataCatalog**, que é usado pelo AWS Glue.
   + Em **Banco de dados**, insira o nome do banco de dados do Amazon Athena. O padrão é **padrão**.
   + Em **Grupo de trabalho**, insira o nome do grupo de trabalho do Amazon Athena. O padrão é **primário**.
   + Em **Local de saída do S3**, insira o local do Amazon S3 em que os resultados da consulta serão armazenados (por exemplo, **s3://amzn-s3-demo-bucket/**).
   + (Opcional) Em **Opções de criptografia**, escolha uma opção de criptografia. O padrão é `NOT_SET`.
   + (Opcional) Em **Chave do KMS**, escolha uma chave de criptografia do KMS, se necessário.

1. Para especificar as opções de configuração para autenticação do IAM, escolha **Opções de autenticação.**

1. Insira as seguintes informações:
   + Em **Tipo de autenticação**, escolha **Credenciais do IAM**. Esse é o padrão. Para obter mais informações sobre os tipos de autenticação disponíveis, consulte [Opções de autenticação](odbc-v2-driver-authentication-options.md).
   + Em **Nome de usuário**, insira um nome de usuário.
   + Em **Senha**, insira uma senha.
   + Em **Token de sessão**, insira um token de sessão se quiser usar credenciais temporárias da AWS. Para obter informações sobre credenciais temporárias, consulte [Uso de credenciais temporárias com recursos da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) no *Guia do usuário do IAM*.

1. Escolha **OK**.

1. Na parte inferior da caixa de diálogo **Configuração do ODBC do Amazon Athena**, escolha **Testar**. Se o computador cliente se conectar com êxito ao Amazon Athena, a caixa **Teste de conexão** informará **Conexão com êxito**. Caso contrário, a caixa informará **Falha na conexão** com as informações de erro correspondentes.

1. Escolha **OK** para fechar o teste de conexão. A fonte de dados que você criou já aparece na lista de nomes de fontes de dados.

## Usar uma conexão sem DSN no Windows
<a name="odbc-v2-driver-dsn-less-connection"></a>

É possível usar uma conexão sem DSN para se conectar a um banco de dados sem um nome de fonte de dados (DSN). O exemplo a seguir mostra uma string de conexão para o driver ODBC do Amazon Athena (x64) que se conecta ao Amazon Athena.

```
DRIVER={Amazon Athena ODBC (x64)};Catalog=AwsDataCatalog;AwsRegion=us-west-1;Schema=test_schema;S3OutputLocation=
s3://amzn-s3-demo-bucket/;AuthenticationType=IAM Credentials;UID=YOUR_UID;PWD=YOUR_PWD;
```

# Linux
<a name="odbc-v2-driver-getting-started-linux"></a>

Se quiser usar um computador cliente com Linux para acessar o Amazon Athena, é necessário ter o driver ODBC do Amazon Athena.

## Requisitos do sistema Linux
<a name="odbc-v2-driver-getting-started-linux-linux-system-requirements"></a>

Cada computador cliente Linux no qual você instale o driver deve atender aos seguintes requisitos.
+ Ter acesso root.
+ Usar umas das seguintes distribuições do Linux:
  + Red Hat Enterprise Linux (RHEL) 7 ou 8
  + CentOS 7 ou 8.
+ Ter 100 MB de espaço em disco disponível.
+ Usar a versão 2.3.1 ou superior do [unixODBC](https://www.unixodbc.org/).
+ Usar a versão 2.26 ou posterior da [GNU C Library](https://www.gnu.org/software/libc/) (glibc).

## Como instalar o conector de dados ODBC no Linux
<a name="odbc-v2-driver-getting-started-linux-installing-the-odbc-data-connector-on-linux"></a>

Siga o procedimento abaixo para instalar o driver ODBC do Amazon Athena em um sistema operacional Linux.

**Para instalar o driver ODBC do Amazon Athena no Linux**

1. Insira um dos seguintes comandos:

   ```
   sudo rpm -Uvh AmazonAthenaODBC-2.X.Y.Z.rpm
   ```

   ou

   ```
   sudo yum --nogpgcheck localinstall AmazonAthenaODBC-2.X.Y.Z.rpm
   ```

1. Após a conclusão da instalação, insira um dos seguintes comandos para verificar se o driver está instalado:
   + 

     ```
     yum list | grep amazon-athena-odbc-driver
     ```

     Resultado:

     ```
     amazon-athena-odbc-driver.x86_64 2.0.2.1-1.amzn2int installed
     ```
   + 

     ```
     rpm -qa | grep amazon
     ```

     Resultado:

     ```
     amazon-athena-odbc-driver-2.0.2.1-1.amzn2int.x86_64
     ```

## Configurar um nome de fonte de dados no Linux
<a name="odbc-v2-driver-getting-started-linux-configuring-a-data-source-name-on-linux"></a>

Após a instalação do driver, você poderá encontrar exemplos de arquivos `.odbc.ini` e `.odbcinst.ini` no seguinte local:
+ `/opt/athena/odbc/ini/`.

Use os arquivos `.ini` nesse local como exemplos para configurar o driver ODBC e o nome da fonte de dados (DSN) do Amazon Athena.

**nota**  
Por padrão, os gerenciadores de driver ODBC usam os versões ocultas dos arquivos de configuração `.odbc.ini` e `.odbcinst.ini`, localizadas no diretório inicial.

Para especificar o caminho dos arquivos `.odbc.ini` e `.odbcinst.ini` usando o unixODBC, execute as etapas a seguir.

**Para especificar localizações de arquivos `.ini` do ODBC usando unixODBC**

1. Defina `ODBCINI` com o caminho completo e o nome de arquivo do arquivo `odbc.ini`, como no exemplo a seguir.

   ```
   export ODBCINI=/opt/athena/odbc/ini/odbc.ini
   ```

1. Defina `ODBCSYSINI` com o caminho completo do diretório que contém o arquivo `odbcinst.ini`, como no exemplo a seguir.

   ```
   export ODBCSYSINI=/opt/athena/odbc/ini
   ```

1. Digite o comando a seguir para verificar se você está usando o gerenciador de drivers UnixODBC e os arquivos `odbc*.ini` corretos:

   ```
   username % odbcinst -j
   ```

   Exemplo de resultado

   ```
   unixODBC 2.3.1
   DRIVERS............: /opt/athena/odbc/ini/odbcinst.ini
   SYSTEM DATA SOURCES: /opt/athena/odbc/ini/odbc.ini
   FILE DATA SOURCES..: /opt/athena/odbc/ini/ODBCDataSources
   USER DATA SOURCES..: /opt/athena/odbc/ini/odbc.ini
   SQLULEN Size.......: 8
   SQLLEN Size........: 8
   SQLSETPOSIROW Size.: 8
   ```

1. Se quiser usar um nome da fonte de dados (DSN) para estabelecer conexão com seu armazenamento de dados, configure o arquivo `odbc.ini` para definir nomes de fonte de dados (DSNs). Defina as propriedades no arquivo `odbc.ini` para criar um DSN que especifique as informações de conexão para seu armazenamento de dados, como no exemplo a seguir.

   ```
   [ODBC Data Sources]
   athena_odbc_test=Amazon Athena ODBC (x64) 
   
   [ATHENA_WIDE_SETTINGS]  # Special DSN-name to signal driver about logging configuration.
   LogLevel=0              # To enable ODBC driver logs, set this to 1.
   UseAwsLogger=0          # To enable AWS-SDK logs, set this to 1.
   LogPath=/opt/athena/odbc/logs/ # Path to store the log files. Permissions to the location are required. 
   
   [athena_odbc_test]
   Driver=/opt/athena/odbc/lib/libathena-odbc.so
   AwsRegion=us-west-1
   Workgroup=primary
   Catalog=AwsDataCatalog
   Schema=default
   AuthenticationType=IAM Credentials
   UID=
   PWD=
   S3OutputLocation=s3://amzn-s3-demo-bucket/
   ```

1. Configure o arquivo `odbcinst.ini`, como no exemplo a seguir.

   ```
   [ODBC Drivers]
   Amazon Athena ODBC (x64)=Installed 
   
   [Amazon Athena ODBC (x64)]
   Driver=/opt/athena/odbc/lib/libathena-odbc.so
   Setup=/opt/athena/odbc/lib/libathena-odbc.so
   ```

1. Após instalar e configurar o driver ODBC do Amazon Athena, use a ferramenta de linha de comando `isql` do unixODBC para verificar a conexão, como no exemplo a seguir.

   ```
   username % isql -v "athena_odbc_test" 
   +---------------------------------------+
   | Connected!                            |
   |                                       |
   | sql-statement                         |
   | help [tablename]                      |
   | quit                                  |
   |                                       |
   +---------------------------------------+
   SQL>
   ```

## Verificar a assinatura do driver ODBC
<a name="verify-odbc-linux-signature"></a>

**Importante**  
Recomendamos verificar a assinatura RPM do driver ODBC do Athena antes de instalá-la em sua máquina.

Siga estas etapas para verificar a assinatura do pacote RPM do driver ODBC do Athena:

1. **Prepare os modelos**

   Prepare os comandos com a chave pública apropriada, a assinatura RPM e o link de acesso correspondente aos scripts RPM hospedados nos buckets do Amazon S3. Você deve baixar o seguinte para o seu dispositivo.
   +  [Driver ODBC do Athena](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Linux/AmazonAthenaODBC-2.1.0.0.rpm)
   +  [Chave pública](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Linux/public_key.pem) 
   +  [Assinatura RPM do ODBC do Athena](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/v2.1.0.0/Linux/signature.bin)

1. Baixe o driver ODBC do Athena, a chave pública e a assinatura RPM do ODBC do Athena para o seu dispositivo. 

1. Execute o comando a seguir para verificar a assinatura do driver ODBC:

   ```
   openssl dgst -sha256 -verify public_key.pem -signature signature.bin AmazonAthenaODBC-2.1.0.0.rpm
   ```

   Caso a verificação seja aprovada, será exibida uma mensagem semelhante a `Verified OK`. Isso significa que agora você pode prosseguir com a instalação do driver ODBC do Athena. 

   Se for exibida a mensagem de falha `Verification Failure`, significa que a assinatura no RPM foi adulterada. Certifique-se de que todos os três arquivos mencionados na etapa 1 estejam presentes, que os caminhos estejam corretamente especificados e que os arquivos não tenham sido modificados desde o download e tente novamente o processo de verificação.

# macOS
<a name="odbc-v2-driver-getting-started-macos"></a>

Se quiser usar um computador cliente com macOS para acessar o Amazon Athena, é necessário ter o driver ODBC do Amazon Athena.

## Requisitos do sistema macOS
<a name="odbc-v2-driver-getting-started-macos-macos-system-requirements"></a>

Cada computador macOS no qual você instale o driver deve atender aos seguintes requisitos.
+ Usar o macOS versão 14 ou superior.
+ Ter 100 MB de espaço em disco disponível.
+ Usar a versão 3.52.16 ou superior do [iODBC](https://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/WelcomeVisitors).

## Como instalar o conector de dados ODBC no macOS
<a name="odbc-v2-driver-getting-started-macos-installing-the-odbc-data-connector-on-macos"></a>

Siga o procedimento abaixo para baixar e instalar o driver ODBC do Amazon Athena para sistemas operacionais macOS.

**Para baixar e instalar o driver ODBC do Amazon Athena para macOS**

1. Baixe o arquivo de pacote `.pkg`.

1. Clique duas vezes no arquivo `.pkg`.

1. Siga as etapas no assistente para instalar o driver.

1. Na página **Contrato de licença**, pressione **Continuar** e escolha **Concordar**.

1. Escolha **Instalar**.

1. Quando a instalação terminar, escolha **Concluir**.

1. Insira o seguinte comando para verificar se o driver está instalado:

   ```
   > pkgutil --pkgs | grep athenaodbc
   ```

   Dependendo do seu sistema, a saída poderá ser semelhante à uma das seguintes opções.

   ```
   com.amazon.athenaodbc-x86_64.Config
   com.amazon.athenaodbc-x86_64.Driver
   ```

   ou

   ```
   com.amazon.athenaodbc-arm64.Config
   com.amazon.athenaodbc-arm64.Driver
   ```

## Configurar um nome de fonte de dados no macOS
<a name="odbc-v2-driver-getting-started-macos-configuring-a-data-source-name-on-macos"></a>

Após a instalação do driver, você poderá encontrar exemplos de arquivos `.odbc.ini` e `.odbcinst.ini` nos seguintes locais:
+ Computadores com processador Intel: `/opt/athena/odbc/x86_64/ini/`
+ Computadores com processador ARM: `/opt/athena/odbc/arm64/ini/`

Use os arquivos `.ini` nesse local como exemplos para configurar o driver ODBC e o nome da fonte de dados (DSN) do Amazon Athena.

**nota**  
Por padrão, os gerenciadores de driver ODBC usam os versões ocultas dos arquivos de configuração `.odbc.ini` e `.odbcinst.ini`, localizadas no diretório inicial.

Para especificar o caminho dos arquivos `.odbc.ini` e `.odbcinst.ini` usando o gerenciador de drivers iODBC, execute as etapas a seguir.

**Para especificar localizações de arquivos `.ini` do ODBC usando o gerenciador de drivers iODBC**

1. Defina `ODBCINI` para o caminho completo e o nome de arquivo do arquivo `odbc.ini`.
   + Para computadores macOS com processadores Intel, aplique a sintaxe a seguir.

     ```
     export ODBCINI=/opt/athena/odbc/x86_64/ini/odbc.ini
     ```
   + Para computadores macOS com processadores ARM, aplique a sintaxe a seguir.

     ```
     export ODBCINI=/opt/athena/odbc/arm64/ini/odbc.ini
     ```

1. Defina `ODBCSYSINI` para o caminho completo e o nome de arquivo do arquivo `odbcinst.ini`.
   + Para computadores macOS com processadores Intel, aplique a sintaxe a seguir.

     ```
     export ODBCSYSINI=/opt/athena/odbc/x86_64/ini/odbcinst.ini
     ```
   + Para computadores macOS com processadores ARM, aplique a sintaxe a seguir.

     ```
     export ODBCSYSINI=/opt/athena/odbc/arm64/ini/odbcinst.ini
     ```

1. Se quiser usar um nome da fonte de dados (DSN) para estabelecer conexão com seu armazenamento de dados, configure o arquivo `odbc.ini` para definir nomes de fonte de dados (DSNs). Defina as propriedades no arquivo `odbc.ini` para criar um DSN que especifique as informações de conexão para seu armazenamento de dados, como no exemplo a seguir.

   ```
   [ODBC Data Sources]
   athena_odbc_test=Amazon Athena ODBC (x64) 
   
   [ATHENA_WIDE_SETTINGS] # Special DSN-name to signal driver about logging configuration.
   LogLevel=0             # set to 1 to enable ODBC driver logs
   UseAwsLogger=0         # set to 1 to enable AWS-SDK logs
   LogPath=/opt/athena/odbc/logs/ # Path to store the log files. Permissions to the location are required. 
   
   [athena_odbc_test]
   Description=Amazon Athena ODBC (x64)
   # For ARM:
   Driver=/opt/athena/odbc/arm64/lib/libathena-odbc-arm64.dylib
   # For Intel:
   # Driver=/opt/athena/odbc/x86_64/lib/libathena-odbc-x86_64.dylib
   AwsRegion=us-west-1
   Workgroup=primary
   Catalog=AwsDataCatalog
   Schema=default
   AuthenticationType=IAM Credentials
   UID=
   PWD=
   S3OutputLocation=s3://amzn-s3-demo-bucket/
   ```

1. Configure o arquivo `odbcinst.ini`, como no exemplo a seguir.

   ```
   [ODBC Drivers]
   Amazon Athena ODBC (x64)=Installed 
   
   [Amazon Athena ODBC (x64)]
   # For ARM:
   Driver=/opt/athena/odbc/arm64/lib/libathena-odbc-arm64.dylib
   Setup=/opt/athena/odbc/arm64/lib/libathena-odbc-arm64.dylib
   # For Intel:
   # Driver=/opt/athena/odbc/x86_64/lib/libathena-odbc-x86_64.dylib
   # Setup=/opt/athena/odbc/x86_64/lib/libathena-odbc-x86_64.dylib
   ```

1. Após instalar e configurar o driver ODBC do Amazon Athena, use a ferramenta de linha de comando `iodbctest` para verificar a conexão, como no exemplo a seguir.

   ```
   username@ % iodbctest
   iODBC Demonstration program
   This program shows an interactive SQL processor
   Driver Manager: 03.52.1623.0502 
   
   Enter ODBC connect string (? shows list): ? 
   
   DSN                              | Driver
   ------------------------------------------------------------------------------
   athena_odbc_test                 | Amazon Athena ODBC (x64) 
   
   Enter ODBC connect string (? shows list): DSN=athena_odbc_test;
   Driver: 2.0.2.1 (Amazon Athena ODBC Driver) 
   
   SQL>
   ```

# Parâmetros de conexão do ODBC 2.x do Athena
<a name="odbc-v2-driver-connection-parameters"></a>

As opções da caixa de diálogo de **Configuração do ODBC do Amazon Athena** incluem **Opções de autenticação**, **Opções avançadas**, **Opções de registro em log**, **Substituições de endpoints** e **Opções de proxy**. Para obter informações detalhadas sobre cada um deles, acesse os links correspondentes.
+ [Principais parâmetros de conexão do ODBC 2.x](odbc-v2-driver-main-connection-parameters.md)
+  [Opções de autenticação](odbc-v2-driver-authentication-options.md)
+ [Opções avançadas](odbc-v2-driver-advanced-options.md)
+ [Opções de registro em log](odbc-v2-driver-logging-options.md)
+ [Substituições de endpoints](odbc-v2-driver-endpoint-overrides.md)
+ [Opções de proxy](odbc-v2-driver-proxy-options.md)

# Principais parâmetros de conexão do ODBC 2.x
<a name="odbc-v2-driver-main-connection-parameters"></a>

As seções a seguir descrevem cada um dos principais parâmetros de conexão.

## Nome da fonte de dados
<a name="odbc-v2-driver-main-connection-parameters-data-source-name"></a>

Especifica o nome de sua fonte de dados.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| DSN | Opcional para tipos de conexão sem DSN | none | DSN=AmazonAthenaOdbcUsWest1; | 

## Descrição
<a name="odbc-v2-driver-main-connection-parameters-description"></a>

Contém a descrição de sua fonte de dados.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Descrição | Opcional | none | Description=Connection to Amazon Athena us-west-1; | 

## Catálogo
<a name="odbc-v2-driver-main-connection-parameters-catalog"></a>

Especifica o nome do catálogo de dados. Para obter mais informações, consulte [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) na Amazon Athena API Reference.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Catálogo | Opcional | AwsDataCatalog | Catalog=AwsDataCatalog; | 

## Região
<a name="odbc-v2-driver-region"></a>

Especifica o Região da AWS. Para obter informações sobre Regiões da AWS, consulte [Regiões e zonas de disponibilidade](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AwsRegion | Obrigatório | none | AwsRegion=us-west-1; | 

## Banco de dados
<a name="odbc-v2-driver-database"></a>

Especifica o nome do banco de dados. Para obter mais informações, consulte [Database](https://docs.aws.amazon.com/athena/latest/APIReference/API_Database.html) na *Amazon Athena API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Schema | Opcional | default | Schema=default; | 

## Grupo de trabalho
<a name="odbc-v2-driver-workgroup"></a>

Especifica o nome do grupo de trabalho. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html) na *Amazon Athena API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Grupo de trabalho | Opcional | primary | Workgroup=primary; | 

## Local de saída
<a name="odbc-v2-driver-output-location"></a>

Especifica o local do Amazon S3 em que os resultados da consulta são armazenados. Para obter mais informações sobre o local de saída, consulte [ResultConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html) na *Amazon Athena API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| S3OutputLocation | Obrigatório | none | S3OutputLocation=s3://amzn-s3-demo-bucket/; | 

## Opções de criptografia
<a name="odbc-v2-driver-encryption-options"></a>

**Nome do parâmetro da caixa de diálogo**: opções de criptografia

Especifica a opção de criptografia. Para obter mais informações sobre as opções de criptografia, consulte [EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html) na *Amazon Athena API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Possíveis valores** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | --- | 
| S3OutputEncOption | Opcional | none | NOT\$1SET, SSE\$1S3, SSE\$1KMS, CSE\$1KMS | S3OutputEncOption=SSE\$1S3; | 

## Chave do KMS
<a name="odbc-v2-driver-kms-key"></a>

Especifica uma chave do KMS para criptografia. Para obter mais informações sobre configuração de criptografia para chaves do KMS, consulte [EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html) na *Amazon Athena API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| S3OutputEncKMSKey | Opcional | none | S3OutputEncKMSKey=your\$1key; | 

## Teste de conexão
<a name="odbc-v2-driver-connection-test"></a>

O administrador de fonte de dados ODBC oferece a opção **Teste**, que você pode usar para testar sua conexão ODBC 2.x com o Amazon Athena. Para obter as etapas, consulte [Configurar um nome de fonte de dados no Windows](odbc-v2-driver-getting-started-windows.md#odbc-v2-driver-configuring-dsn-on-windows). Quando você testa uma conexão, o driver ODBC chama a ação da API [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) do Athena. A chamada usa o tipo de autenticação e o provedor de credenciais correspondente que você especificou para recuperar credenciais. Não há cobrança pelo teste de conexão ao usar o driver ODBC 2.x. O teste não gera resultados de consulta no bucket do Amazon S3.

# Opções de autenticação
<a name="odbc-v2-driver-authentication-options"></a>

É possível se conectar ao Amazon Athena usando os tipos de autenticação a seguir. Para todos os tipos, o nome da string de conexão é `AuthenticationType`, o tipo de parâmetro é `Required` e o valor padrão é `IAM Credentials`. Para obter informações sobre os parâmetros de cada tipo de autenticação, acesse o link correspondente. Para obter parâmetros de autenticação comuns, consulte [Parâmetros de autenticação comuns](odbc-v2-driver-common-authentication-parameters.md).


****  

| Tipo de autenticação | Exemplo de string de conexão | 
| --- | --- | 
| [Credenciais do IAM](odbc-v2-driver-iam-credentials.md) | AuthenticationType=IAM Credentials; | 
| [Perfil do IAM](odbc-v2-driver-iam-profile.md) | AuthenticationType=IAM Profile; | 
| [AD FS](odbc-v2-driver-ad-fs.md) | AuthenticationType=ADFS; | 
| [Azure AD](odbc-v2-driver-azure-ad.md) | AuthenticationType=AzureAD; | 
| [Azure AD do navegador](odbc-v2-driver-browser-azure-ad.md) | AuthenticationType=BrowserAzureAD; | 
| [SAML do navegador](odbc-v2-driver-browser-saml.md) | AuthenticationType=BrowserSAML; | 
| [Browser SSO OIDC](odbc-v2-driver-browser-sso-oidc.md) | AuthenticationType=BrowserSSOOIDC; | 
| [Credenciais padrão](odbc-v2-driver-default-credentials.md) | AuthenticationType=Default Credentials; | 
| [Credenciais externas](odbc-v2-driver-external-credentials.md) | AuthenticationType=External Credentials; | 
| [Perfil de instância](odbc-v2-driver-instance-profile.md) | AuthenticationType=Instance Profile; | 
| [JWT](odbc-v2-driver-jwt.md) | AuthenticationType=JWT; | 
| [Provedor de credenciais de propagação de identidade confiável JWT](odbc-v2-driver-jwt-tip.md) | AuthenticationType=JWT\$1TIP; | 
| [Credenciais de propagação de identidade confiável via navegador](odbc-v2-driver-browser-oidc-tip.md) | AuthenticationType=BrowserOidcTip; | 
| [Okta](odbc-v2-driver-okta.md) | AuthenticationType=Okta; | 
| [Ping](odbc-v2-driver-ping.md) | AuthenticationType=Ping; | 

# Credenciais do IAM
<a name="odbc-v2-driver-iam-credentials"></a>

Você pode usar suas credenciais do IAM para se conectar ao Amazon Athena com o driver ODBC usando os parâmetros da string de conexão descritos nesta seção.

## Tipo de autenticação
<a name="odbc-v2-driver-iam-credentials-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=IAM Credentials; | 

## ID de usuário
<a name="odbc-v2-driver-iam-credentials-user-id"></a>

Seu ID de chave de acesso da AWS. Para obter mais informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UID | Obrigatório | none | UID=AKIAIOSFODNN7EXAMPLE; | 

## Senha
<a name="odbc-v2-driver-iam-credentials-password"></a>

O ID de sua chave secreta da AWS. Para obter mais informações sobre chaves de acesso, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) no *Guia do usuário do IAM*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| PWD | Obrigatório | none | PWD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKE; | 

## Token de sessão
<a name="odbc-v2-driver-iam-credentials-session-token"></a>

Caso esteja usando credenciais temporárias da AWS, você deve especificar o token da sessão. Para obter informações sobre credenciais temporárias, consulte [Credenciais de segurança temporárias no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html), no *Guia do usuário do IAM*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| SessionToken | Opcional | none | SessionToken=AQoDYXdzEJr...<remainder of session token>; | 

# Perfil do IAM
<a name="odbc-v2-driver-iam-profile"></a>

É possível configurar um perfil nomeado para se conectar ao Amazon Athena usando o driver ODBC. Você pode usar um perfil nomeado com uma das seguintes fontes de credenciais:
+ `Ec2InstanceMetadata`: recupera as credenciais do Serviço de metadados de instância (IMDS) do Amazon EC2. Este caderno é executado em uma instância do Amazon EC2.
+ `EcsContainer`: recupera as credenciais do endpoint do Perfil de tarefa do Amazon ECS. Use isso ao executar em um contêiner do Amazon ECS.
+ `Environment`: recupera as credenciais de variáveis de ambiente (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`).

Defina o parâmetro `credential_source` em seu perfil de configuração da AWS com o valor apropriado para seu ambiente. Para usar um provedor de credenciais personalizado em um perfil nomeado, especifique um valor para o parâmetro `plugin_name` na configuração do perfil.

## Tipo de autenticação
<a name="odbc-v2-driver-iam-profile-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=IAM Profile; | 

## AWSPerfil da
<a name="odbc-v2-driver-iam-profile-aws-profile"></a>

O nome do perfil a ser usado com a conexão ODBC. Para obter mais informações sobre perfis, consulte [Usar perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) no *Guia do usuário da AWS Command Line Interface*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Perfil da AWS | Obrigatório | none | AWSProfile=default; | 

## Perfil preferencial
<a name="odbc-v2-driver-iam-profile-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Utiliza-se o parâmetro de perfil preferencial quando o provedor de credenciais personalizadas é especificado pelo parâmetro `plugin_name` na configuração do perfil. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-iam-profile-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*. Utiliza-se o parâmetro de duração da sessão quando o provedor de credenciais personalizadas é especificado pelo parâmetro `plugin_name` na configuração do perfil.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## Nome do plug-in
<a name="odbc-v2-driver-iam-profile-plugin-name"></a>

Especifica o nome de um provedor de credenciais personalizadas utilizado em um perfil nomeado. Esse parâmetro pode assumir os mesmos valores do campo **Tipo de autenticação** do administrador de fonte de dados ODBC, mas é usado somente pela configuração do `AWSProfile`.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| plugin\$1name | Opcional | none | plugin\$1name=AzureAD; | 

# AD FS
<a name="odbc-v2-driver-ad-fs"></a>

O AD FS é um plug-in de autenticação baseado em SAML que funciona com o provedor de identidades do Active Directory Federation Service (AD FS). O plug-in é compatível com a [autenticação integrada do Windows](https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/integrated-windows-authentication) e a autenticação baseada em formulários. Ao usar a autenticação integrada do Windows, você pode omitir o nome de usuário e a senha. Para obter informações sobre como configurar o AD FS e o Athena, consulte [Configurar o acesso federado ao Amazon Athena para usuários do Microsoft AD FS usando um cliente ODBC](odbc-adfs-saml.md).

## Tipo de autenticação
<a name="odbc-v2-driver-authentication-type-8"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=ADFS; | 

## ID de usuário
<a name="odbc-v2-driver-ad-fs-username"></a>

Seu nome de usuário para se conectar ao servidor do AD FS. Para a autenticação integrada do Windows, você pode omitir o nome de usuário. Se a configuração do AD FS exigir um nome de usuário, será necessário fornecê-lo no parâmetro de conexão.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UID | Opcional para a autenticação integrada do Windows | none | UID=domain\$1username; | 

## Senha
<a name="odbc-v2-driver-ad-fs-password"></a>

Sua senha para se conectar ao servidor do AD FS. Assim como o campo do nome de usuário, você poderá omitir o nome de usuário ao usar a autenticação integrada do Windows. Se a configuração do AD FS exigir uma senha, será necessário fornecê-la no parâmetro de conexão.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| PWD | Opcional para a autenticação integrada do Windows | none | PWD=password\$13EXAMPLE; | 

## Perfil preferencial
<a name="odbc-v2-driver-ad-fs-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Se sua declaração SAML tiver vários perfis, você poderá especificar esse parâmetro para escolher o perfil a ser assumido. Esse perfil deve estar presente na declaração SAML. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-ad-fs-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## Host de IdP
<a name="odbc-v2-driver-ad-fs-idp-host"></a>

O nome de host do serviço AD FS.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1host | Require | none | idp\$1host=<server-name>.<company.com>; | 

## Porta de IdP
<a name="odbc-v2-driver-ad-fs-idp-port"></a>

A porta a ser usada para se conectar ao host do AD FS.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1port | Obrigatório | none | idp\$1port=443; | 

## LoginToRP
<a name="odbc-v2-driver-ad-fs-logintorp"></a>

A parte confiável. Use esse parâmetro para substituir o URL do endpoint da parte confiável do AD FS.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| LoginToRP | Opcional | urn:amazon:webservices | LoginToRP=trustedparty; | 

# Azure AD
<a name="odbc-v2-driver-azure-ad"></a>

O Azure AD é um plug-in de autenticação baseado em SAML que funciona com o provedor de identidades do Azure AD. Este plugin não é compatível com autenticação multifator (MFA). Caso precise de suporte para MFA, considere usar o plug-in `BrowserAzureAD` em vez disso.

## Tipo de autenticação
<a name="odbc-v2-driver-azure-ad-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=AzureAD; | 

## ID de usuário
<a name="odbc-v2-driver-azure-ad-username"></a>

Seu nome de usuário para se conectar ao Azure AD.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UID | Obrigatório | none | UID=jane.doe@example.com; | 

## Senha
<a name="odbc-v2-driver-azure-ad-password"></a>

Sua senha para se conectar ao Azure AD.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| PWD | Obrigatório | none | PWD=password\$13EXAMPLE; | 

## Perfil preferencial
<a name="odbc-v2-driver-azure-ad-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:iam::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-azure-ad-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## ID do locatário
<a name="odbc-v2-driver-azure-ad-tenent-id"></a>

Especifica o ID do locatário da aplicação.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1tenant | Obrigatório | none | idp\$1tenant=123zz112z-z12d-1z1f-11zz-f111aa111234; | 

## ID de cliente
<a name="odbc-v2-driver-azure-ad-client-id"></a>

Especifica o ID do cliente da aplicação.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| client\$1id | Obrigatório | none | client\$1id=9178ac27-a1bc-1a2b-1a2b-a123abcd1234; | 

## Segredo do cliente
<a name="odbc-v2-driver-azure-ad-client-secret"></a>

Especifica o segredo do cliente.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| client\$1secret | Obrigatório | none | client\$1secret=zG12q\$1.xzG1xxxZ1wX1.\$1ZzXXX1XxkHZizeT1zzZ; | 

# Azure AD do navegador
<a name="odbc-v2-driver-browser-azure-ad"></a>

O Browser Azure AD é um plug-in de autenticação baseado em SAML que funciona com o provedor de identidades do Azure AD e é compatível com autenticação multifator. Ao contrário do plug-in padrão do Azure AD, esse plug-in não requer nome de usuário, senha ou segredo do cliente nos parâmetros de conexão.

**nota**  
**Atualização de segurança v2.1.0.0:** a partir da v2.1.0.0, o plug-in BrowserAzureAD inclui PKCE (chave de prova para troca de código) no fluxo de autorização do OAuth 2.0. Isso evita ataques de interceptação de código de autorização em sistemas compartilhados. Nenhuma alteração na configuração é necessária.

## Tipo de autenticação
<a name="odbc-v2-driver-browser-azure-ad-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=BrowserAzureAD; | 

## Perfil preferencial
<a name="odbc-v2-driver-browser-azure-ad-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Se sua declaração SAML tiver vários perfis, você poderá especificar esse parâmetro para escolher o perfil a ser assumido. O perfil especificado deve estar presente na declaração SAML. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.

 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-browser-azure-ad-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## ID do locatário
<a name="odbc-v2-driver-browser-azure-ad-tenant-id"></a>

Especifica o ID do locatário da aplicação.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1tenant | Obrigatório | none | idp\$1tenant=123zz112z-z12d-1z1f-11zz-f111aa111234; | 

## ID de cliente
<a name="odbc-v2-driver-browser-azure-ad-client-id"></a>

Especifica o ID do cliente da aplicação.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| client\$1id | Obrigatório | none | client\$1id=9178ac27-a1bc-1a2b-1a2b-a123abcd1234; | 

## Tempo limite
<a name="odbc-v2-driver-browser-azure-ad-timeout"></a>

A duração, em segundos, até que o plug-in pare de esperar pela resposta SAML do Azure AD.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| timeout | Opcional | 120 | timeout=90; | 

## Habilitar cache de arquivos do Azure
<a name="odbc-v2-driver-browser-azure-ad-file-cache"></a>

Habilita um cache de credenciais temporárias. Esse parâmetro de conexão permite que as credenciais temporárias sejam armazenadas em cache e reutilizadas entre vários processos. Use essa opção para reduzir o número de janelas do navegador abertas ao usar ferramentas de BI, como o Microsoft Power BI.

**nota**  
A partir da v2.1.0.0, as credenciais em cache são armazenadas como JSON de texto simples no diretório `user-profile/.athena-odbc/` com permissões de arquivo restritas ao usuário proprietário, de acordo com a forma como a AWS CLI protege as credenciais armazenadas localmente.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| browser\$1azure\$1cache | Opcional | 1 | browser\$1azure\$1cache=0; | 

# SAML do navegador
<a name="odbc-v2-driver-browser-saml"></a>

O Browser SAML é um plug-in de autenticação genérico que pode funcionar com provedores de identidade baseados em SAML e é compatível com autenticação multifator. Para obter informações detalhadas sobre a configuração, consulte [Configurar Single Sign-On com uso de ODBC, SAML 2.0 e o provedor de identidade Okta](okta-saml-sso.md).

**nota**  
**Atualização de segurança v2.1.0.0:** a partir da v2.1.0.0, o plug-in BrowserSAML inclui proteção CSRF por meio da validação RelayState. O driver gera um token de estado aleatório, o inclui como um parâmetro RelayState na URL de login e o valida em relação à resposta recebida antes de aceitar as afirmações do SAML.

## Tipo de autenticação
<a name="odbc-v2-driver-browser-saml-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=BrowserSAML; | 

## Perfil preferencial
<a name="odbc-v2-driver-browser-saml-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Se sua declaração SAML tiver vários perfis, você poderá especificar esse parâmetro para escolher o perfil a ser assumido. Esse perfil deve estar presente na declaração SAML. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-browser-saml-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## URL de login
<a name="odbc-v2-driver-browser-saml-login-url"></a>

O URL de autenticação única exibido para sua aplicação.

**Importante**  
A partir da v2.1.0.0, o URL de login deve usar o protocolo HTTP ou HTTPS com uma autoridade válida. O driver valida o formato do URL antes de iniciar o fluxo de autenticação.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| login\$1url | Obrigatório | none | login\$1url=https://trial-1234567.okta.com/app/trial-1234567\$1oktabrowsersaml\$11/zzz4izzzAzDFBzZz1234/sso/saml; | 

## Escutar porta
<a name="odbc-v2-driver-browser-saml-listen-port"></a>

O número da porta que é usada para receber a resposta do SAML. Esse valor deve corresponder ao URL do Centro de Identidade do IAM com o qual você configurou o IdP (por exemplo, `http://localhost:7890/athena`).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| listen\$1port | Opcional | 7890 | listen\$1port=7890; | 

## Tempo limite
<a name="odbc-v2-driver-browser-saml-timeout"></a>

A duração, em segundos, até que o plug-in pare de esperar pela resposta SAML do provedor de identidades.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| timeout | Opcional | 120 | timeout=90; | 

# Browser SSO OIDC
<a name="odbc-v2-driver-browser-sso-oidc"></a>

O Browser SSO OIDC é um plug-in de autenticação que funciona com o Centro de Identidade do AWS IAM. Para obter informações sobre como habilitar e usar o Centro de Identidade do IAM, consulte [Step 1: Enable IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html) no *Guia do usuário do Centro de Identidade do AWS IAM*.

**nota**  
**Atualização de segurança v2.1.0.0:** a partir da versão 2.1.0.0, o plug-in BrowsersSooIDC usa Código de Autorização com PKCE em vez de Autorização de Código de Dispositivo para melhorar a segurança. Essa alteração elimina a etapa de exibição do código do dispositivo e fornece uma autenticação mais rápida. Um novo parâmetro `listen_port` (padrão 7890) é usado para o servidor de retorno de chamada OAuth 2.0. Talvez seja necessário incluir essa porta na lista de permissões em sua rede. O escopo padrão foi alterado para `sso:account:access`.

## Tipo de autenticação
<a name="odbc-v2-driver-browser-sso-oidc-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=BrowserSSOOIDC; | 

## URL inicial do Centro de Identidade do IAM
<a name="odbc-v2-driver-browser-sso-oidc-sso-start-url"></a>

O URL do portal de acesso da AWS. A ação da API [RegisterClient](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_RegisterClient.html) do Centro de Identidade do IAM usa esse valor para o parâmetro `issuerUrl`.

**Para copiar o URL do portal de acesso da AWS**

1. Faça login no Console de gerenciamento da AWS e abra o console do Centro de Identidade do AWS IAM em [https://console.aws.amazon.com/singlesignon/](https://console.aws.amazon.com/singlesignon/).

1. No painel de navegação, selecione **Configurações**.

1. Na página **Configurações**, em **Origem de identidade**, escolha o ícone da área de transferência para o **URL do portal de acesso da AWS**.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1start\$1url | Obrigatório | none | sso\$1oidc\$1start\$1url=https://app\$1id.awsapps.com/start; | 

## Região do Centro de Identidade do IAM
<a name="odbc-v2-driver-browser-sso-oidc-sso-region"></a>

A Região da AWS em que o SSO está configurado. Os clientes `SSOOIDCClient` e `SSOClient` do AWS SDK usam esse valor para o parâmetro `region`.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1region | Obrigatório | none | sso\$1oidc\$1region=us-east-1; | 

## Escopos
<a name="odbc-v2-driver-browser-sso-oidc-scopes"></a>

A lista de escopos que são definidos pelo cliente. Após a autorização, a lista restringe as permissões quando um token de acesso é concedido. A ação da API [RegisterClient](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_RegisterClient.html) do Centro de Identidade do IAM usa esse valor para o parâmetro `scopes`.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1scopes | Opcional | sso:account:access | sso\$1oidc\$1scopes=sso:account:access; | 

## ID da conta
<a name="odbc-v2-driver-browser-sso-oidc-account-id"></a>

O identificador da Conta da AWS que é atribuída ao usuário. A API [GetRoleCredentials](https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html) do Centro de Identidade do IAM usa esse valor para o parâmetro `accountId`.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1account\$1id | Obrigatório | none | sso\$1oidc\$1account\$1id=123456789123; | 

## Nome do perfil
<a name="odbc-v2-driver-browser-sso-oidc-role-name"></a>

O nome amigável do perfil atribuído ao usuário. O nome que você especifica para esse conjunto de permissões é exibido no portal de acesso da AWS como um perfil disponível. A ação da API [GetRoleCredentials](https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html) do Centro de Identidade do IAM usa esse valor para o parâmetro `roleName`.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1role\$1name | Obrigatório | none | sso\$1oidc\$1role\$1name=AthenaReadAccess; | 

## Tempo limite
<a name="odbc-v2-driver-browser-sso-oidc-timeout"></a>

O número de segundos em que a API de SSO de sondagem deve verificar o token de acesso.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1timeout | Opcional | 120 | sso\$1oidc\$1timeout=60; | 

## Escutar porta
<a name="odbc-v2-driver-browser-sso-oidc-listen-port"></a>

O número da porta local a ser usada para o servidor de retorno de chamada do OAuth 2.0. Isso é usado como o URI de redirecionamento e talvez seja necessário incluir essa porta na lista de permissões em sua rede. O URI de redirecionamento padrão gerado é: `http://localhost:7890/athena`. Esse parâmetro foi adicionado na v2.1.0.0 como parte da migração do Código do Dispositivo para o Código de Autorização com o PKCE.

**Atenção**  
Em ambientes compartilhados, como Windows Terminal Servers ou Remote Desktop Services, a porta de loopback (padrão: 7890) é compartilhada entre todos os usuários na mesma máquina. Os administradores do sistema podem mitigar possíveis riscos de sequestro de portas por meio de:  
Configuração de números de porta diferentes para diferentes grupos de usuários
Uso de políticas de segurança do Windows para restringir o acesso às portas
Implementação do isolamento de rede entre as sessões do usuário


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| listen\$1port | Opcional | 7890 | listen\$1port=8080; | 

## Habilitar cache de arquivos
<a name="odbc-v2-driver-browser-sso-oidc-file-cache"></a>

Habilita um cache de credenciais temporárias. Esse parâmetro de conexão permite que as credenciais temporárias sejam armazenadas em cache e reutilizadas entre vários processos. Use essa opção para reduzir o número de janelas do navegador abertas ao usar ferramentas de BI, como o Microsoft Power BI.

**nota**  
A partir da v2.1.0.0, as credenciais em cache são armazenadas como JSON de texto simples no diretório `user-profile/.athena-odbc/` com permissões de arquivo restritas ao usuário proprietário, de acordo com a forma como a AWS CLI protege as credenciais armazenadas localmente.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| sso\$1oidc\$1cache | Opcional | 1 | sso\$1oidc\$1cache=0; | 

# Credenciais padrão
<a name="odbc-v2-driver-default-credentials"></a>

É possível usar as credenciais padrão que você configura em seu sistema cliente para se conectar ao Amazon Athena. Para obter informações sobre o uso de credenciais padrão, consulte [Usar a cadeia de fornecedores de credenciais padrão](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default) no *Guia do desenvolvedor do AWS SDK para Java*.

## Tipo de autenticação
<a name="odbc-v2-driver-default-credentials-authentication"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=Default Credentials; | 

# Credenciais externas
<a name="odbc-v2-driver-external-credentials"></a>

As credenciais externas são um plug-in de autenticação genérico que pode ser usado para se conectar a qualquer provedor de identidades externo baseado em SAML. Para usar o plug-in, passe um arquivo executável que retorna uma resposta SAML.

## Tipo de autenticação
<a name="odbc-v2-driver-driver-external-credentials-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=External Credentials; | 

## Caminho executável
<a name="odbc-v2-driver-driver-external-credentials-executable-path"></a>

O caminho para o executável que tem a lógica de seu provedor de credenciais personalizado baseado em SAML. A saída do executável deverá ser a resposta SAML analisada do provedor de identidades.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ExecutablePath | Obrigatório | none | ExecutablePath=C:\$1Users\$1user\$1name\$1external\$1credential.exe | 

## Lista de argumentos
<a name="odbc-v2-driver-driver-external-credentials-argument-list"></a>

A lista de argumentos que você quer passar para o executável.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ArgumentList | Opcional | none | ArgumentList=arg1 arg2 arg3 | 

# Perfil de instância
<a name="odbc-v2-driver-instance-profile"></a>

Esse tipo de autenticação é usado em instâncias do EC2 e é fornecido pelo serviço de metadados do Amazon EC2.

## Tipo de autenticação
<a name="odbc-v2-driver-instance-profile-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=Instance Profile; | 

# JWT
<a name="odbc-v2-driver-jwt"></a>

O plug-in JWT (JSON Web Token) fornece uma interface que usa JSON Web Tokens para assumir um perfil do Amazon IAM. A configuração depende do provedor de identidades. Para obter informações sobre como configurar a federação para o Google Cloud e a AWS, consulte [Configurar a federação de identidade da carga de trabalho com a AWS ou o Azure](https://cloud.google.com/iam/docs/workload-identity-federation-with-other-clouds) na documentação do Google Cloud.

## Tipo de autenticação
<a name="odbc-v2-driver-jwt-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=JWT; | 

## Perfil preferencial
<a name="odbc-v2-driver-jwt-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-jwt-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## JSON Web Token
<a name="odbc-v2-driver-jwt-json-web-token"></a>

O JSON Web Token que é usado para recuperar credenciais temporárias do IAM usando a ação da API [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) do AWS STS. Para obter informações sobre como gerar JSON Web Tokens para usuários do Google Cloud Platform (GCP), consulte [Como usar tokens OAuth do JWT](https://cloud.google.com/apigee/docs/api-platform/security/oauth/using-jwt-oauth) na documentação do Google Cloud.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| web\$1identity\$1token | Obrigatório | none | web\$1identity\$1token=eyJhbGc...<remainder of token>; | 

## Nome da sessão da função
<a name="odbc-v2-driver-jwt-role-session-name"></a>

Um nome para a sessão. Uma técnica comum é usar o nome ou o identificador do usuário da aplicação como o nome de sessão do perfil. Isso associa, de maneira conveniente, as credenciais de segurança temporárias que sua aplicação usa ao usuário correspondente.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| role\$1session\$1name | Obrigatório | none | role\$1session\$1name=familiarname; | 

# Provedor de credenciais de propagação de identidade confiável JWT
<a name="odbc-v2-driver-jwt-tip"></a>

Esse tipo de autenticação permite usar um JSON Web Token (JWT) obtido de um provedor de identidades externo como parâmetro de conexão para autenticação no Athena. É possível usar este plug-in para habilitar o suporte para identidades corporativas por meio da propagação de identidade confiável.

Com a propagação de identidade confiável, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html).

## Tipo de autenticação
<a name="odbc-v2-driver-jwt-tip-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=JWT\$1TIP; | 

## Token de identidade Web JWT
<a name="odbc-v2-driver-jwt-tip-web-identity-token"></a>

O token JWT obtido de um provedor de identidades federado externo. Esse token será usado para autenticação no Athena. O cache de token é habilitado por padrão e permite que o mesmo token de acesso do Centro de Identidade do IAM seja usado nas conexões do driver. Recomendamos fornecer um novo token JWT ao "Testar a conexão", pois o token trocado está presente somente durante o período em que a instância do driver permanece ativa.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| web\$1identity\$1token | Obrigatório | none | web\$1identity\$1token=eyJhbGc...<remainder of token>; | 

## ARN do grupo de trabalho
<a name="odbc-v2-driver-jwt-tip-workgroup-arn"></a>

O nome do recurso da Amazon (ARN) do grupo de trabalho do Amazon Athena. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| WorkGroupArn | Obrigatório | none | WorkgroupArn=arn:aws:athena:us-west-2:111122223333:workgroup/primary | 

## ARN de perfil de aplicação JWT
<a name="odbc-v2-driver-jwt-tip-application-role-arn"></a>

O ARN da função a ser assumida Essa função é usada para a troca de JWT, obtenção do ARN da aplicação gerenciada pelo cliente do Centro de Identidade do IAM por meio de tags de grupo de trabalho e obtenção do ARN do perfil de acesso. Para obter mais informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ApplicationRoleArn | Obrigatório | none | ApplicationRoleArn=arn:aws:iam::111122223333:role/applicationRole; | 

## Nome da sessão da função
<a name="odbc-v2-driver-jwt-tip-role-session-name"></a>

Um nome para a sessão. Esse pode ser qualquer nome que você deseje usar, mas, em geral, você passa o nome ou identificador que está associado ao usuário que está usando a aplicação. Dessa forma, as credenciais de segurança temporárias que a aplicação usa estão associadas a esse usuário.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| role\$1session\$1name | Obrigatório | none | role\$1session\$1name=familiarname; | 

## Duração da sessão
<a name="odbc-v2-driver-jwt-tip-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre a duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 3600 | duration=900; | 

## ARN do perfil de acesso JWT
<a name="odbc-v2-driver-jwt-tip-access-role-arn"></a>

O ARN da função a ser assumida O perfil que o Athena assumirá para fazer chamadas em seu nome. Para obter mais informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AccessRoleArn | Opcional | none | AccessRoleArn=arn:aws:iam::111122223333:role/accessRole; | 

## ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM
<a name="odbc-v2-driver-jwt-tip-customer-idc-application-arn"></a>

O ARN da aplicação IDC gerenciada pelo cliente do Centro de Identidade do IAM. Para obter mais informações sobre aplicações gerenciadas pelo cliente, consulte [Aplicações gerenciadas pelo cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| CustomerIdcApplicationArn | Opcional | none | CustomerIdcApplicationArn=arn:aws:sso::111122223333:application/ssoins-111122223333/apl-111122223333 | 

## Habilitar cache de arquivos
<a name="odbc-v2-driver-jwt-tip-file-cache"></a>

Habilita um cache de credenciais temporárias. Este parâmetro de conexão permite que as credenciais temporárias sejam armazenadas em cache e reutilizadas entre vários processos. Use essa opção para reduzir o número de tokens de identidade da Web ao usar ferramentas de BI, como o Microsoft Power BI. Por padrão, o driver usa `%USERPROFILE%` no Windows e o caminho `HOME` para gravar os caches de arquivos. Certifique-se de fornecer acesso de leitura e gravação para o caminho presente nessas duas variáveis de ambiente para obter uma melhor experiência.

**nota**  
A partir da v2.1.0.0, as credenciais em cache são armazenadas como JSON de texto simples no diretório `user-profile/.athena-odbc/` com permissões de arquivo restritas ao usuário proprietário, de acordo com a forma como a AWS CLI protege as credenciais armazenadas localmente.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| JwtTipFileCache | Opcional | 0 | JwtTipFileCache=1; | 

# Credenciais de propagação de identidade confiável via navegador
<a name="odbc-v2-driver-browser-oidc-tip"></a>

Esse tipo de autenticação permite buscar um novo JSON Web Token (JWT) de um provedor de identidades externo e autenticá-lo com o Athena. É possível usar este plug-in para habilitar o suporte para identidades corporativas por meio da propagação de identidade confiável. Para obter mais informações sobre como usar a propagação de identidade confiável com drivers, consulte [Usar a propagação de identidade confiável com drivers do Amazon Athena](using-trusted-identity-propagation.md). Você também pode [configurar e implantar recursos usando o CloudFormation](using-trusted-identity-propagation-cloudformation.md).

Com a propagação de identidade confiável, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html).

**nota**  
O plug-in foi projetado especificamente para ambientes de área de trabalho de usuário único. Em ambientes compartilhados, como o Windows Server, os administradores do sistema são responsáveis por estabelecer e manter os limites de segurança entre os usuários.

## Tipo de autenticação
<a name="odbc-v2-driver-browser-oidc-tip-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | none | AuthenticationType=BrowserOidcTip; | 

## URL de configuração bem conhecido do IDP
<a name="odbc-v2-driver-browser-oidc-tip-idp-well-known-config"></a>

O URL de configuração bem conhecido do IDP é o endpoint que fornece os detalhes de configuração do OpenID Connect para seu provedor de identidades. Esse URL geralmente termina com `.well-known/openid-configuration` e contém metadados essenciais sobre os endpoints de autenticação, os recursos compatíveis e as chaves de assinatura de token. Por exemplo, se você estiver usando o *Okta*, o URL poderá ser similar a `https://your-domain.okta.com/.well-known/openid-configuration`.

Para a solução de problemas: se você receber erros de conexão, verifique se esse URL pode ser acessado pela sua rede e retorna um JSON de configuração válido do *OpenID Connect*. O URL deve poder ser acessado pelo cliente onde o driver está instalado e deve ser fornecido pelo administrador do provedor de identidades. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| IdpWellKnownConfigurationUrl | Obrigatório | none | IdpWellKnownConfigurationUrl=https://<your-domain>/.well-known/openid-configuration; | 

## Identificador de cliente
<a name="odbc-v2-driver-browser-oidc-tip-client-id"></a>

O identificador de cliente emitido para a aplicação pelo provedor do OpenID Connect.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| client\$1id | Obrigatório | none | client\$1id=00001111-aaaa-2222-bbbb-3333cccc4444; | 

## ARN do grupo de trabalho
<a name="odbc-v2-driver-browser-oidc-tip-workgroup-arn"></a>

O nome do recurso da Amazon (ARN) do grupo de trabalho do Amazon Athena que contém as tags de configuração da propagação de identidade confiável. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html). 

**nota**  
Esse parâmetro é diferente do parâmetro `Workgroup` que especifica onde as consultas serão executadas. Você deve definir os dois parâmetros:  
`WorkgroupArn`: aponta para o grupo de trabalho que contém as tags de configuração de propagação de identidade confiável
`Workgroup`: especifica o grupo de trabalho em que as consultas serão executadas
Embora normalmente façam referência ao mesmo grupo de trabalho, ambos os parâmetros devem ser definidos explicitamente para uma operação adequada.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| WorkGroupArn | Obrigatório | none | WorkgroupArn=arn:aws:athena:us-west-2:111122223333:workgroup/primary | 

## ARN de perfil de aplicação JWT
<a name="odbc-v2-driver-browser-oidc-tip-application-role-arn"></a>

O ARN do perfil que será assumido na troca do JWT. Esse perfil é usado para a troca de JWT, obtenção do ARN da aplicação gerenciada pelo cliente do Centro de Identidade do IAM por meio de tags de grupo de trabalho e obtenção do ARN do perfil de acesso. Para obter mais informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ApplicationRoleArn | Obrigatório | none | ApplicationRoleArn=arn:aws:iam::111122223333:role/applicationRole; | 

## Nome da sessão da função
<a name="odbc-v2-driver-browser-oidc-tip-role-session-name"></a>

Um nome para a sessão do IAM. Esse pode ser qualquer nome que você deseje usar, mas, em geral, você passa o nome ou identificador que está associado ao usuário que está usando a aplicação. Dessa forma, as credenciais de segurança temporárias que a aplicação usa estão associadas a esse usuário. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| role\$1session\$1name | Obrigatório | none | role\$1session\$1name=familiarname; | 

## Segredo do cliente
<a name="odbc-v2-driver-browser-oidc-tip-client-secret"></a>

O segredo do cliente é uma chave confidencial emitida pelo seu provedor de identidades que é usada para autenticar sua aplicação. Embora esse parâmetro seja opcional e possa não ser necessário para todos os fluxos de autenticação, ele fornece uma camada adicional de segurança quando usado. Se sua configuração de IDP exigir um segredo de cliente, você deverá incluir esse parâmetro com o valor fornecido pelo administrador do provedor de identidades.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| client\$1secret | Opcional | none | client\$1secret=s0m3R@nd0mS3cr3tV@lu3Th@tS3cur3lyPr0t3ct5Th3Cl13nt;\$1 | 

## Escopo
<a name="odbc-v2-driver-browser-oidc-tip-scope"></a>

O escopo especifica o nível de acesso que sua aplicação está solicitando do provedor de identidades. Você deve incluir `openid` no escopo para receber um token de ID contendo reivindicações essenciais de identidade do usuário. Seu escopo pode precisar incluir permissões adicionais, como `email` ou `profile`, dependendo de quais reivindicações de usuário seu provedor de identidades (como *Microsoft Entra ID*) está configurado para incluir no token de ID. Essas reivindicações são essenciais para o mapeamento adequado da *Propagação de identidade confiável*. Se o mapeamento de identidades de usuários falhar, verifique se seu escopo inclui todas as permissões necessárias e se seu provedor de identidades está configurado para incluir as reivindicações necessárias no token de ID. Essas reivindicações devem corresponder à configuração de mapeamento do *Emissor de tokens confiáveis* no Centro de Identidade do IAM. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| Escopo | Opcional | openid email offline\$1access | Scope=openid email; | 

## Duração da sessão
<a name="odbc-v2-driver-browser-oidc-tip-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 3600 | duration=900; | 

## ARN do perfil de acesso JWT
<a name="odbc-v2-driver-browser-oidc-tip-access-role-arn"></a>

O ARN do perfil que o Athena assume para fazer chamadas em seu nome. Para obter informações sobre como assumir perfis, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *Referência da API do AWS Security Token Service*. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AccessRoleArn | Opcional | none | AccessRoleArn=arn:aws:iam::111122223333:role/accessRole; | 

## ARN da aplicação gerenciado pelo cliente do Centro de Identidade do IAM
<a name="odbc-v2-driver-browser-oidc-tip-customer-idc-application-arn"></a>

O ARN da aplicação IDC gerenciada pelo cliente do Centro de Identidade do IAM. Para obter mais informações sobre aplicações gerenciadas pelo cliente, consulte [Aplicações gerenciadas pelo cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| CustomerIdcApplicationArn | Opcional | none | CustomerIdcApplicationArn=arn:aws:sso::111122223333:application/ssoins-111122223333/apl-111122223333; | 

## Número da porta do provedor de identidades
<a name="odbc-v2-driver-browser-oidc-tip-port-number"></a>

O número da porta local a ser usada para o servidor de retorno de chamada do OAuth 2.0. Isso é usado como redirect\$1uri, e você precisará inseri-lo na lista de permissões em sua aplicação do IDP. O redirect\$1uri padrão gerado é: http://localhost:7890/athena

**Atenção**  
Em ambientes compartilhados, como Windows Terminal Servers ou Remote Desktop Services, a porta de loopback (padrão: 7890) é compartilhada entre todos os usuários na mesma máquina. Os administradores do sistema podem mitigar possíveis riscos de sequestro de portas por meio de:  
Configuração de números de porta diferentes para diferentes grupos de usuários
Uso de políticas de segurança do Windows para restringir o acesso às portas
Implementação do isolamento de rede entre as sessões do usuário
Se esses controles de segurança não puderem ser implementados, recomendamos usar o plug-in de [propagação de identidade confiável via JWT](odbc-v2-driver-jwt-tip.md), que não requer uma porta de loopback.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| listen\$1port | Opcional | 7890 | listen\$1port=8080; | 

## Tempo limite de resposta do provedor de identidades
<a name="odbc-v2-driver-browser-oidc-tip-response-timeout"></a>

O tempo limite em segundos para aguardar a resposta de retorno de chamada do OAuth 2.0.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| IdpResponseTimeout | Opcional | 120 | IdpResponseTimeout=140; | 

## Habilitar cache de arquivos
<a name="odbc-v2-driver-browser-oidc-tip-enable-token-caching"></a>

O parâmetro JwtTipFileCache determina se o driver armazena em cache o token de autenticação entre as conexões. Definir JwtTipFileCache como true reduz os prompts de autenticação e melhora a experiência do usuário, mas deve ser usado com cautela. Essa configuração é mais adequada para ambientes de área de trabalho de usuário único. Em ambientes compartilhados como o Windows Server, é recomendável mantê-lo desabilitado para evitar o possível compartilhamento de tokens entre usuários com strings de conexão semelhantes.

Para implantações empresariais usando ferramentas como o PowerBI Server, recomendamos usar o plug-in de [propagação de identidade confiável via JWT](odbc-v2-driver-jwt-tip.md) em vez desse método de autenticação. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| JwtTipFileCache | Opcional | 0 | JwtTipFileCache=1; | 

# Okta
<a name="odbc-v2-driver-okta"></a>

O Okta é um plug-in de autenticação baseado em SAML que funciona com o provedor de identidades do Okta. Para obter informações sobre como configurar a federação para o Okta e o Amazon Athena, consulte [Configurar SSO para ODBC usando o plugin Okta e o Okta Identity Provider](odbc-okta-plugin.md).

## Tipo de autenticação
<a name="odbc-v2-driver-okta-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=Okta; | 

## ID de usuário
<a name="odbc-v2-driver-okta-user-id"></a>

Seu nome de usuário do Okta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UID | Obrigatório | none | UID=jane.doe@org.com; | 

## Senha
<a name="odbc-v2-driver-okta-password"></a>

A senha de usuário do Okta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| PWD | Obrigatório | none | PWD=oktauserpasswordexample; | 

## Perfil preferencial
<a name="odbc-v2-driver-okta-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:IAM::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-okta-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## Host de IdP
<a name="odbc-v2-driver-okta-idp-host"></a>

O URL de sua organização Okta. É possível extrair o parâmetro `idp_host` do URL do **link de incorporação** em sua aplicação Okta. Para obter as etapas, consulte [Recuperar informações de configuração de ODBC do Okta](odbc-okta-plugin.md#odbc-okta-plugin-retrieve-odbc-configuration-information-from-okta). O primeiro segmento depois de `https://`, até `okta.com` (inclusive) é seu host de IdP (por exemplo, `http://trial-1234567.okta.com`).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1host | Obrigatório | None | idp\$1host=dev-99999999.okta.com; | 

## Porta de IdP
<a name="odbc-v2-driver-okta-idp-port"></a>

O número da porta a ser usada para se conectar ao host de IdP.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1port | Obrigatório | None | idp\$1port=443; | 

## ID da aplicação do Okta
<a name="odbc-v2-driver-okta-app-id"></a>

O identificador de duas partes da aplicação. É possível extrair o parâmetro `app_id` do URL do **link de incorporação** em sua aplicação Okta. Para obter as etapas, consulte [Recuperar informações de configuração de ODBC do Okta](odbc-okta-plugin.md#odbc-okta-plugin-retrieve-odbc-configuration-information-from-okta). O ID da aplicação são os dois últimos segmentos do URL, inclusive a barra no meio. Os segmentos são duas strings de 20 caracteres com uma mistura de números e letras maiúsculas e minúsculas (por exemplo, `Abc1de2fghi3J45kL678/abc1defghij2klmNo3p4`).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| app\$1id | Obrigatório | None | app\$1id=0oa25kx8ze9A3example/alnexamplea0piaWa0g7; | 

## Nome da aplicação Okta
<a name="odbc-v2-driver-okta-app-name"></a>

O nome da aplicação do Okta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| app\$1name | Obrigatório | None | app\$1name=amazon\$1aws\$1redshift; | 

## Tempo de espera do Okta
<a name="odbc-v2-driver-okta-wait-time"></a>

Especifica a duração, em segundos, para aguardar o código de autenticação multifator (MFA).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| okta\$1mfa\$1wait\$1time | Opcional | 10 | okta\$1mfa\$1wait\$1time=20; | 

## Tipo de MFA do Okta
<a name="odbc-v2-driver-okta-mfa-type"></a>

O tipo de fator MFA. Os tipos compatíveis são: Google Authenticator, SMS (Okta), Okta Verify com Push e Okta Verify com TOTP. As políticas de segurança de cada organização determinam se a MFA é necessária ou não para o login do usuário.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Possíveis valores** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | --- | 
| okta\$1mfa\$1type | Optional | None | googleauthenticator, smsauthentication, oktaverifywithpush, oktaverifywithtotp | okta\$1mfa\$1type=oktaverifywithpush; | 

## Número de telefone do Okta
<a name="odbc-v2-driver-okta-phone-number"></a>

O número de telefone a ser usado com a autenticação do AWS SMS. Esse parâmetro é necessário somente para registro multifatorial. Se o seu número de celular já estiver registrado ou se a autenticação do AWS SMS não for usada pela política de segurança, você poderá ignorar esse campo.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| okta\$1mfa\$1phone\$1number | Necessário para registro no MFA, opcional em outros casos | None | okta\$1mfa\$1phone\$1number=19991234567; | 

## Habilitar cache de arquivos do Okta
<a name="odbc-v2-driver-okta-file-cache"></a>

Habilita um cache de credenciais temporárias. Esse parâmetro de conexão permite que as credenciais temporárias sejam armazenadas em cache e reutilizadas entre vários processos abertos por aplicações de BI. Use essa opção para evitar o controle de utilização da API do Okta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| okta\$1cache | Opcional | 0 | okta\$1cache=1; | 

# Ping
<a name="odbc-v2-driver-ping"></a>

O Ping é um plug-in baseado em SAML que funciona com o provedor de identidades [PingFederate](https://www.pingidentity.com/en/platform/capabilities/authentication-authority/pingfederate.html).

## Tipo de autenticação
<a name="odbc-v2-driver-ping-authentication-type"></a>


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| AuthenticationType | Obrigatório | IAM Credentials | AuthenticationType=Ping; | 

## ID de usuário
<a name="odbc-v2-driver-ping-user-id"></a>

O nome de usuário do servidor PingFederate.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UID | Obrigatório | none | UID=pingusername@domain.com; | 

## Senha
<a name="odbc-v2-driver-ping-password"></a>

A senha do servidor PingFederate.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| PWD | Obrigatório | none | PWD=pingpassword; | 

## Perfil preferencial
<a name="odbc-v2-driver-ping-preferred-role"></a>

O nome do recurso da Amazon (ARN) da função a ser assumida. Se sua declaração SAML tiver vários perfis, você poderá especificar esse parâmetro para escolher o perfil a ser assumido. Esse perfil deve estar presente na declaração SAML. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| preferred\$1role | Opcional | none | preferred\$1role=arn:aws:iam::123456789012:id/user1; | 

## Duração da sessão
<a name="odbc-v2-driver-ping-session-duration"></a>

A duração, em segundos, da sessão do perfil. Para obter mais informações sobre duração da sessão, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na *AWS Security Token Service API Reference*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| duration | Opcional | 900 | duration=900; | 

## Host de IdP
<a name="odbc-v2-driver-ping-idp-host"></a>

O endereço do servidor Ping. Para encontrar seu endereço, acesse o URL a seguir e visualize o campo **Endpoint da aplicação de SSO**.

```
https://your-pf-host-#:9999/pingfederate/your-pf-app#/spConnections         
```


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1host | Obrigatório | none | idp\$1host=ec2-1-83-65-12.compute-1.amazonaws.com; | 

## Porta de IdP
<a name="odbc-v2-driver-ping-idp-port"></a>

O número da porta a ser usada para se conectar ao host de IdP.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| idp\$1port | Obrigatório | None | idp\$1port=443; | 

## SPID de parceiro
<a name="odbc-v2-driver-ping-partner-spid"></a>

O endereço do provedor de serviços. Para encontrar o endereço do provedor de serviços, acesse o URL a seguir e visualize o campo **Endpoint da aplicação de SSO**.

```
https://your-pf-host-#:9999/pingfederate/your-pf-app#/spConnections         
```


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| partner\$1spid | Obrigatório | None | partner\$1spid=https://us-east-1.signin.aws.amazon.com/platform/saml/<...>; | 

## Parâmetro de URI do Ping
<a name="odbc-v2-driver-ping-uri-param"></a>

Passa um argumento de URI para uma solicitação de autenticação ao Ping. Use esse parâmetro para ignorar a limitação de perfil único do Lake Formation. Configure o Ping para reconhecer o parâmetro passado e verificar se o perfil passado existe na lista de perfis atribuídos ao usuário. Em seguida, envie um único perfil na declaração SAML.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ping\$1uri\$1param | Opcional | None | ping\$1uri\$1param=role=my\$1iam\$1role; | 

# Parâmetros de autenticação comuns
<a name="odbc-v2-driver-common-authentication-parameters"></a>

Os parâmetros desta seção são comuns aos tipos de autenticação, conforme observado.

## Usar o proxy para IdP
<a name="odbc-v2-driver-common-authentication-parameters-use-proxy-for-idp"></a>

Permite a comunicação entre o driver e o IdP pelo proxy. Essa opção está disponível para os seguintes plug-ins de autenticação:
+ AD FS
+ Azure AD
+ Azure AD do navegador
+ Browser SSO OIDC
+ Propagação de identidade confiável JWT
+ JWT
+ Propagação de identidade confiável JWT
+ Propagação de identidade confiável via navegador
+ Okta
+ Ping


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseProxyForIdP | Opcional | 0 | UseProxyForIdP=1; | 

## Usar o Lake Formation
<a name="odbc-v2-driver-common-authentication-parameters-use-lake-formation"></a>

Usa a ação da API [AssumeDecoratedRoleWithSAML](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_AssumeDecoratedRoleWithSAML.html) do Lake Formation para recuperar credenciais temporárias do IAM em vez da ação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS. Essa opção está disponível para os plug-ins de autenticação Azure AD, Browser Azure AD, Browser SAML, Okta, Ping e AD FS.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| LakeformationEnabled | Opcional | 0 | LakeformationEnabled=1; | 

## SSL inseguro (IdP)
<a name="odbc-v2-driver-common-authentication-parameters-ssl-insecure-idp"></a>

Desabilita o SSL ao se comunicar com o IdP. Essa opção está disponível para os plug-ins de autenticação Azure AD, Browser Azure AD, Okta, Ping e AD FS.

**Importante**  
**Alteração significativa na v2.1.0.0:** o comportamento padrão da validação do certificado SSL ao se conectar a provedores de identidade foi alterado. Nas versões anteriores à 2.1.0.0, a validação SSL estava desabilitada por padrão. A partir da v2.1.0.0, a validação SSL é habilitada por padrão para todas as conexões IdP. O driver também exige o TLS 1.2 como versão mínima do TLS. Se você usar um provedor de identidade local sem um certificado SSL válido (apenas para fins de teste), defina o `SSL_Insecure=1` em sua cadeia de conexão.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| SSL\$1Insecure | Opcional | 0 | SSL\$1Insecure=1; | 

# Substituições de endpoints
<a name="odbc-v2-driver-endpoint-overrides"></a>

## Substituição do endpoint do Athena
<a name="odbc-v2-driver-endpoint-overrides-athena"></a>

A classe `endpointOverride ClientConfiguration` usa esse valor para substituir o endpoint HTTP padrão para o cliente Amazon Athena. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| EndpointOverride | Opcional | none | EndpointOverride=athena.us-west-2.amazonaws.com; | 

## Substituição do endpoint de transmissão do Athena
<a name="odbc-v2-driver-endpoint-overrides-athena-streaming"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente Amazon Athena. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*. O serviço Athena Streaming está disponível pela porta 444.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| StreamingEndpointOverride | Opcional | none | StreamingEndpointOverride=athena.us-west-1.amazonaws.com:444; | 

## Substituição de endpoint do AWS STS
<a name="odbc-v2-driver-endpoint-overrides-sts"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente AWS STS. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| StsEndpointOverride | Opcional | none | StsEndpointOverride=sts.us-west-1.amazonaws.com; | 

## Substituição de endpoint do Lake Formation
<a name="odbc-v2-driver-endpoint-overrides-lake-formation"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente Lake Formation. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| LakeFormationEndpointOverride | Opcional | none | LakeFormationEndpointOverride=lakeformation.us-west-1.amazonaws.com; | 

## Substituição de endpoint de SSO
<a name="odbc-v2-driver-endpoint-overrides-sso"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente de SSO. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
|  SSOEndpointOverride  | Opcional | none | SSOEndpointOverride=portal.sso.us-east-2.amazonaws.com; | 

## Substituição de endpoint OIDC de SSO
<a name="odbc-v2-driver-endpoint-overrides-sso-oidc"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente OIDC de SSO. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
|  SSOOIDCEndpointOverride  | Opcional | none | SSOOIDCEndpointOverride=oidc.us-east-2.amazonaws.com | 

## Substituição do endpoint de SSO Admin
<a name="odbc-v2-driver-endpoint-overrides-sso-admin"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente de SSO Admin. Para obter mais informações, consulte [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| SSOAdminEndpointOverride | Opcional | nenhuma | SSOAdminEndpointOverride=sso.us-east-2.amazonaws.com | 

## Substituição de endpoint do S3
<a name="odbc-v2-driver-endpoint-overrides-s3"></a>

O método `ClientConfiguration.endpointOverride` usa esse valor para substituir o endpoint HTTP padrão para o cliente do S3. O endpoint que o driver usará para baixar os resultados das consultas quando usar o buscador do Amazon S3. Se esse parâmetro não for especificado, o driver usará um endpoint padrão do Amazon S3. Para obter mais informações, consulte [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| S3EndpointOverride | Opcional | nenhuma | S3EndpointOverride=s3.us-east-2.amazonaws.com | 

# Opções avançadas
<a name="odbc-v2-driver-advanced-options"></a>

## Tamanho da busca
<a name="odbc-v2-driver-advanced-options-fetch-size"></a>

O número máximo de resultados (linhas) a serem retornados nesta solicitação. Para obter informações sobre parâmetros, consulte [GetQuery MaxResults](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html#athena-GetQueryResults-request-MaxResults). Para a API de transmissão, o valor máximo é 10000000.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| RowsToFetchPerBlock | Opcional |  `1000` que não seja transmissão `20000` para transmissão  | RowsToFetchPerBlock=20000; | 

## Buscador de resultados
<a name="odbc-v2-driver-advanced-options-result-fetcher"></a>

O buscador de resultados padrão baixa os resultados de consultas diretamente do Amazon S3 sem passar pelas operações da API do Athena. Quando detecta situações em que o download direto do S3 não é possível, ele automaticamente recorre à operação da API `GetQueryResultsStream`. Por exemplo, isso acontece quando os resultados de consultas são criptografados com a opção `CSE_KMS`. 

O uso do buscador `auto` é recomendado na maioria das situações. Se suas políticas do IAM ou as políticas de bucket do S3 usarem a condição `s3:CalledVia` para limitar o acesso a objetos do S3 para solicitações do Athena, o buscador automático primeiro tentará fazer o download dos resultados do S3 e recorrerá a `GetQueryResultsStream`. Nessa situação, é possível configurar o `ResultFetcher` para `GetQueryResultsStream`, evitando uma chamada de API adicional.

**nota**  
O driver ainda reconhece os parâmetros Enable streaming API (`UseResultsetStreaming=1;`) e Enable S3 fetcher (`EnableS3Fetcher=1;`). No entanto, recomendamos que você use o parâmetro `ResultFetcher` para uma melhor experiência.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Possíveis valores** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | --- | 
|  ResultFetcher  | Opcional | auto | auto, S3, GetQueryResults, GetQueryResultsStream | ResultFetcher=auto | 

## Habilitar a reutilização de resultados
<a name="odbc-v2-driver-advanced-options-enable-result-reuse"></a>

Especifica se os resultados da consulta anterior poderão ser reutilizados quando a consulta for executada. Para obter informações sobre parâmetros, consulte ResultReuseByAgeConfiguration.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| EnableResultReuse | Opcional | 0 | EnableResultReuse=1; | 

## Idade máxima da reutilização de resultados
<a name="odbc-v2-driver-advanced-options-result-reuse-max-age"></a>

Especifica, em minutos, a idade máxima de um resultado de consulta anterior que o Athena deverá considerar para reutilização. Para obter informações sobre parâmetros, consulte [ResultReuseByAgeConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultReuseByAgeConfiguration.html).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ReusedResultMaxAgeInMinutes | Opcional | 60 | ReusedResultMaxAgeInMinutes=90; | 

## Usar vários threads do S3
<a name="odbc-v2-driver-advanced-options-use-multiple-s3-threads"></a>

Busca dados do Amazon S3 usando vários threads. Quando essa opção está habilitada, o arquivo de resultados armazenado no bucket do Amazon S3 é buscado em paralelo usando vários threads.

Habilite essa opção somente se você tiver uma boa largura de banda da rede. Por exemplo, em nossas medições em uma instância do EC2 [c5.2xlarge](https://aws.amazon.com/ec2/instance-types/c5/), um cliente S3 de thread único atingiu 1 Gbps, enquanto clientes S3 de vários segmentos atingiram 4 Gbps de throughput de rede.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
|  UseMultipleS3Threads  | Opcional | 0 | UseMultipleS3Threads=1; | 

## Usar um único catálogo e esquema
<a name="odbc-v2-driver-advanced-options-use-single-catalog-and-schema"></a>

Por padrão, o driver ODBC consulta o Athena para obter a lista de catálogos e esquemas disponíveis. Essa opção força o driver a usar o catálogo e o esquema especificados pela caixa de diálogo de configuração Administrador de fonte de dados ODBC ou pelos parâmetros de conexão. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseSingleCatalogAndSchema | Opcional | 0 | UseSingleCatalogAndSchema=1; | 

## Usar consulta para listar tabelas
<a name="odbc-v2-driver-advanced-options-use-query-to-list-tables"></a>

Para catálogos do tipo `LAMBDA`, permite que o driver ODBC envie uma consulta [SHOW TABLES](show-tables.md) para obter uma lista das tabelas disponíveis. Essa é a configuração padrão. Se esse parâmetro for definido como 0, o driver ODBC usará a API [ListTableMetadata](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTableMetadata.html) do Athena para obter uma lista das tabelas disponíveis. Observe que, para catálogos do tipo `LAMBDA`, o uso de `ListTableMetadata` resulta em regressão de desempenho. 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseQueryToListTables | Opcional | 1 | UseQueryToListTables=1; | 

## Usar WCHAR para tipos de strings
<a name="odbc-v2-driver-advanced-options-use-wchar-for-string-types"></a>

Por padrão, o driver ODBC usa `SQL_CHAR` e `SQL_VARCHAR` para os tipos de dados de string `char`, `varchar`, `string`, `array`, `map<>`, `struct<>` e `row` do Athena. Definir esse parâmetro como `1` força o driver a usar `SQL_WCHAR` e `SQL_WVARCHAR` para tipos de dados de string. Os tipos caractere largo e variável larga são usados para garantir que seja possível armazenar e recuperar corretamente caracteres de diferentes linguagens.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseWCharForStringTypes | Opcional | 0 | UseWCharForStringTypes=1; | 

## Consultar catálogos externos
<a name="odbc-v2-driver-query-advanced-options-external-catalogs"></a>

Especifica se o driver precisa consultar catálogos externos do Athena. Para obter mais informações, consulte [Migrar para o driver ODBC 2.x](odbc-v2-driver-migrating.md).


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| QueryExternalCatalogs | Opcional | 0 | QueryExternalCatalogs=1; | 

## Verificar SSL
<a name="odbc-v2-driver-advanced-options-verify-ssl"></a>

Controla se os certificados SSL deverão ser verificados ao usar o AWS SDK. Esse valor é transmitido ao parâmetro `ClientConfiguration.verifySSL`. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| VerifySSL | Opcional | 1 | VerifySSL=0; | 

## Tamanho do bloco de resultados do S3
<a name="odbc-v2-driver-advanced-options-s3-result-block-size"></a>

Especifica, em bytes, o tamanho do bloco a ser baixado para uma única solicitação da API [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) do Amazon S3. O valor padrão é 67108864 (64 MB). Os valores mínimo e máximo permitidos são 10485760 (10 MB) e 2146435072 (cerca de 2 GB). 


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| S3ResultBlockSize | Opcional | 67108864 | S3ResultBlockSize=268435456; | 

## Comprimento da coluna de string
<a name="odbc-v2-driver-advanced-options-string-column-length"></a>

Especifica o comprimento da coluna para colunas com um tipo de dados `string`. Como o Athena usa o [tipo de dados de string do Apache Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-StringsstringStrings), que não tem precisão definida, o tamanho padrão relatado pelo Athena é 2147483647 (`INT_MAX`). Como as ferramentas de BI geralmente pré-alocam memória para as colunas, isso pode resultar em alto consumo de memória. Para evitar isso, o driver ODBC do Athena limita a precisão relatada para colunas do tipo de dados `string` e expõe o parâmetro de conexão `StringColumnLength` para que seja possível alterar o valor padrão.


****  

| Nome da string de conexão | Tipo de parâmetro | Valor padrão | Exemplo de string de conexão | 
| --- | --- | --- | --- | 
| StringColumnLength | Opcional | 255 | StringColumnLength=65535; | 

## Comprimento de coluna de tipo complexo
<a name="odbc-v2-driver-advanced-options-complex-type-column-length"></a>

Especifica o comprimento da coluna para colunas com tipos de dados complexos, como `map`, `struct` e `array`. Assim como [StringColumnLength](#odbc-v2-driver-advanced-options-string-column-length), o Athena relata 0 de precisão para colunas com tipos de dados complexos. O driver ODBC do Athena define a precisão padrão para colunas com tipos de dados complexos e expõe o parâmetro de conexão `ComplexTypeColumnLength` para que seja possível alterar o valor padrão.


****  

| Nome da string de conexão | Tipo de parâmetro | Valor padrão | Exemplo de string de conexão | 
| --- | --- | --- | --- | 
| ComplexTypeColumnLength | Opcional | 65535 | ComplexTypeColumnLength=123456; | 

## Certificado CA confiável
<a name="odbc-v2-driver-advanced-options-trusted-ca-certificate"></a>

Instrui o cliente HTTP sobre onde encontrar o armazenamento confiável de certificados SSL. Esse valor é transmitido ao parâmetro `ClientConfiguration.caFile`. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| TrustedCerts | Opcional | %INSTALL\$1PATH%/bin | TrustedCerts=C:\$1\$1Program Files\$1\$1Amazon Athena ODBC Driver\$1\$1bin\$1\$1cacert.pem; | 

## Período mínimo de sondagem
<a name="odbc-v2-driver-advanced-options-min-poll-period"></a>

Especifica o valor mínimo, em milissegundos, a ser aguardado antes de sondar o Athena sobre o status de execução da consulta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| MinQueryExecutionPollingInterval | Opcional | 100 | MinQueryExecutionPollingInterval=200; | 

## Período máximo de sondagem
<a name="odbc-v2-driver-advanced-options-max-poll-period"></a>

Especifica o valor máximo, em milissegundos, a ser aguardado antes de sondar o Athena sobre o status de execução da consulta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| MaxQueryExecutionPollingInterval | Opcional | 60000 | MaxQueryExecutionPollingInterval=1000; | 

## Multiplicador de sondagens
<a name="odbc-v2-driver-advanced-options-poll-multiplier"></a>

Especifica o fator para aumentar o período da sondagem. Por padrão, a sondagem começa com o valor do período mínimo de sondagem e dobra com cada sondagem até atingir o valor do período máximo de sondagem.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| QueryExecutionPollingIntervalMultiplier | Opcional | 2 | QueryExecutionPollingIntervalMultiplier=2; | 

## Duração máxima da sondagem
<a name="odbc-v2-driver-advanced-options-max-poll-duration"></a>

Especifica o valor máximo, em milissegundos, a ser aguardado para que o driver possa sondar o Athena sobre o status de execução da consulta.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| MaxPollDuration | Opcional | 1800000 | MaxPollDuration=1800000; | 

## Tempo limite da conexão
<a name="odbc-v2-driver-advanced-options-connection-timeout"></a>

O tempo (em milissegundos) que a conexão HTTP aguardará para estabelecer uma conexão. Esse valor é definido para o cliente Athena `ClientConfiguration.connectTimeoutMs`. Se não for especificado, o valor padrão de curl será usado. Para obter informações sobre parâmetros de conexão, consulte [Client Configuration](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/section-client-configuration.html) no *Guia do desenvolvedor do AWS SDK para Java*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ConnectionTimeout | Opcional | 0 | ConnectionTimeout=2000; | 

## Tempo limite da solicitação
<a name="odbc-v2-driver-advanced-options-request-timeout"></a>

Especifica o tempo limite de leitura do soquete para clientes HTTP. Esse valor é definido para o parâmetro `ClientConfiguration.requestTimeoutMs` do cliente Athena. Para obter informações sobre parâmetros, consulte [Client Configuration](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/section-client-configuration.html) no *Guia do desenvolvedor do AWS SDK para Java*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| RequestTimeout | Opcional | 10000 | RequestTimeout=30000; | 

# Opções de proxy
<a name="odbc-v2-driver-proxy-options"></a>

## Host do proxy
<a name="odbc-v2-driver-proxy-options-proxy-host"></a>

Se você exigir que os usuários passem por um proxy, use este parâmetro para definir o host do proxy. Esse parâmetro corresponde ao parâmetro `ClientConfiguration.proxyHost` no AWS SDK. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ProxyHost | Opcional | none | ProxyHost=127.0.0.1; | 

## Porta do proxy
<a name="odbc-v2-driver-proxy-options-proxy-port"></a>

Use este parâmetro para definir a porta do proxy. Esse parâmetro corresponde ao parâmetro `ClientConfiguration.proxyPort` no AWS SDK. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ProxyPort | Opcional | none | ProxyPort=8888; | 

## Nome de usuário do proxy
<a name="odbc-v2-driver-proxy-options-proxy-username"></a>

Use este parâmetro para definir o nome de usuário do proxy. Esse parâmetro corresponde ao parâmetro `ClientConfiguration.proxyUserName` no AWS SDK. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ProxyUID | Opcional | none | ProxyUID=username; | 

## Senha do proxy
<a name="odbc-v2-driver-proxy-options-proxy-password"></a>

Use este parâmetro para definir a senha do proxy. Esse parâmetro corresponde ao parâmetro `ClientConfiguration.proxyPassword` no AWS SDK. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| ProxyPWD | Opcional | none | ProxyPWD=password; | 

## Host sem proxy
<a name="odbc-v2-driver-proxy-options-non-proxy-host"></a>

Use este parâmetro opcional para especificar um host ao qual o driver se conecta sem usar proxy. Esse parâmetro corresponde ao parâmetro `ClientConfiguration.nonProxyHosts` no AWS SDK. Para obter mais informações, consulte [AWS Client configuration](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) no *Guia do desenvolvedor do AWS SDK para C\$1\$1*.

O parâmetro de conexão `NonProxyHost` é transmitido para a opção `CURLOPT_NOPROXY` do curl. Para obter informações sobre o formato `CURLOPT_NOPROXY`, consulte [CURLOPT\$1NOPROXY](https://curl.se/libcurl/c/CURLOPT_NOPROXY.html) na documentação do curl.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| NonProxyHost | Opcional | none | NonProxyHost=.amazonaws.com,localhost,.example.net,.example.com; | 

## Usar proxy
<a name="odbc-v2-driver-proxy-options-use-proxy"></a>

Habilita o tráfego do usuário por meio do proxy especificado.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseProxy | Opcional | none | UseProxy=1; | 

# Opções de registro em log
<a name="odbc-v2-driver-logging-options"></a>

**Atenção**  
**Segurança:** quando o registro em log é habilitado em níveis detalhados (DEBUG ou TRACE), o AWS SDK usado pelo driver pode registrar informações confidenciais, como tokens de autenticação e credenciais em texto simples. Use o registro em log detalhado somente para solucionar problemas e garanta que os arquivos de log sejam armazenados com segurança e excluídos após o uso. Não habilite o registro em log detalhado em ambientes de produção.

É necessário ter direitos de administrador para modificar as configurações descritas aqui. Para fazer as alterações, você pode usar a caixa de diálogo **Opções de registro em log** do administrador de fonte de dados ODBC ou modificar o registro do Windows diretamente.

## Nível de log
<a name="odbc-v2-driver-logging-options-log-level"></a>

Essa opção habilita os logs do driver ODBC com diferentes níveis de detalhes. No Windows, você pode usar o registro ou uma caixa de diálogo para configurar o registro em log. A opção está localizada no seguinte caminho de registro:

```
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Amazon Athena\ODBC\Driver
```

Os seguintes níveis de logs estão disponíveis:
+ `OFF`: o registro em log está desabilitado
+ `ERROR`: somente as mensagens de erro são registradas em log
+ `WARN`: os erros e as mensagens de aviso são registrados em log
+ `INFO`: os erros, os avisos e as mensagens informativas são registrados em log
+ `DEBUG`: as informações detalhadas de depuração, além de todas as mensagens de nível inferior são registradas em log
+ `TRACE`: o nível de registro em log mais detalhado, inclui todas as mensagens

**nota**  
Cada nível de log inclui todas as mensagens dos níveis abaixo dele. Níveis de logs mais altos podem afetar a performance e gerar arquivos de log maiores.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| LogLevel | Opcional | OFF | LogLevel=INFO; | 

## Caminho do log.
<a name="odbc-v2-driver-logging-options-log-path"></a>

Especifica o caminho para o arquivo em que os logs do driver ODBC estão armazenados. É possível usar o registro ou uma caixa de diálogo para definir esse valor. A opção está localizada no seguinte caminho de registro:

```
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Amazon Athena\ODBC\Driver
```


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| LogPath | Opcional | none | LogPath=C:\$1Users\$1username\$1projects\$1internal\$1trunk\$1; | 

## Usar o AWS Logger
<a name="odbc-v2-driver-logging-options-use-aws-logger"></a>

Especifica se o registro em log do AWS SDK está habilitado. Especifique 1 para habilitar, 0 para desabilitar.


****  

| **Nome da string de conexão** | **Tipo de parâmetro** | **Valor padrão** | **Exemplo de string de conexão** | 
| --- | --- | --- | --- | 
| UseAwsLogger | Opcional | 0 | UseAwsLogger=1; | 

# Migrar para o driver ODBC 2.x
<a name="odbc-v2-driver-migrating"></a>

Como a maioria dos parâmetros de conexão do ODBC 2.x do Athena é compatível com versões anteriores do driver ODBC 1.x, é possível reutilizar a maior parte da string de conexão existente com o driver ODBC 2.x do Athena. Porém, os parâmetros de conexão a seguir necessitam de modificações.

## Nível de log
<a name="odbc-v2-driver-migrating-log-level"></a>

Embora o driver ODBC atual forneça uma variedade de opções de registro em log disponíveis, indo de `LOG_OFF (0)` a `LOG_TRACE (6)`, o driver ODBC 2.x do Amazon Athena tinha inicialmente somente dois valores: 0 (desabilitado) e 1 (habilitado). A partir da versão 2.0.6.0, o driver agora é compatível com níveis de registro em log mais granulares com recursos de registro em log aprimorados:
+ `OFF`: o registro em log está desabilitado
+ `ERROR`: somente as mensagens de erro são registradas em log
+ `WARN`: os erros e as mensagens de aviso são registrados em log
+ `INFO`: os erros, os avisos e as mensagens informativas são registrados em log
+ `DEBUG`: as informações detalhadas de depuração, além de todas as mensagens de nível inferior são registradas em log
+ `TRACE`: o nível de registro em log mais detalhado, inclui todas as mensagens

Para obter mais informações sobre o registro em log do driver ODBC 2.x, consulte [Opções de registro em log](odbc-v2-driver-logging-options.md).


****  

|  | Driver ODBC 1.x | Driver ODBC 2.x | 
| --- | --- | --- | 
| Nome da string de conexão | LogLevel | LogLevel | 
| Tipo de parâmetro | Opcional | Opcional | 
| Valor padrão | 0 | OFF | 
| Possíveis valores | 0-6 | Para versões anteriores à 2.0.6.0: `0,1` Para a versão 2.0.6.0 e posteriores: `OFF` , `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE` | 
| Exemplo de string de conexão | LogLevel=6; | LogLevel=INFO; | 

**nota**  
Na versão 2.0.6.0 e posteriores, o framework de registro em log foi otimizado para reduzir os atrasos operacionais e a geração excessiva de arquivos de logs, ao mesmo tempo em que fornece informações de diagnóstico mais detalhadas por meio desses níveis granulares de logs. Cada nível inclui todas as mensagens dos níveis abaixo dele.

## MetadataRetrievalMethod
<a name="odbc-v2-driver-migrating-metadataretrievalmethod"></a>

O driver ODBC atual oferece várias opções para recuperar os metadados do Athena. O driver ODBC do Amazon Athena descontinua o `MetadataRetrievalMethod` e sempre usa a API do Amazon Athena para extrair metadados.

O Athena inclui o sinalizador `QueryExternalCatalogs` para consultar catálogos externos. Para consultar catálogos externos com o driver ODBC atual, defina `MetadataRetrievalMethod` como `ProxyAPI`. Para consultar catálogos externos com o driver ODBC do Athena, defina `QueryExternalCatalogs` como `1`.


****  

|  | Driver ODBC 1.x | Driver ODBC 2.x | 
| --- | --- | --- | 
| Nome da string de conexão | MetadataRetrievalMethod | QueryExternalCatalogs | 
| Tipo de parâmetro | Opcional | Opcional | 
| Valor padrão | Auto | 0 | 
| Possíveis valores | Auto, AWS Glue, ProxyAPI, Query | 0,1 | 
| Exemplo de string de conexão | MetadataRetrievalMethod=ProxyAPI; | QueryExternalCatalogs=1; | 

## Teste de conexão
<a name="odbc-v2-driver-migrating-connection-test"></a>

Quando você testa uma conexão do driver ODBC 1.x, o driver executa uma consulta `SELECT 1` que gera dois arquivos no bucket do Amazon S3: um para o conjunto de resultados e outro para os metadados. A conexão de teste é cobrada conforme a política de [preços do Amazon Athena](https://aws.amazon.com/athena/pricing/).

Quando você testa uma conexão do driver ODBC 2.x, o driver chama a ação da API [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) do Athena. A chamada usa o tipo de autenticação e o provedor de credenciais correspondente que você especificou para recuperar credenciais. Não há cobrança pelo teste de conexão ao usar o driver ODBC 2.x, e o teste não gera resultados de consulta no bucket do Amazon S3.

# Solucionar problemas do driver ODBC 2.x
<a name="odbc-v2-driver-troubleshooting"></a>

Se você encontrar problemas com o driver ODBC do Amazon Athena, entre em contato com o Suporte (no Console de gerenciamento da AWS, escolha **Suporte**, **Support Center**).

Não se esqueça de incluir as informações a seguir e forneça outros detalhes que ajudem a equipe de suporte a entender seu caso de uso.
+ **Descrição** (obrigatório): uma descrição contendo informações detalhadas sobre seu caso de uso e a diferença entre o comportamento esperado e o observado. Inclua todas as informações que possam ajudar os engenheiros de suporte a acompanhar o problema com facilidade. Se o problema for intermitente, especifique as datas, os carimbos de data e hora ou os pontos de intervalo em que o problema ocorreu.
+ **Informações sobre a versão** (obrigatório): informações sobre a versão do driver, o sistema operacional e as aplicações usadas. Por exemplo, “Driver ODBC versão 1.2.3, Windows 10 (x64), Power BI”.
+ **Arquivos de log** (obrigatório): o número mínimo de arquivos de log do driver ODBC necessários para entender o problema. Para obter informações sobre as opções de registro em log para o driver ODBC 2.x, consulte [Opções de registro em log](odbc-v2-driver-logging-options.md).
+ **String de conexão** (obrigatório): sua string de conexão ODBC ou uma captura de tela da caixa de diálogo que mostra os parâmetros de conexão utilizados. Para obter informações sobre parâmetros de conexão, consulte [Parâmetros de conexão do ODBC 2.x do Athena](odbc-v2-driver-connection-parameters.md).
+ **Etapas do problema** (opcional): se possível, inclua etapas ou um programa independente que possa ajudar a reproduzir o problema.
+ **Informações de erro de consulta** (opcional): em caso de erros que envolvam consultas DML ou DDL, inclua as seguintes informações:
  + Uma versão completa ou simplificada da consulta DML ou DDL com falha.
  + O ID da conta e a Região da AWS usada e o ID de execução da consulta.
+ **Erros de SAML** (opcional): se você tiver um problema relacionado à autenticação com a declaração SAML, inclua as seguintes informações:
  + O provedor de identidades e o plug-in de autenticação que foram usados.
  + Um exemplo com o token SAML.

# Notas da versão do ODBC 2.x do Amazon Athena
<a name="odbc-v2-driver-release-notes"></a>

Essas notas de versão fornecem detalhes de aprimoramentos, atributos, problemas conhecidos e alterações de fluxo de trabalho no driver ODBC 2.x do Amazon Athena.

## 2.1.0.0
<a name="odbc-v2-driver-release-notes-2026-03-20"></a>

Lançado em 20/03/2026

O driver ODBC v2.1.0.0 do Amazon Athena inclui melhorias de segurança. Esta versão aprimora os fluxos de autenticação, o processamento de consultas e a segurança do transporte. Recomendamos o upgrade para esta versão o mais rápido possível.

### Alterações que podem causar interrupções
<a name="odbc-v2-driver-release-notes-2026-03-20-breaking-changes"></a>
+ **Validação do certificado SSL habilitada por padrão**: o driver agora impõe a verificação do certificado SSL ao se conectar aos provedores de identidade. Se você usar um provedor de identidade local sem um certificado SSL válido, deverá definir explicitamente o `SSL_Insecure=1` em sua cadeia de conexão. Para obter mais informações, consulte [SSL inseguro (IdP)](odbc-v2-driver-common-authentication-parameters.md#odbc-v2-driver-common-authentication-parameters-ssl-insecure-idp).
+ **TLS 1.2 mínimo obrigatório**: o driver não aceita mais conexões TLS 1.0 ou TLS 1.1 para provedores de identidade. Todas as conexões IdP agora exigem TLS 1.2 ou posterior.
+ **Fluxo de autenticação BrowserSSOOIDC atualizado**: o plug-in BrowserSSOOIDC agora usa Código de Autorização com PKCE em vez de Autorização de Código de Dispositivo. Um novo parâmetro opcional `listen_port` (padrão 7890) está disponível para o servidor de retorno de chamada OAuth 2.0. Talvez seja necessário incluir essa porta na lista de permissões em sua rede. O escopo padrão foi alterado para `sso:account:access`. Para obter mais informações, consulte [Browser SSO OIDC](odbc-v2-driver-browser-sso-oidc.md).

### Melhorias
<a name="odbc-v2-driver-release-notes-2026-03-20-improvements"></a>
+ **BrowserSSOOIDC**: ocorreu a migração do fluxo do Código do Dispositivo para o Código de Autorização com o PKCE para melhorar a segurança.
+ **BrowserAzureAD**: PKCE (chave de prova para troca de código) foi adicionada ao fluxo de autorização do OAuth 2.0 para evitar ataques de interceptação de código de autorização.
+ **BrowserSAML**: a proteção RelayState CSRF foi adicionada para evitar ataques de injeção de token SAML.
+ **Cache de credenciais**: a partir da v2.1.0.0, as credenciais em cache são armazenadas como JSON de texto simples no diretório `user-profile/.athena-odbc/` com permissões de arquivo restritas ao usuário proprietário, de acordo com a forma como a AWS CLI protege as credenciais armazenadas localmente.
+ **Perfil do IAM**: suporte incluído para `EcsContainer` e para fontes de credenciais de `Environment`, além do `Ec2InstanceMetadata` existentes.
+ **Analisador de cadeia de conexão**: foi implementado tratamento de escape `}}` adequado de ODBC.
+ **Consultas de catálogo**: escape do identificador SQL adicionado para nomes de esquemas e padrões de tabela.
+ **Correspondência de padrões ODBC**: a correspondência baseada em regex foi substituída pelo combinador curinga ODBC LIKE direto.
+ **Análise de XML**: o limite de profundidade de recursão (100 níveis) e limite de tamanho (1 MB) para tokens SAML foram adicionados.
+ **Autenticação ADFS**: o limite de tamanho de resposta (200 KB) para respostas do servidor ADFS foi adicionado.

### Correções
<a name="odbc-v2-driver-release-notes-2026-03-20-fixes"></a>
+ A neutralização imprópria de elementos especiais em componentes de autenticação foi corrigida, que poderia permitir a execução de código ou o redirecionamento do fluxo de autenticação por meio de parâmetros de conexão criados. Afeta os plug-ins BrowserSSOOIDC, BrowserAzureAD e BrowserSAML.
+ A neutralização imprópria de elementos especiais em componentes de processamento de consultas foi corrigida, o que podia permitir negação de serviço ou injeção de SQL por meio de metadados de tabela criados.
+ A validação incorreta do certificado ao se conectar aos provedores de identidade foi corrigida.
+ A falta de controles de segurança de autenticação em fluxos de autenticação baseados em navegador foi corrigida, incluindo PKCE para OAuth, proteção CSRF para SAML, cache seguro de credenciais e vinculação exclusiva de portas de retorno de chamada.
+ O consumo descontrolado de recursos em componentes de análise foi controlado, o que podia permitir a negação de serviço por meio de padrões de entrada criados, respostas ilimitadas do servidor ou cargas úteis XML profundamente aninhadas.
+ Um problema em que `SQLColumns` e `SQLTables` não retornavam resultados ao usar `UseSingleCatalogAndSchema=1` com catálogos federados entre contas no modo de importação do Power BI foi corrigido.

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.6.0
<a name="odbc-v2-driver-release-notes-2025-11-21"></a>

Lançado em 21/11/2025

### Melhorias
<a name="odbc-v2-driver-release-notes-2025-11-21-improvements"></a>
+ **Plug-in de autenticação de propagação de identidade confiável via navegador**: foi adicionado um novo plug-in de autenticação para ser compatível com a autenticação OpenID Connect (OIDC) baseada em navegador com propagação de identidade confiável. Esse plug-in fornece uma experiência de autenticação otimizada ao lidar com o fluxo completo do OAuth 2.0 por meio de seu navegador padrão, buscando automaticamente o JSON Web Token (JWT) e integrando-se à propagação de identidade confiável. O plug-in foi projetado especificamente para ambientes de área de trabalho de usuário único. Para obter informações sobre como habilitar e usar a propagação de identidade confiável, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html).
+ **Framework de registro em log aprimorado**: o mecanismo de registro em log do driver foi melhorado significativamente ao seguinte: 
  + Inclusão de níveis de logs mais granulares além das opções básicas 0/1
  + Remoção das instruções redundantes de logs
  + Otimização do framework de registro em log para incluir informações diagnósticas relevantes
  + Resolução de problemas de performance que estavam causando atrasos operacionais
  + Redução da geração excessiva de arquivos de logs quando o registro em log está habilitado

### Correções
<a name="odbc-v2-driver-release-notes-2025-11-21-fixes"></a>
+ **Otimização do buscador de resultados**: correção de um problema em que as limitações dos parâmetros de tamanho de busca eram aplicadas incorretamente aos buscadores de resultados de streaming e sem streaming. Agora, a limitação é aplicada corretamente somente aos buscadores de resultados sem streaming.

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.5.1
<a name="odbc-v2-driver-release-notes-2025-10-13"></a>

Lançado em 13/10/2025

### Correções
<a name="odbc-v2-driver-release-notes-2025-10-13-fixes"></a>

O driver ODBC v2.0.5.1 do Amazon Athena contém as seguintes correções em plug-ins de autenticação baseados em navegador.
+ Validação implementada para verificação de URL e esquema de login.
+ Mecanismo aprimorado de inicialização de navegador no Linux para utilizar as APIs do sistema, resultando em maior estabilidade e segurança.

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.5.0
<a name="odbc-v2-driver-release-notes-2025-09-10"></a>

Lançada em 10/9/2025

### Melhorias
<a name="odbc-v2-driver-release-notes-2025-09-10-improvements"></a>
+ **Plugin de autenticação do provedor de identidade confiável (TIP) JWT**: foi adicionado um novo plugin de autenticação para oferecer suporte à integração do provedor de identidade confiável (TIP) JWT com drivers ODBC. Esse tipo de autenticação permite usar um JSON Web Token (JWT) obtido de um provedor de identidades externo como parâmetro de conexão para autenticação no Athena. Com o TIP, o contexto de identidade é adicionado a um perfil do IAM para identificar o usuário que está solicitando acesso aos recursos da AWS. Para obter informações sobre como habilitar e usar o TIP, consulte [O que é propagação de identidade confiável?](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html).
+ **Suporte a endpoints SSO Admin personalizados**: foi adicionado suporte a endpoints SSO Admin personalizados no driver JDBC. Esse aprimoramento permite a você especificar seus próprios endpoints para serviços de SSO ao executar o JDBC por trás de VPCs.
+ **Atualização da versão do AWS SDK**: atualizamos a versão do AWS SDK usada no driver para 2.32.16 e atualizamos as dependências do projeto para a versão 2.0.5.0.

## 2.0.4.0
<a name="odbc-v2-driver-release-notes-2025-06-17"></a>

Lançado em 17/6/2025

O driver ODBC v2.0.4.0 do Amazon Athena contém as seguintes melhorias e correções.

### Melhorias
<a name="odbc-v2-driver-release-notes-2025-06-17-improvements"></a>
+ **Buscador de resultados**: agora, o driver seleciona automaticamente o método para fazer o download dos resultados de consultas. Isso dispensa a necessidade de configurar manualmente o buscador na maioria das situações. Para obter mais informações, consulte [Buscador de resultados](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-result-fetcher).
+ Atualização da biblioteca curl para a versão 8.12.1.

### Correções
<a name="odbc-v2-driver-release-notes-2025-06-17-fixes"></a>
+ Configuração de proxy corrigida para o perfil do IAM ao se conectar ao STS. A correção permite que o perfil do IAM seja usado para uma autenticação bem-sucedida.
+ Leia todas as opções de configuração adicionais para o perfil do IAM com plug-ins de autenticação. Isso inclui `UseProxyForIdP`, `SSL_Insecure`, `LakeformationEnabled` e `LoginToRP` para resolver configurações incorretas dos plug-ins afetados.
+ Função round corrigida, permitindo que ela receba um segundo parâmetro opcional. Ela processa com sucesso consultas contendo a sintaxe de escape.
+ Tamanho de coluna corrigido para os tipos de dados `TIME WITH TIME ZONE` e `TIMESTAMP WITH TIME ZONE`. Valores com tipo de dados timestamp e timezone não serão truncados.

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.3.0
<a name="odbc-v2-driver-release-notes-2024-04-08"></a>

Lançado em 08/04/2024

O driver ODBC v2.0.3.0 do Amazon Athena contém as seguintes melhorias e correções.

### Melhorias
<a name="odbc-v2-driver-release-notes-2024-04-08-improvements"></a>
+ Adição de compatibilidade com MFA para o plug-in de autenticação Okta nas plataformas Linux e Mac.
+ Agora, a biblioteca `athena-odbc.dll` e o instalador `AmazonAthenaODBC-2.x.x.x.msi` para Windows estão assinados.
+ Atualização do arquivo `cacert.pem` de certificado CA que é instalado com o driver.
+ Melhora no tempo necessário para listar tabelas nos catálogos Lambda. Para catálogos do tipo `LAMBDA`, agora o driver ODBC pode enviar uma consulta [SHOW TABLES](show-tables.md) para obter uma lista das tabelas disponíveis. Para obter mais informações, consulte [Usar consulta para listar tabelas](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-use-query-to-list-tables).
+ Introdução do parâmetro de conexão `UseWCharForStringTypes` para relatar tipos de dados de string usando `SQL_WCHAR` e `SQL_WVARCHAR`. Para obter mais informações, consulte [Usar WCHAR para tipos de strings](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-use-wchar-for-string-types).

### Correções
<a name="odbc-v2-driver-release-notes-2024-04-08-fixes"></a>
+ Correção de um aviso sobre corrupção do registro que ocorria quando a ferramenta Get-OdbcDsn do PowerShell era usada.
+ Atualização da lógica de análise para processar comentários no início das strings de consulta.
+ Agora, os tipos de dados de data e de carimbo de data/hora permitem zero no campo do ano. 

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.2.2
<a name="odbc-v2-driver-release-notes-2024-02-13"></a>

Lançado em 13/02/2024

O driver ODBC v2.0.2.2 do Amazon Athena contém as seguintes melhorias e correções.

### Melhorias
<a name="odbc-v2-driver-release-notes-2024-02-13-improvements"></a>
+ Adição de dois parâmetros de conexão, `StringColumnLength` e `ComplexTypeColumnLength`, que você pode usar para alterar o comprimento padrão da coluna para tipos de dados de string e complexos. Para obter mais informações, consulte [Comprimento da coluna de string](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-string-column-length) e [Comprimento de coluna de tipo complexo](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-complex-type-column-length).
+ Adição de compatibilidade com os sistemas operacionais Linux e macOS (Intel e ARM). Para obter mais informações, consulte [Linux](odbc-v2-driver-getting-started-linux.md) e [macOS](odbc-v2-driver-getting-started-macos.md).
+ Atualização de AWS-SDK-CPP para a versão de tag 1.11.245.
+ Atualização da biblioteca curl para a versão 8.6.0.

### Correções
<a name="odbc-v2-driver-release-notes-2024-02-09-fixes"></a>
+ Solução de um problema que causava o relato de valores incorretos nos metadados do conjunto de resultados para tipos de dados semelhantes a strings na coluna de precisão.

Para fazer download do driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.2.1
<a name="odbc-v2-driver-release-notes-2023-12-07"></a>

Lançada em 7/12/2023

O driver ODBC v2.0.2.1 do Amazon Athena contém as melhorias e correções apresentadas a seguir.

### Melhorias
<a name="odbc-v2-driver-release-notes-2023-12-07-improvements"></a>
+ Aprimoramento da segurança de thread do driver ODBC para todas as interfaces.
+ Quando o registro em log estiver habilitado, os valores de data e de hora passarão a ser registrados com precisão de milissegundos.
+ Durante a autenticação com o plug-in [Browser SSO OIDC](odbc-v2-driver-browser-sso-oidc.md), o terminal será aberto para exibir o código do dispositivo ao usuário.

### Correções
<a name="odbc-v2-driver-release-notes-2023-12-07-fixes"></a>
+ Resolução de um problema de liberação de memória que ocorria ao analisar resultados da API de transmissão.
+ Solicitações para as interfaces `SQLTablePrivileges()`, `SQLSpecialColumns()`, `SQLProcedureColumns()` e `SQLProcedures()` retornarão conjuntos de resultados vazios.

Para fazer download do driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.2.0
<a name="odbc-v2-driver-release-notes-2023-10-17"></a>

Lançado em 17/10/2023

O driver ODBC v2.0.2.0 do Amazon Athena contém as seguintes melhorias e correções.

### Melhorias
<a name="odbc-v2-driver-release-notes-2023-10-17-improvements"></a>
+ O atributo de cache de arquivos foi adicionado aos plug-ins de autenticação baseados no navegador Azure AD, no Browser SSO OIDC e no Okta.

  As ferramentas de BI, como o Power BI e plug-ins baseados em navegador, usam várias janelas de navegador. O novo parâmetro de conexão de cache de arquivos permite que credenciais temporárias sejam armazenadas em cache e reutilizadas entre vários processos abertos por aplicações de BI.
+ Agora, as aplicações podem consultar informações sobre o conjunto de resultados depois que uma instrução é preparada.
+ Os tempos limite padrão de conexão e solicitação foram aumentados para uso com redes de clientes mais lentas. Para obter mais informações, consulte [Tempo limite da conexão](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-connection-timeout) e [Tempo limite da solicitação](odbc-v2-driver-advanced-options.md#odbc-v2-driver-advanced-options-request-timeout).
+ As substituições de endpoint foram adicionadas para SSO e SSO OIDC. Para obter mais informações, consulte [Substituições de endpoints](odbc-v2-driver-endpoint-overrides.md).
+ Foi adicionado um parâmetro de conexão para passar um argumento de URI para uma solicitação de autenticação ao Ping. Você pode usar esse parâmetro para ignorar a limitação de perfil único do Lake Formation. Para obter mais informações, consulte [Parâmetro de URI do Ping](odbc-v2-driver-ping.md#odbc-v2-driver-ping-uri-param). 

### Correções
<a name="odbc-v2-driver-release-notes-2023-10-17-fixes"></a>
+ Corrigido um problema de estouro de números inteiros que ocorria ao usar o mecanismo de vinculação baseado em linha.
+ O tempo limite foi removido da lista de parâmetros de conexão exigidos para o plug-in de autenticação do Browser SSO OIDC.
+ Foram adicionadas as interfaces que faltavam para `SQLStatistics()`, `SQLPrimaryKeys()`, `SQLForeignKeys()` e `SQLColumnPrivileges()`, e a capacidade de retornar conjuntos de resultados vazios mediante solicitação.

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download). Para obter informações sobre conexão, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

## 2.0.1.1
<a name="odbc-v2-driver-release-notes-2023-08-10"></a>

Lançado em 10/08/2023

O driver Amazon Athena ODBC v2.0.1.1 contém as seguintes melhorias e correções.

### Melhorias
<a name="odbc-v2-driver-release-notes-2023-08-10-improvements"></a>
+ Foi adicionado o registro de URI ao plug-in de autenticação Okta.
+ Foi adicionado o parâmetro de função preferencial ao plug-in externo do provedor de credenciais.
+ Adicionando tratamento para o prefixo do perfil no nome do perfil de arquivo de configuração AWS. 

### Correções
<a name="odbc-v2-driver-release-notes-2023-08-10-fixes"></a>
+ Corrigido um problema Região da AWS de uso que ocorreu ao trabalhar com Lake Formation e clientes AWS STS.
+ Restaurou as chaves de partição ausentes na lista de colunas da tabela.
+ Adicionou o tipo de autenticação `BrowserSSOOIDC` que faltava para o perfil AWS. 

Para baixar o driver ODBC v2, consulte [Download do driver ODBC 2.x](odbc-v2-driver.md#odbc-v2-driver-download).

## 2.0.1.0
<a name="odbc-v2-driver-release-notes-2023-06-29"></a>

Lançado em 29/06/2023

O Amazon Athena lança o driver ODBC v2.0.1.0.

O Athena lançou um novo driver ODBC que melhora a experiência de conexão, consulta e visualização de dados de aplicações compatíveis de desenvolvimento SQL e business intelligence. A versão mais recente do driver ODBC do Athena é compatível com recursos do driver existente e é fácil de atualizar. A nova versão tem suporte para autenticação de usuários pelo [Centro de Identidade do AWS IAM](https://aws.amazon.com/iam/identity-center/). Também oferece a opção de ler os resultados da consulta do Amazon S3, podendo disponibilizar os resultados da consulta para você mais cedo.

Para obter mais informações, consulte [Amazon Athena ODBC 2.x](odbc-v2-driver.md).

# Driver ODBC 1.x do Athena
<a name="connect-with-odbc-driver-and-documentation-download-links"></a>

É possível usar uma conexão ODBC para se conectar ao Athena via ferramentas e aplicações de clientes SQL de terceiros. Use os links desta página para baixar o contrato de licença para o driver ODBC 1.x do Amazon Athena, os drivers ODBC e a documentação do ODBC. Para obter informações sobre a string de conexão ODBC, consulte o arquivo PDF do Guia de Instalação e Configuração do Driver ODBC, disponível para download nesta página. Para obter informações sobre permissões, consulte [Controlar o acesso por conexões JDBC e ODBC](policy-actions.md).

**Importante**  
Ao usar o driver ODBC 1.x, observe os seguintes requisitos:  
**Porta 444 aberta**: mantenha a porta 444, que o Athena usa para fazer uma transmissão dos resultados das consultas, aberta para o tráfego de saída. Ao usar um endpoint do PrivateLink para se conectar ao Athena, verifique se o grupo de segurança anexado ao endpoint do PrivateLink está aberto para o tráfego de entrada na porta 444. 
**Política athena:GetQueryResultsStream**: adicione a ação de política `athena:GetQueryResultsStream` às entidades principais do IAM que usam o driver ODBC. Essa ação de política não é exposta diretamente com a API. Ela apenas é usada com drivers ODBC e JDBC como parte do suporte a resultados de transmissão. Para visualizar um exemplo de política, consulte [AWSPolítica gerenciada : AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy). 

## Windows
<a name="connect-with-odbc-windows"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 1.2.3.1000 para Windows 32 bits | [Driver ODBC 1.2.3.1000 para Windows 32 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/Windows/SimbaAthena_1.2.3.1000_32-bit.msi) | 
| ODBC 1.2.3.1000 para Windows 64 bits | [Driver ODBC 1.2.3.1000 para Windows 64 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/Windows/SimbaAthena_1.2.3.1000_64-bit.msi) | 

## Linux
<a name="connect-with-odbc-linux"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 1.2.3.1000 para Linux 32 bits | [Driver ODBC 1.2.3.1000 para Linux 32 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/Linux/simbaathena-1.2.3.1000-1.el7.i686.rpm) | 
| ODBC 1.2.3.1000 para Linux 64 bits | [Driver ODBC 1.2.3.1000 para Linux 64 bits](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/Linux/simbaathena-1.2.3.1000-1.el7.x86_64.rpm) | 

## OSX
<a name="connect-with-odbc-osx"></a>


| Versão do driver | Link para fazer download | 
| --- | --- | 
| ODBC 1.2.3.1000 para OSX | [Driver ODBC 1.2.3.1000 para OSX](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/OSX/SimbaAthena_1.2.3.1000.dmg) | 

## Documentação
<a name="connect-with-odbc-driver-documentation"></a>


| Conteúdo | Link da documentação | 
| --- | --- | 
| Contrato de licença do driver ODBC para Amazon Athena |  [Contrato de licença](https://downloads.athena.us-east-1.amazonaws.com/agreement/ODBC/Amazon+Athena+ODBC+Driver+License+Agreement.pdf)  | 
| Documentação para o ODBC 1.2.3.1000 | [Guia de instalação e de configuração do driver ODBC versão 1.2.3.1000](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/docs/Simba+Amazon+Athena+ODBC+Connector+Install+and+Configuration+Guide.pdf) | 
| Notas de versão para o ODBC 1.2.3.1000 | [Notas de versão do driver ODBC versão 1.2.3.1000](https://downloads.athena.us-east-1.amazonaws.com/drivers/ODBC/SimbaAthenaODBC_1.2.3.1000/docs/release-notes.txt) | 

## Notas do driver ODBC
<a name="connect-with-odbc-configuration"></a>

**Conexão sem usar proxy**  
Se você quiser especificar determinados hosts aos quais o driver se conecta sem usar um proxy, poderá usar a propriedade `NonProxyHost` opcional na string de conexão do ODBC.

A propriedade `NonProxyHost` especifica uma lista separada por vírgulas de hosts que o conector pode acessar sem passar pelo servidor de proxy quando uma conexão por proxy está habilitada, como no seguinte exemplo:

```
.amazonaws.com,localhost,.example.net,.example.com
```

O parâmetro de conexão `NonProxyHost` é transmitido para a opção `CURLOPT_NOPROXY` do curl. Para obter informações sobre o formato `CURLOPT_NOPROXY`, consulte [CURLOPT\$1NOPROXY](https://curl.se/libcurl/c/CURLOPT_NOPROXY.html) na documentação do curl. 

# Configurar o acesso federado ao Amazon Athena para usuários do Microsoft AD FS usando um cliente ODBC
<a name="odbc-adfs-saml"></a>

Para configurar o acesso federado ao Amazon Athena para usuários do Microsoft Active Directory Federation Services (AD FS) usando um cliente ODBC, primeiro estabeleça a confiança entre o AD FS e sua conta da AWS. Com essa confiança estabelecida, os usuários do AD podem se [federar](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html#CreatingSAML-configuring-IdP) na AWS usando as credenciais do AD e assumir permissões de um perfil do [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) para acessar recursos da AWS, como a API do Athena.

Para criar essa confiança, você adiciona o AD FS como um provedor SAML à sua Conta da AWS e cria um perfil do IAM que os usuários federados podem assumir. No lado do AD FS, você adiciona a AWS como parte confiável e grava regras de declaração SAML para enviar os atributos de usuário adequados à AWS para autorização (especificamente, do Athena e do Amazon S3).

A configuração do acesso do AD FS ao Athena envolve as seguintes etapas principais:

[1. Configuração de um provedor e de um perfil SAML do IAM](#odbc-adfs-saml-setting-up-an-iam-saml-provider-and-role)

[2. Configuração do AD FS](#odbc-adfs-saml-configuring-ad-fs)

[3. Criação de usuários e grupos do Active Directory](#odbc-adfs-saml-creating-active-directory-users-and-groups)

[4. Configuração da conexão ODBC do AD FS para o Athena](#odbc-adfs-saml-configuring-the-ad-fs-odbc-connection-to-athena)

## 1. Configuração de um provedor e de um perfil SAML do IAM
<a name="odbc-adfs-saml-setting-up-an-iam-saml-provider-and-role"></a>

Nesta seção, você adicionará o AD FS como um provedor SAML à sua conta da AWS e criará um perfil do IAM que seus usuários federados poderão assumir.

**Para configurar um provedor SAML**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Identity providers (Provedores de identidade)**.

1. Escolha **Add provider** (Adicionar provedor).

1. Em **Provider type** (Tipo de provedor), escolha **SAML**.  
![\[Escolha SAML.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-1.png)

1. Em **Provider name** (Nome do provedor), insira **adfs-saml-provider**.

1. Em um navegador, insira o endereço a seguir para baixar do arquivo XML de federação para seu servidor do AD FS. Para executar essa etapa, o navegador deve ter acesso ao servidor do AD FS.

   ```
   https://adfs-server-name/federationmetadata/2007-06/federationmetadata.xml       
   ```

1. No console do IAM, em **Metadata document** (Documentos de metadados), escolha **Choose file** (Escolher arquivo) e, em seguida, realize o upload do arquivo de metadados da federação para a AWS.

1. Para finalizar, escolha **Add provider** (Adicionar provedor).

Em seguida, você criará o perfil do IAM que seus usuários federados poderão assumir.

**Para criar um perfil do IAM para usuários federados**

1. No painel de navegação do console do IAM, escolha **Roles** (Perfis).

1. Selecione **Criar perfil**.

1. Em **Trusted entity type** (Tipo de entidade confiável), escolha **SAML 2.0 federation** (Federação SAML 2.0).

1. Em **SAML 2.0-based provider** (Provedor baseado em SAML 2.0), escolha o provedor **adfs-saml-provider** que você criou.

1. Escolha **Permitir acesso programático e ao Console de Gerenciamento da AWS** e escolha **Próximo**.  
![\[Como escolher SAML como o tipo de entidade confiável.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-2.png)

1. Na página **Add permissions** (Adicionar permissões), filtre as políticas de permissões do IAM necessárias para o perfil e, em seguida, marque as caixas de seleção correspondentes. Este tutorial anexa as políticas `AmazonAthenaFullAccess` e `AmazonS3FullAccess`.  
![\[Como vincular a política de acesso total do Athena ao perfil.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-3.png)  
![\[Como vincular a política de acesso total do Amazon S3 ao perfil.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-4.png)

1. Escolha **Próximo**.

1. Na página **Name, review, and create** (Nomear, analisar e criar), em para **Role name** (Nome do perfil), insira um nome para o perfil. Este tutorial usa o nome **adfs-data-access**.

   Em **Step 1: Select trusted entities** (Etapa 1: selecionar entidades confiáveis), o campo **Principal** (Entidade principal) deve ser preenchido automaticamente com `"Federated:" "arn:aws:iam::account_id:saml-provider/adfs-saml-provider"`. O campo `Condition` deve conter `"SAML:aud"` e `"https://signin.aws.amazon.com/saml"`.  
![\[Entidades confiáveis JSON.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-5.png)

   Em **Step 2: Add permissions** (Etapa 2: adicionar permissões) é apresentado as políticas vinculadas ao perfil.  
![\[Lista de políticas vinculadas ao perfil.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-6.png)

1. Selecione **Criar perfil**. Uma mensagem da barra de notificação confirma a criação do perfil.

1. Na página **Roles** (Perfis), escolha o nome do perfil que você acabou de criar. A página de resumo do perfil mostra as políticas que foram vinculadas.  
![\[Página de resumo do perfil.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-7.png)

## 2. Configuração do AD FS
<a name="odbc-adfs-saml-configuring-ad-fs"></a>

Agora está tudo pronto para você adicionar a AWS como parte confiável e gravar regras de declaração SAML para poder enviar os atributos de usuário adequados à AWS para autorização.

A federação baseada em SAML tem duas partes participantes: o IdP (Active Directory) e a parte confiável (AWS), que é o serviço ou aplicação que usará a autenticação do IdP.

Para configurar o AD FS, primeiro é necessário adicionar um objeto de confiança de terceira parte confiável e, em seguida, configurar as regras de declaração SAML para a parte confiável. O AD FS usa regras de declaração para formar uma declaração SAML que é enviada para uma parte confiável. A asserção SAML afirma que as informações sobre o usuário do AD são verdadeiras e que o usuário foi autenticado.

### Como adicionar um objeto de confiança de terceira parte confiável
<a name="odbc-adfs-saml-adding-a-relying-party-trust"></a>

Para adicionar um objeto de confiança de terceira parte confiável no AD FS, use o gerenciador de servidores do AD FS.

**Para adicionar um objeto de confiança de terceira parte confiável no AD FS**

1. Entre no servidor do AD FS.

1. No menu **Start** (Iniciar), abra **Server Manager** (Gerenciador do Servidor).

1. Escolha **Tools** (Ferramentas) e, em seguida, selecione **AD FS Management** (Gerenciamento do AD FS).  
![\[Escolha Tools (Ferramentas) e AD FS Management (Gerenciamento do AD FS).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-8.png)

1. No painel de navegação, em **Trust Relationships** (Relações de confiança), escolha **Relying Party Trusts** (Objeto de confiança de terceira parte confiável).

1. Em **Actions** (Ações), escolha **Add Relying Party Trust** (Adicionar objeto de confiança de terceira parte confiável).  
![\[Escolha Add Relying Party Trust (Adicionar objeto de confiança de terceira parte confiável).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-9.png)

1. Na página **Add Relying Party Trust Wizard (Assistente para adicionar confiança da parte dependente)** escolha **Start (Iniciar)**.  
![\[Escolha Iniciar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-10.png)

1. Na tela **Select Data Source** (Selecionar fonte de dados), selecione a opção **Import data about the relying party published online or on a local network** (Importar dados sobre a parte confiável publicados online ou em uma rede local).

1. Em **Federation metadata address (host name or URL)** (Endereço de metadados de federação [nome do host ou URL]), insira o URL ** https://signin.aws.amazon.com/static/saml-metadata.xml**.

1. Escolha **Next (Próximo)**.  
![\[Como configurar a fonte de dados.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-11.png)

1. Na página **Specify Display Name** (Especificar nome de exibição), em **Display name** (Nome de exibição), insira um nome de exibição para a parte confiável e, em seguida, escolha **Next** (Avançar).  
![\[Inserir um nome de exibição para a parte confiável.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-12.png)

1. Na página **Configure Multi-factor Authentication Now** (Configurar autenticação multifator agora), este tutorial seleciona **I do not want to configure multi-factor authentication for this relying party trust at this time** (Não desejo configurar a autenticação multifator para esse objeto de confiança de terceira parte confiável no momento).

   Para obter mais segurança, recomendamos que você configure a autenticação multifator para ajudar a proteger seus recursos da AWS. Como é usado um conjunto de dados de amostra, este tutorial não habilita a autenticação multifator.  
![\[Como configurar a autenticação multifator.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-13.png)

1. Escolha **Próximo**.

1. Na página **Choose Issuance Authorization Rules** (Escolher regras de autorização de emissão), selecione **Permit all users to access this relying party** (Permitir que todos os usuários acessem esta parte confiável).

   Essa opção permite que todos os usuários no Active Directory usem o AD FS com a AWS como parte confiável. Você deve considerar seus requisitos de segurança e ajustar essa configuração em conformidade.  
![\[Como configurar o acesso de usuário à parte confiável.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-14.png)

1. Escolha **Próximo**.

1. Na página **Ready to Add Trust** (Pronto para adicionar confiança), escolha **Next** (Avançar) para adicionar o objeto de confiança de terceira parte confiável ao banco de dados de configuração do AD FS.  
![\[Escolha Próximo.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-15.png)

1. Na página **Finish** (Concluir), escolha **Close** (Fechar).  
![\[Escolha Fechar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-16.png)

### Configuração de regras de declaração SAML para a parte confiável
<a name="odbc-adfs-saml-configuring-saml-claim-rules-for-the-relying-party"></a>

Nesta tarefa, você criará dois conjuntos de regras de declaração.

O primeiro conjunto, as regras de 1 a 4, contém regras de declaração do AD FS que são necessárias para assumir um perfil do IAM com base na associação ao grupo do AD. Essas são regras semelhantes as que você cria se desejar estabelecer acesso federado ao [Console de gerenciamento da AWS](https://aws.amazon.com/console).

O segundo conjunto, as regras 5 e 6, são regras de declaração necessárias para o controle de acesso do Athena.

**Para criar regras de declaração do AD FS**

1. No painel de navegação do console AD FS Management, escolha **Trust Relationships** (Relações de confiança) e **Relying Party Trusts** (Objetos de confiança de terceira parte confiável).

1. Localize a parte confiável criada na seção anterior.

1. Clique com o botão direito do mouse na parte confiável e escolha **Edit Claim Rules** (Editar regras de declaração) ou escolha **Edit Claim Rules** (Editar regras de declaração) no menu **Actions** (Ações).  
![\[Selecione Edit Claim Rules (Editar regras de declaração).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-17.png)

1. Escolha **Add Rule**.

1. Na página **Configure Rule** (Configurar regra) do Assistente para adição de uma regra de declaração de transformação, insira as informações a seguir para criar a regra de declaração 1 e, em seguida, escolha **Finish** (Concluir).
   + Em **Claim rule name** (Nome da regra de declaração), insira **NameID**.
   + Em **Rule template** (Modelo de regra), use **Transform an Incoming Claim** (Transformar uma declaração de entrada).
   + Em **Incoming claim type** (Tipo da declaração de entrada), escolha **Windows Account Name** (Nome da conta do Windows).
   + Em **Outgoing claim type** (Tipo da declaração de saída), escolha **Name ID** (ID do nome).
   + Em **Outgoing name ID format (Formato de ID de nome de saída)**, escolha **Persistent Identifier (Identificador persistente)**.
   + Selecione **Pass through all claim values** (Transmitir todos os valores de declaração).  
![\[Crie a primeira regra de declaração.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-18.png)

1. Escolha **Add Rule** (Adicionar regra), insira as informações a seguir para criar a regra de declaração 2 e, em seguida, escolha **Finish** (Concluir).
   + Em **Claim rule name** (Nome da regra de declaração), insira **RoleSessionName**.
   + Em **Rule template** (Modelo de regra), use **Send LDAP Attribute as Claims** (Enviar atributo LDAP como declarações).
   + Em **Attribute store (Armazenamento de atributos)**, escolha **Active Directory**.
   + Em **Mapping of LDAP attributes to outgoing claim types** (Mapeamento de atributos LDAP para tipos de declaração de saída), adicione o atributo **E-Mail-Addresses**. Em **Outgoing Claim Type** (Tipo da declaração de saída), insira ** https://aws.amazon.com/SAML/Attributes/RoleSessionName**.  
![\[Crie a segunda regra de declaração.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-19.png)

1. Escolha **Add Rule** (Adicionar regra), insira as informações a seguir para criar a regra de declaração 3 e, em seguida, escolha **Finish** (Concluir).
   + Em **Claim rule name** (Nome da regra de declaração), insira **Get AD Groups**.
   + Em **Rule template** (Modelo de regra), use **Send Claims Using a Custom Rule** (Enviar declarações usando uma regra personalizada).
   + Em **Custom rule** (Regra personalizada), insira o código a seguir:

     ```
     c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 
      Issuer == "AD AUTHORITY"]=> add(store = "Active Directory", types = ("http://temp/variable"),  
      query = ";tokenGroups;{0}", param = c.Value);
     ```  
![\[Crie a terceira regra de declaração.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-20.png)

1. Escolha **Add Rule**. Insira as informações a seguir para criar a regra de declaração 4 e escolha **Finish** (Concluir).
   + Em **Claim rule name** (Nome da regra de declaração), insira **Role**.
   + Em **Rule template** (Modelo de regra), use **Send Claims Using a Custom Rule** (Enviar declarações usando uma regra personalizada).
   + Em **Custom rule** (Regra personalizada), insira o código a seguir com o número da sua conta e o nome do provedor SAML que você criou anteriormente:

     ```
     c:[Type == "http://temp/variable", Value =~ "(?i)^aws-"]=> issue(Type = "https://aws.amazon.com/SAML/Attributes/Role",  
     Value = RegExReplace(c.Value, "aws-", "arn:aws:iam::AWS_ACCOUNT_NUMBER:saml-provider/adfs-saml-provider,arn:aws:iam:: AWS_ACCOUNT_NUMBER:role/"));
     ```  
![\[Crie a quarta regra de declaração.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-21.png)

## 3. Criação de usuários e grupos do Active Directory
<a name="odbc-adfs-saml-creating-active-directory-users-and-groups"></a>

Agora está tudo pronto para que você crie usuários do AD que acessarão o Athena e grupos do AD para posicioná-los para que você possa controlar os níveis de acesso por grupo. Após a criação de grupos do AD que categorizam padrões de acesso a dados, você adicionará seus usuários a esses grupos.

**Para criar usuários do AD que acessem o Athena**

1. No painel Gerenciador do servidor, escolha **Tools** (Ferramentas) e, em seguida, selecione **Active Directory Users and Computers** (Usuários e computadores do Active Directory).  
![\[Escolha Tools (Ferramentas) e Active Directory Users and Computers (Usuários e computadores do Active Directory).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-22.png)

1. No painel de navegação, escolha **Users**.

1. Na barra de ferramentas **Active Directory Users and Computers** (Usuários e computadores do Active Directory), escolha a opção **Create user** (Criar usuário).  
![\[Selecione Criar usuário.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-23.png)

1. Na caixa de diálogo **New Object – User** (Novo objeto: usuário), em **First name** (Nome), **Last name** (Sobrenome) e **Full name** (Nome completo), insira um nome. Este tutorial usa **Jane Doe**.  
![\[Digite um nome de usuário.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-24.png)

1. Escolha **Próximo**.

1. Em **Password** (Senha), insira uma senha e digite-a novamente para confirmar.

   Para simplificar, este tutorial desmarca **User must change password at next sign on** (O usuário deve alterar a senha no próximo login). Em cenários reais, você deve requerer que os usuários recém-criados alterem suas senhas.  
![\[Digite uma senha.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-25.png)

1. Escolha **Próximo**.

1. Escolha **Terminar**.  
![\[Escolha Terminar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-26.png)

1. Em **Active Directory Users and Computers** (Usuários e computadores do Active Directory), escolha o nome de usuário.

1. Na caixa de diálogo **Properties** (Propriedades) para o usuário, em **E-mail**, insira um endereço de e-mail. Este tutorial usa **jane@example.com**.  
![\[Insira um endereço de e-mail.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-27.png)

1. Escolha **OK**.

### Criação de grupos do AD para representar padrões de acesso a dados
<a name="odbc-adfs-saml-create-ad-groups-to-represent-data-access-patterns"></a>

É possível criar grupos do AD cujos membros assumem o perfil do IAM `adfs-data-access` ao fazerem login na AWS. O exemplo a seguir criará um grupo AD chamado aws-adfs-data-access.

**Para criar um grupo do AD**

1. No Painel do gerenciador do servidor, no menu **Tools** (Ferramentas), escolha **Active Directory Users and Computers** (Usuários e computadores do Active Directory).

1. Na barra de ferramentas, escolha a opção **Create new group** (Criar novo grupo).  
![\[Escolha Create new group (Criar novo grupo).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-28.png)

1. Na caixa de diálogo **New Object - Group** (Novo objeto: grupo), insira as informações a seguir:
   + Em **Group name** (Nome do grupo), digite **aws-adfs-data-access**.
   + Em **Group scope** (Escopo do grupo), selecione **Global** (Global).
   + Em **Group type** (Tipo de grupo), selecione **Security** (Segurança).  
![\[Criação de um grupo de segurança global no AD.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-29.png)

1. Escolha **OK**.

### Adição de usuários do AD aos grupos apropriados
<a name="odbc-adfs-saml-add-ad-users-to-appropriate-groups"></a>

Agora que você criou um usuário AD e um grupo do AD, poderá adicionar o usuário ao grupo.

**Para adicionar um usuário do AD a um grupo do AD**

1. No Painel do gerenciador do servidor, no menu **Tools** (Ferramentas), escolha **Active Directory Users and Computers** (Usuários e computadores do Active Directory).

1. Em **First name** (Nome) e **Last name** (Sobrenome), escolha um usuário (por exemplo, **Jane Doe**).

1. Na caixa de diálogo **Properties** (Propriedades) para o usuário, na guia **Member Of** (Membro de), escolha **Add** (Adicionar).  
![\[Escolha Adicionar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-30.png)

1. Adicione um ou mais grupos do AD FS de acordo com os seus requisitos. Este tutorial adiciona o grupo **aws-adfs-data-access**.

1. Na caixa de diálogo **Select Groups** (Selecionar grupos), em **Enter the object names to select** (Digitar os nomes dos objetos a serem selecionados), digite o nome do grupo AD FS que você criou (por exemplo, **aws-adfs-data-access**) e, em seguida, escolha **Check Names** (Verificar nomes).  
![\[Escolha Check Names (Verificar nomes).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-31.png)

1. Escolha **OK**.

   Na caixa de diálogo **Properties** (Propriedades) para o usuário, o nome do grupo do AD aparecerá na lista **Member of** (Membro de).  
![\[Grupo AD adicionado às propriedades do usuário.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-32.png)

1. Escolha **Apply** (Aplicar) e, em seguida, escolha **OK**.

## 4. Configuração da conexão ODBC do AD FS para o Athena
<a name="odbc-adfs-saml-configuring-the-ad-fs-odbc-connection-to-athena"></a>

Após a criação dos usuários e grupos do AD, está tudo pronto para você usar o programa de fontes de dados do ODBC no Windows para configurar sua conexão ODBC do Athena para o AD FS.

**Para configurar a conexão ODBC do AD FS para o Athena**

1. Instale o driver ODBC para Athena. Para obter os links para baixar, consulte [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

1. No Windows, escolha **Start** (Iniciar) e **ODBC Data Sources** (Fontes de dados do ODBC).

1. No programa **ODBC Data Source Administrator**, escolha**Add** (Adicionar).  
![\[Escolha Add (Adicionar) para adicionar uma fonte de dados do ODBC.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-33.png)

1. Na caixa de diálogo **Create New Data Source** (Criar nova fonte de dados), escolha **Simba Athena ODBC Driver** (Driver ODBC do Simba Athena) e, em seguida, selecione **Finish** (Concluir).  
![\[Escolha Simba Athena ODBC Driver (Driver ODBC do Simba Athena).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-34.png)

1. Na caixa de diálogo **Simba Athena ODBC Driver DSN Setup** (Configuração de DNS do driver ODBC do Simba Athena), insira os valores a seguir:
   + Para **Data Source Name** (Nome da fonte de dados), insira um nome para a fonte de dados (por exemplo, ** Athena-odbc-test**).
   + Em **Description** (Descrição), insira uma descrição para a origem dos dados.
   + Para **Região da AWS**, insira a Região da AWS que você está usando (por exemplo, ** us-west-1**).
   + Para **S3 Output Location**, (Local de saída do S3), insira o caminho do Amazon S3 onde deseja que sua saída seja armazenada.  
![\[Como inserir valores para a Simba Athena ODBC Driver DSN Setup (Configuração de DNS do driver ODBC do Simba Athena).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-35.png)

1. Escolha **Authentication Options** (Opções de autenticação).

1. Na caixa de diálogo **Authentication Options** (Opções de autenticação), especifique os valores a seguir:
   + Em **Authentication Type** (Tipo de autenticação), escolha **ADFS**.
   + Em **User** (Usuário), insira o endereço de e-mail do usuário (por exemplo, **jane@example.com**).
   + Em **Password** (Senha), insira a senha do ADFS do usuário.
   + Em **IdP Host** (Host do IdP), insira o nome do servidor do AD FS (por exemplo,**adfs.example.com**).
   + Em **IdP Port** (Porta do IdP), use o valor padrão **443**.
   + Selecione a opção **SSL Insecure**.  
![\[Configuração das opções de autenticação.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-adfs-saml-37.png)

1. Escolha **OK** para fechar as **Authentication Options** (Opções de autenticação).

1. Selecione **Test** (Testar) para testar a conexão ou **OK** para finalizar.

# Configurar SSO para ODBC usando o plugin Okta e o Okta Identity Provider
<a name="odbc-okta-plugin"></a>

Esta página descreve como configurar o driver ODBC do Amazon Athena e o plugin Okta para adicionar o recurso de logon único (SSO) usando o provedor de identidade Okta.

## Pré-requisitos
<a name="odbc-okta-plugin-prerequisites"></a>

A conclusão das etapas neste tutorial requer o seguinte:
+ Driver ODBC do Amazon Athena. Para obter os links para baixar, consulte [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).
+ Uma função do IAM que você deseje usar com o SAML. Para obter mais informações, consulte [Criar uma função para a federação SAML 2.0](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) no *Guia do usuário do IAM*.
+ Uma conta do Okta. Para obter informações, acesse [Okta.com](https://www.okta.com/).

## Criar uma integração de aplicações no Okta
<a name="odbc-okta-plugin-creating-an-app-integration-in-okta"></a>

Primeiro, use o painel do Okta para criar e configurar uma aplicação SAML 2.0 para autenticação única no Athena. Você pode usar uma aplicação Redshift existente no Okta para configurar o acesso ao Athena.

**Criar uma integração de aplicações no Okta**

1. Faça login na página de administração da conta em [Okta.com](https://www.okta.com/).

1. No painel de navegação, escolha **Applications** (Aplicações), **Applications** (Aplicações).

1. Na página **Applications** (Aplicações), escolha **Browse App Catalog** (Navegar pelo App Catalog).

1. Na página **Browse App Integration Catalog** (Navegar pelo catálogo de integração de aplicações), na seção **Use Case** (Caso de uso), escolha **All Integrations** (Todas as integrações).

1. Na caixa de pesquisa, insira **Amazon Web Services Redshift** e escolha **Amazon Web Services Redshift SAML**.

1. Escolha **Add Integration** (Adicionar integração).  
![\[Escolha Add integration (Adicionar integração).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-1.png)

1. Na seção **General Settings Required** (Configurações gerais obrigatórias), em **Application label** (Rótulo da aplicação), insira um nome para a aplicação. Este tutorial usa o nome **Athena-ODBC-Okta**.  
![\[Insira um nome para a aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-2.png)

1. Selecione **Concluído**.

1. Na página da aplicação no Okta (por exemplo, **Atena-ODBC-Okta**), escolha **Sign On** (Fazer logon).  
![\[Escolha a guia Sign On (Fazer logon).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-3.png)

1. Na seção **Settings** (Configurações), escolha **Edit** (Editar).  
![\[Escolha Editar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-4.png)

1. Na seção **Advanced Sign-on Settings** (Configurações avançadas de logon), configure os valores a seguir.
   + Em **IdP ARN and Role ARN** (ARN do IdP e ARN do perfil), insira o ARN do IDP da AWS e o ARN do perfil como valores separados por vírgulas. Para obter mais informações sobre o formato da função do IAM, consulte [Configurar asserções SAML para a resposta de autenticação](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html) no *Guia do usuário do IAM*.
   + Em **Session Duration** (Duração da sessão), insira um valor entre 900 e 43.200 segundos. Este tutorial usa o padrão de 3.600 (uma hora).  
![\[Insira as configurações avançadas de logon.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-5.png)

   O Athena não utiliza as configurações **DbUser Format** (Formato DbUser), **AutoCreate** e **Allowed DBGroups** (DBGroups permitidos). Não é necessário configurá-las.

1. Selecione **Salvar**.

## Recuperar informações de configuração de ODBC do Okta
<a name="odbc-okta-plugin-retrieve-odbc-configuration-information-from-okta"></a>

Agora que você criou a aplicação no Okta, já pode recuperar o ID da aplicação e o URL do host do IdP. Eles serão necessários posteriormente para configurar o ODBC para conexão com o Athena.

**Recuperar informações de configuração de ODBC do Okta**

1. Escolha a guia **General** (Geral) da aplicação no Okta e role para baixo até a seção **App Embed Link** (Link de incorporação da aplicação).  
![\[O URL do link de incorporação da aplicação no Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-6.png)

   O URL do **link de incorporação** está no seguinte formato:

   ```
   https://trial-1234567.okta.com/home/amazon_aws_redshift/Abc1de2fghi3J45kL678/abc1defghij2klmNo3p4
   ```

1. No URL do **link de incorporação**, extraia e salve as seguintes partes:
   + O primeiro segmento depois de `https://`, até e incluindo `okta.com` (por exemplo, **trial-1234567.okta.com**). Esse é seu host de IdP.
   + Os dois últimos segmentos do URL, inclusive a barra no meio. Os segmentos são duas cadeias de 20 caracteres com uma mistura de números e letras maiúsculas e minúsculas (por exemplo, **Abc1de2fghi3J45kL678/abc1defghij2klmNo3p4**). Esse é o ID da aplicação.

## Adicionar um usuário à aplicação no Okta
<a name="odbc-okta-plugin-add-a-user-to-the-okta-application"></a>

Agora você já pode adicionar um usuário à aplicação no Okta.

**Adicionar um usuário à aplicação no Okta**

1. No painel de navegação à esquerda, escolha **Directory** (Diretório) e **People** (Pessoas).

1. Escolha **Add person** (Adicionar pessoa).  
![\[Escolha Add person (Adicionar pessoa).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-7.png)

1. Na caixa de diálogo **Add Person** (Adicionar pessoa), insira as informações a seguir.
   + Insira os valores em **First name** (Nome) e **Last name** (Sobrenome). Este tutorial usa **test user**.
   + Insira os valores de **Username** (Nome de usuário) e **Primary email** (E-mail principal). Este tutorial usa **test@amazon.com** para ambos. Os requisitos de segurança para senhas podem variar.  
![\[Insira credenciais de usuário.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-8.png)

1. Escolha **Salvar**.

Agora você já pode atribuir o usuário criado à aplicação.

**Atribuir um usuário à aplicação:**

1. No painel de navegação, escolha **Applications** (Aplicações), **Applications** (Aplicações) e escolha o nome da aplicação (por exemplo, **Atena-ODBC-Okta**).

1. Escolha **Assign** (Atribuir) e depois escolha **Assign to People** (Atribuir a pessoas).  
![\[Escolha Assign to People (Atribuir a pessoas).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-9.png)

1. Escolha a opção **Assign** (Atribuir) para o usuário e escolha **Done** (Concluído).  
![\[Escolha Assign (Atribuir) e Done (Concluído).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-10.png)

1. No prompt, escolha **Save and Go Back** (Salvar e voltar). A caixa de diálogo exibe o status do usuário como **Assigned** (Atribuído).

1. Selecione **Concluído**.

1. Escolha a guia **Sign On** (Fazer logon).

1. Role para baixo até a seção **SAML Signing Certificates** (Certificados de assinatura SAML).

1. Escolha **Ações**.

1. Abra o menu de contexto (clique com o botão direito) em **View IdP metadata** (Visualizar metadados do IdP) e escolha a opção do navegador para salvar o arquivo.

1. Salve o arquivo com uma extensão `.xml`.  
![\[Salvar metadados do IdP em um arquivo XML local.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-11.png)

## Criar um perfil e um provedor de identidade SAML da AWS
<a name="odbc-okta-plugin-create-an-aws-saml-identity-provider-and-role"></a>

Agora você já pode carregar o arquivo XML de metadados no console do IAM na AWS. Esse arquivo será usado para criar um perfil e um provedor de identidade do AWS SAML. Use uma conta de administrador de produtos da AWS para executar essas etapas.

**Criar um perfil e um provedor de identidade SAML na AWS**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM, em [https://console.aws.amazon.com/IAM/](https://console.aws.amazon.com/IAM/).

1. No painel de navegação, escolha **Identity providers (Provedores de identidade)** e, em seguida **Add provider (Adicionar provedor)**.  
![\[Escolha Add provider (Adicionar provedor).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-12.png)

1. Na página **Add an Identity provider** (Adicionar um provedor de identidade), em **Configure provider** (Configurar provedor), insira as informações a seguir.
   + Em **Provider type** (Tipo de provedor), escolha **SAML**.
   + Em **Provider name** (Nome do provedor), insira um nome para o provedor (por exemplo, ** AthenaODBCOkta**).
   + Em **Metadata document** (Documento de metadados), use a opção **Choose file** (Escolher arquivo) para carregar o arquivo XML de metadados do provedor de identidade (IdP) que você baixou.  
![\[Insira informações do provedor de identidade.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-13.png)

1. Escolha **Add provider** (Adicionar provedor).

### Criar um perfil do IAM para acessar o Athena e o Amazon S3
<a name="odbc-okta-plugin-creating-an-iam-role-for-athena-and-amazon-s3-access"></a>

Agora você já pode criar um perfil do IAM para acessar o Athena e o Amazon S3. Você atribuirá esse perfil ao usuário. Dessa forma, você poderá fornecer ao usuário acesso de logon único ao Athena.

**Criar uma perfil do IAM para as tarefas**

1. No painel de navegação do console do IAM, escolha **Roles** (Funções) e **Create role** (Criar função).  
![\[Selecione Criar perfil.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-14.png)

1. Na página **Create role** (Criar perfil), escolha as seguintes opções:
   + Em **Select type of trusted entity** (Selecionar tipo de entidade confiável), escolha **SAML 2.0 Federation**.
   + Em **SAML 2.0–based provider** (Provedor baseado no SAML 2.0), escolha o provedor de identidade SAML que você criou (por exemplo, **AthenaODBCOkta**).
   + Selecione **Permitir acesso programático e pelo Console de gerenciamento da AWS**.  
![\[Escolha as opções na página Create role (Criar perfil).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-15.png)

1. Escolha **Próximo**.

1. Na página **Add Permissions** (Adicionar permissões), em **Filter policies** (Filtrar políticas), insira **AthenaFull** e pressione ENTER.

1. Selecione a política gerenciada `AmazonAthenaFullAccess` e escolha **Next** (Próximo).  
![\[Escolha a política gerenciada AmazonAthenaFullAccess.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-16.png)

1. Na página **Name, review, and create** (Nomear, revisar e criar), em **Role name** (Nome do perfil), insira um nome para o perfil (por exemplo, **Athena-ODBC-OktaRole**) e escolha **Create role** (Criar perfil).

## Configurar a conexão ODBC do Okta com o Athena
<a name="odbc-okta-plugin-configuring-the-okta-odbc-connection-to-athena"></a>

Agora você já pode configurar a conexão ODBC do Okta com o Athena usando o programa ODBC Data Sources no Windows.

**Configurar sua conexão ODBC do Okta com o Athena**

1. No Windows, inicie o programa **ODBC Data Sources** .

1. No programa **ODBC Data Source Administrator**, escolha**Add** (Adicionar).  
![\[Escolha Adicionar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-17.png)

1. Escolha **Simba Athena ODBC Driver** (Driver ODBC do Simba Athena) e depois escolha **Finish** (Finalizar).  
![\[Escolha o driver ODBC do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-18.png)

1. Na caixa de diálogo **Simba Athena ODBC Driver DSN Setup** (Configuração do driver DSN do Simba Athena), insira os valores descritos.
   + Para **Data Source Name** (Nome da fonte de dados), insira um nome para a fonte de dados (por exemplo, **Athena ODBC 64**).
   + Em **Description** (Descrição), insira uma descrição para a origem dos dados.
   + Em **Região da AWS**, insira a Região da AWS que você está usando (por exemplo, **us-west-1**).
   + Para **S3 Output Location**, (Local de saída do S3), insira o caminho do Amazon S3 onde deseja que sua saída seja armazenada.  
![\[Insira valores para configurar o nome da fonte de dados.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-19.png)

1. Escolha **Authentication Options** (Opções de autenticação).

1. Na caixa de diálogo **Authentication Options** (Opções de autenticação, escolha ou insira os valores a seguir.
   + Em **Authentication Type** (Tipo de autenticação), escolha **Okta**.
   + Em **User (Usuário)**, insira o nome de usuário do Okta.
   + Em **Password (Senha)**, insira sua senha do Okta.
   + Em **IdP Host** (Host de IdP), insira o valor registrado anteriormente (por exemplo, **trial-1234567.okta.com**).
   + Em **IdP Port** (Porta IdP), insira **443**.
   + Em **App ID** (ID da aplicação), insira o valor registrado anteriormente (os dois últimos segmentos do link de incorporação do Okta).
   + Em **Okta App Name** (Nome da aplicação no Okta), insira **amazon\$1aws\$1redshift**.  
![\[Insira as opções de autenticação.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/odbc-okta-plugin-20.png)

1. Escolha **OK**.

1. Escolha **Test** (Testar) para testar a conexão ou **OK** para concluir.

# Configurar Single Sign-On com uso de ODBC, SAML 2.0 e o provedor de identidade Okta
<a name="okta-saml-sso"></a>

Para se conectar a origens de dados, você pode usar o Amazon Athena com provedores de identidade (IdPs) como PingOne, Okta, OneLogin e outros. A partir do driver Athena ODBC versão 1.1.13 e do driver Athena JDBC versão 2.0.25, está incluído um plugin SAML de navegador que você pode configurar para trabalhar com qualquer provedor de SAML 2.0. Este tópico mostra como configurar o driver ODBC do Amazon Athena e o plug-in SAML baseado em navegador para adicionar o recurso de autenticação única (SSO) usando o provedor de identidade Okta.

## Pré-requisitos
<a name="okta-saml-sso-prerequisites"></a>

A conclusão das etapas neste tutorial requer o seguinte:
+ Driver Athena ODBC versão 1.1.13 ou posterior. As versões 1.1.13 e posteriores incluem suporte a SAML no navegador. Para obter os links de download, consulte [Conectar-se ao Amazon Athena com ODBC](https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html).
+ Uma função do IAM que você deseje usar com o SAML. Para obter mais informações, consulte [Criar uma função para a federação SAML 2.0](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) no *Guia do usuário do IAM*.
+ Uma conta do Okta. Para obter informações, acesse [okta.com](https://www.okta.com/).

## Criar uma integração de aplicações no Okta
<a name="okta-saml-sso-creating-an-app-integration-in-okta"></a>

Primeiro, use o painel do Okta para criar e configurar uma aplicação SAML 2.0 para autenticação única no Athena.

**Para usar o painel do Okta para configurar a autenticação única para o Athena**

1. Faça login na página de administração do Okta em `okta.com`.

1. No painel de navegação, escolha **Applications** (Aplicações), **Applications** (Aplicações).

1. Na página **Applications** (Aplicações), escolha **Create App Integration** (Criar integração de aplicação).  
![\[Selecione Create App Integration (Criar integração de aplicações).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-1.png)

1. Na caixa de diálogo **Create a new app integration** (Criar uma nova integração de aplicações) para **Sign-in method** (Método de login), selecione**SAML 2.0** e, depois, escolha **Next** (Próximo).  
![\[Selecione SAML 2.0\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-2.png)

1. Na página **Create SAML Integration** (Criar integração SAML), na seção **General Settings** (Configurações gerais) insira um nome para a aplicação. Este tutorial usa o nome **Athena SSO**.  
![\[Insira um nome para a aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-3.png)

1. Escolha **Próximo**.

1. Na página **Configure SAML** (Configurar o SAML), na seção **SAML Settings** (Configurações do SAML), insira os seguintes valores:
   + Para **Single sign on URL**, (URL de autenticação única), insira **http://localhost:7890/athena**
   + Para **Audience URI**, (URI do público), insira **urn:amazon:webservices**  
![\[Insira as configurações do SAML.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-4.png)

1. Para **Attribute Statements (optional)** (Instruções de atributo (opcional)), insira os dois pares nome/valor a seguir. Esses são atributos de mapeamento obrigatórios.
   + Para **Name** (Nome), insira o seguinte URL:

     **https://aws.amazon.com/SAML/Attributes/Role**

     Para **Value** (Valor) insira o nome da função do IAM. Para obter mais informações sobre o formato da função do IAM, consulte [Configurar asserções SAML para a resposta de autenticação](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html) no *Guia do usuário do IAM*.
   + Para **Name** (Nome), insira o seguinte URL:

     **https://aws.amazon.com/SAML/Attributes/RoleSessionName**

     Em **Valor**, insira **user.email**.  
![\[Insira os atributos SAML para o Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-5.png)

1. Escolha **Next (Próximo)** e, em seguida, escolha **Finish (Concluir)**. 

   Quando o Okta cria a aplicação, ele também cria o URL de login que você recuperará em seguida.

## Obter o URL de login no painel do Okta
<a name="okta-saml-sso-getting-the-login-url-from-the-okta-dashboard"></a>

Agora que a aplicação foi criada, você pode obter o URL de login e outros metadados no painel do Okta.

**Obter o URL de login no painel do Okta**

1. No painel de navegação do Okta, escolha **Applications** (Aplicações), **Applications** (Aplicações).

1. Escolha a aplicação para a qual deseja encontrar o URL de login (por exemplo, **AthenaSSO**).

1. Na página da aplicação, selecione **Sign On** (Logon).  
![\[Escolha Sign On (Logon).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-6.png)

1. Escolha **View Setup Instructions** (Exibir instruções de configuração).  
![\[Escolha View Setup Instructions (Exibir instruções de configuração).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-7.png)

1. Na página **How to Configure SAML 2.0 for Athena SSO** (Como configurar o SAML 2.0 para o Athena SSO), localize o URL para **Identity Provider Issuer** (Emissor do provedor de identidade). Em algumas lugares no painel do Okta, esse URL é referenciado como **SAML issuer ID** (ID do emissor do SAML).  
![\[O valor para Identity Provider Issuer (Emissor do provedor de identidade).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-8.png)

1. Copie ou armazene o valor de **Identity Provider Single Sign-On URL** (URL de logon único do provedor de identidade). 

   Na próxima seção, quando configurar a conexão ODBC, você fornecerá esse valor como o parâmetro de conexão **Login URL** (URL de login) para o plug-in SAML do navegador.

## Configurar a conexão ODBC SAML do navegador com o Athena
<a name="okta-saml-sso-configuring-the-browser-saml-odbc-connection-to-athena"></a>

Agora você está pronto para configurar a conexão SAML do navegador com o Athena usando o programa ODBC Data Sources no Windows.

**Para configurar a conexão ODBC SAML do navegador com o Athena**

1. No Windows, inicie o programa **ODBC Data Sources** .

1. No programa **ODBC Data Source Administrator**, escolha**Add** (Adicionar).  
![\[Escolha Adicionar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-9.png)

1. Escolha **Simba Athena ODBC Driver** (Driver ODBC do Simba Athena) e depois escolha **Finish** (Finalizar).  
![\[Selecione Simba Athena Driver (Driver do Simba Athena)\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-10.png)

1. Na caixa de diálogo **Simba Athena ODBC Driver DSN Setup** (Configuração do driver DSN do Simba Athena), insira os valores descritos.  
![\[Insira os valores de configuração do DSN.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-11.png)
   + Para **Data Source Name** (Nome da origem de dados), insira um nome para a origem dos dados (por exemplo, **Athena ODBC 64**).
   + Em **Description** (Descrição), insira uma descrição para a origem dos dados.
   + Para **Região da AWS**, insira a Região da AWS que você está usando (por exemplo, **us-west-1**).
   + Para **S3 Output Location**, (Local de saída do S3), insira o caminho do Amazon S3 onde deseja que sua saída seja armazenada.

1. Escolha **Authentication Options** (Opções de autenticação).

1. Na caixa de diálogo **Authentication Options** (Opções de autenticação, escolha ou insira os valores a seguir.  
![\[Insira as opções de autenticação.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/okta-saml-sso-12.png)
   + Para **Authentication Type** (Tipo de autenticação), escolha **BrowserSAML**.
   + Para **Login URL** (URL de login), insira o **Identity Provider Single Sign-On URL** (URL de autenticação única do provedor de identidade) que você obteve no painel do Okta.
   + Em **Listen Port** (Porta de escuta), insira **7890**.
   + Para **Timeout (sec)** (Tempo limite (s)), insira um valor de tempo limite de conexão em segundos.

1. Escolha **OK** para fechar as **Authentication Options** (Opções de autenticação).

1. Selecione **Test** (Testar) para testar a conexão ou **OK** para finalizar.

# Usar o conector do Power BI para Amazon Athena
<a name="connect-with-odbc-and-power-bi"></a>

Nos sistemas operacionais Windows, você pode usar o conector do Microsoft Power BI para Amazon Athena para analisar os dados do Amazon Athena no Microsoft Power BI Desktop. Para obter informações sobre o Power BI, consulte [Microsoft Power BI](https://powerbi.microsoft.com/). Depois de publicar o conteúdo no serviço do Power BI, você pode usar a versão de julho de 2021 ou mais recente do [gateway do Power BI](https://powerbi.microsoft.com/gateway/) para manter o conteúdo atualizado em operações sob demanda ou agendadas.

## Pré-requisitos
<a name="connect-with-odbc-and-power-bi-prerequisites"></a>

Antes de começar, verifique se o seu ambiente atende aos requisitos a seguir. O driver ODBC do Amazon Athena é obrigatório.
+ [Conta da AWS](https://aws.amazon.com/)
+ [Permissões para usar o Athena](policy-actions.md)
+ [Driver ODBC para Amazon Athena](connect-with-odbc.md)
+ [Power BI Desktop](https://powerbi.microsoft.com/en-us/desktop/)

## Recursos permitidos
<a name="connect-with-odbc-and-power-bi-capabilities-supported"></a>
+ **Importação**: as tabelas e colunas selecionadas são importadas para o Power BI Desktop para consulta.
+ **DirectQuery**: os dados não são importados nem copiados para o Power BI Desktop. O Power BI Desktop consulta diretamente a origem dos dados subjacente.
+ **Gateway do Power BI**: um gateway de dados on-premises na Conta da AWS que funciona como uma ponte entre o serviço do Microsoft Power BI e o Athena. O gateway é necessário para ver seus dados no Serviço do Microsoft Power BI.

## Conectar ao Amazon Athena
<a name="connect-with-odbc-and-power-bi-connect-to-amazon-athena"></a>

Para conectar o Power BI Desktop aos dados do Amazon Athena, siga as etapas abaixo.

**Para se conectar aos dados do Athena pelo Power BI Desktop**

1. Inicie o Power BI Desktop.

1. Execute um destes procedimentos:
   + Selecione **File** (Arquivo), **Get Data** (Obter dados)
   + Na faixa de opções **Home** (Início), escolha **Get Data** (Obter dados).

1. Na caixa de pesquisa, digite **Athena**.

1. Selecione **Amazon Athena** e, depois, **Connect** (Conectar).  
![\[Escolher o conector do Amazon Athena\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-with-odbc-and-power-bi-1.png)

1. Na página de conexão do **Amazon Athena**, insira as informações a seguir.
   + Em **DSN**, digite o nome do DSN do ODBC que deseja usar. Para obter instruções sobre como configurar o DSN, consulte a [Documentação do driver ODBC](connect-with-odbc-driver-and-documentation-download-links.md#connect-with-odbc-driver-documentation).
   + Em **Data Connectivity mode** (Modo de conectividade de dados), escolha um modo apropriado ao seu caso de uso, seguindo estas diretrizes gerais:
     + Para conjuntos de dados menores, escolha **Import** (Importar). Ao usar o modo de importação, o Power BI trabalha com o Athena para importar o conteúdo de todo o conjunto de dados para uso nas suas visualizações.
     + Para conjuntos de dados maiores, escolha **DirectQuery**. No modo DirectQuery, os dados não são baixados na sua estação de trabalho. Enquanto você cria ou interage com uma visualização, o Microsoft Power BI trabalha com o Athena para consultar dinamicamente a origem dos dados subjacente de modo que você sempre veja os dados atuais. Para obter mais informações sobre o DirectQuery, consulte [Use DirectQuery in Power BI desktop](https://docs.microsoft.com/power-bi/connect-data/desktop-use-directquery) (Usar o DirectQuery no Power BI Desktop) na documentação da Microsoft.  
![\[Inserir suas informações de conectividade de dados\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-with-odbc-and-power-bi-2.png)

1. Escolha **OK**.

1. No prompt para configurar a autenticação da origem dos dados, escolha **Use Data Source Configuration** (Usar configuração da origem dos dados) ou **AAD Authentication** (Configuração AAD) e, depois, **Connect** (Conectar).  
![\[Escolher um método de autenticação da origem dos dados\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-with-odbc-and-power-bi-3.png)

   Seu catálogo de dados, seus bancos de dados e suas tabelas aparecem na caixa de diálogo **Navigator** (Navegador).  
![\[O Navegador exibe seus dados\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-with-odbc-and-power-bi-4.png)

1. No painel **Display Options** (Opções de exibição), marque a caixa de seleção do conjunto de dados que deseja usar.

1. Se você quiser transformar o conjunto de dados antes de importá-lo, vá para a parte inferior da caixa de diálogo e escolha **Transform Data** (Transformar dados). Esse procedimento abre o Editor do Power Query para você filtrar e refinar o conjunto de dados que deseja usar.

1. Escolha **Load**. Após a conclusão do carregamento, você poderá criar visualizações conforme mostrado na imagem a seguir. Se você selecionou **DirectQuery** como o modo de importação, o Power BI emite uma consulta ao Athena para a visualização solicitada.  
![\[Visualização de dados de exemplo\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/connect-with-odbc-and-power-bi-5.png)

## Configurar um gateway on-premises
<a name="connect-with-odbc-and-power-bi-gateway-setup"></a>

Você pode publicar painéis e conjuntos de dados no serviço do Power BI para que outros usuários possam interagir com eles por meio de aplicações Web, móveis e incorporadas. Para ver seus dados no Serviço do Microsoft Power BI, instale o gateway de dados on-premises do Microsoft Power BI na sua Conta da AWS. O gateway funciona como uma ponte entre o Serviço do Microsoft Power BI e o Athena.

**Para baixar, instalar e testar um gateway de dados on-premises**

1. Acesse a página de [download do gateway do Microsoft Power BI](https://powerbi.microsoft.com/en-us/gateway/) e escolha o modo pessoal ou padrão. O modo pessoal é útil para testar localmente o conector do Athena. O modo padrão é ideal em uma configuração de produção multiusuário.

1. Para instalar um gateway on-premises (modo pessoal ou padrão), consulte [Instalar um gateway de dados local](https://docs.microsoft.com/en-us/data-integration/gateway/service-gateway-install) na documentação da Microsoft.

1. Para testar o gateway, siga as etapas em [Usar conectores de dados personalizados com o gateway de dados on-premises](https://docs.microsoft.com/en-us/power-bi/connect-data/service-gateway-custom-connectors) na documentação da Microsoft.

Para obter mais informações sobre gateways de dados on-premises, consulte os recursos da Microsoft a seguir.
+ [O que é um gateway de dados on-premises?](https://docs.microsoft.com/en-us/power-bi/connect-data/service-gateway-onprem)
+ [Diretrizes para implantar um gateway de dados para o Power BI](https://docs.microsoft.com/en-us/power-bi/connect-data/service-gateway-deployment-guidance)

Para ver um exemplo de configuração do gateway do Power BI para uso com o Athena, consulte o artigo do blog sobre big data da AWS [Creating dashboards quickly on Microsoft Power BI using Amazon Athena](https://aws.amazon.com/blogs/big-data/creating-dashboards-quickly-on-microsoft-power-bi-using-amazon-athena/) (Criar painéis rapidamente no Microsoft Power BI usando o Amazon Athena).

# Usar a propagação de identidade confiável com drivers do Amazon Athena
<a name="using-trusted-identity-propagation"></a>

A propagação de identidade confiável fornece uma nova opção de autenticação para organizações que desejam centralizar o gerenciamento de permissões de dados e autorizar solicitações com base em sua identidade de IdP entre os limites do serviço. Com o Centro de Identidade do IAM, é possível configurar um IdP existente para gerenciar usuários e grupos e usar AWS Lake Formation para definir permissões de controle de acesso refinadas nos recursos do catálogo para essas identidades de IdP. O Athena oferece suporte à propagação de identidade ao consultar dados para auditar o acesso aos dados por identidades de IdP a fim de ajudar sua organização a atender aos requisitos regulatórios e de conformidade.

Agora você pode se conectar ao Athena usando os drivers de conectividade de banco de dados Java (JDBC) ou conectividade aberta de banco de dados (ODBC) com recursos de login único via Centro de Identidade do IAM. Quando você acessa o Athena a partir de ferramentas como PowerBI, Tableau ou DBeaver, sua identidade e permissões são propagadas automaticamente para o Athena por meio do Centro de Identidade do IAM. Isso significa que suas permissões individuais de acesso aos dados são aplicadas diretamente ao consultar dados, sem exigir etapas de autenticação separadas ou gerenciamento de credenciais.

Para administradores, esse recurso centraliza o controle de acesso por meio do Centro de Identidade do IAM e do Lake Formation, garantindo a aplicação consistente de permissões em todas as ferramentas de análise compatíveis conectadas ao Athena. Para começar, certifique-se de que sua organização tenha configurado o Centro de Identidade do IAM como sua fonte de identidade e tenha configurado as permissões de acesso aos dados apropriadas para seus usuários.

**Topics**
+ [

## Definições de chaves
](#using-trusted-identity-propagation-key-definitions)
+ [

## Considerações
](#using-trusted-identity-propagation-considerations)
+ [

## Pré-requisitos
](#using-trusted-identity-propagation-prerequisites)
+ [

# Conectar o Athena ao Centro de Identidade do IAM
](using-trusted-identity-propagation-setup.md)
+ [

# Configure e implante recursos usando AWS CloudFormation
](using-trusted-identity-propagation-cloudformation.md)

## Definições de chaves
<a name="using-trusted-identity-propagation-key-definitions"></a>

1. **Perfil de aplicação**: perfil para trocar tokens, recuperar o grupo de trabalho e o ARN da aplicação do Centro de Identidade do AWS gerenciado pelo cliente.

1. **Perfil de acesso**: perfil ser usado com drivers do Athena para executar fluxos de trabalho de clientes com credenciais aprimoradas de identidade. Isso significa que esse perfil é necessário para acessar serviços downstream.

1. **Aplicação gerenciada pelo cliente**: a aplicação do Centro de I dentidade do AWS IAM. Para obter mais informações, consulte [Aplicação gerenciada pelo cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps.html).

## Considerações
<a name="using-trusted-identity-propagation-considerations"></a>

1. Esse recurso funciona somente em regiões onde o Athena geralmente está disponível com propagação de identidade confiável. Para obter mais informações sobre disponibilidade, consulte [Considerações e limitações](https://docs.aws.amazon.com/athena/latest/ug/workgroups-identity-center.html).

1. Os drivers JDBC e ODBC são compatíveis com a propagação de identidade confiável com grupos de trabalho habilitados para o IAM.

1. É possível usar JDBC e ODBC como drivers autônomos ou com qualquer ferramenta de BI ou SQL com propagação de identidade confiável usando esse plug-in de autenticação.

## Pré-requisitos
<a name="using-trusted-identity-propagation-prerequisites"></a>

1. É necessário ter uma instância do Centro de Identidade do AWS IAM habilitada. Para obter mais informações, consulte [O que é o Centro de Identidade do IAM?](https://docs.aws.amazon.com/singlesignon/latest/userguide/identity-center-instances.html).

1. É necessário ter um provedor de identidade externo ativo e os usuários ou grupos devem existir no Centro de Identidade do AWS IAM. É possível provisionar seus usuários ou grupos de forma automática ou manual ou ainda via SCIM. Para obter mais informações, consulte [Provisionar um provedor de identidade externo no Centro de Identidade do IAM usando SCIM](https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-automatically.html).

1. Você deve conceder Permissões do Lake Formation a usuários ou grupos para catálogos, bancos de dados e tabelas. Para obter informações, consulte [Usar o Athena para consultar dados registrados no Lake Formation](https://docs.aws.amazon.com/athena/latest/ug/security-athena-lake-formation.html).

1. É necessário ter uma ferramenta de BI ou um cliente SQL em funcionamento para executar consultas do Athena usando o driver JDBC ou ODBC.

# Conectar o Athena ao Centro de Identidade do IAM
<a name="using-trusted-identity-propagation-setup"></a>

A seção a seguir lista o processo de conexão do Athena ao Centro de Identidade do IAM.

## Configurar um emissor de tokens confiável
<a name="using-trusted-identity-propagation-step1"></a>

Siga o guia [Configurar um emissor de tokens confiável](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) para configurar um emissor de tokens confiável. Isso criará um Centro de Identidade do AWS IAM.

**nota**  
Em **Tipo de provedor**, escolha **OpenID Connect**. Em **URL do provedor**, insira a URL do emissor do seu provedor de identidade. Em **Público**, especifique o ID do cliente emitido pelo provedor de identidade para sua aplicação.  
 

Copie o nome do recurso do aplicativo (ARN) do provedor de identidade do AWS IAM. Para obter mais informações, consulte [Provedores de identidade e federação](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html).

## Configurar perfis do IAM
<a name="using-trusted-identity-propagation-step2"></a>

### Configurar perfil de aplicação do IAM
<a name="using-trusted-identity-propagation-step2-application-role"></a>

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Perfis** e **Criar perfil**.

1. Em **Tipo de entidade confiável**, escolha **Política de confiança personalizada** da seguinte forma:

   1. Em **Entidade principal federada**, adicione o ARN do provedor de identidade do AWS IAM que você copiou durante a configuração do emissor de tokens confiável.

   1. Como condição da política, adicione o público do seu provedor de identidade federado externo.

1. Adicione a política em linha a seguir para conceder acesso ao usuário para as permissões [CreateTokenWithIAM](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html), [ListTagsForResource](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTagsForResource.html) e [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:ListTags*",
                   "sso:ListTags*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
As permissões `CreateTokenWithIam` são fornecidas na aplicação do Centro de Identidade do IAM gerenciada pelo cliente.

1. Copie o ARN para o perfil de aplicação.

### Configurar o perfil de acesso do IAM
<a name="using-trusted-identity-propagation-step2-access-role"></a>

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Perfis** e **Criar perfil**.

1. Em **Tipo de entidade confiável**, escolha **Política de confiança personalizada** da seguinte forma:

   1. Em **Entidade principal federada**, adicione o ARN do Centro de Identidade do AWS IAM copiado durante a configuração do emissor de tokens confiável.

   1. Em **Entidade principal da AWS**, adicione o ARN para o perfil de aplicação do AWS IAM copiado durante a configuração do perfil de aplicação do IAM.

1. Adicione a seguinte **política em linha** para conceder acesso a fluxos de trabalho do driver:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:StartQueryExecution",
                   "athena:GetQueryExecution",
                   "athena:GetQueryResults",
                   "athena:ListWorkGroups",
                   "athena:ListDataCatalogs",
                   "athena:ListDatabases",
                   "athena:ListTableMetadata"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:CreateTable",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:UpdateTable",
                   "glue:DeleteTable",
                   "glue:BatchDeleteTable",
                   "glue:GetTableVersion",
                   "glue:GetTableVersions",
                   "glue:DeleteTableVersion",
                   "glue:BatchDeleteTableVersion",
                   "glue:CreatePartition",
                   "glue:BatchCreatePartition",
                   "glue:GetPartition",
                   "glue:GetPartitions",
                   "glue:BatchGetPartition",
                   "glue:UpdatePartition",
                   "glue:DeletePartition",
                   "glue:BatchDeletePartition"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Copie o ARN para o perfil de acesso.

## Configurar a aplicação gerenciada pelo cliente do Centro de Identidade do AWS IAM
<a name="using-trusted-identity-propagation-step3"></a>

Para configurar a aplicação gerenciada pelo cliente, siga as etapas em [Configurar aplicações OAuth 2.0 gerenciadas pelo cliente para a propagação de identidade confiável](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html) com as considerações a seguir para o Athena.
+ Em **Tags**, adicione os seguintes pares de chave-valor:
  + **Chave**: **AthenaDriverOidcAppArn**
  + **Valor**: **AccessRoleARN** que foi copiado durante a configuração do perfil de acesso do IAM.
+ Ao [especificar as credenciais da aplicação](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html#customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2-specify-application-credentials), adicione o ARN para o perfil de aplicação do AWS IAM que você copiou durante a configuração do perfil de aplicação do IAM.
+ Em **Aplicações que podem receber solicitações**, escolha **AWS-Lake-Formation-AWS-Glue-Data-Catalog-<account-id>**.
+ Em **Escopos de acesso para aplicação**, selecione **lakeformation:query** para grupos de trabalho habilitados para IAM, ou **lakeformation:query**, **athena:workgroup:read\$1write** e **s3:access\$1grants:read\$1write** para grupos de trabalho habilitados para o Centro de Identidade.

## Configurar a associação de grupo de trabalho
<a name="using-trusted-identity-propagation-step4"></a>

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Escolha um grupo de trabalho na lista e abra a guia **Tags**. 

1. Escolha **Gerenciar tags** e insira o seguinte:

   1. **Chave** – `AthenaDriverOidcAppArn`

   1. **Valor**: o ARN da aplicação do Centro de Identidade do AWS IAM.

1. Escolha **Salvar**.

Depois que os administradores concluírem a configuração única, eles poderão distribuir detalhes essenciais da conexão aos usuários. Os usuários precisam desses cinco parâmetros obrigatórios para executar workloads SQL:

1. **ApplicationRoleARN**: o ARN do perfil de aplicação

1. **JwtWebIdentityToken**: o token JWT para verificação de identidade

1. **WorkgroupARN**: o ARN do grupo de trabalho do Athena

1. **JwtRoleSessionName**: o nome da sessão para o perfil JWT

1. **CredentialsProvider**: a configuração do provedor de credenciais

**nota**  
Simplificamos a configuração da string de conexão por meio de marcação estratégica. Ao marcar adequadamente o grupo de trabalho do Athena Centro de Identidade do AWS IAM e a aplicação gerenciada pelo cliente do , os administradores eliminam a necessidade de os usuários fornecerem `AccessRoleArn` e `CustomerIdcApplicationArn`. O plug-in lida com isso automaticamente usando o perfil de aplicação para localizar as tags necessárias e recuperar os valores de ARN correspondentes para seu fluxo de trabalho.   
Os administradores ainda podem fazer com que os usuários forneçam `AccessRoleArn` ou `CustomerIdcApplicationArn` na string de conexão ajustando as permissões do perfil de aplicação conforme necessário.

## Execute consultas usando drivers do Athena habilitados para propagação de identidade confiável
<a name="using-trusted-identity-propagation-step5"></a>

Baixe a versão mais recente do driver que deseja usar. Para obter mais informações sobre a instalação do JDBC, consulte [Conceitos básicos do driver JDBC 3.x](jdbc-v3-driver-getting-started.md). Você pode optar por instalar os drivers ODBC com base na plataforma compatível. Para obter mais informações, consulte [Conceitos básicos do driver ODBC 2.x](odbc-v2-driver-getting-started.md). Com base no driver que você deseja usar, forneça os parâmetros listados em:
+ [Parâmetros de conexão do plug-in de autenticação JDBC](jdbc-v3-driver-jwt-tip-credentials.md)
+ [Parâmetros de conexão do plug-in de autenticação ODBC](odbc-v2-driver-jwt-tip.md)

**nota**  
A propagação de identidade confiável com drivers só está disponível após a versão 3.6.0 no JDBC e a versão 2.0.5.0 no ODBC.

## Usar drivers do Athena e a propagação de identidade confiável com o DBeaver
<a name="using-trusted-identity-propagation-step6"></a>

1. Baixe o jar JDBC mais recente com dependências do Athena. Para obter mais informações, consulte [Driver JDBC 3.x do Athena](jdbc-v3-driver.md).

1. Abra a aplicação DBeaver em seu computador.

1. Navegue até o menu **Banco de dados** na parte superior da tela e escolha **Gerenciador de drivers**.

1. Escolha **Novo** e, em seguida, **Bibliotecas**.

1. Adicione o driver mais recente e escolha **Localizar classe**. Isso fornecerá um caminho de arquivo como `com.amazon.athena.jdbc.AthenaDriver`.

1. Abra a guia **Configurações** e forneça os campos a seguir

   1. **Nome do driver**: propagação de identidade confiável JDBC do Athena

   1. **Nome da classe** – `com.amazon.athena.jdbc.AthenaDriver`

   1. Selecione a opção **Sem autenticação**.

1. Escolha **Conectar a um banco de dados** e encontre a propagação de identidade confiável JDBC do Athena. Isso levará você ao URL do JDBC. Para obter mais informações, consulte [Configurar o driver](jdbc-v3-driver-getting-started.md#jdbc-v3-driver-configuring-the-driver).

1. Forneça os seguintes detalhes

   1. **Grupo de trabalho**: o grupo de trabalho no qual você deseja executar consultas. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html).

   1. **Região**: a Região da AWS onde as consultas serão executadas. Para conferir a lista de regiões, consulte [Amazon Athena endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/athena.html).

   1. **OutputLocation**: o local no Amazon S3 em que você deseja armazenar os resultados da consulta. Para obter informações sobre o local de saída, consulte [ResultConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html).

   1. **CredentialsProvider**: insira `JWT_TIP`.

   1. **ApplicationRoleArn**: o ARN do perfil para habilitar `AssumeRoleWithWebIdentity`. Para obter mais informações sobre perfis de ARN, consulte [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) na referência da API do AWS Security Token Service.

   1. **WorkgroupArn**: o ARN do grupo de trabalho no qual as consultas serão executadas. Ele deve ser o mesmo grupo de trabalho fornecido no campo **Grupo de trabalho**. Para obter mais informações sobre grupos de trabalho, consulte [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html).

   1. **JwtRoleSessionName**: o nome da sessão quando você usa as credenciais JWT para autenticação. Pode ser qualquer nome de sua escolha.

   1. **JwtWebIdentityToken**: o token JWT obtido de um provedor de identidade federado externo. Esse token é usado para autenticação no Athena.

      ```
      jdbc:athena://Workgroup=<value>;Region=<region>;OutputLocation=<location>;CredentialsProvider=JWT_TIP;ApplicationRoleArn=<arn>;WorkgroupArn=<arn>;JwtRoleSessionName=JDBC_TIP_SESSION;JwtWebIdentityToken=<token>;
      ```

1. Escolha **OK** e feche a janela. O DBeaver começará a carregar seus metadados após essa etapa e você deverá começar a ver seus catálogos, bancos de dados e tabelas sendo preenchidos.
**nota**  
Se a declaração de JTI estiver presente no token e você escolher **Testar conexão** antes de escolher **OK**, isso impedirá que a mesma JTI seja reutilizada para trocas de tokens. Para obter mais informações, consulte [Pré-requisitos e considerações para emissores de tokens confiáveis](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites). Para lidar com isso, o JDBC implementa um cache na memória cujo ciclo de vida depende da instância principal do driver. Para ODBC, opcionalmente, existe um [cache de arquivos](odbc-v2-driver-jwt-tip.md#odbc-v2-driver-jwt-tip-file-cache) que permite que credenciais temporárias sejam armazenadas em cache e reutilizadas para reduzir o número de tokens de identidade da web usados durante o ciclo de vida da sessão.

1. Abra o **Editor de consultas SQL** e comece a executar suas consultas. Consulte os [Logs do Cloudtrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) para verificar a identidade propagada do usuário.

# Configure e implante recursos usando AWS CloudFormation
<a name="using-trusted-identity-propagation-cloudformation"></a>

É possível configurar e implantar recursos usando modelos do CloudFormation para começar a usar a propagação de identidade confiável com os drivers do Athena conforme mostrado a seguir.

1. Baixe um modelo do CloudFormation para configurar a aplicação gerenciada pelo cliente do Centro de Identidade do IAM e os perfis de acesso junto com as tags do grupo de trabalho e da aplicação do Centro de Identidade do IAM. Você pode baixá-lo neste [link de modelo do CloudFormation](https://downloads.athena.us-east-1.amazonaws.com/drivers/CFNTemplate/AthenaDriversTrustedIdentityPropagationCFNTemplate.yaml)..

1. Execute o comando `create-stack` da AWS CLI para implantar a pilha do CloudFormation que provisionará os recursos configurados conforme mostrado a seguir.

   ```
   aws cloudformation create-stack \
       --stack-name my-stack \
       --template-url URL_of_the_file_that_contains_the_template_body \
       --parameters file://params.json
   ```

1. Para ver o status do provisionamento de recursos, navegue até o console do CloudFormation. Depois que a criação do cluster for concluída, visualize a nova aplicação do Centro de Identidade do IAM no console do Centro de Identidade. Os perfis do IAM podem ser visualizados no console do IAM. 

   As tags serão associadas ao grupo de trabalho e à aplicação do Centro de Identidade do IAM.

1. Com os perfis e a aplicação criados, é possível usar os drivers do Athena imediatamente. Para usar o driver JDBC, consulte [Parâmetros de conexão do plug-in de autenticação JDBC](jdbc-v3-driver-jwt-tip-credentials.md). Para usar o driver ODBC, consulte [Parâmetros de conexão do plug-in de autenticação ODBC](odbc-v2-driver-jwt-tip.md).

# Criar bancos de dados e tabelas
<a name="work-with-data"></a>

O Amazon Athena aceita um subconjunto de instruções Data Definition Language (DDL – Linguagem de definição de dados) e funções e operadores ANSI SQL para definir e consultar tabelas externas em que os dados residem no Amazon Simple Storage Service. 

Ao criar um banco de dados e uma tabela no Athena, você descreve o esquema e o local dos dados, o que os prepara na tabela para consulta em tempo real. 

Para melhorar a performance das consultas e reduzir os custos, recomendamos particionar os dados e usar formatos de coluna de código aberto para armazenamento no Amazon S3, como [Apache Parquet](https://parquet.apache.org) ou [ORC](https://orc.apache.org/). 

**Topics**
+ [Criar bancos de dados](creating-databases.md)
+ [Criar tabelas.](creating-tables.md)
+ [

# Nomear bancos de dados, tabelas e colunas
](tables-databases-columns-names.md)
+ [Escapar palavras-chave reservadas](reserved-words.md)

# Criar bancos de dados no Athena
<a name="creating-databases"></a>

Um banco de dados no Athena é um agrupamento lógico das tabelas que você cria nele. Antes de criar um banco de dados, você deve criar um local para a saída da consulta.

**Topics**
+ [

# Criar um local de saída de consulta
](creating-databases-prerequisites.md)
+ [

# Criar um banco de dados
](creating-databases-query-editor.md)

# Criar um local de saída de consulta
<a name="creating-databases-prerequisites"></a>

Se você ainda não tiver um local de saída de consulta configurado no Amazon S3, execute as seguintes etapas de pré-requisito para fazer isso.

**Para criar um local de saída da consulta**

1. Usando a mesma Região da AWS e a conta que você usa no Athena, siga as etapas (por exemplo, usando o console Amazon S3) para [criar um bucket no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) para armazenar os resultados das consultas do Athena. Você configurará esse bucket para ser o local de saída da consulta.

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se esta for a primeira vez que você acessa o console do Athena neste Região da AWS, escolha **Explore the query editor** (Explorar o editor de consultas) para abrir o editor de consultas. Do contrário, o Athena é aberto no editor de consultas.

1. Escolha **Edit Settings** (Editar configurações) para configurar um local para os resultados de consultas no Amazon S3.  
![\[Escolha Edit Settings.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-choose-view-settings.png)

1. Em **Manage settings** (Gerenciar configurações), faça um dos seguintes procedimentos:
   + Na caixa de texto **Query result location** (Localização dos resultados da consulta), insira o caminho para o bucket criado no Amazon S3 para resultados de consultas. Adicione o prefixo ao caminho `s3://`.
   + Escolha **Browse S3** (Navegar no S3), escolha o bucket do Amazon S3 que você criou na região atual e escolha **Choose** (Escolher).  
![\[Especifique um local no Amazon S3 para receber os resultados das consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-setting-results-location.png)

1. Escolha **Salvar**.

1. Selecione **Editor** para alternar para o editor de consultas.  
![\[Escolha Editor.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-choose-editor.png)

# Criar um banco de dados
<a name="creating-databases-query-editor"></a>

Depois de configurar um local de resultados de consulta, criar um banco de dados no editor de consultas do console Athena é simples.

**Para criar um banco de dados usando o editor de consultas do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Na guia **Editor**, insira o comando de linguagem de definição de idioma (DDL) `CREATE DATABASE myDataBase` do Hive. Substitua *myDatabase* pelo nome que você deseja usar. Para obter restrições sobre nomes de bancos de dados, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).

1. Selecione **Run** (Executar) ou pressione **Ctrl\$1ENTER**.

1. Para fazer com que seu banco de dados seja o banco de dados atual, selecione-o no menu **Database** (Banco de dados) à esquerda do editor de consultas.

Para obter informações sobre como controlar as permissões para bancos de dados do Athena, consulte [Configurar o acesso a bancos de dados e tabelas no AWS Glue Data Catalog](fine-grained-access-to-glue-resources.md).

# Criar tabelas no Athena
<a name="creating-tables"></a>

Para criar tabelas, é possível executar instruções DDL no console do Athena, usar o [formulário **Create table** (Criar tabela)](creating-tables-how-to.md#to-create-a-table-using-the-wizard) do Athena ou usar um driver JDBC ou ODBC. O Athena usa o Apache Hive para definir tabelas e criar bancos de dados, que são basicamente um namespace lógico de tabelas. O Athena oferece suporte a uma variedade de bibliotecas de serializador-desserializador (SerDe) para criação de tabelas para formatos de dados específicos. Para obter uma lista de bibliotecas SerDe compatíveis, consulte [Escolha de um SerDe para seus dados](supported-serdes.md).

Ao criar um banco de dados e uma tabela no Athena, você apenas descreve o esquema e o local onde os dados da tabela estão localizados no Amazon S3 para consulta em tempo de leitura. O Athena não modifica os dados no Amazon S3. Por isso, o banco de dados e a tabela têm um significado um pouco diferente do que o de sistemas de bancos de dados relacionais tradicionais porque os dados não são armazenados com a definição de esquema para o banco de dados e a tabela. 

O Athena armazena o esquema no AWS Glue Data Catalog e o utiliza para ler os dados quando você consulta a tabela usando SQL. Essa abordagem de *esquema na leitura*, que projeta um esquema em seus dados quando você executa uma consulta, elimina a necessidade de carregamento ou transformação de dados.

## Considerações e limitações
<a name="creating-tables-considerations-and-limitations"></a>

Estas são algumas limitações e considerações importantes sobre as tabelas no Athena.

### Considerações sobre o Amazon S3
<a name="s3-considerations"></a>

Ao criar uma tabela, você especifica o local de um bucket do Amazon S3 para os dados subjacentes usando a cláusula `LOCATION`. Considere o seguinte:
+ O Athena pode consultar somente a versão mais recente dos dados em um bucket versionado do Amazon S3, não as versões anteriores.
+ Você deve ter as permissões para trabalhar com os dados no local do Amazon S3. Para obter mais informações, consulte [Controlar o acesso ao Amazon S3 do Athena](s3-permissions.md).
+ O Athena permite consultar objetos armazenados com várias classes de armazenamento no mesmo bucket especificado pela cláusula `LOCATION`. Por exemplo, é possível consultar dados em objetos armazenados em classes diferentes de armazenamento (Standard, Standard-IA e Intelligent-Tiering) no Amazon S3.
+ O Athena é compatível com [buckets de pagamento a cargo do solicitante](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html). Para obter informações sobre como habilitar pagamento a cargo do solicitante para buckets com dados de origem que você pretende consultar no Athena, consulte [Criar um grupo de trabalho](creating-workgroups.md).
+ Você pode usar o Athena para consultar objetos restaurados do Amazon Glacier Flexible Retrieval (antigo Glacier) e das [classes de armazenamento do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-glacier) do Amazon Glacier Deep Archive, mas essa capacidade deverá ser habilitada em cada tabela separadamente. Se você não habilitar o atributo em uma tabela antes de executar a consulta, o Athena ignorará todos os objetos do Amazon Glacier Flexible Retrieval e do Amazon Glacier Deep Archive dessa tabela durante a execução da consulta. Para obter mais informações, consulte [Consultar os objetos restaurados do Amazon Glacier](querying-glacier.md).

  Para obter informações sobre classes de armazenamento, consulte [Classes de armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html), [Alterar a classe de armazenamento de um objeto no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/ChgStoClsOfObj.html), [Transição para a classe de armazenamento GLACIER (arquivamento de objeto)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#before-deciding-to-archive-objects) e [Buckets de pagamento pelo solicitante](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Se você realizar consultas nos buckets do Amazon S3 com um grande número de objetos, e os dados não estiverem particionados, essas consultas poderão afetar os limites de taxa de solicitações Get no Amazon S3 e gerar exceções no Amazon S3. Para evitar erros, particione seus dados. Considere também ajustar suas taxas de solicitações do Amazon S3. Para obter mais informações, consulte [Taxas de solicitações e considerações de performance](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html).

Para obter mais informações sobre como especificar um local para seus dados no Amazon S3, consulte [Especificar um local de tabela no Amazon S3](tables-location-format.md).

### Outras considerações
<a name="creating-tables-other-considerations"></a>
+ **Não há suporte a transformações de dados transacionais**: o Athena não permite operações baseadas em transações (como as disponíveis no Hive ou no Presto) nos dados de tabelas. Para obter uma lista completa de palavras-chave não compatíveis, consulte [DDL incompatível](unsupported-ddl.md).
+ **As operações em tabelas são ACID**: quando você cria, atualiza ou exclui tabelas, essas operações têm compatibilidade com ACID garantida. Por exemplo, se vários usuários ou clientes tentarem criar ou alterar uma tabela existente ao mesmo tempo, somente um será bem-sucedido.
+ **As tabelas são EXTERNAL**: exceto ao criar tabelas do [Iceberg](querying-iceberg-creating-tables.md), use sempre a palavra-chave `EXTERNAL`. Se você usar `CREATE TABLE` sem a palavra-chave `EXTERNAL` para tabelas que não são do Iceberg, o Athena emitirá um erro. Quando você descarta uma tabela no Athena, apenas os metadados da tabela são removidos, os dados permanecem no Amazon S3.
+ **Comprimento máximo de string de consulta**: o tamanho máximo da string de consulta é 256 KB.
+ Se você usar a operação de API do AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) ou o modelo [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) do CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedade `TableType` e, depois, executar uma consulta DDL, como `SHOW CREATE TABLE` ou `MSCK REPAIR TABLE`, poderá receber a mensagem de erro FALHA: o nome de NullPointerException é nulo. 

  Para resolver o erro, especifique um valor para o atributo [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` como parte da chamada de API `CreateTable` do AWS Glue ou do [modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). Os valores possíveis para `TableType` são `EXTERNAL_TABLE` ou `VIRTUAL_VIEW`.

  Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue `CreateTable` ou o modelo do `AWS::Glue::Table`. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedade `TableType` será definida automaticamente para você. 

**Topics**
+ [

## Considerações e limitações
](#creating-tables-considerations-and-limitations)
+ [

# Criar tabelas usando o AWS Glue ou o console do Athena
](creating-tables-how-to.md)
+ [

# Especificar um local de tabela no Amazon S3
](tables-location-format.md)
+ [

# Mostrar informações da tabela após a criação
](creating-tables-showing-table-information.md)

# Criar tabelas usando o AWS Glue ou o console do Athena
<a name="creating-tables-how-to"></a>

É possível criar tabelas no Athena usando o AWS Glue, o formulário para adicionar tabela ou executando uma instrução DDL no editor de consultas do Athena.

## Para criar uma tabela usando o crawler do AWS Glue
<a name="to-create-a-table-using-the-aws-glue-data-catalog"></a>

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas, ao lado de **Tabelas e visualizações**, escolha **Criar** e, em seguida, selecione **Crawler do AWS Glue**. 

1. Siga as etapas contidas na página **Add crawler** (Adicionar crawler) do console do AWS Glue para adicionar um crawler. 

   Para obter mais informações, consulte [Usar um crawler para adicionar uma tabela](schema-crawlers.md).

## Para criar uma tabela usando o formulário para criar tabela do Athena
<a name="to-create-a-table-using-the-wizard"></a>

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas, ao lado de **Tables and views** (Tabelas e visualizações), escolha **Create** (Criar) e, em seguida, escolha **S3 bucket data** (Dados do bucket do S3).

1. No formulário **Create Table From S3 bucket data** (Criar tabela com base em dados de bucket do S3), insira as informações para criar sua tabela e escolha **Create table** (Criar tabela). Para obter mais informações sobre os campos no formulário, consulte [Usar um formulário no console do Athena para adicionar uma tabela do AWS Glue](data-sources-glue-manual-table.md).

## Para criar uma tabela usando uma instrução CREATE TABLE no editor de consultas do Athena
<a name="to-create-a-table-using-hive-ddl"></a>

1. No menu **Database (Banco de dados)**, escolha o banco de dados para o qual deseja criar uma tabela. Se você não especificar um banco de dados na instrução `CREATE TABLE`, a tabela será criada no banco de dados atualmente selecionado no editor de consultas.

1. No editor de consultas insira uma instrução conforme mostrado no exemplo a seguir e, em seguida, escolha **Executar**.

   ```
   CREATE EXTERNAL TABLE myopencsvtable (
      firstname string,
      lastname string,
      job string,
      country string
   )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
   WITH SERDEPROPERTIES (
      'separatorChar' = ',',
      'quoteChar' = '"',
      'escapeChar' = '\\'
      )
   STORED AS TEXTFILE
   LOCATION 's3://amzn-s3-demo-bucket/mycsv/';
   ```

# Especificar um local de tabela no Amazon S3
<a name="tables-location-format"></a>

Quando você executa uma consulta `CREATE TABLE` no Athena, ele registra a tabela no Catálogo de Dados do AWS Glue, que é onde o Athena armazena os metadados.

Para especificar o caminho para os seus dados no Amazon S3, use a propriedade `LOCATION` na sua instrução `CREATE TABLE`, conforme o exemplo a seguir:

```
CREATE EXTERNAL TABLE `test_table`(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION s3://amzn-s3-demo-bucket/folder/
```
+ Para obter informações sobre a nomenclatura de buckets, consulte [Restrições e limitações do bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Para obter informações sobre o uso de pastas no Amazon S3, consulte [Usar pastas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html) no *Guia do usuário do Amazon Simple Storage Service*. 

O `LOCATION` no Amazon S3 especifica *todos* os arquivos que representam sua tabela. 

**Importante**  
O Athena lê *todos* os dados armazenados na pasta do Amazon S3 que você especificar. Se você tem dados que *não* deseja que o Athena leia, não os armazene na mesma pasta do Amazon S3 que os dados que deseja que o Athena leia.

Ao especificar o `LOCATION` na instrução `CREATE TABLE`, use as seguintes diretrizes:
+ Use uma barra no final.
+ Você pode usar um caminho para uma pasta do Amazon S3 ou um alias de ponto de acesso do Amazon S3. Para obter informações sobre aliases de ponto de acesso do Amazon S3, consulte [Usar um alias em estilo de bucket para seu ponto de acesso](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html) no *Manual do usuário do Amazon S3*.

 **Use:**

```
s3://amzn-s3-demo-bucket/folder/
```

```
s3://amzn-s3-demo-bucket-metadata-s3alias/folder/
```

Não use nenhum dos itens a seguir para especificar a `LOCATION` dos dados.
+ Não use nomes de arquivo, sublinhado, curingas ou padrões glob para especificar locais de arquivos.
+ Não adicione a notação HTTP completa, como `s3.amazon.com` ao caminho do bucket do Amazon S3.
+ Não use pastas vazias, como `//`, no caminho, conforme segue: `S3://amzn-s3-demo-bucket/folder//folder/`. 
+ Não use os caminhos da seguinte maneira:

  ```
  s3://amzn-s3-demo-bucket
  s3://amzn-s3-demo-bucket/*
  s3://amzn-s3-demo-bucket/mySpecialFile.dat
  s3://amzn-s3-demo-bucket/prefix/filename.csv
  s3://amzn-s3-demo-bucket.s3.amazon.com
  S3://amzn-s3-demo-bucket/prefix//prefix/
  arn:aws:s3:::amzn-s3-demo-bucket/prefix
  s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname>
  https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com
  ```

# Mostrar informações da tabela após a criação
<a name="creating-tables-showing-table-information"></a>

Depois de criar uma tabela no Athena, seu nome será exibido na lista **Tabelas** à esquerda, no console do Athena. Para exibir informações sobre a tabela e gerenciá-la, escolha os três pontos verticais ao lado do nome da tabela no console do Athena. 
+ **Preview table** (Visualizar tabela): mostra as primeiras dez linhas de todas as colunas executando a instrução `SELECT * FROM "database_name"."table_name" LIMIT 10` no editor de consultas do Athena.
+ **Generate table DDL** (Gerar DDL de tabela): gera uma instrução DDL que você pode usar para recriar a tabela executando a instrução `SHOW CREATE TABLE` *nome\$1da\$1tabela* no editor de consultas do Athena.
+ **Load partitions** (Carregar partições): executa a instrução `MSCK REPAIR TABLE table_name` no editor de consultas do Athena. Essa opção só estará disponível se a tabela tiver partições. 
+ **Insert into editor** (Inserir no editor): insere o nome da tabela no editor de consultas no local de edição atual.
+ **Delete table** (Excluir tabela): exibe uma caixa de diálogo de confirmação perguntando se você deseja excluir a tabela. Se você concordar, a instrução `DROP TABLE table_name` será executada no editor de consultas do Athena.
+ **Table properties** (Propriedades da tabela): mostra o nome da tabela, o nome do banco de dados, o horário de criação e se a tabela tem dados criptografados.

# Nomear bancos de dados, tabelas e colunas
<a name="tables-databases-columns-names"></a>

Use estas diretrizes para nomear bancos de dados, tabelas e colunas no Athena.

## Requisitos para nome de bancos de dados, tabelas e colunas
<a name="tables-databases-columns-names-requirements"></a>
+ Os caracteres aceitáveis para nomes de bancos de dados, nomes de tabelas e nomes de colunas no AWS Glue devem ser strings em UTF-8 e em minúsculas. Observe que o Athena reduz automaticamente muda para minúsculas todos os nomes em maiúsculas nas consultas DDL ao criar bancos de dados, tabelas ou colunas. A string não pode ter menos do que 1 ou mais de 255 bytes de comprimento.
+ Atualmente, é possível ter espaços iniciais no início dos nomes. Como pode ser difícil detectar esses espaços iniciais e eles podem causar problemas de usabilidade após a criação, evite inadvertidamente criar nomes de objetos que contenham espaços iniciais.
+ Se você usar um modelo [AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html) do CloudFormation para criar um banco de dados do AWS Glue e não especificar um nome de banco de dados, o AWS Glue gera automaticamente um nome de banco de dados no formato *resource\$1name—random\$1string* que não é compatível com o Athena.
+ Você pode usar o Gerenciador de Catálogos do AWS Glue para renomear colunas, mas não nomes de tabelas ou nomes de banco de dados. Para resolver essa limitação, é necessário usar uma definição do banco de dados antigo para criar um banco de dados com o novo nome. Em seguida, use as definições das tabelas do banco de dados antigo para recriar as tabelas no novo banco de dados. Para isso, você pode usar a AWS CLI ou o SDK do AWS Glue. Para obter as etapas, consulte [Usar a AWS CLI para recriar um banco de dados do AWS Glue e suas tabelas](glue-recreate-db-and-tables-cli.md).

## Usar letras minúsculas nos nomes de tabela e de coluna da tabela no Athena
<a name="table-names-and-table-column-names-in-ate-must-be-lowercase"></a>

O Athena aceita maiúsculas e minúsculas nas consultas DDL e DML, mas usa letras minúsculas nos nomes quando executa a consulta. Por essa razão, evite usar maiúsculas e minúsculas em nomes de tabelas ou colunas, e não confie no uso de letras maiúsculas e minúsculas do Athena para distinguir esses nomes. Por exemplo, se você usar uma instrução DDL para criar uma coluna chamada `Castle`, a coluna criada será mudada para letras minúsculas `castle`. Se você especificar o nome da coluna em uma consulta DML como `Castle` ou `CASTLE`, o Athena mudará o nome para letras minúsculas para você executar a consulta, mas exibirá o cabeçalho da coluna da forma como você escolheu na consulta.

Os nomes de bancos de dados, tabelas e colunas ter, no máximo, 255 caracteres.

## Nomes que começam com um sublinhado
<a name="names-that-begin-with-an-underscore"></a>

Ao criar tabelas, coloque entre acentos graves os nomes de tabelas, visualizações ou colunas que começam com sublinhado. Por exemplo:

```
CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`(
  `_id` string, `_index` string)
LOCATION 's3://amzn-s3-demo-bucket/'
```

## Nomes de tabelas, visualizações ou colunas que começam com números
<a name="table-names-that-include-numbers"></a>

Ao executar consultas `SELECT`, `CTAS` ou `VIEW`, coloque entre aspas os identificadores, como nomes de tabelas, visualizações ou colunas, que começam com um dígito. Por exemplo:

```
CREATE OR REPLACE VIEW "123view" AS
SELECT "123columnone", "123columntwo"
FROM "234table"
```

## Nomes de colunas e tipos complexos
<a name="tables-databases-columns-names-complex-types"></a>

Para tipos complexos, apenas caracteres alfanuméricos, sublinhado (`_`) e ponto final (`.`) são permitidos nos nomes de colunas. Para criar uma tabela e mapeamentos para chaves que têm caracteres restritos, você pode usar uma instrução DDL personalizada. Para obter mais informações, consulte o artigo [Create tables in Amazon Athena from nested JSON and mappings using JSONSerDe](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/) (Criar tabelas no Amazon Athena de JSON e mapeamentos aninhados usando JSONSerDe) no *blog sobre big data da AWS*.

## Palavras reservadas
<a name="tables-databases-columns-names-reserved-words"></a>

Algumas palavras reservadas no Athena devem ser escapadas. Para inserir um caractere de escape em palavras-chave reservadas em instruções DDL, coloque-as entre acentos graves (`). Para usar escape em palavras-chave reservadas em instruções SQL `SELECT` e em consultas em [visualizações](views.md), coloque-as entre aspas duplas ("). 

Para obter mais informações, consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).

## Recursos adicionais
<a name="tables-databases-columns-names-additional-resources"></a>

Para obter a sintaxe completa de criação de bancos de dados e tabelas, consulte as páginas a seguir.
+ [CREATE DATABASE](create-database.md)
+ [CREATE TABLE](create-table.md)

Para obter mais informações sobre bancos de dados e tabelas no AWS Glue, consulte [Bancos de dados](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html) e [Tabelas](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html) no *Guia do desenvolvedor do AWS Glue*.

# Escapar palavras-chave reservadas em consultas
<a name="reserved-words"></a>

Quando você executa consultas no Athena que incluem palavras-chave reservadas, deve escapá-las entre caracteres especiais. Use as listas deste tópico para verificar quais são as palavras-chave reservadas no Athena. 

Para inserir um caractere de escape em palavras-chave reservadas em instruções DDL, coloque-as entre acentos graves (`). Para usar escape em palavras-chave reservadas em instruções SQL `SELECT` e em consultas em [visualizações](views.md), coloque-as entre aspas duplas (").
+  [Palavras-chave reservadas para escape e em instruções de DDL](#list-of-ddl-reserved-words) 
+  [Palavras-chave reservadas para escape e em instruções de SQL SELECT](#list-of-reserved-words-sql-select) 
+  [Exemplos de consultas com palavras reservadas](#examples-reserved-words) 

## Palavras-chave reservadas para escape e em instruções de DDL
<a name="list-of-ddl-reserved-words"></a>

O Athena usa a lista de palavras-chave reservadas a seguir em suas instruções DDL. Se você usá-las sem efetuar escape, o Athena emitirá um erro. Para inserir um caractere de escape nelas, coloque-as entre acentos graves (`).

Você não pode usar palavras-chave reservadas do DDL como nomes de identificadores em instruções DDL sem colocá-las entre acentos graves (`).

```
ALL, ALTER, AND, ARRAY, AS, AUTHORIZATION, BETWEEN, BIGINT, 
BINARY, BOOLEAN, BOTH, BY, CASE, CASHE, CAST, CHAR, COLUMN, 
CONF, CONSTRAINT, COMMIT, CREATE, CROSS, CUBE, CURRENT, 
CURRENT_DATE, CURRENT_TIMESTAMP, CURSOR, DATABASE, DATE, 
DAYOFWEEK, DECIMAL, DELETE, DESCRIBE, DISTINCT, DIV, DOUBLE, 
DROP, ELSE, END, EXCHANGE, EXISTS, EXTENDED, EXTERNAL, EXTRACT, 
FALSE, FETCH, FLOAT, FLOOR, FOLLOWING, FOR, FOREIGN, FROM, 
FULL, FUNCTION, GRANT, GROUP, GROUPING, HAVING, IF, IMPORT, 
IN, INNER, INSERT, INT, INTEGER, INTERSECT, INTERVAL, INTO, 
IS, JOIN, LATERAL, LEFT, LESS, LIKE, LOCAL, MACRO, MAP, MORE, 
NONE, NOT, NULL, NUMERIC, OF, ON, ONLY, OR, ORDER, OUT, 
OUTER, OVER, PARTIALSCAN, PARTITION, PERCENT, PRECEDING, 
PRECISION, PRESERVE, PRIMARY, PROCEDURE, RANGE, READS, 
REDUCE, REGEXP, REFERENCES, REVOKE, RIGHT, RLIKE, ROLLBACK, 
ROLLUP, ROW, ROWS, SELECT, SET, SMALLINT, START,TABLE, 
TABLESAMPLE, THEN, TIME, TIMESTAMP, TO, TRANSFORM, TRIGGER, 
TRUE, TRUNCATE, UNBOUNDED,UNION, UNIQUEJOIN, UPDATE, USER, 
USING, UTC_TIMESTAMP, VALUES, VARCHAR, VIEWS, WHEN, WHERE, 
WINDOW, WITH
```

## Palavras-chave reservadas para escape e em instruções de SQL SELECT
<a name="list-of-reserved-words-sql-select"></a>

O Athena usa a lista de palavras-chave reservadas a seguir nas instruções SQL `SELECT` e nas consultas em visualizações. 

Se você usar essas palavras-chave como identificadores, deverá colocá-las entre aspas duplas (") em suas instruções de consulta.

```
ALTER, AND, AS, BETWEEN, BY, CASE, CAST, CONSTRAINT, CREATE, 
CROSS, CUBE, CURRENT_CATALOG, CURRENT_DATE, CURRENT_PATH, 
CURRENT_SCHEMA, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, 
DEALLOCATE, DELETE, DESCRIBE, DISTINCT, DROP, ELSE, END, ESCAPE, 
EXCEPT, EXECUTE, EXISTS, EXTRACT, FALSE, FIRST, FOR, FROM, 
FULL, GROUP, GROUPING, HAVING, IN, INNER, INSERT, INTERSECT, 
INTO, IS, JOIN, JSON_ARRAY, JSON_EXISTS, JSON_OBJECT, 
JSON_QUERY, JSON_TABLE, JSON_VALUE, LAST, LEFT, LIKE, 
LISTAGG, LOCALTIME, LOCALTIMESTAMP, NATURAL, NORMALIZE, 
NOT, NULL, OF, ON, OR, ORDER, OUTER, PREPARE, RECURSIVE, RIGHT, 
ROLLUP, SELECT, SKIP, TABLE, THEN, TRIM, TRUE, UESCAPE, UNION, 
UNNEST, USING, VALUES, WHEN, WHERE, WITH
```

## Exemplos de consultas com palavras reservadas
<a name="examples-reserved-words"></a>

A consulta no exemplo a seguir usa acentos graves (`) para efetuar escape das palavras-chave reservadas *partition* e *date* relacionadas à DDL que são usadas para um nome de tabela e um dos nomes de coluna:

```
CREATE EXTERNAL TABLE `partition` (
`date` INT, 
col2 STRING
)
PARTITIONED BY (year STRING)
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/test_examples/';
```

As consultas de exemplo a seguir incluem um nome de coluna que contém as palavras-chave reservadas relacionadas ao DDL em instruções `ALTER TABLE ADD PARTITION` e `ALTER TABLE DROP PARTITION`. As palavras-chave reservadas do DDL são circunscritas com acentos graves (`):

```
ALTER TABLE test_table 
ADD PARTITION (`date` = '2018-05-14')
```

```
ALTER TABLE test_table 
DROP PARTITION (`partition` = 'test_partition_value')
```

A consulta de exemplo a seguir inclui uma palavra-chave reservada (end) como um identificador em uma instrução `SELECT`. O escape da palavra-chave é efetuado com aspas duplas: 

```
SELECT * 
FROM TestTable
WHERE "end" != nil;
```

A consulta de exemplo a seguir inclui uma palavra-chave reservada (first) em uma instrução `SELECT`. O escape da palavra-chave é efetuado com aspas duplas: 

```
SELECT "itemId"."first" 
FROM testTable 
LIMIT 10;
```

# Criar uma tabela com base em resultados de consultas (CTAS)
<a name="ctas"></a>

Uma consulta `CREATE TABLE AS SELECT` (CTAS) cria uma tabela no Athena com base nos resultados de uma instrução `SELECT` de outra consulta. O Athena armazena arquivos de dados criados pela instrução CTAS em um local especificado no Amazon S3. Para ver a sintaxe, consulte [CREATE TABLE AS](create-table-as.md).

`CREATE TABLE AS` combina uma instrução DDL `CREATE TABLE` com uma instrução DML `SELECT`, por isso tecnicamente contém tanto DDL quanto DML. No entanto, observe que, para fins de cotas de serviço, as consultas CTAS no Athena são tratadas como DML. Para obter informações sobre as cotas de serviço do Athena, consulte [Service Quotas](service-limits.md).

Use consultas CTAS para: 
+ Criar tabelas a partir dos resultados da consulta em uma etapa, sem consultar conjuntos de dados brutos repetidamente. Isso facilita o trabalho com conjuntos de dados brutos.
+ Transformar os resultados da consulta e migrar tabelas para outros formatos de tabela, como o Apache Iceberg. Isso melhora a performance da consulta e reduz seus custos no Athena. Para mais informações, consulte [Criar tabelas do Iceberg](querying-iceberg-creating-tables.md).
+ Transformar os resultados da consulta em formatos de armazenamento, como Parquet e ORC. Isso melhora a performance da consulta e reduz seus custos no Athena. Para mais informações, consulte [Usar formatos de armazenamento colunares](columnar-storage.md).
+ Crie cópias de tabelas existentes que contêm somente os dados necessários.

**Topics**
+ [

# Considerações e limitações de consultas CTAS
](ctas-considerations-limitations.md)
+ [Criar consultas CTAS](ctas-console.md)
+ [Exemplos de CTAS](ctas-examples.md)
+ [Usar CTAS e INSERT INTO para ETL](ctas-insert-into-etl.md)
+ [Contornar o limite de 100 partições](ctas-insert-into.md)

# Considerações e limitações de consultas CTAS
<a name="ctas-considerations-limitations"></a>

As seções a seguir descrevem considerações e limitações que você deve ter em mente ao usar consultas (CTAS) `CREATE TABLE AS SELECT` no Athena.

## Aprender a sintaxe de consulta CTAS
<a name="ctas-considerations-limitations-query-syntax"></a>

A sintaxe de consulta CTAS é diferente da sintaxe de `CREATE [EXTERNAL] TABLE` usada para criar tabelas. Consulte [CREATE TABLE AS](create-table-as.md).

## A diferença entre visualizações e consultas CTAS
<a name="ctas-considerations-limitations-queries-vs-views"></a>

As consultas CTAS gravam novos dados em um local especificado no Amazon S3. As visualizações não gravam nenhum dado. 

## Especificar um local para armazenar os resultados da sua consulta CTAS
<a name="ctas-considerations-limitations-location-of-query-results"></a>

Se o seu grupo de trabalho [substituir a configuração do lado do cliente](workgroups-settings-override.md) para o local dos resultados das consultas, o Athena criará a tabela no local `s3://amzn-s3-demo-bucket/tables/<query-id>/`. Para ver o local dos resultados de consultas especificado para o grupo de trabalho, [visualize os detalhes do grupo de trabalho](viewing-details-workgroups.md).

Se seu grupo de trabalho não substituir o local dos resultados de consultas, você poderá usar a sintaxe `WITH (external_location ='s3://amzn-s3-demo-bucket/')` em sua consulta CTAS para especificar onde os resultados da consulta CTAS são armazenados. 

**nota**  
A propriedade `external_location` deve especificar um local vazio. Uma consulta CTAS verifica se o local do caminho (prefixo) no bucket está vazio e nunca substitui os dados se o local já tiver dados. Para usar o mesmo local novamente, exclua os dados no local do prefixo de chave no bucket.

Se você omitir a sintaxe de `external_location` e não usar a configuração do grupo de trabalho, o Athena usará sua [configuração do lado do cliente](query-results-specify-location-console.md) para o local dos resultados das consultas e criará a tabela no local `s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/`. 

## Localizar arquivos órfãos
<a name="ctas-considerations-limitations-locating-orphaned-files"></a>

Quando ocorre a falha de uma instrução `CTAS` ou `INSERT INTO`, é possível que arquivos de dados órfãos sejam deixados no local de destino dos dados para as consultas malsucedidas ou canceladas. Como, em alguns casos, o Athena não exclui os dados do bucket de destino da consulta, dados parciais podem ser incluídos nas consultas subsequentes. 

Para localizar arquivos órfãos para inspeção ou exclusão, é possível usar o arquivo do manifesto de dados que o Athena oferece para rastrear a lista de arquivos a serem gravados. Em alguns casos raros em que ocorre a falha abrupta de uma consulta do Athena, o arquivo do manifesto pode não estar presente. Você pode encontrar os arquivos órfãos inspecionando manualmente o local de destino do S3. Para obter mais informações, consulte [Identificar arquivos de saída de consultas](querying-finding-output-files.md#querying-identifying-output-files) e [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation). 

É altamente recomendável usar o Apache Iceberg para realizar transações atômicas de tabelas. Para obter mais informações, consulte [Consultar tabelas do Apache Iceberg](querying-iceberg.md).

## Lembre-se de que as cláusulas ORDER BY são ignoradas
<a name="ctas-considerations-limitations-order-by-ignored"></a>

Em uma consulta CTAS, o Athena ignora as cláusulas `ORDER BY` na parte `SELECT` da consulta.

Segundo a especificação SQL (ISO 9075 Parte 2), a ordenação das linhas de uma tabela especificada por uma expressão de consulta é garantida somente para a expressão de consulta que contém imediatamente a cláusula `ORDER BY`. De qualquer forma, as tabelas no SQL são inerentemente desordenadas, e a implementação das cláusulas na subconsulta `ORDER BY` faria com que a consulta tivesse uma performance ruim e não resultaria em uma saída ordenada. Assim, nas consultas CTAS do Athena, não há garantia de que a ordem especificada pela cláusula `ORDER BY` será preservada quando os dados forem gravados.

## Escolher um formato para armazenar os resultados da consulta
<a name="ctas-considerations-limitations-formats-for-query-results"></a>

É possível armazenar resultados de CTAS em `PARQUET`, `ORC`, `AVRO`, `JSON` e `TEXTFILE`. Não há suporte para delimitadores de vários caracteres no formato CTAS `TEXTFILE`. Se você não especificar um formato de armazenamento de dados, os resultados da consulta CTAS serão armazenados no Parquet por padrão. 

As consultas CTAS não exigem a especificação de um SerDe para interpretar transformações de formato. Consulte [Example: Writing query results to a different format](ctas-examples.md#ctas-example-format).

## Considerar os formatos de compactação
<a name="ctas-considerations-limitations-compression-formats"></a>

`GZIP`A compactação é usada para os resultados da consulta CTAS nos formatos JSON e TEXTFILE. Para Parquet, você pode usar `GZIP` ou `SNAPPY`, e o padrão é `GZIP`. Para ORC, você pode usar `LZ4`, `SNAPPY`, `ZLIB` ou `ZSTD`, e o padrão é `ZLIB`. Para obter exemplos de CTAS que especificam compactação, consulte [Example: Specifying data storage and compression formats](ctas-examples.md#ctas-example-compression). Para obter informações sobre compactação no Athena, consulte [Usar compactação no Athena](compression-formats.md).

## Particionamento e uso de buckets para seus resultados
<a name="ctas-considerations-limitations-partition-and-bucket-limits"></a>

Você pode particionar e armazenar em buckets os dados resultantes de uma consulta CTAS. Para especificar as propriedades da tabela de destino, inclua predicados de particionamento e bucketing no final da cláusula `WITH`. Para obter mais informações, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md) e [Example: Creating bucketed and partitioned tables](ctas-examples.md#ctas-example-bucketed).

Ao usar o CTAS para criar uma tabela particionada, o Athena tem um limite de gravação de 100 partições. Para obter informações sobre como contornar a limitação de 100 partições, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

## Criptografar seus resultados
<a name="ctas-considerations-limitations-encryption"></a>

É possível criptografar os resultados da consulta CTAS no Amazon S3, semelhante à forma como você criptografa outros resultados de consulta no Athena. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).

## A configuração esperada para o proprietário do buckets não se aplica a CTAS
<a name="ctas-considerations-limitations-expected-bucket-owner"></a>

Para instruções CTAS, a configuração esperada do proprietário do bucket não se aplica ao local da tabela de destino no Amazon S3. A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Para obter mais informações, consulte [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).

## Os tipos de dados de coluna são preservados
<a name="ctas-considerations-limitations-data-types"></a>

Os tipos de dados da coluna para uma consulta CTAS são os mesmos que os tipos especificados para a consulta original.

# Criar consultas CTAS no console do Athena
<a name="ctas-console"></a>

No console do Athena, você pode criar uma consulta CTAS com base em outra consulta.<a name="ctas-create-from-query"></a>

**Para criar uma consulta CTAS a partir de outra consulta**

1. Execute a consulta no editor de consultas do console do Athena.

1. Na parte inferior do editor de consultas, escolha a opção **Create** (Criar) e, em seguida, escolha **Table from query** (Tabela a partir de consulta).

1. No formulário **Create table as select** (Criar tabela conforme seleção), preencha os seguintes campos:

   1. Em **Table name** (Nome da tabela), especifique o nome para sua nova tabela. Use apenas letras minúsculas e sublinhados, como `my_select_query_parquet`.

   1. Em **Database configuration** (Configuração de banco de dados), use as opções para escolher um banco de dados existente ou criar um banco de dados.

   1. (Opcional) Em **Result configuration** (Configuração de resultado), para **Location of CTAS query results** (Localização dos resultados da consulta CTAS), se a configuração de localização dos resultados da consulta de grupo de trabalho não substituir essa opção, faça o seguinte:
      + Insira o caminho para uma localização existente do S3 na caixa de pesquisa ou escolha **Browse S3** (Procurar no S3) para escolher uma localização em uma lista.
      + Escolha **View** (Visualizar) para abrir a página **Buckets** do console do Amazon S3, na qual você poderá ver mais informações sobre seus buckets existentes e escolher ou criar um bucket com suas próprias configurações.

      Você deverá especificar um local vazio no Amazon S3 no qual os dados serão produzidos. Se os dados já existirem no local especificado, a consulta apresentará erro. 

      Se a configuração de localização dos resultados de consulta do seu grupo de trabalho substituir a configuração de localização, o Athena criará a tabela no local `s3://amzn-s3-demo-bucket/tables/query_id/`.

   1. Em **Data format** (Formato de dados), especifique o formato dos seus dados.
      + **Table type** (Tipo de tabela): o tipo de tabela padrão no Athena é o Apache Hive. 
      + **File format** (Formato de arquivo): escolha entre opções como CSV, TSV, JSON, Parquet ou ORC. Para obter mais informações sobre os formatos Parquet e ORC, consulte [Usar formatos de armazenamento colunares](columnar-storage.md).
      + **Write compression** (Compactação de gravação): (opcional) escolha um formato de compactação. O Athena suporta uma variedade de formatos de compactação para leitura e gravação de dados, incluindo a leitura de uma tabela que usa vários formatos de compactação. Por exemplo, o Athena pode ler com sucesso os dados de uma tabela que usa o formato de arquivo Parquet quando alguns arquivos Parquet são compactados com o Snappy e outros arquivos Parquet são compactados com o GZIP. O mesmo princípio se aplica aos formatos de armazenamento ORC, arquivo de texto e JSON. Para obter mais informações, consulte [Usar compactação no Athena](compression-formats.md).
      + **Partitions** (Partições): (opcional) selecione as colunas que você deseja particionar. O particionamento dos dados restringe a quantidade que cada consulta verifica, o que melhora a performance e reduz o custo. Você pode dividir seus dados em partições usando qualquer chave. Para obter mais informações, consulte [Particionar dados](partitions.md).
      + **Buckets** (Compartimentos): (opcional) selecione as colunas que você deseja agrupar. O agrupamento é uma técnica que agrupa dados com base em colunas específicas em uma só partição. Essas colunas são conhecidas como *bucket keys* (chaves de bucket). Ao agrupar dados relacionados em um só bucket (um arquivo dentro de uma partição), você reduz significativamente a quantidade de dados digitalizados pelo Athena, melhorando assim a performance da consulta e reduzindo os custos. Para obter mais informações, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md).

   1. Em **Preview table query** (Visualizar consulta da tabela), analise sua consulta. Para ver a sintaxe de consulta, acesse [CREATE TABLE AS](create-table-as.md).

   1. Escolha **Create table**.

O console do Athena tem um modelo SQL que você também pode usar para criar uma consulta CTAS.<a name="ctas-create-new"></a>

**Para criar uma consulta CTAS usando um modelo SQL**

Use o modelo `CREATE TABLE AS SELECT` para criar uma consulta CTAS no editor de consultas.

1. No console do Athena, ao lado de **Tables and views** (Tabelas e visualizações), escolha **Create table** (Criar tabela) e, em seguida, escolha **CREATE TABLE AS SELECT**. Isso preenche o editor de consultas com uma consulta CTAS com valores de espaço reservado.

1. No editor de consultas, edite a consulta conforme necessário. Para ver a sintaxe de consulta, acesse [CREATE TABLE AS](create-table-as.md).

1. Escolha **Executar**.

Para obter exemplos, consulte [Exemplos de consultas CTAS](ctas-examples.md).



# Exemplos de consultas CTAS
<a name="ctas-examples"></a>

Use os exemplos a seguir para criar consultas CTAS. Para obter informações sobre a sintaxe de CTAS, consulte [CREATE TABLE AS](create-table-as.md).

Nesta seção: 
+  [Example: Duplicating a table by selecting all columns](#ctas-example-dupe-table) 
+  [Example: Selecting specific columns from one or more tables](#ctas-example-specify-columns) 
+  [Example: Creating an empty copy of an existing table](#ctas-example-empty-table) 
+  [Example: Specifying data storage and compression formats](#ctas-example-compression) 
+  [Example: Writing query results to a different format](#ctas-example-format) 
+  [Example: Creating unpartitioned tables](#ctas-example-unpartitioned) 
+  [Example: Creating partitioned tables](#ctas-example-partitioned) 
+  [Example: Creating bucketed and partitioned tables](#ctas-example-bucketed) 
+  [Example: Creating an Iceberg table with Parquet data](#ctas-example-iceberg-parquet) 
+  [Example: Creating an Iceberg table with Avro data](#ctas-example-iceberg-avro) 
+  [Example: Creating an S3 table using CTAS](#ctas-example-s3-table) 

**Example Exemplo: duplicar tabela selecionando todas as colunas**  
O exemplo a seguir cria uma tabela copiando todas as colunas de uma tabela:  

```
CREATE TABLE new_table AS 
SELECT * 
FROM old_table;
```
Na variação a seguir do mesmo exemplo, a instrução `SELECT` também inclui uma cláusula `WHERE`. Nesse caso, a consulta seleciona somente as linhas da tabela que satisfazem a cláusula `WHERE`:   

```
CREATE TABLE new_table AS 
SELECT * 
FROM old_table 
WHERE condition;
```

**Example Exemplo: selecionar colunas específicas de uma ou mais tabelas**  
O exemplo a seguir cria uma consulta que é executada em um conjunto de colunas de outra tabela:  

```
CREATE TABLE new_table AS 
SELECT column_1, column_2, ... column_n 
FROM old_table;
```
Essa variação do mesmo exemplo cria uma tabela por meio de colunas específicas de várias tabelas:   

```
CREATE TABLE new_table AS
SELECT column_1, column_2, ... column_n 
FROM old_table_1, old_table_2, ... old_table_n;
```

**Example Exemplo: criar uma cópia vazia de uma tabela existente**  
O exemplo a seguir usa `WITH NO DATA` para criar uma tabela vazia e que tenha o mesmo esquema da tabela original:  

```
CREATE TABLE new_table 
AS SELECT * 
FROM old_table
WITH NO DATA;
```

**Example Exemplo: especificar armazenamento de dados e formatos de compactação**  
Com a CTAS, é possível usar a tabela de origem para criar outra tabela em um formato diferente.   
Use a propriedade `format` para especificar `ORC`, `PARQUET`, `AVRO`, `JSON` ou `TEXTFILE` como o formato de armazenamento para a nova tabela.   
Para os formatos de armazenamento `PARQUET`, `ORC`, `TEXTFILE` e `JSON`, use a propriedade `write_compression` para especificar o formato de compactação para os dados da nova tabela. Para obter mais informações sobre os formatos de compactação suportados por cada formato de arquivo, consulte [Usar compactação no Athena](compression-formats.md).  
O exemplo a seguir especifica que os dados na tabela `new_table` são armazenados em formato Parquet e usam compactação Snappy. A compactação padrão para Parquet é `GZIP`.  

```
CREATE TABLE new_table
WITH (
      format = 'Parquet',
      write_compression = 'SNAPPY')
AS SELECT *
FROM old_table;
```
O exemplo a seguir especifica que os dados na tabela `new_table` são armazenados em formato ORC e usam compactação Snappy. A compactação padrão para ORC é ZLIB.  

```
CREATE TABLE new_table
WITH (format = 'ORC',
      write_compression = 'SNAPPY')
AS SELECT *
FROM old_table ;
```
O exemplo a seguir especifica esses dados na tabela `new_table` são armazenados em formato textfile usando a compactação Snappy. A compactação padrão para os formatos textfile e JSON é GZIP.  

```
CREATE TABLE new_table
WITH (format = 'TEXTFILE',
      write_compression = 'SNAPPY')
AS SELECT *
FROM old_table ;
```

**Example Exemplo: gravar resultados da consulta em um formato diferente**  
A seguinte consulta CTAS seleciona todos os registros de `old_table`, que poderiam ser armazenados em CSV ou em outro formato, e cria uma nova tabela com os dados subjacentes salvos no Amazon S3 no formato ORC:   

```
CREATE TABLE my_orc_ctas_table
WITH (
      external_location = 's3://amzn-s3-demo-bucket/my_orc_stas_table/',
      format = 'ORC')
AS SELECT * 
FROM old_table;
```

**Example Exemplo: criar tabelas não particionadas**  
Os exemplos a seguir criam tabelas que não são particionadas. Os dados da tabela são armazenados em formatos diferentes. Alguns desses exemplos especificam o local externo.   
O exemplo a seguir cria uma consulta CTAS que armazena os resultados como um arquivo de texto:  

```
CREATE TABLE ctas_csv_unpartitioned 
WITH (
     format = 'TEXTFILE', 
     external_location = 's3://amzn-s3-demo-bucket/ctas_csv_unpartitioned/') 
AS SELECT key1, name1, address1, comment1
FROM table1;
```
No exemplo a seguir, os resultados são armazenados em Parquet, e os local padrão dos resultados é usado:  

```
CREATE TABLE ctas_parquet_unpartitioned 
WITH (format = 'PARQUET') 
AS SELECT key1, name1, comment1
FROM table1;
```
No a consulta a seguir, a tabela é armazenada em JSON, e colunas específicas são selecionadas entre os resultados da tabela original:  

```
CREATE TABLE ctas_json_unpartitioned 
WITH (
     format = 'JSON',  
     external_location = 's3://amzn-s3-demo-bucket/ctas_json_unpartitioned/') 
AS SELECT key1, name1, address1, comment1
FROM table1;
```
No exemplo a seguir, o formato é ORC:  

```
CREATE TABLE ctas_orc_unpartitioned 
WITH (
     format = 'ORC') 
AS SELECT key1, name1, comment1 
FROM table1;
```
No exemplo a seguir, o formato é Avro:  

```
CREATE TABLE ctas_avro_unpartitioned 
WITH (
     format = 'AVRO', 
     external_location = 's3://amzn-s3-demo-bucket/ctas_avro_unpartitioned/') 
AS SELECT key1, name1, comment1
FROM table1;
```

**Example Exemplo: criar tabelas particionadas**  
Os exemplos a seguir mostram consultas `CREATE TABLE AS SELECT` para tabelas particionadas em diferentes formatos de armazenamento, usando `partitioned_by` e outras propriedades na cláusula `WITH`. Para ver a sintaxe, consulte [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties). Para obter mais informações sobre como escolher as colunas para particionamento, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md).  
Liste as colunas da partição no final da lista de colunas na instrução `SELECT`. Você pode particionar por mais de uma coluna e ter até 100 combinações únicas de partições e buckets. Por exemplo, você pode ter 100 partições se nenhum bucket for especificado.

```
CREATE TABLE ctas_csv_partitioned 
WITH (
     format = 'TEXTFILE',  
     external_location = 's3://amzn-s3-demo-bucket/ctas_csv_partitioned/', 
     partitioned_by = ARRAY['key1']) 
AS SELECT name1, address1, comment1, key1
FROM tables1;
```

```
CREATE TABLE ctas_json_partitioned 
WITH (
     format = 'JSON', 
     external_location = 's3://amzn-s3-demo-bucket/ctas_json_partitioned/', 
     partitioned_by = ARRAY['key1']) 
AS select name1, address1, comment1, key1 
FROM table1;
```

**Example Exemplo: criar tabelas em bucket e particionadas**  
O exemplo a seguir mostra uma consulta `CREATE TABLE AS SELECT` que usa tanto o particionamento quanto o armazenamento em bucket para armazenar os resultados das consultas no Amazon S3. Os resultados da tabela são particionados e armazenados em bucket por diferentes colunas. O Athena permite no máximo 100 combinações únicas de bucket e partição. Por exemplo, se você criar uma tabela com cinco buckets, é possível ter 20 partições com cinco buckets cada. Para ver a sintaxe, consulte [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties).  
Para obter mais informações sobre como escolher as colunas para armazenamento em bucket, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md).  

```
CREATE TABLE ctas_avro_bucketed 
WITH (
      format = 'AVRO', 
      external_location = 's3://amzn-s3-demo-bucket/ctas_avro_bucketed/', 
      partitioned_by = ARRAY['nationkey'], 
      bucketed_by = ARRAY['mktsegment'], 
      bucket_count = 3) 
AS SELECT key1, name1, address1, phone1, acctbal, mktsegment, comment1, nationkey 
FROM table1;
```

**Example Exemplo: criação de uma tabela do Iceberg com dados do Parquet**  
O exemplo a seguir cria uma tabela do Iceberg com arquivos de dados do Parquet. Os arquivos são particionados por mês usando a coluna `dt` na `table1`. O exemplo atualiza as propriedades de retenção na tabela para que dez snapshots sejam retidos, por padrão, em cada ramificação da tabela. Os snapshots dos últimos 7 dias também são retidos. Para obter mais informações sobre as propriedades de tabelas Iceberg no Athena, consulte [Especificar propriedades das tabelas](querying-iceberg-creating-tables.md#querying-iceberg-table-properties).  

```
CREATE TABLE ctas_iceberg_parquet
WITH (table_type = 'ICEBERG',
      format = 'PARQUET', 
      location = 's3://amzn-s3-demo-bucket/ctas_iceberg_parquet/', 
      is_external = false,
      partitioning = ARRAY['month(dt)'],
      vacuum_min_snapshots_to_keep = 10,
      vacuum_max_snapshot_age_seconds = 604800
   ) 
AS SELECT key1, name1, dt FROM table1;
```

**Example Exemplo: criação de uma tabela do Iceberg com dados do Avro**  
O exemplo a seguir cria uma tabela do Iceberg com arquivos de dados do Avro particionados por `key1`.  

```
CREATE TABLE ctas_iceberg_avro
WITH ( format = 'AVRO', 
       location = 's3://amzn-s3-demo-bucket/ctas_iceberg_avro/', 
       is_external = false,
       table_type = 'ICEBERG',
       partitioning = ARRAY['key1']) 
AS SELECT key1, name1, date FROM table1;
```

**Example Exemplo: criando uma tabela do S3 usando CTAS**  
O exemplo a seguir cria uma nova tabela do S3 usando CTAS. Observe que a propriedade de localização é omitida e o `table_type` assume o padrão `ICEBERG`:  

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```
Você pode especificar todas as outras propriedades da tabela do Iceberg, como particionamento e distribuição em buckets com a mesma sintaxe das tabelas normais do Iceberg.

# Usar CTAS e INSERT INTO para ETL e análise de dados
<a name="ctas-insert-into-etl"></a>

Você pode usar as instruções Create Table as Select ([CTAS](ctas.md)) e [INSERT INTO](insert-into.md) no Athena para extrair, transformar e carregar (ETL) dados no Amazon S3 para processamento de dados. Este tópico mostra como usar essas instruções para particionar e converter um conjunto de dados em um formato de dados colunar para otimizá-lo para análise de dados.

As instruções CTAS usam consultas [SELECT](select.md) padrão para criar novas tabelas. É possível usar uma instrução CTAS para criar um subconjunto de dados para análise. Em uma instrução CTAS, é possível particionar os dados, especificar compactação e converter os dados em um formato colunar, como Apache Parquet ou Apache ORC. Ao executar a consulta CTAS, as tabelas e as partições criadas são adicionadas automaticamente ao [AWS Glue Data Catalog](https://aws.amazon.com/glue). Isso torna as novas tabelas e partições criadas imediatamente disponíveis para consultas subsequentes.

Instruções INSERT INTO inserem novas linhas em uma tabela de destino com base em uma instrução de consulta SELECT que é executada em uma tabela de origem. É possível usar instruções INSERT INTO para transformar e carregar dados da tabela de origem no formato CSV em dados da tabela de destino usando todas as transformações com suporte do CTAS.

## Visão geral
<a name="ctas-insert-into-etl-overview"></a>

No Athena, use uma instrução CTAS para executar uma conversão inicial em lote dos dados. Depois disso, use várias instruções INSERT INTO para fazer atualizações incrementais para a tabela criada pela instrução CTAS.

**Etapas**
+ [Etapa 1: Criar uma tabela com base no conjunto de dados original](#ctas-insert-into-etl-step-1-create-a-table-based-on-the-original-dataset)
+  [Etapa 2: Usar CTAS para particionar, converter e compactar os dados](#ctas-insert-into-etl-step-2-use-ctas-to-partition-convert-and-compress-the-data) 
+  [Etapa 3: Usar INSERT INTO para adicionar dados](#ctas-insert-into-etl-step-3-use-insert-into-to-add-data) 
+  [Etapa 4: Avaliar diferenças de custo e performance](#ctas-insert-into-etl-step-4-measure-performance-and-cost-differences) 

## Etapa 1: Criar uma tabela com base no conjunto de dados original
<a name="ctas-insert-into-etl-step-1-create-a-table-based-on-the-original-dataset"></a>

O exemplo neste tópico usa um subconjunto legível pelo Amazon S3 do conjunto de dados [Global Historical Climatology Network Daily (GHCNd) da NOAA](https://registry.opendata.aws/noaa-ghcn/) disponível publicamente. Os dados no Amazon S3 têm as características a seguir.

```
Location: s3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/
Total objects: 41727
Size of CSV dataset: 11.3 GB
Region: us-east-1
```

Os dados originais são armazenados no Amazon S3 sem partições. Os dados estão no formato CSV em arquivos, conforme mostrado a seguir.

```
2019-10-31 13:06:57  413.1 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0000
2019-10-31 13:06:57  412.0 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0001
2019-10-31 13:06:57   34.4 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0002
2019-10-31 13:06:57  412.2 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0100
2019-10-31 13:06:57  412.7 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0101
```

Os tamanhos de arquivo neste exemplo são relativamente pequenos. Ao mesclá-los em arquivos maiores, é possível reduzir o número total de arquivos, o que melhora a performance das consultas. É possível usar instruções CTAS e INSERT INTO para melhorar a performance de consulta.

**Como criar um banco de dados e uma tabela com base no conjunto de dados de exemplo**

1. No console do Athena, escolha a Região da AWS **Leste dos EUA (Norte da Virgínia)**. Execute todas as consultas neste tutorial em `us-east-1`.

1. No editor de consultas do Athena, execute o comando [CREATE DATABASE](create-database.md) para criar um banco de dados. 

   ```
   CREATE DATABASE blogdb
   ```

1. Execute a seguinte instrução para [criar uma tabela](create-table.md).

   ```
   CREATE EXTERNAL TABLE `blogdb`.`original_csv` (
     `id` string,
     `date` string,
     `element` string,
     `datavalue` bigint,
     `mflag` string,
     `qflag` string,
     `sflag` string,
     `obstime` bigint)
   ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
   STORED AS INPUTFORMAT
     'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/'
   ```

## Etapa 2: Usar CTAS para particionar, converter e compactar os dados
<a name="ctas-insert-into-etl-step-2-use-ctas-to-partition-convert-and-compress-the-data"></a>

Depois de criar uma tabela, é possível usar uma única instrução [CTAS](ctas.md) para converter os dados para o formato Parquet com compactação Snappy e para particionar os dados por ano.

A tabela criada na Etapa 1 tem um campo `date` com a data formatada como `YYYYMMDD` (por exemplo, `20100104`). Como a nova tabela será particionada em `year`, a instrução de exemplo no procedimento a seguir usa a função Presto `substr("date",1,4)` para extrair o valor `year` do campo `date`.

**Como converter os dados para o formato Parquet com compactação Snappy, particionando por ano**
+ Execute a instrução CTAS a seguir, substituindo *your-bucket* pelo local do seu bucket do Amazon S3.

  ```
  CREATE table new_parquet
  WITH (format='PARQUET',
  parquet_compression='SNAPPY',
  partitioned_by=array['year'],
  external_location = 's3://amzn-s3-demo-bucket/optimized-data/')
  AS
  SELECT id,
           date,
           element,
           datavalue,
           mflag,
           qflag,
           sflag,
           obstime,
           substr("date",1,4) AS year
  FROM original_csv
  WHERE cast(substr("date",1,4) AS bigint) >= 2015
          AND cast(substr("date",1,4) AS bigint) <= 2019
  ```
**nota**  
Neste exemplo, a tabela criada inclui apenas os dados de 2015 a 2019. Na Etapa 3, adicione novos dados a essa tabela usando o comando INSERT INTO.

Quando a consulta for concluída, siga o procedimento abaixo para verificar a saída no local do Amazon S3 especificado na instrução CTAS.

**Como ver as partições e os arquivos Parquet criados pela instrução CTAS**

1. Para mostrar as partições criadas, execute o seguinte comando da AWS CLI. Certifique-se de incluir a barra final (/).

   ```
   aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/
   ```

   A saída mostra as partições.

   ```
         PRE year=2015/
         PRE year=2016/
         PRE year=2017/
         PRE year=2018/
         PRE year=2019/
   ```

1. Para ver os arquivos Parquet, execute o seguinte comando. Observe que a opção `|` *head -5*, que restringe a saída aos primeiros cinco resultados, não está disponível no Windows.

   ```
   aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/ --recursive --human-readable | head -5
   ```

   A saída será semelhante à seguinte.

   ```
   2019-10-31 14:51:05    7.3 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_1be48df2-3154-438b-b61d-8fb23809679d
   2019-10-31 14:51:05    7.0 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_2a57f4e2-ffa0-4be3-9c3f-28b16d86ed5a
   2019-10-31 14:51:05    9.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_34381db1-00ca-4092-bd65-ab04e06dc799
   2019-10-31 14:51:05    7.5 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_354a2bc1-345f-4996-9073-096cb863308d
   2019-10-31 14:51:05    6.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_42da4cfd-6e21-40a1-8152-0b902da385a1
   ```

## Etapa 3: Usar INSERT INTO para adicionar dados
<a name="ctas-insert-into-etl-step-3-use-insert-into-to-add-data"></a>

Na Etapa 2, você usou o CTAS para criar uma tabela com partições para os anos de 2015 a 2019. No entanto, o conjunto de dados original também contém dados para os anos de 2010 a 2014. Agora, adicione esses dados usando uma instrução [INSERT INTO](insert-into.md).

**Como adicionar dados à tabela usando uma ou mais instruções INSERT INTO**

1. Execute o seguinte comando INSERT INTO, especificando os anos antes de 2015 na cláusula WHERE.

   ```
   INSERT INTO new_parquet
   SELECT id,
            date,
            element,
            datavalue,
            mflag,
            qflag,
            sflag,
            obstime,
            substr("date",1,4) AS year
   FROM original_csv
   WHERE cast(substr("date",1,4) AS bigint) < 2015
   ```

1. Execute o comando `aws s3 ls` novamente, usando a seguinte sintaxe.

   ```
   aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/
   ```

   A saída mostra as novas partições.

   ```
         PRE year=2010/
         PRE year=2011/
         PRE year=2012/
         PRE year=2013/
         PRE year=2014/
         PRE year=2015/
         PRE year=2016/
         PRE year=2017/
         PRE year=2018/
         PRE year=2019/
   ```

1. Para ver a redução no tamanho do conjunto de dados obtido por meio do uso da compactação e do armazenamento colunar no formato Parquet, execute o seguinte comando.

   ```
   aws s3 ls s3://amzn-s3-demo-bucket/optimized-data/ --recursive --human-readable --summarize
   ```

   Os resultados a seguir mostram que o tamanho do conjunto de dados após o Parquet com compactação Snappy é 1.2 GB.

   ```
   ...
   2020-01-22 18:12:02 2.8 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_f0182e6c-38f4-4245-afa2-9f5bfa8d6d8f
   2020-01-22 18:11:59 3.7 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_fd9906b7-06cf-4055-a05b-f050e139946e
   Total Objects: 300
        Total Size: 1.2 GiB
   ```

1. Se mais dados CSV forem adicionados à tabela original, você pode adicionar esses dados à tabela Parquet usando instruções INSERT INTO. Por exemplo, se você tiver novos dados para o ano de 2020, poderá executar a instrução INSERT INTO a seguir. A instrução adiciona os dados e a partição relevante à tabela `new_parquet`.

   ```
   INSERT INTO new_parquet
   SELECT id,
            date,
            element,
            datavalue,
            mflag,
            qflag,
            sflag,
            obstime,
            substr("date",1,4) AS year
   FROM original_csv
   WHERE cast(substr("date",1,4) AS bigint) = 2020
   ```
**nota**  
A instrução INSERT INTO oferece suporte à gravação de, no máximo, 100 partições na tabela de destino. No entanto, para adicionar mais de 100 partições, você pode executar várias instruções INSERT INTO. Para obter mais informações, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

## Etapa 4: Avaliar diferenças de custo e performance
<a name="ctas-insert-into-etl-step-4-measure-performance-and-cost-differences"></a>

Depois de transformar os dados, é possível avaliar os ganhos de performance e a economia de custos executando as mesmas consultas nas tabelas novas e antigas e comparando os resultados.

**nota**  
Para obter informações de custo por consulta do Athena, consulte [Definição de preço do Amazon Athena](https://aws.amazon.com/athena/pricing).

**Como avaliar diferenças de custo e ganhos de performance**

1. Execute a seguinte consulta na tabela original. A consulta localiza o número de IDs distintos para cada valor do ano.

   ```
   SELECT substr("date",1,4) as year,
          COUNT(DISTINCT id)
   FROM original_csv
   GROUP BY 1 ORDER BY 1 DESC
   ```

1. Observe o tempo em que a consulta foi executada e a quantidade de dados verificados.

1. Execute a mesma consulta na nova tabela, observando o tempo de execução da consulta e a quantidade de dados verificados.

   ```
   SELECT year,
     COUNT(DISTINCT id)
   FROM new_parquet
   GROUP BY 1 ORDER BY 1 DESC
   ```

1. Compare os resultados e calcule a diferença de performance e custo. Os seguintes resultados de exemplo mostram que a consulta de teste na nova tabela foi mais rápida e mais econômica do que a consulta na tabela antiga.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/ctas-insert-into-etl.html)

1. Execute a seguinte consulta de exemplo na tabela original. A consulta calcula a temperatura máxima média (Celsius), a temperatura mínima média (Celsius) e a precipitação média (mm) da Terra em 2018.

   ```
   SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS value
   FROM original_csv
   WHERE element IN ('TMIN', 'TMAX', 'PRCP') AND substr("date",1,4) = '2018'
   GROUP BY 1
   ```

1. Observe o tempo em que a consulta foi executada e a quantidade de dados verificados.

1. Execute a mesma consulta na nova tabela, observando o tempo de execução da consulta e a quantidade de dados verificados.

   ```
   SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS value
   FROM new_parquet
   WHERE element IN ('TMIN', 'TMAX', 'PRCP') and year = '2018'
   GROUP BY 1
   ```

1. Compare os resultados e calcule a diferença de performance e custo. Os seguintes resultados de exemplo mostram que a consulta de teste na nova tabela foi mais rápida e mais econômica do que a consulta na tabela antiga.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/ctas-insert-into-etl.html)

## Resumo
<a name="ctas-insert-into-etl-summary"></a>

Este tópico mostrou como executar operações ETL usando as instruções CTAS e INSERT INTO no Athena. Você executou o primeiro conjunto de transformações usando uma instrução CTAS que converteu dados para o formato Parquet com compactação Snappy. A instrução CTAS também converteu o conjunto de dados de não particionado em particionado. Isso reduziu seu tamanho e reduziu os custos de execução das consultas. Quando novos dados são disponibilizados, é possível usar uma instrução INSERT INTO para transformar e carregar os dados na tabela criada com a instrução CTAS.

# Usar CTAS e INSERT INTO para resolver o limite de 100 partições
<a name="ctas-insert-into"></a>

Athena tem um limite de 100 partições por consulta `CREATE TABLE AS SELECT` ([CTAS](ctas.md)). Da mesma forma, é possível adicionar, no máximo, 100 partições a uma tabela de destino com uma instrução [INSERT INTO](https://docs.aws.amazon.com/athena/latest/ug/insert-into.html).

Se exceder essa limitação, você poderá receber a mensagem de erro HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (Limite excedido de 100 gravadores abertos para partições/buckets). Para contornar essa limitação, é possível usar uma instrução CTAS e uma série de instruções `INSERT INTO` que criam ou inserem até 100 partições cada.

O exemplo neste tópico usa um banco de dados chamado `tpch100` cujos dados residem no local do bucket do Amazon S3 s3://amzn-s3-demo-bucket/.

**Como usar CTAS e INSERT INTO para criar uma tabela com mais de 100 partições**

1. Use uma instrução `CREATE EXTERNAL TABLE` para criar uma tabela particionada no campo desejado.

   A instrução de exemplo a seguir particiona os dados de acordo com a coluna `l_shipdate`. A tabela tem 2.525 partições.

   ```
   CREATE EXTERNAL TABLE `tpch100.lineitem_parq_partitioned`(
     `l_orderkey` int, 
     `l_partkey` int, 
     `l_suppkey` int, 
     `l_linenumber` int, 
     `l_quantity` double, 
     `l_extendedprice` double, 
     `l_discount` double, 
     `l_tax` double, 
     `l_returnflag` string, 
     `l_linestatus` string, 
     `l_commitdate` string, 
     `l_receiptdate` string, 
     `l_shipinstruct` string, 
     `l_comment` string)
   PARTITIONED BY ( 
     `l_shipdate` string)
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION   's3://amzn-s3-demo-bucket/lineitem/'
   ```

1. Execute um comando `SHOW PARTITIONS <table_name>` conforme o seguinte para listar as partições.

   ```
   SHOW PARTITIONS lineitem_parq_partitioned
   ```

   Veja a seguir os resultados parciais de exemplo.

   ```
   /*
   l_shipdate=1992-01-02
   l_shipdate=1992-01-03
   l_shipdate=1992-01-04
   l_shipdate=1992-01-05
   l_shipdate=1992-01-06
   
   ...
   
   l_shipdate=1998-11-24
   l_shipdate=1998-11-25
   l_shipdate=1998-11-26
   l_shipdate=1998-11-27
   l_shipdate=1998-11-28
   l_shipdate=1998-11-29
   l_shipdate=1998-11-30
   l_shipdate=1998-12-01
   */
   ```

1. Execute uma consulta CTAS para criar uma tabela particionada. 

   O exemplo a seguir cria uma tabela chamada `my_lineitem_parq_partitioned` e usa a cláusula `WHERE ` para restringir `DATE` a um valor anterior a `1992-02-01`. Como o conjunto de dados de exemplo começa com janeiro de 1992, somente partições para janeiro de 1992 são criadas.

   ```
   CREATE table my_lineitem_parq_partitioned
   WITH (partitioned_by = ARRAY['l_shipdate']) AS
   SELECT l_orderkey,
            l_partkey,
            l_suppkey,
            l_linenumber,
            l_quantity,
            l_extendedprice,
            l_discount,
            l_tax,
            l_returnflag,
            l_linestatus,
            l_commitdate,
            l_receiptdate,
            l_shipinstruct,
            l_comment,
            l_shipdate
   FROM tpch100.lineitem_parq_partitioned
   WHERE cast(l_shipdate as timestamp) < DATE ('1992-02-01');
   ```

1. Execute o comando `SHOW PARTITIONS` para verificar se a tabela contém as partições desejadas.

   ```
   SHOW PARTITIONS my_lineitem_parq_partitioned;
   ```

   As partições no exemplo são de janeiro de 1992.

   ```
   /*
   l_shipdate=1992-01-02
   l_shipdate=1992-01-03
   l_shipdate=1992-01-04
   l_shipdate=1992-01-05
   l_shipdate=1992-01-06
   l_shipdate=1992-01-07
   l_shipdate=1992-01-08
   l_shipdate=1992-01-09
   l_shipdate=1992-01-10
   l_shipdate=1992-01-11
   l_shipdate=1992-01-12
   l_shipdate=1992-01-13
   l_shipdate=1992-01-14
   l_shipdate=1992-01-15
   l_shipdate=1992-01-16
   l_shipdate=1992-01-17
   l_shipdate=1992-01-18
   l_shipdate=1992-01-19
   l_shipdate=1992-01-20
   l_shipdate=1992-01-21
   l_shipdate=1992-01-22
   l_shipdate=1992-01-23
   l_shipdate=1992-01-24
   l_shipdate=1992-01-25
   l_shipdate=1992-01-26
   l_shipdate=1992-01-27
   l_shipdate=1992-01-28
   l_shipdate=1992-01-29
   l_shipdate=1992-01-30
   l_shipdate=1992-01-31
   */
   ```

1. Use uma instrução `INSERT INTO` para adicionar partições à tabela. 

   O exemplo a seguir adiciona partições para as datas do mês de fevereiro de 1992.

   ```
   INSERT INTO my_lineitem_parq_partitioned
   SELECT l_orderkey,
            l_partkey,
            l_suppkey,
            l_linenumber,
            l_quantity,
            l_extendedprice,
            l_discount,
            l_tax,
            l_returnflag,
            l_linestatus,
            l_commitdate,
            l_receiptdate,
            l_shipinstruct,
            l_comment,
            l_shipdate
   FROM tpch100.lineitem_parq_partitioned
   WHERE cast(l_shipdate as timestamp) >= DATE ('1992-02-01')
   AND cast(l_shipdate as timestamp) < DATE ('1992-03-01');
   ```

1. Execute `SHOW PARTITIONS` novamente.

   ```
   SHOW PARTITIONS my_lineitem_parq_partitioned;
   ```

   A tabela de exemplo agora tem partições de janeiro e fevereiro de 1992.

   ```
   /*
   l_shipdate=1992-01-02
   l_shipdate=1992-01-03
   l_shipdate=1992-01-04
   l_shipdate=1992-01-05
   l_shipdate=1992-01-06
   
   ...
   
   l_shipdate=1992-02-20
   l_shipdate=1992-02-21
   l_shipdate=1992-02-22
   l_shipdate=1992-02-23
   l_shipdate=1992-02-24
   l_shipdate=1992-02-25
   l_shipdate=1992-02-26
   l_shipdate=1992-02-27
   l_shipdate=1992-02-28
   l_shipdate=1992-02-29
   */
   ```

1. Continue a usar instruções `INSERT INTO` que leem e adicionam até 100 partições cada. Continue até atingir o número de partições necessárias.
**Importante**  
Ao definir a condição `WHERE`, certifique-se de que as consultas não se sobreponham. Caso contrário, algumas partições podem ter dados duplicados.

# Usar SerDes
<a name="serde-reference"></a>

O Athena oferece suporte a várias bibliotecas SerDe (serializador/desserializador) que analisam dados a partir de uma variedade de formatos de dados. Ao criar uma tabela no Athena, você pode especificar um SerDe que corresponda ao formato em que seus dados estão. O Athena não aceita SerDes personalizado. 

O Athena pode usar bibliotecas SerDe para a criação de tabelas e a consulta de dados em formatos CSV, TSV, com delimitação personalizada e JSON, dados de formatos relacionados ao Hadoop, ORC, Avro e Parquet, logs do Logstash, logs do AWS CloudTrail e logs do Apache WebServer. Cada um desses formatos de dados tem uma ou mais bibliotecas de serializador-desserializador (SerDe) que o Athena pode usar para analisar os dados.

**nota**  
Os formatos listados nesta seção são usados pelo Athena para ler dados. Para obter informações sobre os formatos que o Athena usa para gravar dados ao executar consultas CTAS, veja [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md).

**Topics**
+ [

# Escolha de um SerDe para seus dados
](supported-serdes.md)
+ [

# Usar um SerDe para criar uma tabela
](serde-create-a-table.md)
+ [

# Amazon Ion Hive SerDe
](ion-serde.md)
+ [

# Avro SerDe
](avro-serde.md)
+ [

# Grok SerDe
](grok-serde.md)
+ [

# Bibliotecas SerDe JSON
](json-serde.md)
+ [

# Bibliotecas SerDe CSV
](serde-csv-choices.md)
+ [

# ORC SerDe
](orc-serde.md)
+ [

# Parquet SerDe
](parquet-serde.md)
+ [

# Regex SerDe
](regex-serde.md)

# Escolha de um SerDe para seus dados
<a name="supported-serdes"></a>

A tabela a seguir lista os formatos de dados compatíveis com o Athena e as bibliotecas SerDe correspondentes.


**Formatos de dados e SerDes compatíveis**  

| Formato de dados | Descrição | Tipos de SerDe compatíveis com o Athena | 
| --- | --- | --- | 
| Amazon Ion | O Amazon Ion é um formato de dados autodescritivo e com tipagem rica que é um superconjunto de JSON. Esse formato de código aberto foi desenvolvido pela Amazon. | Use a [Amazon Ion Hive SerDe](ion-serde.md). | 
|  Apache Avro  |  Um formato para armazenar dados no Hadoop que usa esquemas baseados em JSON para valores de registro.  |  Use o [Avro SerDe](avro-serde.md).  | 
|  Apache Parquet  |  Um formato para armazenamento colunar de dados no Hadoop.  |  Use o [Parquet SerDe](parquet-serde.md) e a compactação SNAPPY.  | 
|  Logs do Apache WebServer  |  Um formato para armazenar logs no Apache WebServer.  |  Use o [Grok SerDe](grok-serde.md) ou [Regex SerDe](regex-serde.md).  | 
|  Logs do CloudTrail  |  Um formato para armazenar logs no CloudTrail.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/supported-serdes.html)  | 
|  Comma-Separated Values (CSV – Valores separados por vírgula)  |  Em dados em formato CSV, cada linha representa um registro de dados, e cada registro consiste em um ou mais campos, separados por vírgulas.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/supported-serdes.html)  | 
|  Delimitação personalizada  |  Em dados nesse formato, cada linha representa um registro de dados, e os registros são separados por um delimitador de caractere único personalizado.  |  Use o [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md) e especifique um delimitador de caractere único personalizado.  | 
|  JSON (JavaScript Object Notation)  |  Em dados JSON, cada linha representa um registro de dados, e cada registro consiste em pares de atributo-valor e matrizes, separados por vírgulas.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/supported-serdes.html)  | 
|  Logs do Logstash  |  Um formato para armazenar logs no Logstash.  |  Use o [Grok SerDe](grok-serde.md).  | 
|  Optimized Row Columnar (ORC – Colunar de linha otimizada)  |  Um formato para armazenamento colunar otimizado de dados do Hive.  |  Use o [ORC SerDe](orc-serde.md) e a compactação ZLIB.  | 
|  Tab-Separated Values (TSB – Valores separados por tabulação)  |  Em dados em formato TSV, cada linha representa um registro de dados, e cada registro consiste em um ou mais campos, separados por tabulações.  |  Use o [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md) e especifique o caractere separador como `FIELDS TERMINATED BY '\t'`.  | 

# Usar um SerDe para criar uma tabela
<a name="serde-create-a-table"></a>

Para usar um SerDe ao criar uma tabela no Athena, siga um destes métodos:
+ Especifique `ROW FORMAT DELIMITED` e use as instruções DDL para determinar os delimitadores de campo, como no exemplo a seguir. Quando você especifica `ROW FORMAT DELIMITED`, por padrão, o Athena usa o LazySimpleSerDe.

  ```
  ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ','
  ESCAPED BY '\\'
  COLLECTION ITEMS TERMINATED BY '|'
  MAP KEYS TERMINATED BY ':'
  ```

  Para ver exemplos de `ROW FORMAT DELIMITED`, consulte os seguintes tópicos:

  [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md)

  [Consultar logs do Amazon CloudFront](cloudfront-logs.md)

  [Consulta a logs do Amazon EMR](emr-logs.md)

  [Consultar os logs de fluxo do Amazon VPC](vpc-flow-logs.md)

  [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md)
+ Use `ROW FORMAT SERDE` para especificar claramente o tipo de SerDe que o Athena deve usar ao ler e gravar dados na tabela. O exemplo a seguir especifica o LazySimpleSerDe. Para especificar os delimitadores, use `WITH SERDEPROPERTIES`. As propriedades especificadas por `WITH SERDEPROPERTIES` correspondem às instruções separadas (como `FIELDS TERMINATED BY`) no exemplo de `ROW FORMAT DELIMITED`.

  ```
  ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
  WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ',',
  'collection.delim' = '|',
  'mapkey.delim' = ':',
  'escape.delim' = '\\'
  )
  ```

  Para ver exemplos de `ROW FORMAT SERDE`, consulte os seguintes tópicos:

  [Avro SerDe](avro-serde.md)

  [Grok SerDe](grok-serde.md)

  [Bibliotecas SerDe JSON](json-serde.md)

  [Open CSV SerDe para processamento de CSV](csv-serde.md)

  [Regex SerDe](regex-serde.md)

# Amazon Ion Hive SerDe
<a name="ion-serde"></a>

Você pode usar o Amazon Ion Hive SerDe para consultar dados armazenados no formato [Amazon Ion](https://amzn.github.io/ion-docs/guides/cookbook.html). O Amazon Ion é um formato de dados de código aberto ricamente tipado e autodescritivo. O formato do Amazon Ion é usado na linguagem de consulta SQL de código aberto [PartiQL](https://partiql.org/).

O Amazon Ion tem formatos binários e de texto intercambiáveis. Esse recurso combina a facilidade de uso do texto com a eficiência da codificação binária.

Para consultar dados do Amazon Ion no Athena, você pode usar o [Amazon Ion Hive SerDe](https://github.com/amzn/ion-hive-serde), que serializa e desserializa os dados do Amazon Ion. A desserialização permite que você execute consultas nos dados do Amazon Ion ou leia os dados para gravá-los em um formato diferente, como Parquet ou ORC. A serialização permite gerar dados no formato Amazon Ion usando consultas `CREATE TABLE AS SELECT` (CTAS) ou `INSERT INTO` para copiar dados de tabelas existentes.

**nota**  
Como o Amazon Ion é um superconjunto de JSON, você pode usar o Amazon Ion Hive SerDe para consultar conjuntos de dados JSON em formatos diferentes do Amazon Ion. Ao contrário de outras [bibliotecas de SerDe JSON](https://docs.aws.amazon.com/athena/latest/ug/json-serde.html), o Amazon Ion SerDe não espera que cada linha de dados esteja em uma única linha. Esse recurso é útil quando você deseja consultar conjuntos de dados JSON que passaram por reformatação automática ou usar caracteres de nova linha para dividir os campos em uma linha.

Para obter informações adicionais e exemplos de como consultar o Amazon Ion com o Athena, consulte [Analise conjuntos de dados do Amazon Ion usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-amazon-ion-datasets-using-amazon-athena/).

## Nome da biblioteca de serialização
<a name="library-name"></a>

O nome da biblioteca de serialização do Amazon Ion SerDe é `com.amazon.ionhiveserde.IonHiveSerDe`. Para obter informações sobre o código-fonte, consulte [Amazon Ion Hive SerDe](https://github.com/amazon-ion/ion-hive-serde) em GitHub.com.

## Considerações e limitações
<a name="ion-serde-considerations-and-limitations"></a>
+ **Campos duplicados**: as structs do Amazon Ion são ordenadas e oferecem suporte a campos duplicados, o que não acontece com `STRUCT<>` e `MAP<>` do Hive. Assim, quando você desserializa um campo duplicado de uma struct do Amazon Ion, um único valor é escolhido de forma não determinística e os outros são ignorados.
+ **Tabelas de símbolos externos sem suporte**: atualmente, o Athena não oferece suporte a tabelas de símbolos externos ou às seguintes propriedades do Amazon Ion Hive SerDe:
  + `ion.catalog.class`
  + `ion.catalog.file`
  + `ion.catalog.url`
  + `ion.symbol_table_imports`
+ **Extensões de arquivo**: o Amazon Ion usa extensões de arquivo para determinar o codec de compactação a ser usado na desserialização de arquivos do Amazon Ion. Assim, os arquivos compactados devem ter a extensão que corresponde ao algoritmo de compactação usado. Por exemplo, se for usado o ZSTD, os arquivos correspondentes deverão ter a extensão `.zst`.
+ **Dados homogêneos**: o Amazon Ion não tem restrições de tipos de dados que podem ser usados como valores em campos específicos. Por exemplo, dois documentos diferentes do Amazon Ion podem ter um campo com o mesmo nome que tenha tipos de dados diferentes. No entanto, como o Hive usa um esquema, todos os valores extraídos para uma única coluna do Hive devem ter o mesmo tipo de dado.
+ **Restrições de tipo de chave**: ao serializar dados de outro formato para o Amazon Ion, certifique-se de que o tipo de chave do mapa seja `STRING`, `VARCHAR` ou `CHAR`. Embora o Hive permita usar qualquer tipo de dado primitivo como chave do mapa, os [símbolos do Amazon Ion](https://amzn.github.io/ion-docs/docs/symbols.html) devem ser um tipo de string.
+ **Tipo union**: atualmente, o Athena não oferece suporte ao [tipo union](https://cwiki.apache.org/confluence/display/hive/languagemanual+types/#LanguageManualTypes-UnionTypesunionUnionTypes) do Hive.
+ **Tipo de dados “double”**: no momento, o Amazon Ion não oferece suporte ao tipo de dados `double`.

**Topics**
+ [

## Nome da biblioteca de serialização
](#library-name)
+ [

## Considerações e limitações
](#ion-serde-considerations-and-limitations)
+ [

# Criar tabelas do Amazon Ion
](ion-serde-using-create-table.md)
+ [

# Usar CTAS e INSERT INTO para criar tabelas do Amazon Ion
](ion-serde-using-ctas-and-insert-into-to-create-ion-tables.md)
+ [

# Referência de propriedade SerDe do Amazon Ion
](ion-serde-using-ion-serde-properties.md)
+ [

# Usar extratores de caminhos
](ion-serde-using-path-extractors.md)

# Criar tabelas do Amazon Ion
<a name="ion-serde-using-create-table"></a>

Para criar uma tabela no Athena com dados armazenados no formato Amazon Ion, você pode usar uma das seguintes técnicas em uma instrução CREATE TABLE:
+ Especifique `STORED AS ION`. Neste uso, você não precisa especificar explicitamente o Amazon Ion Hive SerDe. Essa escolha é a opção mais direta.
+ Especifique os caminhos de classe do Amazon Ion nos campos `ROW FORMAT SERDE`, `INPUTFORMAT` e `OUTPUTFORMAT`.

Você também pode usar instruções `CREATE TABLE AS SELECT` (CTAS) para criar tabelas do Amazon Ion no Athena. Para mais informações, consulte [Usar CTAS e INSERT INTO para criar tabelas do Amazon Ion](ion-serde-using-ctas-and-insert-into-to-create-ion-tables.md).

## Especificar STORED AS ION
<a name="ion-serde-specifying-stored-as-ion"></a>

O exemplo a seguir de instrução `CREATE TABLE` usa `STORED AS ION` antes da cláusula `LOCATION` para criar uma tabela com base em dados de voo no formato Amazon Ion. A cláusula `LOCATION` especifica o bucket ou a pasta em que estão localizados os arquivos de entrada no formato Ion. Todos os arquivos no local especificado estão verificados.

```
CREATE EXTERNAL TABLE flights_ion (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
)
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/'
```

## Especificar caminhos de classe do Amazon Ion
<a name="ion-serde-specifying-the-ion-class-paths"></a>

Em vez de usar a sintaxe `STORED AS ION`, você pode especificar explicitamente os valores de caminho de classe do Ion para as cláusulas `ROW FORMAT SERDE`, `INPUTFORMAT` e `OUTPUTFORMAT`, como mostrado a seguir.


****  

| Parâmetro | Caminho de classe do Ion | 
| --- | --- | 
| ROW FORMAT SERDE | 'com.amazon.ionhiveserde.IonHiveSerDe' | 
| STORED AS INPUTFORMAT | 'com.amazon.ionhiveserde.formats.IonInputFormat' | 
| OUTPUTFORMAT | 'com.amazon.ionhiveserde.formats.IonOutputFormat' | 

A consulta DDL a seguir usa essa técnica para criar a mesma tabela externa do exemplo anterior.

```
CREATE EXTERNAL TABLE flights_ion (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
)
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
STORED AS INPUTFORMAT
 'com.amazon.ionhiveserde.formats.IonInputFormat'
OUTPUTFORMAT
 'com.amazon.ionhiveserde.formats.IonOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/'
```

Para obter informações sobre as propriedades SerDe para instruções `CREATE TABLE` no Athena, consulte [Referência de propriedade SerDe do Amazon Ion](ion-serde-using-ion-serde-properties.md).

# Usar CTAS e INSERT INTO para criar tabelas do Amazon Ion
<a name="ion-serde-using-ctas-and-insert-into-to-create-ion-tables"></a>

Você pode usar as instruções `CREATE TABLE AS SELECT` (CTAS) e `INSERT INTO` para copiar ou inserir dados de uma tabela em uma nova tabela no formato Amazon Ion no Athena.

Em uma consulta CTAS, especifique `format='ION'` na cláusula `WITH`, como no exemplo a seguir.

```
CREATE TABLE new_table
WITH (format='ION')
AS SELECT * from existing_table
```

Por padrão, o Athena serializa os resultados do Amazon Ion em [formato binário Ion](https://amzn.github.io/ion-docs/docs/binary.html), mas você também pode usar o formato de texto. Para usar o formato de texto, especifique `ion_encoding = 'TEXT'` na cláusula CTAS `WITH`, como no exemplo a seguir.

```
CREATE TABLE new_table
WITH (format='ION', ion_encoding = 'TEXT')
AS SELECT * from existing_table
```

Para obter mais informações sobre as propriedades específicas do Amazon Ion na cláusula `WITH` de CTAS, consulte [Propriedades do Amazon Ion para a cláusula WITH de CTAS](#ion-serde-ctas-with-clause-properties).

## Propriedades do Amazon Ion para a cláusula WITH de CTAS
<a name="ion-serde-ctas-with-clause-properties"></a>

Em uma consulta CTAS, você pode usar a cláusula `WITH` para especificar o formato Amazon Ion e, opcionalmente, especificar a codificação do Amazon Ion e/ou o algoritmo de compactação a usar.

**formato**  
Você pode especificar a palavra-chave `ION` como a opção de formato na cláusula `WITH` de uma consulta CTAS. Ao fazer isso, a tabela que você cria usa o formato especificado de `IonInputFormat` para leituras e serializa dados no formato especificado de `IonOutputFormat`.  
O exemplo a seguir especifica que a consulta CTAS usa o formato Amazon Ion.  

```
WITH (format='ION')
```

**ion\$1encoding**  
Opcional  
Padrão: `BINARY`  
Valores: `BINARY`, `TEXT`  
Especifica se os dados são serializados no formato binário ou no formato de texto do Amazon Ion. O exemplo a seguir especifica o formato de texto do Amazon Ion.  

```
WITH (format='ION', ion_encoding='TEXT')
```

**write\$1compression**  
Opcional  
Padrão: `GZIP`  
Valores: `GZIP`, `ZSTD`, `BZIP2`, `SNAPPY`, `NONE`  
Especifica o algoritmo de compactação a ser usado para compactar os arquivos de saída.  
O exemplo a seguir especifica que a consulta CTAS grava a saída no formato Amazon Ion usando o algoritmo de compactação [Zstandard](https://facebook.github.io/zstd/).  

```
WITH (format='ION', write_compression = 'ZSTD')       
```
Para obter mais informações sobre compactação de dados no Athena, consulte [Usar compactação no Athena](compression-formats.md). 

Para obter informações sobre outras propriedades de CTAS em Athena, consulte [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties).

# Referência de propriedade SerDe do Amazon Ion
<a name="ion-serde-using-ion-serde-properties"></a>

Este tópico contém informações sobre as propriedades SerDe para instruções `CREATE TABLE` no Athena. Para obter mais informações e exemplos do uso de propriedades do Amazon Ion SerDe, consulte [SerDe properties](https://github.com/amzn/ion-hive-serde/blob/master/docs/serde-properties.md) (Propriedades SerDe) na documentação sobre o Amazon Ion Hive SerDe no [GitHub](https://github.com/amzn/ion-hive-serde/tree/master/docs).

## Como especificar propriedades SerDe do Amazon Ion
<a name="ion-serde-specifying-ion-serde-properties"></a>

Para especificar propriedades para o Amazon Ion Hive SerDe na instrução `CREATE TABLE`, use a cláusula `WITH SERDEPROPERTIES`. Como `WITH SERDEPROPERTIES` é um subcampo da cláusula `ROW FORMAT SERDE`, você deve especificar primeiro `ROW FORMAT SERDE` e o caminho da classe do Amazon Ion Hive SerDe, como mostra a sintaxe a seguir.

```
...
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
WITH SERDEPROPERTIES (
 'property' = 'value',
 'property' = 'value',
...
)
```

Observe que, embora a cláusula `ROW FORMAT SERDE` seja obrigatória se você quiser usar `WITH SERDEPROPERTIES`, será possível usar `STORED AS ION` ou a sintaxe mais longa `INPUTFORMAT` e `OUTPUTFORMAT` para especificar o formato Amazon Ion.

## Propriedades SerDe do Amazon Ion
<a name="ion-serde-ion-serde-properties"></a>

As propriedades do Amazon Ion SerDe que podem ser usadas em instruções `CREATE TABLE` no Athena são listadas a seguir.

**ion.encoding**  
Opcional  
Padrão: `BINARY`  
Valores: `BINARY`, `TEXT`  
Esta propriedade declara se novos valores adicionados são serializados como [Amazon Ion binário](https://amzn.github.io/ion-docs/docs/binary.html) ou no formato de texto do Amazon Ion.  
O exemplo de propriedade SerDe a seguir especifica o formato de texto do Amazon Ion.  

```
'ion.encoding' = 'TEXT'
```

**ion.fail\$1on\$1overflow**  
Opcional  
Padrão: `true`  
Valores: `true`, `false`  
O Amazon Ion permite tipos numéricos arbitrariamente grandes, o que não é permitido pelo Hive. Por padrão, o SerDe falhará se o valor do Amazon Ion não se encaixar na coluna Hive, mas você pode usar a opção de configuração `fail_on_overflow` para permitir que o valor estoure em vez de falhar.  
Essa propriedade pode ser definida no nível de tabela ou de coluna. Para defini-la no nível de tabela, especifique `ion.fail_on_overflow` como no exemplo a seguir. Isso define o comportamento padrão para todas as colunas.  

```
'ion.fail_on_overflow' = 'true'
```
Para controlar uma coluna específica, defina o nome da coluna entre `ion` e `fail_on_overflow`, delimitado por pontos, como no exemplo a seguir.  

```
'ion.<column>.fail_on_overflow' = 'false'
```

**ion.path\$1extractor.case\$1sensitive**  
Opcional  
Padrão: `false`  
Valores: `true`, `false`  
Determina se os nomes de campos do Amazon Ion devem diferenciar maiúsculas de minúsculas. Quando for definido como `false`, o SerDe ignorará a análise de maiúsculas e minúsculas nos nomes de campo do Amazon Ion.  
Por exemplo, suponha que você tenha um esquema de tabela do Hive que defina um campo `alias` em minúsculas e um documento do Amazon Ion com os campos `alias` e `ALIAS`, como no exemplo a seguir.  

```
-- Hive Table Schema
alias: STRING

-- Amazon Ion Document
{ 'ALIAS': 'value1'} 
{ 'alias': 'value2'}
```
O exemplo a seguir mostra as propriedades SerDe e a tabela extraída resultante quando a diferenciação de maiúsculas e minúsculas for definida como `false`:  

```
-- Serde properties
'ion.alias.path_extractor' = '(alias)'
'ion.path_extractor.case_sensitive' = 'false'

--Extracted Table
| alias    |
|----------|
| "value1" |
| "value2" |
```
O exemplo a seguir mostra as propriedades SerDe e a tabela extraída resultante quando a diferenciação de maiúsculas e minúsculas for definida como `true`:  

```
-- Serde properties
'ion.alias.path_extractor' = '(alias)'
'ion.path_extractor.case_sensitive' = 'true'

--Extracted Table
| alias    |
|----------|
| "value2" |
```
No segundo caso, o `value1` do campo `ALIAS` é ignorado quando a diferenciação de maiúsculas e minúsculas é definida como `true` e o extrator de caminhos é especificado como `alias`.

**ion.*<column>*.path\$1extractor**  
Opcional  
Padrão: ND  
Valores: string com caminho de pesquisa  
Cria um extrator de caminhos com o caminho de pesquisa especificado para a coluna dada. Os extratores de caminhos mapeiam os campos do Amazon Ion para colunas do Hive. Se nenhum extrator de caminhos for especificado, o Athena criará dinamicamente extratores de caminhos em tempo de execução com base nos nomes das colunas.  
O exemplo de extrator de caminhos a seguir mapeia `example_ion_field` para `example_hive_column`.  

```
'ion.example_hive_column.path_extractor' = '(example_ion_field)'
```
Para obter mais informações sobre extratores de caminhos e caminhos de pesquisa, consulte [Usar extratores de caminhos](ion-serde-using-path-extractors.md).

**ion.timestamp.serialization\$1offset**  
Opcional  
Padrão: `'Z'`  
Valores: `OFFSET`, em que `OFFSET ` é representado como `<signal>hh:mm`. Valores de exemplo: `01:00`, `+01:00`, `-09:30`, `Z` (UTC, mesmo que 00:00)  
Ao contrário dos [carimbos de data/hora](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-timestamp) do Apache Hive, que não têm fuso horário incorporado e são armazenados como um deslocamento da época UNIX, os carimbos de data/hora do Amazon Ion têm um deslocamento. Use essa propriedade para especificar o deslocamento na serialização para o Amazon Ion.  
O exemplo a seguir adiciona um deslocamento de uma hora.  

```
'ion.timestamp.serialization_offset' = '+01:00'       
```

**ion.serialize\$1null**  
Opcional  
Padrão: `OMIT`  
Valores: `OMIT`, `UNTYPED`, `TYPED`  
O Amazon Ion SerDe pode ser configurado para serializar ou omitir colunas que tenham valores nulos. Você pode optar por gravar nulos fortemente tipados (`TYPED`) ou nulos não tipados (`UNTYPED`). Nulos fortemente tipados são determinados com base no mapeamento padrão de tipos entre o Amazon Ion e o Hive.  
O exemplo a seguir especifica nulos fortemente tipados.  

```
'ion.serialize_null'='TYPED'
```

**ion.ignore\$1malformed**  
Opcional  
Padrão: `false`  
Valores: `true`, `false`  
Quando for definida como `true`, a propriedade ignorará as entradas malformadas ou todo o arquivo se o SerDe não conseguir lê-lo. Para obter mais informações, consulte [Ignore malformed](https://github.com/amzn/ion-hive-serde/blob/master/docs/serde-properties.md#ignore-malformed) (Ignorar entradas malformadas) na documentação do GitHub.

**ion.*<column>*.serialize\$1as**  
Opcional  
Padrão: tipo padrão para a coluna.  
Valores: string contendo o tipo do Amazon Ion  
Determina o tipo de dado do Amazon Ion no qual um valor é serializado. Como os tipos do Amazon Ion e do Hive nem sempre têm um mapeamento direto, alguns tipos do Hive têm vários tipos de dados válidos para serialização. Para serializar dados como um tipo de dado não padrão, use essa propriedade. Para obter mais informações sobre o mapeamento de tipos, consulte a página [Type mapping](https://github.com/amzn/ion-hive-serde/blob/master/docs/type-mapping.md) (Mapeamento de tipos) do Amazon Ion no GitHub.  
Por padrão, as colunas binárias do Hive são serializadas como blobs do Amazon Ion, mas também podem ser serializadas como um [clob do Amazon Ion](https://amzn.github.io/ion-docs/docs/stringclob.html#ion-clob) (objeto grande de caracteres). O exemplo a seguir serializa a coluna `example_hive_binary_column` como um clob.  

```
'ion.example_hive_binary_column.serialize_as' = 'clob'       
```

# Usar extratores de caminhos
<a name="ion-serde-using-path-extractors"></a>

O Amazon Ion é um formato de arquivo em estilo de documento, mas o Apache Hive é um formato de coluna simples. Você pode usar propriedades especiais do Amazon Ion SerDe, chamadas de `path extractors`, para fazer o mapeamento entre os dois formatos. Os extratores de caminhos nivelam o formato hierárquico do Amazon Ion, mapeiam valores do Amazon Ion em relação às colunas do Hive e podem ser usados para renomear campos.

O Athena pode gerar seus extratores, mas você também poderá definir os próprios extratores, se necessário.

**Topics**
+ [

# Usar extratores de caminhos gerados pelo Athena
](ion-serde-generated-path-extractors.md)
+ [

# Especificar seus próprios extratores de caminhos
](ion-serde-specifying-your-own-path-extractors.md)
+ [

# Usar caminhos de pesquisa em extratores de caminhos
](ion-serde-using-search-paths-in-path-extractors.md)
+ [

# Exemplos de extratores de caminhos
](ion-serde-examples.md)

# Usar extratores de caminhos gerados pelo Athena
<a name="ion-serde-generated-path-extractors"></a>

Por padrão, o Athena pesquisa valores de nível superior do Amazon Ion que correspondam aos nomes de coluna do Hive e cria extratores de caminhos em tempo de execução com base nesses valores. Se o formato de dados do Amazon Ion corresponder ao esquema da tabela do Hive, o Athena gerará dinamicamente os extratores e você não precisará adicionar nenhum extrator de caminho adicional. Esses extratores de caminhos padrão não são armazenados nos metadados da tabela.

O exemplo a seguir mostra como o Athena gera extratores com base no nome da coluna.

```
-- Example Amazon Ion Document
{
    identification: {
        name: "John Smith",
        driver_license: "XXXX"
    },
    
    alias: "Johnny"    
}

-- Example DDL
CREATE EXTERNAL TABLE example_schema2 (
    identification MAP<STRING, STRING>,
    alias STRING
)
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/path_extraction1/'
```

Os extratores no exemplo a seguir são gerados pelo Athena. O primeiro extrai o campo `identification` para a coluna `identification`, e o segundo extrai o campo `alias` para a coluna `alias`.

```
'ion.identification.path_extractor' = '(identification)'
'ion.alias.path_extractor' = '(alias)'
```

O exemplo a seguir mostra a tabela extraída.

```
|                  identification                    |  alias   |
|----------------------------------------------------|----------|
|{["name", "driver_license"],["John Smith", "XXXX"]} | "Johnny" |
```

# Especificar seus próprios extratores de caminhos
<a name="ion-serde-specifying-your-own-path-extractors"></a>

Se os campos do Amazon Ion não forem mapeados perfeitamente para as colunas do Hive, você poderá especificar seus próprios extratores de caminhos. Use a sintaxe a seguir na cláusula `WITH SERDEPROPERTIES` da instrução `CREATE TABLE`.

```
WITH SERDEPROPERTIES (
   "ion.path_extractor.case_sensitive" = "<Boolean>", 
   "ion.<column_name>.path_extractor" = "<path_extractor_expression>"
)
```

**nota**  
Por padrão, os extratores de caminhos não diferenciam maiúsculas de minúsculas. Para substituir essa configuração, defina a propriedade SerDe [ion.path_extractor.case_sensitive](ion-serde-using-ion-serde-properties.md#ioncase) como `true`.

# Usar caminhos de pesquisa em extratores de caminhos
<a name="ion-serde-using-search-paths-in-path-extractors"></a>

A sintaxe da propriedade SerDe para extratores de caminhos contém uma *<path\$1extractor\$1expression>*:

```
"ion.<column_name>.path_extractor" = "<path_extractor_expression>"         
```

Você pode usar a *<path\$1extractor\$1expression>* para especificar um caminho de pesquisa que analise o documento do Amazon Ion e encontre os dados correspondentes. O caminho de pesquisa é colocado entre parênteses e pode conter um ou mais dos componentes separados por espaços a seguir.
+ **Curinga**: corresponde todos os valores.
+ **Índice**: corresponde o valor com o índice numérico especificado. Os índices são baseados em zero.
+ **Texto**: corresponde todos os valores cujos nomes de campo são equivalentes ao texto especificado.
+ **Anotações**: correspondem valores especificados por um componente de caminho empacotado com as anotações especificadas.

O exemplo a seguir mostra um documento do Amazon Ion e alguns exemplos de caminhos de pesquisa.

```
-- Amazon Ion document
{
    foo: ["foo1", "foo2"] ,
    bar: "myBarValue", 
    bar: A::"annotatedValue"
}

-- Example search paths
(foo 0)       # matches "foo1"
(1)           # matches "myBarValue"
(*)           # matches ["foo1", "foo2"], "myBarValue" and A::"annotatedValue"
()            # matches {foo: ["foo1", "foo2"] , bar: "myBarValue", bar: A::"annotatedValue"}
(bar)         # matches "myBarValue" and A::"annotatedValue"
(A::bar)      # matches A::"annotatedValue"
```

# Exemplos de extratores de caminhos
<a name="ion-serde-examples"></a>

Os exemplos de extratores de caminhos a seguir mostram como nivelar e renomear campos ou extrair dados como texto do Amazon Ion.

## Nivelar e renomear campos
<a name="ion-serde-flattening-and-renaming-fields"></a>

O exemplo a seguir mostra um conjunto de caminhos de pesquisa que nivelam e renomeiam campos. O exemplo usa caminhos de pesquisa para:
+ Mapear a coluna `nickname` ao campo `alias`
+ Mapear a coluna `name` ao subcampo `name` localizado no struct `identification`.

O exemplo a seguir mostra o documento do Amazon Ion.

```
-- Example Amazon Ion Document
{
    identification: {
        name: "John Smith",
        driver_license: "XXXX"
    },
    
    alias: "Johnny"    
}
```

O exemplo a seguir mostra a instrução `CREATE TABLE` que define os extratores de caminhos.

```
-- Example DDL Query
CREATE EXTERNAL TABLE example_schema2 (
    name STRING,
    nickname STRING
)
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
WITH SERDEPROPERTIES (
 'ion.nickname.path_extractor' = '(alias)',
 'ion.name.path_extractor' = '(identification name)'
 )
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/path_extraction2/'
```

O exemplo a seguir mostra os dados extraídos.

```
-- Extracted Table
| name         |   nickname   |
|--------------|--------------|
| "John Smith" |  "Johnny"    |
```

Para obter mais informações sobre caminhos de pesquisa e exemplos adicionais, consulte a página [Ion Java Path Extraction](https://github.com/amzn/ion-java-path-extraction) (Extração de caminhos Java em Ion) no GitHub.

## Extrair dados de voo para formato de texto
<a name="ion-serde-extracting-flight-data-to-text-format"></a>

O exemplo de consulta `CREATE TABLE` a seguir usa `WITH SERDEPROPERTIES` para adicionar extratores de caminhos para extrair dados de voo e especificar a codificação de saída como texto do Amazon Ion. O exemplo usa a sintaxe `STORED AS ION`.

```
CREATE EXTERNAL TABLE flights_ion (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
)
ROW FORMAT SERDE
 'com.amazon.ionhiveserde.IonHiveSerDe'
WITH SERDEPROPERTIES (
 'ion.encoding' = 'TEXT',
 'ion.yr.path_extractor'='(year)',
 'ion.quarter.path_extractor'='(results quarter)',
 'ion.month.path_extractor'='(date month)')
STORED AS ION
LOCATION 's3://amzn-s3-demo-bucket/'
```

# Avro SerDe
<a name="avro-serde"></a>

Use o Avro SerDe para criar tabelas do Athena a partir dos dados do Avro.

## Nome da biblioteca de serialização
<a name="avro-serde-library-name"></a>

O nome da biblioteca de serialização do Avro SerDe é `org.apache.hadoop.hive.serde2.avro.AvroSerDe`. Para obter informações técnicas, consulte [AvroSerDe](https://cwiki.apache.org/confluence/display/Hive/AvroSerDe) na documentação do Apache. 

## Usar o Avro SerDe
<a name="avro-serde-using"></a>

Por motivos de segurança, o Athena não oferece suporte ao uso de `avro.schema.url` para especificação do esquema de tabela; use `avro.schema.literal` em vez disso. 

Para extrair o esquema dos dados no formato Avro, use o arquivo `avro-tools-<version>.jar` do Apache localizado no subdiretório `java` da sua versão instalada do Avro. Use o parâmetro `getschema` para retornar um esquema que você possa usar em sua instrução `WITH SERDEPROPERTIES`, como no exemplo a seguir.

```
java -jar avro-tools-1.8.2.jar getschema my_data.avro
```

Para baixar o Avro, acesse [Apache Avro releases](http://avro.apache.org/releases.html#Download) (Versões do Apache Avro). Para baixar o Apache Avro Tools diretamente, acesse o [repositório do Apache Avro Tools Maven](https://mvnrepository.com/artifact/org.apache.avro/avro-tools).

Depois de obter o esquema, use uma instrução `CREATE TABLE` para criar uma tabela do Athena com base nos dados subjacentes do Avro armazenados no Amazon S3. Para especificar o Avro SerDe na sua instrução `CREATE TABLE`, use `ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'`. Especifique o esquema usando a cláusula `WITH SERDEPROPERTIES`, conforme mostrado no exemplo a seguir.

**nota**  
Substitua *myregion* em `s3://athena-examples-myregion/path/to/data/` pelo identificador da região onde o Athena é executado, por exemplo, `s3://athena-examples-us-west-1/path/to/data/`.

```
CREATE EXTERNAL TABLE flights_avro_example (
   yr INT,
   flightdate STRING,
   uniquecarrier STRING,
   airlineid INT,
   carrier STRING,
   flightnum STRING,
   origin STRING,
   dest STRING,
   depdelay INT,
   carrierdelay INT,
   weatherdelay INT
)
PARTITIONED BY (year STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='
{
   "type" : "record",
   "name" : "flights_avro_subset",
   "namespace" : "default",
   "fields" : [ {
      "name" : "yr",
      "type" : [ "null", "int" ],
      "default" : null
   }, {
      "name" : "flightdate",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "uniquecarrier",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "airlineid",
      "type" : [ "null", "int" ],
      "default" : null
   }, {
      "name" : "carrier",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "flightnum",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "origin",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "dest",
      "type" : [ "null", "string" ],
      "default" : null
   }, {
      "name" : "depdelay",
      "type" : [ "null", "int" ],
      "default" : null
   }, {
      "name" : "carrierdelay",
      "type" : [ "null", "int" ],
      "default" : null
   }, {
      "name" : "weatherdelay",
      "type" : [ "null", "int" ],
      "default" : null
    } ]
}
')
STORED AS AVRO
LOCATION 's3://athena-examples-myregion/flight/avro/';
```

Execute a instrução `MSCK REPAIR TABLE` na tabela para atualizar metadados da partição.

```
MSCK REPAIR TABLE flights_avro_example;
```

Consulte as 10 principais cidades de partida pelo número total de partidas.

```
SELECT origin, count(*) AS total_departures
FROM flights_avro_example
WHERE year >= '2000'
GROUP BY origin
ORDER BY total_departures DESC
LIMIT 10;
```

**nota**  
Os dados da tabela de voos foram extraídos dos [Voos](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) fornecidos pelo Departamento de Transportes dos EUA, [Bureau of Transportation Statistics](http://www.transtats.bts.gov/) (Agência de Estatísticas de Transportes). Saturação do original removida.

# Grok SerDe
<a name="grok-serde"></a>

O Logstash Grok SerDe é uma biblioteca com um conjunto de padrões especializados para desserialização de arquivos de texto desestruturados, normalmente logs. Cada padrão Grok é uma expressão regular nomeada. Você pode identificar e reutilizar esses padrões de desserialização conforme necessário. Isso facilita o uso de Grok, em comparação com o uso de expressões regulares. O Grok oferece um conjunto de [padrões predefinidos](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns). Você também pode criar padrões personalizados.

## Nome da biblioteca de serialização
<a name="library-name"></a>

O nome da biblioteca de serialização do Grok SerDe é `com.amazonaws.glue.serde.GrokSerDe`.

## Como usar o Grok SerDe
<a name="grok-serde-using"></a>

Para especificar o Grok SerDe ao criar uma tabela no Athena, use a cláusula `ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'`, seguida da cláusula `WITH SERDEPROPERTIES` que especifica os padrões de correspondência em seus dados, em que:
+ A expressão `input.format` define os padrões para que correspondam aos dados. Isso é obrigatório.
+ A expressão `input.grokCustomPatterns` define um padrão personalizado nomeado, que você poderá usar depois dentro da expressão `input.format`. Isso é opcional. Para incluir várias entradas padrão na expressão `input.grokCustomPatterns`, use o caractere de escape de nova linha (`\n`) para separá-las, da seguinte forma: `'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)')`.
+ As cláusulas `STORED AS INPUTFORMAT` e `OUTPUTFORMAT` são obrigatórias.
+ A cláusula `LOCATION` especifica um bucket do Amazon S3, que pode conter vários objetos de dados. Todos os objetos de dados no bucket são desserializados para criar a tabela.

## Exemplos
<a name="examples"></a>

Os exemplos nesta seção dependem da lista de padrões Grok predefinidos. Para obter mais informações, consulte [grok-patterns](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns) em GitHub.com.

### Exemplo 1
<a name="example-1"></a>

Este exemplo usa os dados de origem das entradas de maillog do Postfix salvas em `s3://amzn-s3-demo-bucket/groksample/`.

```
Feb  9 07:15:00 m4eastmail postfix/smtpd[19305]: B88C4120838: connect from unknown[192.168.55.4]
Feb  9 07:15:00 m4eastmail postfix/smtpd[20444]: B58C4330038: client=unknown[192.168.55.4]
Feb  9 07:15:03 m4eastmail postfix/cleanup[22835]: BDC22A77854: message-id=<31221401257553.5004389LCBF@m4eastmail.example.com>
```

A instrução a seguir cria uma tabela no Athena chamada `mygroktable` com base nos dados de origem usando um padrão personalizado e os padrões predefinidos que você especificar:

```
CREATE EXTERNAL TABLE `mygroktable`(
   syslogbase string,
   queue_id string,
   syslog_message string
   )
ROW FORMAT SERDE
   'com.amazonaws.glue.serde.GrokSerDe'
WITH SERDEPROPERTIES (
   'input.grokCustomPatterns' = 'POSTFIX_QUEUEID [0-9A-F]{7,12}',
   'input.format'='%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}'
   )
STORED AS INPUTFORMAT
   'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/groksample/';
```

Comece com um padrão simples, como `%{NOTSPACE:column}`, para primeiro obter as colunas mapeadas e, em seguida, especialize as colunas, se necessário.

### Exemplo 2
<a name="example-2"></a>

No exemplo a seguir, você cria uma consulta para logs Log4j. Os logs de exemplo têm as entradas neste formato:

```
2017-09-12 12:10:34,972 INFO  - processType=AZ, processId=ABCDEFG614B6F5E49, status=RUN,
threadId=123:amqListenerContainerPool23P:AJ|ABCDE9614B6F5E49||2017-09-12T12:10:11.172-0700],
executionTime=7290, tenantId=12456, userId=123123f8535f8d76015374e7a1d87c3c, shard=testapp1,
jobId=12312345e5e7df0015e777fb2e03f3c, messageType=REAL_TIME_SYNC,
action=receive, hostname=1.abc.def.com
```

Para consultar os dados desse log:
+ Adicione o padrão Grok ao `input.format` para cada coluna. Por exemplo, para `timestamp`, adicione `%{TIMESTAMP_ISO8601:timestamp}`. Para `loglevel`, adicione `%{LOGLEVEL:loglevel}`.
+ Verifique se o padrão em `input.format` está de acordo com o formato exato do log mapeando os traços (`-`) e as vírgulas que separam as entradas no formato do log.

  ```
  CREATE EXTERNAL TABLE bltest (
   timestamp STRING,
   loglevel STRING,
   processtype STRING,
   processid STRING,
   status STRING,
   threadid STRING,
   executiontime INT,
   tenantid INT,
   userid STRING,
   shard STRING,
   jobid STRING,
   messagetype STRING,
   action STRING,
   hostname STRING
   )
  ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'
  WITH SERDEPROPERTIES (
  "input.grokCustomPatterns" = 'C_ACTION receive|send',
  "input.format" = "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} - processType=%{NOTSPACE:processtype}, processId=%{NOTSPACE:processid}, status=%{NOTSPACE:status}, threadId=%{NOTSPACE:threadid}, executionTime=%{POSINT:executiontime}, tenantId=%{POSINT:tenantid}, userId=%{NOTSPACE:userid}, shard=%{NOTSPACE:shard}, jobId=%{NOTSPACE:jobid}, messageType=%{NOTSPACE:messagetype}, action=%{C_ACTION:action}, hostname=%{HOST:hostname}"
  ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  LOCATION 's3://amzn-s3-demo-bucket/samples/';
  ```

### Exemplo 3
<a name="example-3"></a>

O exemplo de instrução `CREATE TABLE` de [Logs de acesso ao servidor do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html) a seguir mostra a expressão `'input.grokCustomPatterns'` que contém duas entradas de padrão, separadas pelo caractere de escape de nova linha (`\n`), conforme mostrado neste trecho do exemplo de consulta: `'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)')`.

```
CREATE EXTERNAL TABLE `s3_access_auto_raw_02`(
  `bucket_owner` string COMMENT 'from deserializer', 
  `bucket` string COMMENT 'from deserializer', 
  `time` string COMMENT 'from deserializer', 
  `remote_ip` string COMMENT 'from deserializer', 
  `requester` string COMMENT 'from deserializer', 
  `request_id` string COMMENT 'from deserializer', 
  `operation` string COMMENT 'from deserializer', 
  `key` string COMMENT 'from deserializer', 
  `request_uri` string COMMENT 'from deserializer', 
  `http_status` string COMMENT 'from deserializer', 
  `error_code` string COMMENT 'from deserializer', 
  `bytes_sent` string COMMENT 'from deserializer', 
  `object_size` string COMMENT 'from deserializer', 
  `total_time` string COMMENT 'from deserializer', 
  `turnaround_time` string COMMENT 'from deserializer', 
  `referrer` string COMMENT 'from deserializer', 
  `user_agent` string COMMENT 'from deserializer', 
  `version_id` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'com.amazonaws.glue.serde.GrokSerDe' 
WITH SERDEPROPERTIES ( 
  'input.format'='%{NOTSPACE:bucket_owner} %{NOTSPACE:bucket} \\[%{INSIDE_BRACKETS:time}\\] %{NOTSPACE:remote_ip} %{NOTSPACE:requester} %{NOTSPACE:request_id} %{NOTSPACE:operation} %{NOTSPACE:key} \"?%{INSIDE_QS:request_uri}\"? %{NOTSPACE:http_status} %{NOTSPACE:error_code} %{NOTSPACE:bytes_sent} %{NOTSPACE:object_size} %{NOTSPACE:total_time} %{NOTSPACE:turnaround_time} \"?%{INSIDE_QS:referrer}\"? \"?%{INSIDE_QS:user_agent}\"? %{NOTSPACE:version_id}', 
  'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket'
```

## Consulte também
<a name="grok-serde-see-also"></a>
+ [Understanding Grok Patterns](https://edgedelta.com/company/blog/what-are-grok-patterns) (site externo)
+ [Padrões integrados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#classifier-builtin-patterns) (*Guia do usuário do AWS Glue*)

# Bibliotecas SerDe JSON
<a name="json-serde"></a>

No Athena, é possível usar bibliotecas SerDe para desserializar dados JSON. A desserialização converte os dados JSON para que possam ser serializados (gravados) em um formato diferente, como Parquet ou ORC.
+ [Hive JSON SerDe](hive-json-serde.md)
+ [OpenX JSON SerDe](openx-json-serde.md) 
+ [Amazon Ion Hive SerDe](ion-serde.md)

**nota**  
As bibliotecas do Hive e do OpenX esperam que os dados em JSON estejam em uma única linha (não formatados), com registros separados por um caractere de nova linha.

Como o Amazon Ion é um superconjunto de JSON, você pode usar o Amazon Ion Hive SerDe para consultar conjuntos de dados JSON em formatos diferentes do Amazon Ion. Ao contrário das bibliotecas de SerDe JSON OpenX, o Amazon Ion SerDe não espera que cada linha de dados esteja em uma única linha. Esse recurso é útil quando você deseja consultar conjuntos de dados JSON que passaram por reformatação automática ou usar caracteres de nova linha para dividir os campos em uma linha.

## Nomes de biblioteca
<a name="library-names"></a>

Use uma das seguintes opções:

 [org.apache.hive.hcatalog.data.JsonSerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON) 

 [org.openx.data.jsonserde.JsonSerDe](https://github.com/rcongiu/Hive-JSON-Serde) 

[com.amazon.ionhiveserde.IonHiveSerDe](https://github.com/amzn/ion-hive-serde)

# Hive JSON SerDe
<a name="hive-json-serde"></a>

Normalmente, o Hive JSON SerDe é usado para processar dados JSON como eventos. Esses eventos são representados como strings em uma só linha codificadas em JSON separadas por uma nova linha. O Hive JSON SerDe não permite chaves duplicadas nos nomes de chaves `map` ou `struct`.

**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

A instrução DDL de exemplo a seguir usa o Hive JSON SerDe para criar uma tabela com base em dados de publicidade online de exemplo. Na cláusula `LOCATION`, substitua *myregion* em `s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions` pela região onde o Athena é executado (por exemplo, `s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions`).

```
CREATE EXTERNAL TABLE impressions (
    requestbegintime string,
    adid string,
    impressionid string,
    referrer string,
    useragent string,
    usercookie string,
    ip string,
    number string,
    processid string,
    browsercookie string,
    requestendtime string,
    timers struct
                <
                 modellookup:string, 
                 requesttime:string
                >,
    threadid string, 
    hostname string,
    sessionid string
)   
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
```

## Especificação de formatos de carimbo de data/hora com o Hive JSON SerDe
<a name="hive-json-serde-timestamp-formats"></a>

Para analisar valores de carimbo de data/hora da string, você pode adicionar o subcampo `WITH SERDEPROPERTIES` à cláusula `ROW FORMAT SERDE` e usá-lo para especificar o parâmetro `timestamp.formats`. No parâmetro, especifique uma lista separada por vírgula de um ou mais padrões de carimbo de data/hora, como no seguinte exemplo:

```
...
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss")
...
```

Para obter mais informações, consulte [Carimbos de data/hora](https://cwiki.apache.org/confluence/display/hive/languagemanual+types#LanguageManualTypes-TimestampstimestampTimestamps) na documentação do Apache Hive.

## Carregamento de tabela para consulta
<a name="hive-json-serde-loading-the-table"></a>

Após criar a tabela, execute [MSCK REPAIR TABLE](msck-repair-table.md) para carregá-la e torná-la consultável no Athena:

```
MSCK REPAIR TABLE impressions
```

## Consulta a logs do CloudTrail
<a name="hive-json-serde-querying-cloud-trail-logs"></a>

É possível usar o Hive JSON SerDe para consultar os logs do CloudTrail. Para obter mais informações e instruções `CREATE TABLE` de exemplo, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md).

# OpenX JSON SerDe
<a name="openx-json-serde"></a>

Assim como o Hive JSON SerDe, você pode usar o OpenX JSON para processar dados JSON. Os dados também são representados como strings em uma só linha codificadas em JSON separadas por uma nova linha. Assim como ocorre com o Hive JSON SerDe, o OpenX JSON SerDe não permite chaves duplicadas nos nomes de chaves `map` ou `struct`. 

## Considerações e limitações
<a name="openx-json-serde-considerations-limitations"></a>
+ Ao usar SerDe em OpenX JSON, a quantidade e os valores dos resultados podem ser não determinísticos. Os resultados podem conter mais linhas do que o esperado, menos linhas do que o esperado ou valores nulos inesperados quando não existe nenhum nos dados subjacentes. Para contornar esse problema, use [Hive JSON SerDe](hive-json-serde.md) ou reescreva os dados em outro tipo de formato de arquivo.
+ O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. 

  Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

## Propriedades opcionais
<a name="openx-json-serde-optional-properties"></a>

Ao contrário do Hive JSON SerDe, o OpenX JSON SerDe também tem as propriedades SerDe opcionais a seguir que podem ser úteis para resolver inconsistências nos dados.

**use.null.para.invalid.data**  
Opcional. O padrão é `FALSE`. Quando definido como `TRUE`, o SerDe usa `NULL` para os valores da coluna em que houve falha na desserialização para o tipo de coluna definido no esquema da tabela.  
Definir `use.null.for.invalid.data` como `TRUE` pode gerar resultados incorretos ou inesperados, pois os valores `NULL` substituem os dados inválidos nas colunas que não correspondem ao esquema. Recomendamos que você corrija os dados nos arquivos ou no esquema da tabela em vez de habilitar essa propriedade. Quando essa propriedade está habilitada, não ocorrem falhas nas consultas devido a dados inválidos, o que pode impedir que você detecte problemas de qualidade de dados.

**ignore.malformed.json**  
Opcional. Quando definido como `TRUE`, permite ignorar a sintaxe JSON malformada. O padrão é `FALSE`.

**dots.in.keys**  
Opcional. O padrão é `FALSE`. Quando definido como `TRUE`, permite que o SerDe substitua por sublinhados os pontos nos nomes-chave. Por exemplo, se o conjunto de dados JSON tem uma chave chamada `"a.b"`, você pode usar essa propriedade para definir o nome da coluna como `"a_b"` no Athena. Por padrão (sem esse SerDe), o Athena não permite pontos nos nomes de coluna.

**case.insensitive**  
Opcional. O padrão é `TRUE`. Quando definido como `TRUE`, o SerDe converte todas as colunas em maiúsculas para minúsculas.   
Para usar nomes de chave que diferenciam maiúsculas e minúsculas em seus dados, use `WITH SERDEPROPERTIES ("case.insensitive"= FALSE;)`. Depois, para cada chave que ainda não esteja totalmente em letras minúsculas, forneça um mapeamento do nome da coluna para o nome da propriedade usando a seguinte sintaxe:  

```
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("case.insensitive" = "FALSE", "mapping.userid" = "userId")
```
Se você tiver duas chaves como `URL` e `Url` que são iguais quando estão em minúsculas, um erro como o seguinte pode ocorrer:  
HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido - JSONException: chave duplicada “url"  
Para resolver isso, defina a propriedade `case.insensitive` como `FALSE` e mapeie as chaves para nomes diferentes, como no exemplo a seguir:  

```
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("case.insensitive" = "FALSE", "mapping.url1" = "URL", "mapping.url2" = "Url")
```

**mapeamento**  
Opcional. Mapeia os nomes das colunas para chaves JSON que não são idênticas aos nomes da coluna. O parâmetro `mapping` é útil quando os dados JSON contêm chaves que são [palavras-chave](reserved-words.md). Por exemplo, se você tiver uma chave JSON chamada `timestamp`, use a seguinte sintaxe para mapear a chave para uma coluna chamada `ts`:  

```
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("mapping.ts" = "timestamp")
```
**Mapear nomes de campos aninhados com dois pontos para nomes compatíveis com o Hive**  
Se você tiver um nome de campo com dois pontos dentro de um `struct`, poderá usar a propriedade `mapping` para mapear o campo para um nome compatível com o Hive. Por exemplo, se suas definições de tipo de coluna contiverem `my:struct:field:string`, você poderá mapear a definição para `my_struct_field:string` incluindo a seguinte entrada em `WITH SERDEPROPERTIES`:

```
("mapping.my_struct_field" = "my:struct:field")
```
O exemplo a seguir mostra a instrução `CREATE TABLE` correspondente.  

```
CREATE EXTERNAL TABLE colon_nested_field (
item struct<my_struct_field:string>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("mapping.my_struct_field" = "my:struct:field")
```

## Exemplo: dados de publicidade
<a name="openx-json-serde-ad-data-example"></a>

A instrução DDL de exemplo a seguir usa o OpenX JSON SerDe para criar uma tabela com base nos mesmos dados de publicidade online de exemplo usados no exemplo para o Hive JSON SerDe. Na cláusula `LOCATION`, substitua *myregion* pelo identificador da região onde o Athena é executado.

```
CREATE EXTERNAL TABLE impressions (
    requestbegintime string,
    adid string,
    impressionId string,
    referrer string,
    useragent string,
    usercookie string,
    ip string,
    number string,
    processid string,
    browsercokie string,
    requestendtime string,
    timers struct<
       modellookup:string, 
       requesttime:string>,
    threadid string, 
    hostname string,
    sessionid string
)   PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
```

## Exemplo: desserializar JSON aninhado
<a name="nested-json-serde-example"></a>

Você pode usar os JSON SerDes para analisar dados codificados por JSON mais complexos. Isso requer o uso de instruções `CREATE TABLE` que usem elementos `struct` e `array` para representar estruturas aninhadas. 

O exemplo a seguir cria uma tabela do Athena com base nos dados JSON com estruturas aninhadas. O exemplo tem a seguinte estrutura:

```
{
"DocId": "AWS",
"User": {
        "Id": 1234,
        "Username": "carlos_salazar", 
        "Name": "Carlos",
"ShippingAddress": {
"Address1": "123 Main St.",
"Address2": null,
"City": "Anytown",
"State": "CA"
   },
"Orders": [
   {
     "ItemId": 6789,
     "OrderDate": "11/11/2022" 
   },
   {
     "ItemId": 4352,
     "OrderDate": "12/12/2022"
   }
  ]
 }
}
```

Lembre-se de que o OpenX SerDe espera que cada registro JSON esteja em uma única linha de texto. Quando armazenados no Amazon S3, todos os dados no exemplo anterior devem estar em uma única linha, assim:

```
{"DocId":"AWS","User":{"Id":1234,"Username":"carlos_salazar","Name":"Carlos","ShippingAddress" ...
```

A instrução `CREATE TABLE` a seguir usa o [Openx-JsonSerDe](https://github.com/rcongiu/Hive-JSON-Serde) com os tipos de dados de coleção `array` e `struct` para estabelecer grupos de objetos para os dados de exemplo. 

```
CREATE external TABLE complex_json (
   docid string,
   `user` struct<
               id:INT,
               username:string,
               name:string,
               shippingaddress:struct<
                                      address1:string,
                                      address2:string,
                                      city:string,
                                      state:string
                                      >,
               orders:array<
                            struct<
                                 itemid:INT,
                                  orderdate:string
                                  >
                              >
               >
   )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/myjsondata/';
```

Para consultar os dados, use uma declaração `SELECT` como a seguinte:

```
SELECT 
 user.name as Name, 
 user.shippingaddress.address1 as Address, 
 user.shippingaddress.city as City, 
 o.itemid as Item_ID, o.orderdate as Order_date
FROM complex_json, UNNEST(user.orders) as temp_table (o)
```

Para acessar os campos de dados dentro das estruturas, a consulta de amostra usa a notação de pontos (por exemplo, `user.name`). Para acessar dados dentro de uma array de estruturas (como no campo `orders`), você pode usar a função `UNNEST`. A função `UNNEST` nivela a array em uma tabela temporária (neste caso chamada `o`). Isso permite que você use a notação de pontos da mesma forma que faz com estruturas para acessar os elementos não aninhados da array (por exemplo, `o.itemid`). O nome `temp_table`, usado no exemplo para fins ilustrativos, geralmente é abreviado como `t`.

A tabela a seguir exibe os resultados da consulta.


****  

| \$1 | Nome | Endereço | Cidade | Item\$1ID | Order\$1date | 
| --- | --- | --- | --- | --- | --- | 
| 1 | Carlos | 123 Main St. | Anytown | 6789 | 11/11/2022 | 
| 2 | Carlos | 123 Main St. | Anytown | 4352 | 12/12/2022 | 

## Recursos adicionais
<a name="json-serdes-additional-resources"></a>

Para obter mais informações sobre como trabalhar com JSON e JSON aninhado no Athena, consulte os seguintes recursos:
+ [Create tables in Amazon Athena from nested JSON and mappings using JSONSerDe](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/) (Criar tabelas no Amazon Athena de mapeamentos e JSON aninhado usando JSONSerDe) (blog sobre big data da AWS)
+ [Recebo mensagens de erro ao tentar ler dados JSON no Amazon Athena](https://aws.amazon.com/premiumsupport/knowledge-center/error-json-athena/) (artigo do Centro de conhecimento da AWS)
+ [hive-json-schema](https://github.com/quux00/hive-json-schema) (GitHub): ferramenta escrita em Java que gera instruções `CREATE TABLE` de documentos JSON de exemplo. As instruções `CREATE TABLE` geradas usam o OpenX JSON Serde.

# Bibliotecas SerDe CSV
<a name="serde-csv-choices"></a>

Ao criar uma tabela para dados CSV no Athena, é possível usar a biblioteca Open CSV SerDe ou a biblioteca Lazy Simple SerDe. Para ajudar você a decidir qual usar, considere as diretrizes a seguir.
+ Se os seus valores nos dados estiverem entre aspas duplas (`"`), será possível usar a biblioteca [Open CSV SerDe](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) para desserializar os valores no Athena. Se os valores nos dados não estiverem entre aspas duplas (`"`), você poderá omiti-los especificando qualquer SerDe. Nesse caso, o Athena usa o Lazy Simple SerDe padrão. Para ter mais informações, consulte [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md).
+  Se os dados tiverem valores UNIX numéricos de `TIMESTAMP` (por exemplo, `1579059880000`), use o Open CSV SerDe. Se os dados usarem o formato `java.sql.Timestamp`, use o Lazy Simple SerDe.

**Topics**
+ [

# Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada
](lazy-simple-serde.md)
+ [

# Open CSV SerDe para processamento de CSV
](csv-serde.md)

# Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada
<a name="lazy-simple-serde"></a>

Como esse é o SerDe padrão no Athena para dados em formatos CSV, TSV e com delimitação personalizada, especificá-lo é opcional. Em sua instrução `CREATE TABLE`, se você não especificar um SerDe e especificar somente `ROW FORMAT DELIMITED`, o Athena usará esse SerDe. Use esse SerDe caso os dados não tenham valores entre aspas.

Para documentação de referência sobre o Lazy Simple SerDe, consulte a seção [Hive SerDe](https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe) do Guia do desenvolvedor do Apache Hive.

## Nome da biblioteca de serialização
<a name="lazy-simple-serde-library-name"></a>

O nome da biblioteca de serialização do Lazy Simple SerDe é `org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe`. Para obter informações sobre o código-fonte, consulte [LazySimpleSerDe.java](https://github.com/apache/hive/blob/master/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazySimpleSerDe.java) em GitHub.com. 

## Ignorar cabeçalhos
<a name="lazy-simple-serde-ignoring-headers"></a>

Para ignorar os cabeçalhos nos dados ao definir a tabela, você pode usar a propriedade de tabela `skip.header.line.count`, conforme mostrado no exemplo a seguir.

```
TBLPROPERTIES ("skip.header.line.count"="1")
```

Para obter exemplos que ignoram cabeçalhos, consulte as instruções `CREATE TABLE` em [Consultar os logs de fluxo do Amazon VPC](vpc-flow-logs.md) e [Consultar logs do Amazon CloudFront](cloudfront-logs.md).

## Exemplo de CSV
<a name="csv-example"></a>

O exemplo a seguir mostra como usar a biblioteca `LazySimpleSerDe` para criar uma tabela no Athena com base em dados CSV. Para desserializar arquivos com delimitação personalizada usando esse SerDe, siga o padrão no exemplo, mas use a cláusula `FIELDS TERMINATED BY` para especificar um delimitador de caractere único diferente. O Lazy Simple SerDe não oferece suporte a delimitadores de vários caracteres.

**nota**  
Substitua *myregion* em `s3://athena-examples-myregion/path/to/data/` pelo identificador da região onde o Athena é executado, por exemplo, `s3://athena-examples-us-west-1/path/to/data/`.

Use a instrução `CREATE TABLE` para criar uma tabela do Athena usando os dados subjacentes em CSV armazenados no Amazon S3.

```
CREATE EXTERNAL TABLE flight_delays_csv (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
    carrier STRING,
    tailnum STRING,
    flightnum STRING,
    originairportid INT,
    originairportseqid INT,
    origincitymarketid INT,
    origin STRING,
    origincityname STRING,
    originstate STRING,
    originstatefips STRING,
    originstatename STRING,
    originwac INT,
    destairportid INT,
    destairportseqid INT,
    destcitymarketid INT,
    dest STRING,
    destcityname STRING,
    deststate STRING,
    deststatefips STRING,
    deststatename STRING,
    destwac INT,
    crsdeptime STRING,
    deptime STRING,
    depdelay INT,
    depdelayminutes INT,
    depdel15 INT,
    departuredelaygroups INT,
    deptimeblk STRING,
    taxiout INT,
    wheelsoff STRING,
    wheelson STRING,
    taxiin INT,
    crsarrtime INT,
    arrtime STRING,
    arrdelay INT,
    arrdelayminutes INT,
    arrdel15 INT,
    arrivaldelaygroups INT,
    arrtimeblk STRING,
    cancelled INT,
    cancellationcode STRING,
    diverted INT,
    crselapsedtime INT,
    actualelapsedtime INT,
    airtime INT,
    flights INT,
    distance INT,
    distancegroup INT,
    carrierdelay INT,
    weatherdelay INT,
    nasdelay INT,
    securitydelay INT,
    lateaircraftdelay INT,
    firstdeptime STRING,
    totaladdgtime INT,
    longestaddgtime INT,
    divairportlandings INT,
    divreacheddest INT,
    divactualelapsedtime INT,
    divarrdelay INT,
    divdistance INT,
    div1airport STRING,
    div1airportid INT,
    div1airportseqid INT,
    div1wheelson STRING,
    div1totalgtime INT,
    div1longestgtime INT,
    div1wheelsoff STRING,
    div1tailnum STRING,
    div2airport STRING,
    div2airportid INT,
    div2airportseqid INT,
    div2wheelson STRING,
    div2totalgtime INT,
    div2longestgtime INT,
    div2wheelsoff STRING,
    div2tailnum STRING,
    div3airport STRING,
    div3airportid INT,
    div3airportseqid INT,
    div3wheelson STRING,
    div3totalgtime INT,
    div3longestgtime INT,
    div3wheelsoff STRING,
    div3tailnum STRING,
    div4airport STRING,
    div4airportid INT,
    div4airportseqid INT,
    div4wheelson STRING,
    div4totalgtime INT,
    div4longestgtime INT,
    div4wheelsoff STRING,
    div4tailnum STRING,
    div5airport STRING,
    div5airportid INT,
    div5airportseqid INT,
    div5wheelson STRING,
    div5totalgtime INT,
    div5longestgtime INT,
    div5wheelsoff STRING,
    div5tailnum STRING
)
    PARTITIONED BY (year STRING)
    ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ','
      ESCAPED BY '\\'
      LINES TERMINATED BY '\n'
    LOCATION 's3://athena-examples-myregion/flight/csv/';
```

Execute a `MSCK REPAIR TABLE` para atualizar metadados da partição sempre que uma nova partição for adicionada a essa tabela:

```
MSCK REPAIR TABLE flight_delays_csv;
```

Consulte as 10 rotas principais atrasadas há mais de 1 hora:

```
SELECT origin, dest, count(*) as delays
FROM flight_delays_csv
WHERE depdelayminutes > 60
GROUP BY origin, dest
ORDER BY 3 DESC
LIMIT 10;
```

**nota**  
Os dados da tabela de voos foram extraídos dos [Voos](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) fornecidos pelo Departamento de Transportes dos EUA, [Bureau of Transportation Statistics](http://www.transtats.bts.gov/) (Agência de Estatísticas de Transportes). Saturação do original removida.

## Exemplo de TSV
<a name="tsv-example"></a>

Para criar uma tabela do Athena com base em dados TSV armazenados no Amazon S3, use `ROW FORMAT DELIMITED` e especifique `\t` como delimitador do campo de tabulação, `\n` como separador de linhas e `\` como o caractere de escape. O trecho a seguir mostra essa sintaxe. Nenhum exemplo de dados de voo do TSV está disponível no local de `athena-examples`, mas, como na tabela CSV, você executaria `MSCK REPAIR TABLE` para atualizar os metadados da partição sempre que uma nova partição fosse adicionada. 

```
...
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
...
```

# Open CSV SerDe para processamento de CSV
<a name="csv-serde"></a>

Use a biblioteca Open CSV SerDe para criar tabelas no Athena a partir de dados separados por vírgula (CSV).

## Nome da biblioteca de serialização
<a name="csv-serde-library-name"></a>

O nome da biblioteca de serialização do Open CSV SerDe é `org.apache.hadoop.hive.serde2.OpenCSVSerde`. Para obter informações sobre o código-fonte, consulte [CSV SerDe](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) na documentação do Apache.

## Usar Open CSV SerDe
<a name="csv-serde-using"></a>

Para usar esse SerDe, especifique o nome totalmente qualificado da classe após `ROW FORMAT SERDE`. Especifique também os delimitadores dentro de `SERDEPROPERTIES`, como no exemplo a seguir.

```
...
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  "separatorChar" = ",",
  "quoteChar"     = "`",
  "escapeChar"    = "\\"
)
```

### Ignorar cabeçalhos
<a name="csv-serde-opencsvserde-ignoring-headers"></a>

Para ignorar os cabeçalhos nos dados ao definir a tabela, você pode usar a propriedade de tabela `skip.header.line.count`, conforme mostrado no exemplo a seguir.

```
TBLPROPERTIES ("skip.header.line.count"="1")
```

Para ver exemplos, consulte as instruções `CREATE TABLE` em [Consultar os logs de fluxo do Amazon VPC](vpc-flow-logs.md) e [Consultar logs do Amazon CloudFront](cloudfront-logs.md).

### Usar NULL para dados inválidos
<a name="csv-serde-opencsvserde-using-null"></a>

Para usar valores NULL para dados cuja desserialização para o tipo definido da coluna falha, é possível usar a propriedade de tabela `use.null.for.invalid.data`, como mostrado no exemplo a seguir. 

```
TBLPROPERTIES ("skip.header.line.count"="1")
```

**Importante**  
Definir `use.null.for.invalid.data` como `TRUE` pode gerar resultados incorretos ou inesperados, pois os valores `NULL` substituem os dados inválidos nas colunas que não correspondem ao esquema. Recomendamos que você corrija os dados nos arquivos ou no esquema da tabela em vez de habilitar essa propriedade. Quando essa propriedade está habilitada, não ocorrem falhas nas consultas devido a dados inválidos, o que pode impedir que você detecte problemas de qualidade de dados.

### Considerações sobre dados de strings
<a name="csv-serde-opencsvserde-considerations-string"></a>

O Open CSV SerDe apresenta as seguintes características de dados de strings:
+ Usa aspas duplas (`"`) como o caractere de aspas padrão e permite que você especifique separadores, aspas e caracteres de escape, como: 

  ```
  WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
  ```
+ Não é possível inserir um caractere de escape em `\t` ou `\n` diretamente. Para inserir um caractere de escape neles, use `"escapeChar" = "\\"`. Para ver um exemplo, consulte [Example: Escaping \t or \n](#csv-serde-opencsvserde-example-escaping-t-or-n).
+ O Open CSV SerDe não oferece suporte a quebras de linha incorporadas em arquivos CSV.

### Considerações sobre dados não strings
<a name="csv-serde-opencsvserde-considerations-non-string"></a>

Para tipos de dados diferentes de `STRING`, o Open CSV SerDe apresenta o comportamento a seguir:
+ Reconhece os tipos de dados `BOOLEAN`, `BIGINT`, `INT` e `DOUBLE`. 
+ Não reconhece valores vazios ou nulos nas colunas definidas como um tipo de dados numérico, deixando-os como `string`. Uma solução alternativa é criar a coluna com os valores nulos como `string` e usar `CAST` para converter o campo de uma consulta em um tipo de dados numérico, especificando um valor padrão de `0` para nulos. Para obter mais informações, consulte [Quando consulto dados CSV no Athena, aparece o erro HIVE\$1BAD\$1DATA: erro ao analisar valor do campo](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/) (em inglês) na Central de Conhecimento da AWS.
+ Para colunas especificadas com o tipo de dados `timestamp` na instrução `CREATE TABLE`, reconhece os dados de `TIMESTAMP` caso sejam especificados no formato numérico UNIX em milissegundos, como `1579059880000`. Para ver um exemplo, consulte [Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format](#csv-serde-opencsvserde-example-timestamp-unix).
  + O Open CSV SerDe não oferece suporte a `TIMESTAMP` no formato `java.sql.Timestamp` compatível com JDBC, como `"YYYY-MM-DD HH:MM:SS.fffffffff"` (precisão de 9 casas decimais).
+ Para colunas especificadas com o tipo de dados `DATE` na instrução `CREATE TABLE`, reconhece os valores como datas se os valores representam o número de dias decorridos desde 1º de janeiro de 1970. Por exemplo, o valor `18276` em uma coluna com o tipo de dados `date` é processado como `2020-01-15` quando consultado. Nesse formato UNIX, é considerado que cada dia tenha 86.400 segundos.
  + O Open CSV SerDe não oferece suporte a `DATE` em nenhum outro formato diretamente. Para processar os dados de carimbo de data/hora em outros formatos, você pode definir a coluna como `string` e usar as funções de conversão de tempo para retornar os resultados desejados em sua consulta `SELECT`. Para obter mais informações, consulte o artigo [When I query a table in Amazon Athena, the TIMESTAMP result is empty](https://aws.amazon.com/premiumsupport/knowledge-center/query-table-athena-timestamp-empty/) (Quando consulto uma tabela no Amazon Athena, o resultado de TIMESTAMP está vazio) na [Central de Conhecimento da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/).
+ Para converter mais colunas para o tipo desejado em uma tabela, [crie uma visualização](views.md) sobre a tabela e use `CAST` para converter para o tipo desejado.

## Exemplos
<a name="csv-serde-opencsvserde-examples"></a>

**Example Exemplo: consulta de dados CSV simples**  
O exemplo a seguir pressupõe que você tenha dados CSV salvos no local `s3://amzn-s3-demo-bucket/mycsv/` com o conteúdo a seguir:  

```
"a1","a2","a3","a4"
"1","2","abc","def"
"a","a1","abc3","ab4"
```
Use uma instrução `CREATE TABLE` para criar uma tabela do Athena com base nos dados. Faça referência a `OpenCSVSerde` (observe o “d” minúsculo) após `ROW FORMAT SERDE` e especifique o separador de caractere, o caractere de aspas e o caractere de escape em `WITH SERDEPROPERTIES`, como no exemplo a seguir.  

```
CREATE EXTERNAL TABLE myopencsvtable (
   col1 string,
   col2 string,
   col3 string,
   col4 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/mycsv/';
```
Consulte todos os valores na tabela:  

```
SELECT * FROM myopencsvtable;
```
A consulta retorna os valores a seguir:  

```
col1     col2    col3    col4
-----------------------------
a1       a2      a3      a4
1        2       abc     def
a        a1      abc3    ab4
```

**Example Exemplo: uso do tipo TIMESTAMP e do tipo DATE especificados no formato numérico UNIX**  
Considere as três colunas de dados separados por vírgula a seguir. Os valores em cada coluna são colocados entre aspas duplas.  

```
"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"
```
A instrução a seguir cria uma tabela no Athena com base no local do bucket do Amazon S3 especificado.  

```
CREATE EXTERNAL TABLE IF NOT EXISTS testtimestamp1(
 `profile_id` string,
 `creationdate` date,
 `creationdatetime` timestamp
 )
 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
 LOCATION 's3://amzn-s3-demo-bucket'
```
Em seguida, execute a consulta a seguir:   

```
SELECT * FROM testtimestamp1
```
A consulta retorna o seguinte resultado, exibindo os dados de data e hora:  

```
profile_id                                                        creationdate     creationdatetime
unixvalue creationdate 18276 creationdatetime 1579146280000       2020-01-15       2020-01-15 03:44:40.000
```

**Example Exemplo: como inserir caracteres de escape \$1t ou \$1n**  
Considere os seguintes dados de teste:  

```
" \\t\\t\\n 123 \\t\\t\\n ",abc
" 456 ",xyz
```
A instrução a seguir cria uma tabela no Athena que especifica `"escapeChar" = "\\"`.   

```
CREATE EXTERNAL TABLE test1 (
f1 string,
s2 string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ("separatorChar" = ",", "escapeChar" = "\\") 
LOCATION 's3://amzn-s3-demo-bucket/dataset/test1/'
```
Em seguida, execute a consulta a seguir:   

```
SELECT * FROM test1;
```
Ele retorna esse resultado, inserindo corretamente caracteres de escape em `\t` ou `\n`:  

```
f1            s2
\t\t\n 123 \t\t\n            abc
456                          xyz
```

# ORC SerDe
<a name="orc-serde"></a>

Use o ORC SerDe para criar tabelas do Athena a partir dos dados do ORC.

## Nome da biblioteca de serialização
<a name="orc-serde-library-name"></a>

A biblioteca de serialização para o ORC SerDe é a `org.apache.hadoop.hive.ql.io.orc.OrcSerde`, mas em suas instruções `CREATE TABLE`, você especifica isso com a cláusula `STORED AS ORC`. Para obter informações sobre o código-fonte, consulte [OrcSerde.java](https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcSerde.java) em GitHub.com.

## Exemplo: criação de uma tabela para dados de voo ORC
<a name="orc-serde-example"></a>

**nota**  
Substitua *myregion* em `s3://athena-examples-myregion/path/to/data/` pelo identificador da região onde o Athena é executado, por exemplo, `s3://athena-examples-us-west-1/path/to/data/`.

O exemplo a seguir cria uma tabela para dados de voos em atraso no ORC. A tabela inclui partições:

```
DROP TABLE flight_delays_orc;
CREATE EXTERNAL TABLE flight_delays_orc (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
    carrier STRING,
    tailnum STRING,
    flightnum STRING,
    originairportid INT,
    originairportseqid INT,
    origincitymarketid INT,
    origin STRING,
    origincityname STRING,
    originstate STRING,
    originstatefips STRING,
    originstatename STRING,
    originwac INT,
    destairportid INT,
    destairportseqid INT,
    destcitymarketid INT,
    dest STRING,
    destcityname STRING,
    deststate STRING,
    deststatefips STRING,
    deststatename STRING,
    destwac INT,
    crsdeptime STRING,
    deptime STRING,
    depdelay INT,
    depdelayminutes INT,
    depdel15 INT,
    departuredelaygroups INT,
    deptimeblk STRING,
    taxiout INT,
    wheelsoff STRING,
    wheelson STRING,
    taxiin INT,
    crsarrtime INT,
    arrtime STRING,
    arrdelay INT,
    arrdelayminutes INT,
    arrdel15 INT,
    arrivaldelaygroups INT,
    arrtimeblk STRING,
    cancelled INT,
    cancellationcode STRING,
    diverted INT,
    crselapsedtime INT,
    actualelapsedtime INT,
    airtime INT,
    flights INT,
    distance INT,
    distancegroup INT,
    carrierdelay INT,
    weatherdelay INT,
    nasdelay INT,
    securitydelay INT,
    lateaircraftdelay INT,
    firstdeptime STRING,
    totaladdgtime INT,
    longestaddgtime INT,
    divairportlandings INT,
    divreacheddest INT,
    divactualelapsedtime INT,
    divarrdelay INT,
    divdistance INT,
    div1airport STRING,
    div1airportid INT,
    div1airportseqid INT,
    div1wheelson STRING,
    div1totalgtime INT,
    div1longestgtime INT,
    div1wheelsoff STRING,
    div1tailnum STRING,
    div2airport STRING,
    div2airportid INT,
    div2airportseqid INT,
    div2wheelson STRING,
    div2totalgtime INT,
    div2longestgtime INT,
    div2wheelsoff STRING,
    div2tailnum STRING,
    div3airport STRING,
    div3airportid INT,
    div3airportseqid INT,
    div3wheelson STRING,
    div3totalgtime INT,
    div3longestgtime INT,
    div3wheelsoff STRING,
    div3tailnum STRING,
    div4airport STRING,
    div4airportid INT,
    div4airportseqid INT,
    div4wheelson STRING,
    div4totalgtime INT,
    div4longestgtime INT,
    div4wheelsoff STRING,
    div4tailnum STRING,
    div5airport STRING,
    div5airportid INT,
    div5airportseqid INT,
    div5wheelson STRING,
    div5totalgtime INT,
    div5longestgtime INT,
    div5wheelsoff STRING,
    div5tailnum STRING
)
PARTITIONED BY (year String)
STORED AS ORC
LOCATION 's3://athena-examples-myregion/flight/orc/'
tblproperties ("orc.compress"="ZLIB");
```

Execute a instrução `MSCK REPAIR TABLE` na tabela para atualizar metadados da partição:

```
MSCK REPAIR TABLE flight_delays_orc;
```

Use esta consulta para obter as 10 rotas principais atrasadas há mais de 1 hora:

```
SELECT origin, dest, count(*) as delays
FROM flight_delays_orc
WHERE depdelayminutes > 60
GROUP BY origin, dest
ORDER BY 3 DESC
LIMIT 10;
```

# Parquet SerDe
<a name="parquet-serde"></a>

Use o Parquet SerDe para criar tabelas do Athena a partir dos dados do ORC.

O Parquet Hive SerDe é usado para dados armazenados no [formato Parquet](https://cwiki.apache.org/confluence/display/Hive/Parquet). Para converter dados em formato Parquet, você pode usar consultas [CREATE TABLE AS SELECT (CTAS)](create-table-as.md) . Para obter mais informações, consulte [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md), [Exemplos de consultas CTAS](ctas-examples.md) e [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md).

## Nome da biblioteca de serialização
<a name="parquet-serde-library-name"></a>

O nome da biblioteca de serialização do Parquet SerDe é `org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe`. Para obter informações sobre o código-fonte, consulte [Classe ParquetHiveSerDe](https://svn.apache.org/repos/infra/websites/production/hive/content/javadocs/r2.1.1/api/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.html) na documentação do Apache.

## Exemplo: consulta de um arquivo armazenado em Parquet
<a name="example-querying-a-file-stored-in-parquet"></a>

**nota**  
Substitua *myregion* em `s3://athena-examples-myregion/path/to/data/` pelo identificador da região onde o Athena é executado, por exemplo, `s3://athena-examples-us-west-1/path/to/data/`.

Use a instrução `CREATE TABLE` abaixo para criar uma tabela do Athena com base nos dados subjacentes armazenados em formato Parquet no Amazon S3:

```
CREATE EXTERNAL TABLE flight_delays_pq (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
    carrier STRING,
    tailnum STRING,
    flightnum STRING,
    originairportid INT,
    originairportseqid INT,
    origincitymarketid INT,
    origin STRING,
    origincityname STRING,
    originstate STRING,
    originstatefips STRING,
    originstatename STRING,
    originwac INT,
    destairportid INT,
    destairportseqid INT,
    destcitymarketid INT,
    dest STRING,
    destcityname STRING,
    deststate STRING,
    deststatefips STRING,
    deststatename STRING,
    destwac INT,
    crsdeptime STRING,
    deptime STRING,
    depdelay INT,
    depdelayminutes INT,
    depdel15 INT,
    departuredelaygroups INT,
    deptimeblk STRING,
    taxiout INT,
    wheelsoff STRING,
    wheelson STRING,
    taxiin INT,
    crsarrtime INT,
    arrtime STRING,
    arrdelay INT,
    arrdelayminutes INT,
    arrdel15 INT,
    arrivaldelaygroups INT,
    arrtimeblk STRING,
    cancelled INT,
    cancellationcode STRING,
    diverted INT,
    crselapsedtime INT,
    actualelapsedtime INT,
    airtime INT,
    flights INT,
    distance INT,
    distancegroup INT,
    carrierdelay INT,
    weatherdelay INT,
    nasdelay INT,
    securitydelay INT,
    lateaircraftdelay INT,
    firstdeptime STRING,
    totaladdgtime INT,
    longestaddgtime INT,
    divairportlandings INT,
    divreacheddest INT,
    divactualelapsedtime INT,
    divarrdelay INT,
    divdistance INT,
    div1airport STRING,
    div1airportid INT,
    div1airportseqid INT,
    div1wheelson STRING,
    div1totalgtime INT,
    div1longestgtime INT,
    div1wheelsoff STRING,
    div1tailnum STRING,
    div2airport STRING,
    div2airportid INT,
    div2airportseqid INT,
    div2wheelson STRING,
    div2totalgtime INT,
    div2longestgtime INT,
    div2wheelsoff STRING,
    div2tailnum STRING,
    div3airport STRING,
    div3airportid INT,
    div3airportseqid INT,
    div3wheelson STRING,
    div3totalgtime INT,
    div3longestgtime INT,
    div3wheelsoff STRING,
    div3tailnum STRING,
    div4airport STRING,
    div4airportid INT,
    div4airportseqid INT,
    div4wheelson STRING,
    div4totalgtime INT,
    div4longestgtime INT,
    div4wheelsoff STRING,
    div4tailnum STRING,
    div5airport STRING,
    div5airportid INT,
    div5airportseqid INT,
    div5wheelson STRING,
    div5totalgtime INT,
    div5longestgtime INT,
    div5wheelsoff STRING,
    div5tailnum STRING
)
PARTITIONED BY (year STRING)
STORED AS PARQUET
LOCATION 's3://athena-examples-myregion/flight/parquet/'
tblproperties ("parquet.compression"="SNAPPY");
```

Execute a instrução `MSCK REPAIR TABLE` na tabela para atualizar metadados da partição:

```
MSCK REPAIR TABLE flight_delays_pq;
```

Consulte as 10 rotas principais atrasadas há mais de 1 hora:

```
SELECT origin, dest, count(*) as delays
FROM flight_delays_pq
WHERE depdelayminutes > 60
GROUP BY origin, dest
ORDER BY 3 DESC
LIMIT 10;
```

**nota**  
Os dados da tabela de voos foram extraídos dos [Voos](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) fornecidos pelo Departamento de Transportes dos EUA, [Bureau of Transportation Statistics](http://www.transtats.bts.gov/) (Agência de Estatísticas de Transportes). Saturação do original removida.

## Ignorar estatísticas do Parquet
<a name="parquet-serde-ignoring-parquet-statistics"></a>

Quando você lê dados Parquet, pode receber mensagens de erro como as seguintes:

```
HIVE_CANNOT_OPEN_SPLIT: Index x out of bounds for length y
HIVE_CURSOR_ERROR: Failed to read x bytes
HIVE_CURSOR_ERROR: FailureException at Malformed input: offset=x
HIVE_CURSOR_ERROR: FailureException at java.io.IOException: 
can not read class org.apache.parquet.format.PageHeader: Socket is closed by peer.
```

Para contornar esse problema, use a instrução [CREATE TABLE](create-table.md) ou [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) para definir a `parquet.ignore.statistics` propriedade Parquet SerDe como `true`, como nos exemplos a seguir. 

Exemplo de CREATE TABLE

```
...
ROW FORMAT SERDE  
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES (  
'parquet.ignore.statistics'='true')  
STORED AS PARQUET 
...
```

Exemplo de ALTER TABLE

```
ALTER TABLE ... SET TBLPROPERTIES ('parquet.ignore.statistics'='true')
```

# Regex SerDe
<a name="regex-serde"></a>

O Regex SerDe usa uma expressão regular (regex) para desserializar dados extraindo grupos regex em colunas de tabela. 

Se uma linha nos dados não corresponder à regex, todas as colunas na linha serão retornadas como `NULL`. Se uma linha corresponder à regex, mas tiver menos grupos do que o esperado, os grupos ausentes serão `NULL`. Se uma linha nos dados corresponder à regex, mas tiver mais colunas do que grupos na regex, as colunas adicionais serão ignoradas. 

Para obter mais informações, consulte [Classe RegexSerDe](https://svn.apache.org/repos/infra/websites/production/hive/content/javadocs/r1.2.2/api/org/apache/hadoop/hive/serde2/RegexSerDe.html) na documentação do Apache Hive.

## Nome da biblioteca de serialização
<a name="regex-serde-library-name"></a>

O nome da biblioteca de serialização do Regex SerDe é `org.apache.hadoop.hive.serde2.RegexSerDe`. Para obter informações sobre o código-fonte, consulte [Classe RegexSerDe](https://svn.apache.org/repos/infra/websites/production/hive/content/javadocs/r1.2.2/api/org/apache/hadoop/hive/serde2/RegexSerDe.html) na documentação do Apache. 

## Exemplo
<a name="regex-serde-examples"></a>

O exemplo a seguir cria uma tabela de logs do CloudFront usando o RegExSerDe. Substitua *myregion* em `s3://athena-examples-myregion/cloudfront/plaintext/` pelo identificador da região onde o Athena é executado (por exemplo, `s3://athena-examples-us-west-1/cloudfront/plaintext/`).

```
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  `Date` DATE,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  os STRING,
  Browser STRING,
  BrowserVersion STRING
 ) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
 WITH SERDEPROPERTIES (
 "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
 ) 
LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';
```

# Executar consultas SQL no Amazon Athena
<a name="querying-athena-tables"></a>

É possível executar consultas SQL usando origens de dados no Amazon Athena registradas com o AWS Glue Data Catalog e origens de dados, como metastores do Hive e instâncias do Amazon DocumentDB, às quais você se conecta pelo recurso de consulta federada do Athena. Para obter mais informações sobre como trabalhar com fontes de dados, consulte [Conectar-se à fonte de dados](work-with-data-stores.md). Quando você executa uma consulta Data Definition Language (DDL – Linguagem de definição de dados) que modifica o esquema, o Athena grava os metadados no metastore associado à origem dos dados. Algumas consultas, como `CREATE TABLE AS` e `INSERT INTO`, também podem gravar registros no conjunto de dados, por exemplo, adicionando um registro CSV a um local do Amazon S3.

Esta seção apresenta orientações para executar consultas do Athena em origens e tipos de dados comuns usando uma variedade de instruções SQL. Há também orientações gerais de como trabalhar com estruturas e operadores comuns, por exemplo, arrays, concatenação, filtragem, nivelamento e classificação. Outros exemplos incluem consultas de dados em tabelas com estruturas aninhadas e mapas, tabelas baseadas em conjuntos de dados codificados com JSON e conjuntos de dados associados aos Serviços da AWS, como logs do AWS CloudTrail e do Amazon EMR. A cobertura completa do uso do SQL padrão está fora do escopo desta documentação. Para obter mais informações sobre SQL, consulte as referências das linguagens [Trino](https://trino.io/docs/current/language.html) e [Presto](https://prestodb.io/docs/current/sql.html).

**Topics**
+ [Visualização de planos de consultas](query-plans.md)
+ [

# Trabalhar com resultados de consultas e consultas recentes
](querying.md)
+ [

# Reutilização de resultados da consulta no Athena
](reusing-query-results.md)
+ [Visualizar estatísticas de consultas](query-stats.md)
+ [

# Trabalhar com visualizações
](views.md)
+ [

# Usar consultas salvas
](saved-queries.md)
+ [

# Usar consultas parametrizadas
](querying-with-prepared-statements.md)
+ [Usar o otimizador baseado em custos](cost-based-optimizer.md)
+ [Consultar S3 Express One Zone](querying-express-one-zone.md)
+ [Consultar o Amazon Glacier](querying-glacier.md)
+ [

# Lidar com atualizações de esquemas
](handling-schema-updates-chapter.md)
+ [

# Consultar matrizes
](querying-arrays.md)
+ [

# Consultar dados geoespaciais
](querying-geospatial-data.md)
+ [

# Consultar dados JSON
](querying-JSON.md)
+ [Usar ML com o Athena](querying-mlmodel.md)
+ [Consultar com UDFs](querying-udf.md)
+ [

# Consulta entre regiões
](querying-across-regions.md)
+ [

# Consultar o AWS Glue Data Catalog
](querying-glue-catalog.md)
+ [

# Consultar logs do AWS service (Serviço da AWS)
](querying-aws-service-logs.md)
+ [Consultar logs do servidor Web](querying-web-server-logs.md)

Para ver as considerações e as limitações, consulte [Considerações e limitações das consultas SQL no Amazon Athena](other-notable-limitations.md).

# Visualização de planos de execução para consultas SQL
<a name="query-plans"></a>

É possível utilizar o editor de consultas do Athena para ver representações gráficas de como uma consulta será executada. Quando você insere uma consulta no editor e escolhe a opção **Explain** (Explicar), o Athena usa uma Instrução SQL [EXPLICAM](athena-explain-statement.md) nessa consulta para criar dois gráficos correspondentes: um plano de execução distribuído e um plano de execução lógico. Esses gráficos podem ser utilizados para analisar, solucionar problemas e melhorar a eficiência das suas consultas.

**Para visualizar planos de execução de uma consulta**

1. Insira sua consulta no editor de consultas do Athena e escolha **Explain** (Explicar).  
![\[Escolha Explain (Explicar) no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-plans-1.png)

   A guia **Distributed plan** (Plano distribuído) mostra o plano de execução da consulta em um ambiente distribuído. Um plano distribuído tem fragmentos ou *estágios* de processamento. Cada estágio tem um número de índice baseado em zero e é processado por um ou mais nós. Dados podem ser trocados entre nós.  
![\[Exemplo de gráfico de plano distribuído de consulta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-plans-2.png)

1. Para navegar pelo gráfico, utilize as seguintes opções:
   + Para aumentar ou diminuir o zoom, role com o mouse ou use os ícones de ampliação.
   + Para ajustar o gráfico para que ele caiba na tela, selecione o ícone **Zoom to fit** (Ampliar para caber).
   + Para mover o gráfico, arraste o ponteiro do mouse.

1. Para ver detalhes de um estágio, escolha o estágio.  
![\[Escolha um estágio para ver seus detalhes.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-plans-3.png)

1. Para ver os detalhes do estágio em largura natural, selecione o ícone de expansão na parte superior direita do painel de detalhes.

1. Para ver mais detalhes, expanda um ou mais itens na árvore do operador. Para obter informações sobre fragmentos de planos distribuídos, consulte [Tipos de saída da instrução EXPLAIN](athena-explain-statement-understanding.md#athena-explain-statement-understanding-explain-plan-types).  
![\[Árvore do operador expandida para um estágio em um plano de consulta distribuído.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-plans-4.png)
**Importante**  
Alguns filtros de partição podem não estar visíveis no gráfico de árvore do operador aninhado, mesmo que o Athena os aplique à sua consulta. Para verificar o efeito desses filtros, execute [EXPLAIN](athena-explain-statement.md#athena-explain-statement-syntax-athena-engine-version-2) ou [EXPLAIN ANALYZE](athena-explain-statement.md#athena-explain-analyze-statement) na sua consulta e visualize os resultados.

1. Escolha a guia **Logical plan** (Plano lógico). O gráfico mostra o plano lógico para executar a consulta. Para obter mais informações termos operacionais, consulte [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md).  
![\[Gráfico de um plano lógico de consulta no Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-plans-5.png)

1. Para exportar um plano como uma imagem SVG ou PNG, ou como texto JSON, escolha **Export** (Exportar).

## Recursos adicionais
<a name="query-plans-additional-resources"></a>

Para obter mais informações, consulte os recursos a seguir.

[Usar EXPLAIN e EXPLAIN ANALYZE no Athena](athena-explain-statement.md)

[Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md)

[Visualizar estatísticas e detalhes de execução para consultas concluídas](query-stats.md)

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/7JUyTqglmNU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/7JUyTqglmNU)


# Trabalhar com resultados de consultas e consultas recentes
<a name="querying"></a>

O Amazon Athena armazena automaticamente os resultados das consultas e os metadados dos resultados de cada consulta executada em um *local de resultados de consultas* que você pode especificar no Amazon S3. Se necessário, você pode acessar os arquivos nesse local para trabalhar com eles. Também é possível baixar os arquivos de resultados das consultas diretamente do console do Athena.

O Athena agora oferece duas opções para gerenciar os resultados de consultas: você pode usar um bucket S3 de propriedade do cliente ou optar pelo recurso de resultados de consultas gerenciadas. Com seu próprio bucket, você mantém controle total sobre o armazenamento, as permissões, as políticas de ciclo de vida e a retenção, oferecendo máxima flexibilidade, mas exigindo mais gerenciamento. Alternativamente, quando você escolhe a opção de resultados de consultas gerenciadas, o serviço gerencia automaticamente o armazenamento e o ciclo de vida, eliminando a necessidade de configurar um bucket de resultados separado e limpando automaticamente os resultados após um período de retenção predeterminado. Para obter mais informações, consulte [Resultados de consultas gerenciadas](managed-results.md).

Para configurar um local de resultados de consultas do Amazon S3 pela primeira vez, veja [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).

Os arquivos de saída são salvos automaticamente para cada consulta executada. Para acessar e visualizar arquivos de saída de consultas usando o console do Athena, as entidades principais do IAM (usuários e funções) precisam de permissão para a ação [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) do Amazon S3 no local de resultados de consultas, além da permissão para a ação [GetQueryResults](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryResults.html) do Athena. O local de resultados da consulta pode ser criptografado. Se o local estiver criptografado, os usuários deverão ter as permissões de chave apropriadas para criptografar e descriptografar o local de resultados da consulta.

**Importante**  
Os principais do IAM com permissão para a ação `GetObject` do Amazon S3 no local de resultados de consultas podem recuperar os resultados das consultas do Amazon S3 mesmo que a permissão para a ação `GetQueryResults` do Athena seja negada.

**nota**  
No caso de consultas canceladas ou com falha, o Athena pode já ter gravado resultados parciais no Amazon S3. Nesses casos, o Athena não excluirá os resultados parciais do prefixo do Amazon S3 em que os resultados são armazenados. Você deve remover o prefixo do Amazon S3 com os resultados parciais. O Athena usa carregamentos fracionados do Amazon S3 para gravar dados do Amazon S3. Recomendamos que você defina a política de ciclo de vida do bucket para encerrar os carregamentos fracionados nos casos em que as consultas falharem. Para obter mais informações, consulte [Interromper um multipart upload incompleto usando uma política de ciclo de vida de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) no *Guia do usuário do Amazon Simple Storage Service*. 
Em certas condições, o Athena pode repetir automaticamente as execuções de consultas. Na maioria dos casos, essas consultas podem ser concluídas com êxito e o ID da consulta é marcado como `Completed`. É possível que essas consultas tenham gravado resultados parciais durante as primeiras tentativas e que gerem uploads incompletos de várias partes.

**Topics**
+ [

# Resultados de consultas gerenciadas
](managed-results.md)
+ [

# Especificar um local para resultados de consultas
](query-results-specify-location.md)
+ [

# Baixar arquivos de resultados de consultas via console do Athena
](saving-query-results.md)
+ [

# Visualizar consultas recentes no console do Athena
](queries-viewing-history.md)
+ [

# Baixar consultas recentes para um arquivo CSV
](queries-downloading-multiple-recent-queries-to-csv.md)
+ [

# Configurar opções de exibição de consultas recentes
](queries-recent-queries-configuring-options.md)
+ [

# Manter seu histórico de consultas por mais de 45 dias
](querying-keeping-query-history.md)
+ [

# Localizar arquivos de saída de consultas no Amazon S3
](querying-finding-output-files.md)

# Resultados de consultas gerenciadas
<a name="managed-results"></a>

Com os resultados de consultas gerenciadas, você pode executar consultas SQL sem fornecer um bucket do Amazon S3 para armazenamento de resultados de consultas. Isso evita que você precise provisionar, gerenciar, controlar o acesso e limpar seus próprios buckets do S3. Para começar, crie um novo grupo de trabalho ou edite um grupo de trabalho existente. Em **Query result configuration**, selecione **Athena managed**. 

**Atributos principais**
+ Simplifica seu fluxo de trabalho removendo a necessidade de escolher um local de bucket do S3 antes de executar as consultas.
+ Sem custos adicionais para usar resultados de consultas gerenciadas e com a exclusão automática dos resultados da consulta, a sobrecarga administrativa e a necessidade de processos separados de limpeza de buckets do S3 são reduzidas.
+ Fácil de começar: grupos de trabalho novos e preexistentes podem ser facilmente configurados para usar resultados de consultas gerenciadas. Você pode ter uma combinação de resultados de consultas gerenciadas pelo Athena e gerenciados pelo cliente em sua conta da AWS.
+ Permissões simplificadas do IAM com acesso aos resultados de leitura através de `GetQueryResults` e `GetQueryResultsStream` vinculados a grupos de trabalho individuais.
+ Os resultados da consulta são criptografados automaticamente com sua escolha de chaves de propriedade da AWS ou chaves de propriedade do cliente.

## Considerações e limitações
<a name="managed-results-considerations"></a>

****
+ O acesso aos resultados da consulta é gerenciado no nível do grupo de trabalho no Athena. Para isso, você precisa de permissões explícitas para ações `GetQueryResults` e `GetQueryResultsStream` do IAM no grupo de trabalho específico. A ação `GetQueryResults` determina quem pode recuperar os resultados de uma consulta concluída em um formato paginado, enquanto a ação `GetQueryResultsStream` determina quem pode transmitir os resultados de uma consulta concluída (comumente usada pelos drivers do Athena).
+ Você não pode baixar arquivos de resultados de consultas maiores que 200 MB do console. Use a instrução `UNLOAD` para gravar resultados maiores que 200 MB em um local para o qual você possa baixar separadamente.
+ O atributo de resultados de consultas gerenciadas não oferece suporte à [reutilização dos resultados da consulta](reusing-query-results.md).
+ Os resultados da consulta ficam disponíveis por 24 horas. Os resultados da consulta são armazenados sem nenhum custo para você durante esse período. Após esse período, os resultados da consulta são excluídos automaticamente.

## Criar ou editar um grupo de trabalho com resultados de consultas gerenciadas
<a name="using-managed-query-results"></a>

Para criar um grupo de trabalho ou atualizar um grupo de trabalho existente com resultados de consultas gerenciadas no console:

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. No menu à esquerda, escolha **Workgroups**.

1. Escolha **Create Workgroup** para criar um novo grupo de trabalho ou editar um grupo de trabalho existente na lista.

1. Em **Query result configuration**, escolha **Athena managed**.   
![\[O menu Query result configuration.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/athena-managed.png)

1. Em **Encrypt query results**, escolha a opção de criptografia desejada. Para obter mais informações, consulte [Escolha a criptografia do resultado da consulta](#managed-query-results-encryption-at-rest).

1. Preencha todos os outros detalhes necessários e escolha **Save changes**. 

## Escolha a criptografia do resultado da consulta
<a name="managed-query-results-encryption-at-rest"></a>

Há duas opções para essa configuração de criptografia:
+ **Criptografar usando uma chave da AWS própria**: esta é a opção padrão quando você usa resultados de consultas gerenciadas. Escolha essa opção se quiser que os resultados da consulta sejam criptografados por uma chave própria da AWS.
+ **Criptografar usando a chave gerenciada pelo cliente**: escolha esta opção se quiser criptografar e descriptografar os resultados da consulta com uma chave gerenciada pelo cliente. Para usar uma chave gerenciada pelo cliente, adicione o serviço Athena no elemento da entidade principal da seção de política de chaves. Para obter mais informações, consulte [Configurar uma política de chave do AWS KMS para resultados de consultas gerenciadas](#managed-query-results-set-up). Para executar consultas com sucesso, o usuário que executa as consultas precisa de permissão para acessar a chave do AWS KMS.

## Configurar uma política de chave do AWS KMS para resultados de consultas gerenciadas
<a name="managed-query-results-set-up"></a>

A seção `Principal` na política de chaves especifica quem pode usar essa chave. O atributo de resultados de consultas gerenciadas apresenta a entidade principal `encryption.athena.amazonaws.com` que você deve especificar na seção `Principal`. Essa entidade principal de serviço serve especificamente para acessar chaves que não são de propriedade do Athena. Você também deve adicionar as ações `kms:Decrypt`, `kms:GenerateDataKey` e `kms:DescribeKey` à política de chave que você usa para acessar os resultados gerenciados. Essas três ações são as ações mínimas permitidas.

Os resultados de consultas gerenciadas usam o ARN do seu grupo de trabalho para o [contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Como a seção `Principal` é um serviço da AWS, você também precisa adicionar `aws:sourceArn` e `aws:sourceAccount` as condições da política de chave. O exemplo a seguir mostra uma política de chave do AWS KMS que tem permissões mínimas em um único grupo de trabalho.

```
 {
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
      ],
    "Resource": "arn:aws:kms:us-east-1:{account-id}:key/{key-id}",
    "Condition": {
    "ArnLike": {
        "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}",
        "aws:SourceArn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}"
    },
    "StringEquals": {
        "aws:SourceAccount": "{account-id}"
    }
}
```

O exemplo de política de chave do AWS KMS a seguir permite que todos os grupos de trabalho dentro da mesma *account-id* usem a mesma chave do AWS KMS.

```
{
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
    ],
    "Resource": "arn:aws:kms:us-east-1:account-id:key/{key-id}",
    "Condition": {
        "ArnLike": {
          "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:account-id:workgroup/*",
          "aws:SourceArn": "arn:aws:athena:us-east-1:account-id:workgroup/*"
        },
        "StringEquals": {
          "aws:SourceAccount": "account-id"
        }
    }
}
```

Além das permissões do Athena e do Amazon S3, você também deve obter permissões para realizar ações `kms:GenerateDataKey` e `kms:Decrypt`. Para obter mais informações, consulte [Permissões para dados criptografados no Amazon S3](encryption.md#permissions-for-encrypting-and-decrypting-data). 

Para obter mais informações sobre a criptografia de resultados de consultas gerenciadas, consulte [Criptografar resultados de consultas gerenciadas](encrypting-managed-results.md).

# Criptografar resultados de consultas gerenciadas
<a name="encrypting-managed-results"></a>

O Athena oferece as seguintes opções para criptografar os [Resultados de consultas gerenciadas](managed-results.md).

## Criptografar usando uma chave de propriedade da AWS
<a name="encrypting-managed-results-aws-owned-key"></a>

Essa é a opção padrão quando você usa os resultados de consultas gerenciadas. Essa opção indica que você deseja criptografar os resultados de consultas usando uma chave de propriedade da AWS. As chaves de propriedade da AWS não são armazenadas em sua conta AWS e fazem parte de uma coleção de chaves do KMS que a AWS possui. Não é cobrada taxa mensal nem taxa de uso de chaves pertencentes à AWS, e elas não são contabilizadas com base nas cotas do AWS KMS para a sua conta.

## Criptografe usando chaves gerenciadas pelo cliente do AWS KMS
<a name="encrypting-managed-results-customer-managed-key"></a>

Chaves gerenciadas pelo cliente são chaves do KMS disponíveis na sua conta AWS que você cria, detém e gerencia. Você tem controle total sobre essas chaves do KMS, inclusive para estabelecer e manter as políticas de chaves, as políticas do IAM e as concessões; habilitar e desabilitar as chaves do KMS; alternar seu material de criptografia; adicionar tags; criar aliases que fazem referência a elas; e programar a exclusão delas. Para obter mais informações, consulte [Chaves gerenciadas pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

## Como o Athena usa a chave gerenciada pelo cliente para criptografar resultados
<a name="encrypting-managed-results-how-ate-uses-cmk"></a>

Quando você especifica uma chave gerenciada pelo cliente, o Athena a usa para criptografar os resultados de consultas quando armazenados nos resultados de consultas gerenciadas. A mesma chave é usada para descriptografar os resultados quando você chama o `GetQueryResults`. Quando você define o estado da chave gerenciada pelo cliente como desativada ou a agenda para exclusão, isso impede que o Athena e todos os usuários criptografem ou descriptografem os resultados com essa chave.

O Athena usa criptografia envelopada e hierarquia de chaves para criptografar dados. A chave de criptografia do AWS KMS é usada para gerar e descriptografar a chave raiz dessa hierarquia de chaves.

Cada resultado é criptografado usando a chave gerenciada pelo cliente configurada no grupo de trabalho no momento da criptografia. Alternar a chave para uma chave diferente gerenciada pelo cliente ou para uma chave de propriedade da AWS não criptografa novamente os resultados existentes com a nova chave. A exclusão e desativação de uma determinada chave gerenciada pelo cliente afeta apenas a descriptografia dos resultados que a chave criptografou.

O Athena precisa acessar sua chave de criptografia para realizar operações `kms:Decrypt`, `kms:GenerateDataKey` e `kms:DescribeKey` para criptografar e descriptografar os resultados. Para obter mais informações, consulte [Permissões para dados criptografados no Amazon S3](encryption.md#permissions-for-encrypting-and-decrypting-data). 

A entidade principal que envia a consulta usando a API `StartQueryExecution` e lê os resultados usando o `GetQueryResults` também deve ter permissão para a chave gerenciada pelo cliente para operações `kms:Decrypt`, `kms:GenerateDataKey` e `kms:DescribeKey`, além das permissões do Athena e do Amazon S3. Para saber mais, consulte [Usar políticas de chaves no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users).

# Especificar um local para resultados de consultas
<a name="query-results-specify-location"></a>

O local de resultados de consultas usado pelo Athena é determinado por uma combinação de configurações de grupo de trabalho e *do lado do cliente*. As configurações do lado do cliente são baseadas na forma como você executa a consulta. 
+  Se você executar a consulta usando o console do Athena, o **Query result location** (Local de resultados da consulta) inserido em **Settings** (Configurações) na barra de navegação determinará a configuração do lado do cliente. 
+ Se você executar a consulta usando a API do Athena, o parâmetro `OutputLocation` da ação [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) determinará a configuração do lado do cliente. 
+ Se você usar os drivers ODBC ou JDBC para executar consultas, a propriedade `S3OutputLocation` especificada no URL de conexão determinará a configuração no lado do cliente. 

**Importante**  
Quando você executa uma consulta usando a API ou usando o driver ODBC ou JDBC, a configuração do console não se aplica. 

Cada configuração de grupo de trabalho tem uma opção [Override client-side settings (Substituir configurações no lado do cliente)](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html) que pode ser habilitada. Quando essa opção está habilitada, as configurações do grupo de trabalho têm precedência sobre as configurações aplicáveis do lado do cliente quando uma entidade principal do IAM associada a esse grupo de trabalho executa a consulta.

## Sobre locais padrão já criados
<a name="query-results-specify-location-previous-defaults"></a>

Anteriormente no Athena, se você executasse uma consulta sem especificar um valor em **Query result location** (Local de resultados de consultas) e a configuração de local de resultados de consultas não fosse substituída por um grupo de trabalho, o Athena criava um local padrão para você. O local padrão era `aws-athena-query-results-MyAcctID-MyRegion`, em que *MyAcctID* era o ID da conta da Amazon Web Services do principal do IAM que executava a consulta, e *MyRegion* era a região em que a consulta era executada (por exemplo, `us-west-1`).

Agora, antes de executar uma consulta do Athena em uma região onde sua conta nunca acessou o Athena, você deve especificar um local de resultados de consultas ou usar um grupo de trabalho que substitua a configuração desse local. O Athena não cria mais um local padrão de resultados de consultas para você, mas os locais padrão `aws-athena-query-results-MyAcctID-MyRegion` que já foram criados permanecem válidos e você pode continuar a usá-los.

**Topics**
+ [

## Sobre locais padrão já criados
](#query-results-specify-location-previous-defaults)
+ [

# Especificar um local para resultados de consultas com uso do console do Athena
](query-results-specify-location-console.md)
+ [

# Especificar um local para resultados de consultas com uso de um grupo de trabalho
](query-results-specify-location-workgroup.md)

# Especificar um local para resultados de consultas com uso do console do Athena
<a name="query-results-specify-location-console"></a>

Antes de executar uma consulta, um local de bucket de resultados de consultas do Amazon S3 precisa ser especificado, ou você deve usar um grupo de trabalho que especificou um bucket e com uma configuração que substitui as configurações do cliente.

**Para especificar um local de resultados de consultas na configuração do lado do cliente usando o console do Athena**

1. [Alterne](switching-workgroups.md) para o grupo de trabalho para o qual você deseja especificar um local de resultados de consultas. O nome do grupo de trabalho padrão é **primary**.

1. No painel de navegação, escolha **Settings** (Configurações).

1. Na barra de navegação, escolha **Manage** (Gerenciar).

1. Em **Manage settings** (Gerenciar configurações), faça um dos seguintes procedimentos:
   + Na caixa de texto **Query result location** (Localização dos resultados da consulta), insira o caminho para o bucket criado no Amazon S3 para resultados de consultas. Adicione o prefixo ao caminho `s3://`.
   + Escolha **Browse S3** (Navegar no S3), escolha o bucket do Amazon S3 que você criou na região atual e escolha **Choose** (Escolher).
**nota**  
Se você estiver usando um grupo de trabalho que especifica um local para os resultados das consultas para todos os usuários do grupo de trabalho, a opção para alterar o local dos resultados das consultas não estará disponível.

1. (Opcional) Escolha **View lifecycle configuration** (Exibir configuração do ciclo de vida) para visualizar e configurar as [regras de ciclo de vida do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) em seu bucket de resultados de consulta. As regras de ciclo de vida do Amazon S3 que você cria podem ser regras de expiração ou regras de transição. As regras de expiração excluem os resultados de consultas automaticamente após determinado tempo. As regras de transição os transferem para outro nível de armazenamento do Amazon S3. Para obter mais informações, consulte [Definir configuração do ciclo de vida em bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) no Guia do usuário do Amazon Simple Storage Service.

1. (Opcional) Para **Expected bucket owner** (Proprietário esperado do bucket), insira o ID da Conta da AWS que você espera ser a proprietária do bucket do local de saída. Essa é uma medida de segurança adicional. Se o ID da conta do proprietário do bucket não corresponder ao ID especificado aqui, as tentativas de saída para o bucket falharão. Para obter informações detalhadas, consulte [Verificar propriedade do bucket com a condição de proprietário do bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html) no *Guia do usuário do Amazon S3*.
**nota**  
A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Ela não se aplica a outros locais do Amazon S3, como locais de origem dos dados em buckets externos do Amazon S3, locais da tabela de destino `CTAS` e `INSERT INTO`, locais de saída da instrução `UNLOAD`, operações para buckets de vazamento para consultas federadas ou consultas `SELECT` executadas em uma tabela em outra conta.

1. (Opcional) Escolha **Encrypt query results** (Criptografar resultados da consulta) para criptografar os resultados das consultas que estão armazenados no Amazon S3. Para obter mais informações sobre criptografia no Athena, consulte [Criptografia em repouso](encryption.md).

1. (Opcional) Escolha **Assign bucket owner full control over query results** (Atribuir controle total ao proprietário do bucket sobre os resultados das consultas) para que proprietário do bucket tenha acesso de controle total sobre os resultados das consultas quando [ACLs estiverem habilitadas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) para o bucket de resultados de consultas. Por exemplo, se a localização dos resultados das consultas pertencer a outra conta, será possível conceder propriedade e controle total sobre os resultados das consultas à outra conta. Para obter mais informações, consulte [Controlar a propriedade de objetos e desabilitar ACLs para seu bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html), no *Guia do Usuário do Amazon S3*.

1. Escolha **Salvar**.

# Especificar um local para resultados de consultas com uso de um grupo de trabalho
<a name="query-results-specify-location-workgroup"></a>

Especifique o local de resultados de consultas em uma configuração de grupo de trabalho usando o Console de gerenciamento da AWS, a AWS CLI ou a API do Athena.

Ao usar a AWS CLI, especifique a localização do resultado da consulta usando o parâmetro `OutputLocation` da opção `--configuration` ao executar o comando [https://docs.aws.amazon.com/cli/latest/reference/athena/create-work-group.html](https://docs.aws.amazon.com/cli/latest/reference/athena/create-work-group.html) ou [https://docs.aws.amazon.com/cli/latest/reference/athena/update-work-group.html](https://docs.aws.amazon.com/cli/latest/reference/athena/update-work-group.html).

**Para especificar o local de resultados de consultas para um grupo de trabalho usando o console do Athena**

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Na lista de grupos de trabalho, escolha o link do grupo de trabalho que você deseja editar.

1. Escolha **Editar**.

1. Em **Query result location and encryption** (Local do resultado da consulta e criptografia), siga um destes procedimentos:
   + Na caixa de texto **Query result location** (Local dos resultados de consultas), insira o caminho para o bucket criado no Amazon S3 para resultados de consultas. Adicione o prefixo ao caminho `s3://`.
   + Escolha **Browse S3** (Navegar no S3), escolha o bucket do Amazon S3 que você criou na região que desejar usar e escolha **Choose** (Escolher).

1. (Opcional) Para **Expected bucket owner** (Proprietário esperado do bucket), insira o ID da Conta da AWS que você espera ser a proprietária do bucket do local de saída. Essa é uma medida de segurança adicional. Se o ID da conta do proprietário do bucket não corresponder ao ID especificado aqui, as tentativas de saída para o bucket falharão. Para obter informações detalhadas, consulte [Verificar propriedade do bucket com a condição de proprietário do bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html) no *Guia do usuário do Amazon S3*.
**nota**  
A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Ela não se aplica a outros locais do Amazon S3, como locais de origem dos dados em buckets externos do Amazon S3, locais da tabela de destino `CTAS` e `INSERT INTO`, locais de saída da instrução `UNLOAD`, operações para buckets de vazamento para consultas federadas ou consultas `SELECT` executadas em uma tabela em outra conta.

1. (Opcional) Escolha **Encrypt query results** (Criptografar resultados da consulta) para criptografar os resultados das consultas que estão armazenados no Amazon S3. Para obter mais informações sobre criptografia no Athena, consulte [Criptografia em repouso](encryption.md).

1. (Opcional) Escolha **Assign bucket owner full control over query results** (Atribuir controle total ao proprietário do bucket sobre os resultados das consultas) para que proprietário do bucket tenha acesso de controle total sobre os resultados das consultas quando [ACLs estiverem habilitadas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) para o bucket de resultados de consultas. Por exemplo, se a localização dos resultados das consultas pertencer a outra conta, será possível conceder propriedade e controle total sobre os resultados das consultas à outra conta. 

   Se a configuração para S3 Object Ownership (Propriedade de objetos do S3) for **Bucket owner preferred** (Proprietário do bucket preferencial), o proprietário do bucket também possuirá todos os objetos de resultados de consultas gravados a partir deste grupo de trabalho. Por exemplo, quando o grupo de trabalho de uma conta externa habilita essa opção e define a localização dos resultados das consultas como o bucket do Amazon S3 da sua conta, cuja configuração S3 Object Ownership (Propriedade de objetos do S3) é **Bucket owner preferred** (Proprietário do bucket preferencial), você é o proprietário e tem acesso de controle total sobre os resultados da consulta do grupo de trabalho externo. 

   A seleção dessa opção com a configuração configuração S3 Object Ownership (Propriedade de objetos do S3) definida como **Bucket owner enforced** (Proprietário do bucket imposto) não surte efeito. Para obter mais informações, consulte [Controlar a propriedade de objetos e desabilitar ACLs para seu bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html), no *Guia do Usuário do Amazon S3*. 

1. Se quiser exigir que todos os usuários do grupo de trabalho usem o local de resultados de consultas especificado, role para baixo até a seção **Settings** (Configurações) e selecione **Override client-side settings** (Substituir configurações no lado do cliente).

1. Escolha **Salvar alterações**.

# Baixar arquivos de resultados de consultas via console do Athena
<a name="saving-query-results"></a>

É possível baixar o arquivo CSV dos resultados da consulta no painel logo após executar uma consulta. Também é possível baixar os resultados da consulta recente na guia **Recent queries** (Consultas recentes).

**nota**  
Os arquivos de resultados das consultas do Athena são arquivos de dados com informações que podem ser configuradas por usuários específicos. Alguns programas que leem e analisam esses dados podem interpretar alguns deles como comandos (injeção de CSV). Por esse motivo, quando você importa dados CSV de resultados de consultas para um programa de planilha, esse programa pode avisá-lo sobre problemas de segurança. Para manter seu sistema seguro, você deve sempre escolher a opção para desabilitar links ou macros dos resultados de consulta baixados.

**Para executar uma consulta e baixar os resultados**

1. Insira sua consulta no editor de consultas e escolha **Run** (Executar).

   Quando a execução da consulta terminar, o painel **Results (Resultados)** mostrará os resultados da consulta.

1. Para baixar um arquivo CSV dos resultados da consulta, escolha **Download results** (Baixar resultados) acima do painel de resultados de consultas. Dependendo da configuração do navegador e do navegador, pode ser necessário confirmar o download.  
![\[Salvar os resultados da consulta em um arquivo .csv no console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-query-results-download-csv.png)

**Como fazer download de um arquivo de resultados de uma consulta anterior**

1. Escolha **Recent queries** (Consultas recentes).  
![\[Escolha Recent queries (Consultas recentes) para visualizar consultas anteriores.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/getting-started-recent-queries.png)

1. Use a caixa de pesquisa para localizar a consulta, escolha a consulta e escolha **Download results** (Baixar resultados).
**nota**  
Não é possível usar a opção **Download results** (Baixar resultados) para recuperar resultados de consultas que foram excluídos manualmente ou foram excluídos ou movidos para outro local pelas [regras de ciclo de vida](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) do Amazon S3.  
![\[Escolha Recent queries (Consultas recentes). para localizar e baixar resultados de consultas anteriores.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-recent-queries-tab-download.png)

# Visualizar consultas recentes no console do Athena
<a name="queries-viewing-history"></a>

Você pode usar o console do Athena para ver quais consultas foram bem-sucedidas ou falharam, e visualizar os detalhes dos erros para as consultas que falharam. O Athena mantém o histórico de consultas por 45 dias. 

**Para visualizar consultas recentes no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Escolha **Recent queries** (Consultas recentes). A guia **Recent queries** (Consultas recentes) mostra informações sobre cada consulta executada.

1. Para abrir uma instrução de consulta no editor de consultas, escolha o ID de execução da consulta.  
![\[Escolha o ID de execução de uma consulta para vê-la no editor de consultas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-view-query-statement.png)

1. Para ver os detalhes de uma consulta que não foi bem-sucedida, escolha o link **Failed** (Com falha) para a consulta.  
![\[Selecione o link Failed (Com falha) Link para uma consulta para visualizar informações sobre a falha.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-view-query-failure-details.png)

# Baixar consultas recentes para um arquivo CSV
<a name="queries-downloading-multiple-recent-queries-to-csv"></a>

É possível usar a guia **Recent queries** (Consultas recentes) do console do Athena para exportar uma ou mais consultas recentes para um arquivo CSV com a finalidade de visualizá-las em formato tabular. O arquivo baixado não contém os resultados da consulta, mas a própria string de consulta SQL e outras informações sobre a consulta. Os campos exportados incluem o ID de execução, o conteúdo da string de consulta, o horário de início da consulta, o status, o tempo de execução, a quantidade de dados verificados, a versão usada do mecanismo de consulta e o método de criptografia. É possível exportar, no máximo, 500 consultas recentes ou, no máximo, 500 consultas filtradas usando critérios inseridos na caixa de pesquisa.

**Para exportar uma ou mais consultas recentes para um arquivo CSV**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Escolha **Recent queries** (Consultas recentes).

1. (Opcional) Use a caixa de pesquisa para filtrar as consultas recentes que você deseja baixar

1. Escolha **Fazer download do CSV**.  
![\[Escolha Fazer download do CSV.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-recent-queries-csv.png)

1. Na solicitação de salvamento do arquivo, escolha **Save** (Salvar). O nome de arquivo padrão é `Recent Queries` seguido por um carimbo de data/hora (por exemplo, `Recent Queries 2022-12-05T16 04 27.352-08 00.csv`).

# Configurar opções de exibição de consultas recentes
<a name="queries-recent-queries-configuring-options"></a>

É possível configurar opções para a guia **Recent queries** (Consultas recentes), como colunas a serem exibidas e quebra de texto.

**Para configurar as opções da guia **Recent queries** (Consultas recentes)**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Escolha **Recent queries** (Consultas recentes).

1. Escolha o botão de opções (ícone de engrenagem).  
![\[Escolha o botão de opção para configurar a exibição de consultas recentes.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-recent-queries-options.png)

1. Na caixa de diálogo **Preferences** (Preferências), escolha o número de linhas por página, o comportamento de quebra de linha e as colunas a serem exibidas.  
![\[Configurar a exibição de consultas recentes.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-recent-queries-preferences.png)

1. Selecione a opção **Confirmar**.

# Manter seu histórico de consultas por mais de 45 dias
<a name="querying-keeping-query-history"></a>

Se você deseja manter o histórico de consultas por mais de 45 dias, é possível recuperá-lo e salvá-lo em um armazenamento de dados, como o Amazon S3. Para automatizar esse processo, é possível usar as ações da API do Athena e do Amazon S3 e os comandos da CLI. O procedimento a seguir resume essas etapas.

**Como recuperar e salvar o histórico de consultas programaticamente**

1. Use a ação da API [ListQueryExecutions](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListQueryExecutions.html) do Athena ou o comando da CLI [list-query-executions](https://docs.aws.amazon.com/cli/latest/reference/athena/list-query-executions.html) para recuperar os IDs das consultas.

1. Use a ação da API [GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) do Athena ou o comando da CLI [get-query-execution](https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-execution.html) para recuperar as informações sobre cada consulta com base no ID.

1. Use a ação da API [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) do Amazon S3 ou o comando da CLI [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) para salvar as informações no Amazon S3.

# Localizar arquivos de saída de consultas no Amazon S3
<a name="querying-finding-output-files"></a>

Os arquivos de saída das consultas são armazenados em subpastas no Amazon S3 no padrão de caminho a seguir, a menos que a consulta seja feita em um grupo de trabalho com uma configuração que substitua as configurações no lado do cliente. Quando a configuração do grupo de trabalho substitui as configurações no lado do cliente, a consulta usa o caminho de resultados especificado pelo grupo de trabalho.

```
QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]
```
+ *QueryResultsLocationInS3* é o local de resultados da consulta especificado pelas configurações do grupo de trabalho ou pelo lado do cliente. Para obter mais informações, consulte [Especificar um local para resultados de consultas](query-results-specify-location.md) adiante neste documento.
+ As seguintes subpastas são criadas somente para consultas executadas no console cujo caminho de resultados ainda não foi substituído pela configuração do grupo de trabalho. As consultas executadas pela AWS CLI ou usando a API do Athena são salvas diretamente em *QueryResultsLocationInS3*.
  + *Queryname* é o nome da consulta para a qual os resultados são salvos. Se a consulta foi executada, mas não salva, `Unsaved` será usado. 
  + *aaaa/mm/dd* é a data em que a consulta foi executada.

Os arquivos associados a uma consulta `CREATE TABLE AS SELECT` são armazenados em uma subpasta `tables` do padrão acima.

## Identificar arquivos de saída de consultas
<a name="querying-identifying-output-files"></a>

Os arquivos são salvos no local de resultados de consultas no Amazon S3 com base no nome, no ID e na data de execução da consulta. Os arquivos de cada consulta são nomeados usando *QueryID*, que é um identificador exclusivo que o Athena atribui a cada consulta quando ela é executada.

Os seguintes tipos de arquivo são salvos:


| Tipo de arquivo | Padrão de nomenclatura de arquivos | Descrição | 
| --- | --- | --- | 
|  **Arquivos de resultados da consulta**  |  `QueryID.csv` `QueryID.txt`  |  Os arquivos de resultados da consulta DML são salvos no formato CSV (valores separados por vírgulas). Os resultados da consulta DDL são salvos como arquivos de texto sem formatação.  Você pode baixar os arquivos de resultados do console do painel **Results** (Resultados) ao usar o console ou do **History** (Histórico) da consulta. Para obter mais informações, consulte [Baixar arquivos de resultados de consultas via console do Athena](saving-query-results.md).  | 
|  **Arquivos de metadados da consulta**  |  `QueryID.csv.metadata` `QueryID.txt.metadata`  |  Os arquivos de metadados de consulta DML e DDL são salvos no formato binário e não são legíveis por humanos. A extensão do arquivo corresponde ao arquivo relacionado de resultados de consultas. O Athena usa os metadados ao ler os resultados da consulta usando a ação `GetQueryResults`. Embora esses arquivos possam ser excluídos, não recomendamos porque informações importantes sobre a consulta são perdidas.  | 
|  **Arquivos manifesto de dados**  |  `QueryID-manifest.csv`  |  Os arquivos manifesto de dados são gerados para monitorar os arquivos que o Athena cria em locais de origens de dados do Amazon S3 quando uma consulta [INSERT INTO](insert-into.md) é executada. Se uma consulta falhar, o manifesto também rastreará os arquivos que a consulta pretendia gravar. O manifesto é útil para identificar arquivos órfãos resultantes de uma consulta com falha.  | 

## Usar o AWS CLI para identificar o local e dos arquivos de saída de consultas
<a name="querying-finding-output-files-cli"></a>

Para usar a AWS CLI para identificar o local de saída e os arquivos de resultados das consultas, execute o comando `aws athena get-query-execution` conforme o exemplo a seguir. Substitua *abc1234d-5efg-67hi-jklm-89n0op12qr34* pelo ID da consulta.

```
aws athena get-query-execution --query-execution-id abc1234d-5efg-67hi-jklm-89n0op12qr34
```

Esse comando retorna uma saída semelhante à seguinte. Para ver as descrições de cada parâmetro de saída, consulte [get-query-execution](https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-execution.html) na *Referência de comandos da AWS CLI*.

```
{
    "QueryExecution": {
        "Status": {
            "SubmissionDateTime": 1565649050.175,
            "State": "SUCCEEDED",
            "CompletionDateTime": 1565649056.6229999
        },
        "Statistics": {
            "DataScannedInBytes": 5944497,
            "DataManifestLocation": "s3://amzn-s3-demo-bucket/athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34-manifest.csv",
            "EngineExecutionTimeInMillis": 5209
        },
        "ResultConfiguration": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_S3"
            },
            "OutputLocation": "s3://amzn-s3-demo-bucket/athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34"
        },
        "QueryExecutionId": "abc1234d-5efg-67hi-jklm-89n0op12qr34",
        "QueryExecutionContext": {},
        "Query": "INSERT INTO mydb.elb_log_backup SELECT * FROM mydb.elb_logs LIMIT 100",
        "StatementType": "DML",
        "WorkGroup": "primary"
    }
}
```

# Reutilização de resultados da consulta no Athena
<a name="reusing-query-results"></a>

Ao executar novamente uma consulta no Athena, é possível optar por reutilizar o último resultado de consulta armazenado, se desejar. Essa opção pode aumentar a performance e reduzir os custos, em termos de números, para os bytes verificados. A reutilização dos resultados da consulta é útil se, por exemplo, você souber que os resultados não serão alterados em um determinado período de tempo. É possível especificar um período máximo para a reutilização dos resultados da consulta. O Athena usará o resultado armazenado desde que não seja mais antigo do que o período especificado. Para obter mais informações, consulte [Reduzir custo e melhorar o desempenho de consultas com Amazon Athena](https://aws.amazon.com/blogs/big-data/reduce-cost-and-improve-query-performance-with-amazon-athena-query-result-reuse/) no *Blog de Big Data da AWS*.

## Atributos principais
<a name="reusing-query-results-key-features"></a>

Ao habilitar a reutilização de resultados para uma consulta, o Athena irá procurar uma execução anterior da consulta no mesmo grupo de trabalho. Se o Athena encontrar uma correspondência, ela ignorará a execução e retornará o resultado da consulta da execução anterior correspondente. É possível habilitar a reutilização dos resultados da consulta por consulta.

O Athena reutilizará o resultado da última consulta quando todas as seguintes condições forem verdadeiras:
+ As strings de consulta correspondem conforme determinado por Athena.
+ Os nomes do banco de dados e do catálogo correspondem.
+ O resultado anterior não expirou.
+ A configuração do resultado da consulta corresponde à configuração do resultado da consulta da execução anterior.
+ Você tem acesso a todas as tabelas referenciadas na consulta.
+ Você tem acesso ao local do arquivo S3 no qual o resultado anterior está armazenado.

Se alguma dessas condições não for atendida, o Athena executará a consulta sem usar os resultados armazenados em cache.

## Considerações e limitações
<a name="reusing-query-results-considerations-and-limitations"></a>

Ao usar o recurso de reutilização dos resultados da consulta, lembre-se dos seguintes pontos:
+ O Athena reutiliza os resultados da consulta somente dentro do mesmo grupo de trabalho.
+ O recurso de reutilização dos resultados da consulta respeita as configurações do grupo de trabalho. Se você substituir a configuração de resultado de uma consulta, o recurso será desativado.
+ Somente consultas que produzem conjuntos de resultados no Amazon S3 são compatíveis. As instruções que não sejam `SELECT` e `EXECUTE` não são compatíveis.
+ Tabelas do Apache Hive, Apache Hudi, Apache Iceberg e Linux Foundation Delta Lake registradas com AWS Glue são suportados. Metastores do Hive externos não são compatíveis.
+ Não há suporte para as consultas que fazem referência a catálogos federados ou a um metastore Hive externo.
+ Não há suporte para a reutilização dos resultados da consulta para tabelas governadas do Lake Formation.
+ A reutilização do resultado da consulta não é compatível quando o local da origem da tabela no Amazon S3 é registrado como um local de dados no Lake Formation. 
+ Não há suporte para tabelas com permissões de linha e de coluna.
+ Tabelas com controle de acesso refinado (por exemplo, filtragem de colunas ou linhas) não são compatíveis.
+ Qualquer consulta que referencie uma tabela não compatível não está qualificada para reutilizar os resultados da consulta.
+ O Athena requer que você tenha permissões de leitura do Amazon S3 para que o arquivo de saída gerado anteriormente seja reutilizado.
+ O recurso de reutilização dos resultados da consulta assume que o conteúdo do resultado anterior não foi modificado. O Athena não verifica a integridade de um resultado anterior antes de usá-lo.
+ Se os resultados da consulta da execução anterior foram excluídos ou movidos para um local diferente no Amazon S3, a execução subsequente da mesma consulta não reutilizará os resultados da consulta anterior. 
+ Há a possibilidade de que resultados potencialmente obsoletos retornem. O Athena não verifica alterações nos dados de origem até que o período máximo de reutilização especificado seja atingido.
+ Se diversos resultados estiverem disponíveis para reutilização, o Athena usará o resultado mais recente.
+ Consultas que usam operadores ou funções não determinísticas como `rand()` ou `shuffle()` não usam resultados em cache. Por exemplo, `LIMIT` sem `ORDER BY` não é determinístico e não está armazenado em cache, mas `LIMIT` com `ORDER BY` é determinístico e está armazenado em cache.
+ Para usar o recurso de reutilização de resultados de consulta com o JDBC, a versão mínima necessária do driver é 2.0.34.1000. Para ODBC, a versão mínima necessária do driver é 1.1.19.1002. Para obter informações sobre download de drivers, consulte [Conectar ao Amazon Athena com drivers JDBC e ODBC](athena-bi-tools-jdbc-odbc.md).
+ Não há compatibilidade para reutilizar os resultados da consulta em consultas que usem mais de um catálogo de dados. 
+  Não há compatibilidade para reutilizar os resultados da consulta em consultas que incluam mais de 20 tabelas.
+ Para strings de consulta com menos de 100 KB, as diferenças nos comentários e no espaço em branco são ignoradas, e `INNER JOIN` e `JOIN` são tratados como equivalentes para fins de reutilização dos resultados. As strings de consulta maiores que 100 KB devem ser uma correspondência exata para reutilizar os resultados.
+ Um resultado de consulta será considerado expirado se for mais antigo que o período máximo especificado, ou mais antigo que o padrão de 60 minutos se um período máximo não tiver sido especificado. O período máximo para a reutilização dos resultados da consulta pode ser especificada em minutos, horas ou dias. O período máximo especificado é equivalente a sete dias, independentemente da unidade de tempo usada.
+ Os [resultados de consultas gerenciadas](https://docs.aws.amazon.com/athena/latest/ug/managed-results.html) não é compatível.

## Como reutilizar os resultados da consulta no console do Athena
<a name="reusing-query-results-athena-console"></a>

Para usar o recurso, habilite a opção **Reuse query results** (Reutilizar resultados da consulta) no editor de consultas do Athena.

![\[Habilite Reuse query results (Reutilizar resultados da consulta) no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/reusing-query-results-1.png)


**Para configurar o recurso de reutilização dos resultados da consulta**

1. No editor de consultas do Athena, na opção **Reuse query results** (Reutilizar resultados da consulta), escolha o ícone de edição ao lado de **up to 60 minutes ago** (até 60 minutos atrás).

1. Na caixa de diálogo **Edit reuse time** (Editar tempo de reutilização), na caixa à direita, escolha uma unidade de tempo (minutos, horas ou dias).

1. Na caixa à esquerda, insira ou escolha o número de unidades de tempo que deseja especificar. O tempo máximo que é possível inserir é o equivalente a sete dias, independentemente da unidade de tempo escolhida.  
![\[Como configurar o tempo máximo para a reutilização dos resultados da consulta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/reusing-query-results-2.png)

1. Escolha **Confirmar**.

   Uma barra de notificação confirmará sua alteração de configuração e a opção **Reuse query results** (Reutilizar resultados da consulta) exibirá a nova configuração.

# Visualizar estatísticas e detalhes de execução para consultas concluídas
<a name="query-stats"></a>

Depois de executar uma consulta, você pode obter estatísticas sobre os dados de entrada e saída processados, ver uma representação gráfica do tempo gasto em cada fase da consulta e explorar os detalhes da execução de maneira interativa.

**Para visualizar as estatísticas de uma consulta concluída**

1. Depois de executar uma consulta no editor de consultas do Athena, selecione a guia **Query stats** (Estatísticas da consulta).  
![\[Escolha Query stats (Estatísticas da consulta).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-stats-1.png)

   A guia **Query stats** (Estatísticas de consultas) fornece as seguintes informações:
   + **Data processed** (Dados processados): mostra o número de linhas de entrada e bytes processados e o número de linhas e bytes gerados.
   + **The Total runtime** (O tempo de execução total): mostra o tempo total que a consulta levou para ser executada e uma representação gráfica de quanto desse tempo foi gasto em enfileiramento, planejamento, execução e processamento de serviços.
**nota**  
As informações referentes a contagem de linhas e ao tamanho dos dados de entrada e saída em nível de estágio não são mostradas quando uma consulta tem filtros em nível de linha definidos no Lake Formation.

1. Para explorar interativamente as informações sobre como a consulta foi executada, escolha **Execution details** (Detalhes da execução).  
![\[Escolha Execution details (Detalhes da execução).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-stats-2.png)

   A página **Execution details** (Detalhes da execução) mostra o ID de execução da consulta e um gráfico dos estágios baseados em zero nessa consulta. As etapas são ordenadas do início ao fim, de baixo para cima. O rótulo de cada estágio mostra quanto tempo o estágio levou para ser executado.
**nota**  
Em geral, o tempo total de execução e o tempo da fase de execução diferem significativamente. Por exemplo, uma consulta com um tempo de execução total em minutos pode mostrar o tempo da fase de execução em horas. Como uma fase é uma unidade lógica de computação executada paralelamente entre várias tarefas, o tempo de execução de uma fase é o tempo de execução agregado de todas as suas tarefas. Apesar dessa discrepância, o tempo de execução da fase pode ser útil como um indicador relativo de qual fase foi computacionalmente mais intensiva em uma consulta.  
![\[A página de detalhes da execução.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-stats-3.png)

   Para navegar pelo gráfico, utilize as seguintes opções:
   + Para aumentar ou diminuir o zoom, role com o mouse ou use os ícones de ampliação.
   + Para ajustar o gráfico para que ele caiba na tela, selecione o ícone **Zoom to fit** (Ampliar para caber).
   + Para mover o gráfico, arraste o ponteiro do mouse.

1. Para ver mais detalhes de um estágio, escolha esse estágio. O painel de detalhes do estágio à direita mostra o número de linhas e bytes de entrada e saída, bem como uma árvore de operador.  
![\[Painel de detalhes do estágio.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-stats-4.png)

1. Para ver os detalhes do estágio em largura natural, selecione o ícone de expansão na parte superior direita do painel de detalhes.

1. Para obter informações sobre as partes do estágio, expanda um ou mais itens na árvore do operador.  
![\[Árvore do operador expandida.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/query-stats-5.png)

Para mais informações sobre detalhes de execução, consulte [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md).

## Recursos adicionais
<a name="query-stats-additional-resources"></a>

Para obter mais informações, consulte os recursos a seguir.

[Visualização de planos de execução para consultas SQL](query-plans.md)

[Usar EXPLAIN e EXPLAIN ANALYZE no Athena](athena-explain-statement.md)

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/7JUyTqglmNU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/7JUyTqglmNU)


# Trabalhar com visualizações
<a name="views"></a>

Uma visualização no Amazon Athena é uma tabela lógica, não física. A consulta que define uma exibição é executada sempre que a exibição é referenciada em uma consulta. Você pode criar uma exibição a partir de uma consulta `SELECT` e, em seguida, fazer referência a essa exibição em futuras consultas. 

É possível usar dois tipos diferentes de visualizações no Athena: visualizações do Athena e visualizações do AWS Glue Data Catalog.

## Quando usar as visualizações do Athena?
<a name="when-to-use-views"></a>

Talvez você queira criar visualizações do Athena para: 
+ **Consultar um subconjunto de dados**: por exemplo, é possível criar uma visualização com um subconjunto de colunas com base na tabela original para simplificar a consulta de dados. 
+ **Combinar tabelas**: é possível usar exibições para combinar várias tabelas em uma consulta. Se você tem várias tabelas e deseja combiná-las com `UNION ALL`, é possível criar uma visualização com essa expressão para simplificar consultas em tabelas combinadas.
+ **Ocultar a complexidade**: use as visualizações para ocultar a complexidade de consultas básicas existentes e simplificar as consultas executadas pelos usuários. As consultas básicas geralmente incluem junções entre tabelas, expressões na lista de colunas e outra sintaxe de SQL que dificultam o entendimento e a depuração delas. Você pode criar uma exibição que oculta a complexidade e simplifica consultas.
+ **Otimizar consultas**: é possível usar visualizações para experimentar técnicas de otimização para criar consultas otimizadas. Por exemplo, se você encontrar uma combinação de condições `WHERE`, ordem `JOIN` ou outras expressões que demonstram a melhor performance, você poderá criar uma exibição com essas cláusulas e expressões. Os aplicativos podem realizar consultas relativamente simples contra essa exibição. Posteriormente, se você encontrar uma melhor maneira de otimizar a consulta original, quando você recriar a exibição, todos os aplicativos aproveitam imediatamente a consulta básica otimizada. 
+ **Ocultar nomes subjacentes**: é possível usar visualizações para ocultar nomes de tabelas e colunas subjacentes e minimizar os problemas de manutenção se esses nomes forem alterados. Se os nomes forem alterados, é possível simplesmente recriar a exibição usando os novos nomes. As consultas que usam a visualização em vez das tabelas continuarão em execução sem alterações.

  Para obter mais informações, consulte [Trabalhar com visualizações do Athena](views-console.md).

## Quando usar as visualizações do AWS Glue Data Catalog?
<a name="when-to-use-views-gdc"></a>

Use as visualizações do AWS Glue Data Catalog quando desejar uma perspectiva única e comum entre os Serviços da AWS, como o Amazon Athena e o Amazon Redshift. Nas visualizações do Catálogo de Dados, as permissões de acesso são definidas pelo usuário que criou a visualização, e não pelo usuário que consulta a visualização. Esse método de concessão de permissões é chamado de semântica do *programador*.

Os casos de uso apresentados a seguir mostram como é possível usar as visualizações do Catálogo de Dados.
+ **Maior controle de acesso**: você cria uma visualização que restringe o acesso aos dados com base no nível de permissões requeridas pelo usuário. Por exemplo, é possível usar as visualizações do Catálogo de Dados para evitar que colaboradores que não trabalham no departamento de recursos humanos (RH) vejam informações de identificação pessoal.
+ **Garantia de registros completos**: ao aplicar determinados filtros na visualização do Catálogo de Dados, você garante que os registros de dados em uma visualização do Catálogo de Dados estejam sempre completos.
+ **Segurança aprimorada**: nas visualizações do Catálogo de Dados, a definição de consulta que cria a visualização deve estar intacta para que a visualização seja criada. Isso torna as visualizações do Catálogo de Dados menos suscetíveis a comandos SQL de agentes mal-intencionados.
+ **Prevenção do acesso às tabelas subjacentes**: a semântica do programador permite que os usuários acessem uma visualização sem disponibilizar a tabela subjacente para eles. Somente o usuário que define a visualização necessita de acesso às tabelas.

As definições de visualização do Catálogo de Dados são armazenadas no AWS Glue Data Catalog. Isso significa que você pode usar o AWS Lake Formation para conceder acesso usando concessões de recursos, concessões de colunas ou controles de acesso baseados em etiquetas. Para obter mais informações sobre como conceder e revogar acesso no Lake Formation, consulte [Granting and revoking permissions on Data Catalog resources](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) no *Guia do desenvolvedor do AWS Lake Formation*.

Para obter mais informações, consulte [Usar visualizações do Catálogo de Dados no Athena](views-glue.md).

# Trabalhar com visualizações do Athena
<a name="views-console"></a>

As visualizações do Athena podem ser facilmente criadas, atualizadas e gerenciadas no console do Athena.

## Criar visualizações
<a name="creating-views"></a>

Você pode criar uma visualização no console do Athena usando um modelo ou executando uma consulta existente.

**Para usar um modelo para criar uma visualização**

1. No console do Athena, ao lado de **Tables and views** (Tabelas e visualizações), escolha **Create** (Criar) e, em seguida, escolha **Create view** (Criar visualização).  
![\[Criação de uma visualização.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/create-view.png)

   Essa ação coloca um modelo de visualização editável no editor de consultas. 

1. Edite o modelo de visualização de acordo com suas necessidades. Quando você digitar um nome para a visualização na instrução, lembre-se de que os nomes das visualizações não podem conter caracteres especiais além do sublinhado `(_)`. Consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md). Evite usar [Escapar palavras-chave reservadas em consultas](reserved-words.md) para nomear visualizações. 

   Para obter mais informações sobre a criação de visualizações, consulte [CREATE VIEW e da CREATE PROTECTED MULTI DIALECT VIEW](create-view.md) e [Exemplos de visualizações do Athena](views-examples.md). 

1. Selecione **Run** (Executar) para criar a visualização. A visualização aparece na lista de visualizações no console do Athena.

**Para criar uma visualização a partir de uma consulta existente**

1. Use o editor de consultas do Athena para executar uma consulta existente.

1. Na janela do editor de consultas, escolha **Create** (Criar) e, em seguida, escolha **View from query** (Visualização a partir de consulta).  
![\[Selecione Create (Criar), View from query (Visualização a partir de consulta).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/create-view-from-query.png)

1. Na caixa de diálogo **Create View** (Criar visualização), insira um nome para a visualização e, em seguida, escolha **Create** (Criar). Os nomes de visualizações não podem conter caracteres especiais, exceto sublinhado `(_)`. Consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md). Evite usar [Escapar palavras-chave reservadas em consultas](reserved-words.md) para nomear visualizações.

   O Athena adiciona a visualização à lista de visualizações no console e exibe a instrução `CREATE VIEW` para a visualização no editor de consulta.

**Observações**
+ Se você excluir uma tabela em que outra tabela se baseia e, depois, tentar executar a visualização, o Athena exibirá uma mensagem de erro.
+ Você pode criar uma visualização aninhada, que fica acima de uma visualização existente. O Athena impede que você execute uma visualização repetida com referência a ela mesma.

# Exemplos de visualizações do Athena
<a name="views-examples"></a>

Para mostrar a sintaxe da consulta de exibição, use [SHOW CREATE VIEW](show-create-view.md).

**Example Exemplo 1**  
Considere as duas tabelas a seguir: uma tabela `employees` com duas colunas, `id` e `name` e uma tabela `salaries`com duas colunas, `id` e `salary`.   
Neste exemplo, criamos uma exibição chamada `name_salary` como uma consulta `SELECT` que obtém uma lista de IDs mapeados para salários a partir das tabelas `employees` e `salaries`:  

```
CREATE VIEW name_salary AS
SELECT
 employees.name, 
 salaries.salary 
FROM employees, salaries 
WHERE employees.id = salaries.id
```

**Example Exemplo 2**  
No exemplo a seguir, criamos uma exibição chamada `view1` que permite que você oculte a sintaxe de consulta mais complexa.   
Essa exibição é executada sobre duas tabelas, `table1` e `table2`, em que cada tabela é uma consulta `SELECT` diferente. A visualização seleciona as colunas de `table1` e combina os resultados com `table2`. A junção é baseada na coluna `a` presente em ambas as tabelas.  

```
CREATE VIEW view1 AS
WITH
  table1 AS (
         SELECT a, 
         MAX(b) AS the_max 
         FROM x 
         GROUP BY a
         ),
  table2 AS (
         SELECT a, 
         AVG(d) AS the_avg 
         FROM y 
         GROUP BY a)
SELECT table1.a, table1.the_max, table2.the_avg
FROM table1
JOIN table2 
ON table1.a = table2.a;
```

Para obter informações sobre consultar visualizações federadas, consulte [Consultar visualizações federadas](running-federated-queries.md#running-federated-queries-federated-views).

# Gerenciar visualizações do Athena
<a name="views-managing"></a>

No console do Athena, é possível:
+ Localizar todas as visualizações no painel esquerdo, onde as tabelas estão listadas.
+ Filtre as exibições.
+ Visualize uma exibição, mostre suas propriedades, edite-a ou exclua-a.

**Para mostrar as ações de uma exibição**

Uma exibição é mostrada no console somente se você já a criou.

1. No console do Athena, escolha **Views** (Visualizações) e, em seguida, escolha uma visualização para expandi-la e mostrar as colunas na visualização.

1. Escolha os três pontos verticais ao lado da visualização para mostrar uma lista de ações dela.  
![\[O menu de ações de uma visualização.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/view-options.png)

1. Escolha as ações para a visualização: exibir uma prévia, inserir o nome o editor de consultas, excluir, consultar as propriedades ou exibir e editar no editor de consultas.

## Ações do DDL com suporte para visualizações do Athena
<a name="views-supported-actions"></a>

O Athena oferece suporte às ações a seguir nas visualizações.


| Declaração | Descrição | 
| --- | --- | 
| [CREATE VIEW e da CREATE PROTECTED MULTI DIALECT VIEW](create-view.md) |  Cria uma nova exibição a partir de uma consulta `SELECT` especificada. Para obter mais informações, consulte [Criar visualizações](views-console.md#creating-views). A cláusula `OR REPLACE` opcional permite atualizar a exibição existente substituindo-a  | 
| [DESCRIBE VIEW](describe-view.md) |  Mostra a lista de colunas para a exibição nomeada. Isso permite examinar os atributos de uma exibição complexa.   | 
| [DROP VIEW](drop-view.md) |  Exclui uma exibição existente. A cláusula `IF EXISTS` opcional suprime o erro se a exibição não existir.  | 
| [SHOW CREATE VIEW](show-create-view.md) |  Mostra a instrução SQL que cria a exibição específica.  | 
| [SHOW VIEWS](show-views.md) |  Lista as exibições no banco de dados especificado ou no banco de dados atual se você omitir o nome do banco de dados. Use a cláusula `LIKE` opcional com uma expressão regular para restringir a lista de nomes de exibições. Você também pode ver a lista de exibições no painel esquerdo no console.  | 
| [SHOW COLUMNS](show-columns.md) |  Liste as colunas no esquema para obter uma visualização.  | 

# Considerações e limitações das visualizações do Athena
<a name="considerations-limitations-views"></a>

As visualizações do Athena têm considerações e limitações a seguir.

## Considerações
<a name="considerations-views"></a>

As seguintes considerações se aplicam à criação e ao uso de visualizações no Athena:
+ No Athena, é possível pré-visualizar e trabalhar com visualizações criadas no console do Athena, no AWS Glue Data Catalog ou com o Presto em execução no cluster do Amazon EMR conectado ao mesmo catálogo.
+ Se você criou visualizações do Athena no catálogo de dados, o catálogo as trata como tabelas. Você pode usar o controle de acesso detalhado no nível da tabela no catálogo de dados para [restringir o acesso](fine-grained-access-to-glue-resources.md) a essas visualizações. 
+  O Athena impede que você execute visualizações repetidas e exibe uma mensagem de erro nesses casos. Uma exibição recursiva é uma consulta de exibição que faz referência a si mesmo.
+ O Athena exibe uma mensagem de erro quando detecta visualizações obsoletas. Uma exibição obsoleta é relatada quando um dos seguintes itens ocorrer:
  + A exibição faz referência a tabelas ou bancos de dados que não existem.
  + Uma alteração de esquema ou metadados é feita em uma tabela referenciada. 
  + Uma tabela referenciada é descartada e recriada com um esquema ou uma configuração diferente.
+ Você pode criar e executar exibições aninhadas, desde que a consulta por trás da exibição aninhada seja válida e as tabelas e os bancos de dados existirem.

## Limitações
<a name="limitations-views"></a>
+ Os nomes das visualizações do Athena não podem conter caracteres especiais, exceto sublinhado `(_)`. Para obter mais informações, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).
+ Evite usar palavras-chave reservadas para nomear visualizações. Se você usar palavras-chave reservadas, use aspas duplas para delimitar as palavras-chave reservadas em suas consultas em visualizações. Consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).
+ Não é possível usar visualizações criadas no Athena com metastores externos do Hive ou UDFs. Para obter informações sobre como trabalhar com visualizações criadas externamente no Hive, consulte [Trabalhar com visualizações do Hive](hive-views.md).
+ Não é possível usar visualizações com funções geoespaciais.
+ Não é possível usar as visualizações para gerenciar o controle de acesso aos dados no Amazon S3. Para consultar uma visualização, é necessário ter permissões para acessar os dados armazenados no Amazon S3. Para obter mais informações, consulte [Controlar o acesso ao Amazon S3 do Athena](s3-permissions.md).
+ Embora as consultas de visualizações entre contas seja possível no mecanismo do Athena versão 3, não é possível criar uma visualização que inclua um AWS Glue Data Catalog entre contas. Para obter informações sobre o acesso a catálogos de dados entre contas, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).
+ As colunas ocultas de metadados do Hive ou Iceberg `$bucket`, `$file_modified_time`, `$file_size` e `$partition` não são compatíveis para visualizações no Athena. Para obter informações sobre como usar a coluna `$path` de metadados no Athena, consulte [Obter os locais de arquivos dos dados de origem no Amazon S3](select.md#select-path).

# Usar visualizações do Catálogo de Dados no Athena
<a name="views-glue"></a>

A criação de visualizações do catálogo de dados no Amazon Athena exige uma instrução `CREATE VIEW` especial. Consultá-las usa a sintaxe `SELECT` do SQL convencional. As visualizações do Catálogo de Dados também são chamadas de visualizações de *vários dialetos*, ou MDVs.

## Criar uma visualização do Catálogo de Dados
<a name="views-glue-creating-a-data-catalog-view"></a>

Para criar uma visualização do Catálogo de Dados no Athena, use a sintaxe a seguir.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS athena-sql-statement
```

**nota**  
A opção `SHOW VIEW JSON` se aplica somente às visualizações do Catálogo de Dados, e não às visualizações do Athena. O uso da opção `SHOW VIEW JSON` inicia uma "execução seca" que valida a entrada e, se a validação for bem-sucedida, retornará o JSON do objeto da tabela AWS Glue que representará a visualização. A visualização real não é criada. Se a opção `SHOW VIEW JSON` não for especificada, as validações serão feitas e a exibição será criada normalmente no Catálogo de Dados.

O exemplo de sintaxe apresentado a seguir mostra como um usuário do perfil `Definer` cria a visualização `orders_by_date` do Catálogo de Dados. O exemplo pressupõe que o perfil `Definer` tenha permissões `SELECT` completas na tabela `orders` no banco de dados `default`.

```
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date 
SECURITY DEFINER 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
WHERE order_city = 'SEATTLE' 
GROUP BY orderdate
```

Para obter informações sobre sintaxe, consulte [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view).

## Consulta de uma visualização do Catálogo de Dados
<a name="views-glue-querying-a-data-catalog-view"></a>

Depois que a visualização for criada, o admin do `Lake Formation` poderá conceder permissões `SELECT` na visualização do Catálogo de Dados para as entidades principais do `Invoker`. Em seguida, as entidades principais do `Invoker` poderão consultar a visualização sem ter acesso às tabelas subjacentes básicas referenciadas pela visualização. Veja a seguir um exemplo de consulta do `Invoker`.

```
SELECT * from orders_by_date where price > 5000
```

## Considerações e limitações
<a name="views-glue-limitations"></a>

A maioria das limitações de visualização a seguir do Catálogo de Dados são específicas do Athena. Para ver limitações adicionais das visualizações do Catálogo de Dados que se também aplicam a outros serviços, consulte a documentação do Lake Formation.
+ As visualizações do catálogo de dados não podem referenciar outras visualizações, links de recursos de banco de dados ou links de recursos de tabela.
+ É possível fazer referência a até dez tabelas na definição de visualização.
+ As tabelas não devem ter a permissão de data lake `IAMAllowedPrincipals` no Lake Formation. Se presente, o erro Visualizações de vários dialetos só podem fazer referência a tabelas sem permissões de IAMAllowedPrincipals permissions ocorrerá.
+ A localização da tabela no Amazon S3 deve ser registrada como uma localização de data lake do Lake Formation. Se a tabela não estiver registrada dessa forma, o erro Visualizações de vários dialetos só podem fazer referência a tabelas gerenciadas pelo Lake Formation ocorrerá. Para obter informações sobre como registrar locais do Amazon S3 no Lake Formation, consulte [Registrar um local do Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) no *Guia do desenvolvedor do AWS Lake Formation*.
+ As chamadas das APIs [GetTables](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTables.html) e [SearchTables](https://docs.aws.amazon.com/glue/latest/webapi/API_SearchTables.html) do AWS Glue não atualizam o parâmetro `IsRegisteredWithLakeFormation`. Para visualizar o valor correto para o parâmetro, use a API [GetTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html) do AWS Glue. Para obter mais informações, consulte [As APIs GetTables e SearchTables não atualizam o valor do parâmetro IsRegisteredWithLakeFormation](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value) no *Guia do desenvolvedor do AWS Lake Formation*.
+ A entidade principal `DEFINER` pode ser somente um perfil do IAM.
+ O perfil `DEFINER` deve ter permissões `SELECT` completas (concedíveis) nas tabelas subjacentes.
+ Não há suporte para as visualizações `UNPROTECTED` do Catálogo de Dados.
+ Não há suporte para as funções definidas pelo usuário (UDFs) na definição de visualização.
+ As fontes de dados federadas do Athena não podem ser usadas em visualizações do Catálogo de Dados.
+ As visualizações do Catálogo de Dados não têm suporte para metastores externos do Hive.
+ O Athena exibe uma mensagem de erro quando detecta visualizações obsoletas. Uma exibição obsoleta é relatada quando um dos seguintes itens ocorrer:
  + A exibição faz referência a tabelas ou bancos de dados que não existem.
  + Uma alteração de esquema ou metadados é feita em uma tabela referenciada. 
  + Uma tabela referenciada é descartada e recriada com um esquema ou uma configuração diferente.

## Permissões
<a name="views-glue-permissions"></a>

As visualizações do Catálogo de Dados requerem três perfis: `Lake Formation Admin`, `Definer` e `Invoker`. 
+ **`Lake Formation Admin`** – tem acesso para configurar todas as permissões do Lake Formation.
+ **`Definer`** – cria a visualização do Catálogo de Dados. O perfil `Definer` deve ter permissões `SELECT` completas e concedíveis em todas as tabelas subjacentes às quais a definição de visualização faz referência.
+ **`Invoker`** – pode consultar a visualização do Catálogo de Dados ou verificar seus metadados. Para mostrar o invocador de uma consulta, você pode usar a função `invoker_principal()` do DML. Para obter mais informações, consulte [invoker\$1principal()](functions-env3.md#functions-env3-invoker-principal).

As relações de confiança do perfil `Definer` devem permitir a ação `sts:AssumeRole` para as entidades principais de serviço do AWS Glue e do Lake Formation. Para obter mais informações, consulte [Pré-requisitos para a criação de visualizações](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs) no *Guia do desenvolvedor do AWS Lake Formation*.

As permissões do IAM para o acesso ao Athena também são necessárias. Para obter mais informações, consulte [AWSPoliticas gerenciadas pela para o Amazon Athena](security-iam-awsmanpol.md).

# Gerenciamento de visualizações do Catálogo de Dados
<a name="views-glue-managing"></a>

É possível usar comandos DDL para atualizar e gerenciar suas visualizações do Catálogo de Dados.

## Atualização de uma visualização do Catálogo de Dados
<a name="views-glue-updating-a-data-catalog-view"></a>

O admin do `Lake Formation` ou o definidor podem usar a sintaxe do `ALTER VIEW UPDATE DIALECT` para atualizar a definição de visualização. O exemplo apresentado a seguir modifica a definição de visualização para selecionar colunas da tabela `returns` em vez de usar a tabela `orders`.

```
ALTER VIEW orders_by_date UPDATE DIALECT
AS
SELECT return_date, sum(totalprice) AS price
FROM returns
WHERE order_city = 'SEATTLE'
GROUP BY orderdate
```

## Ações do DDL com suporte para visualizações do AWS Glue Data Catalog
<a name="views-glue-supported-actions"></a>

O Athena oferece suporte às ações a seguir nas visualizações do AWS Glue Data Catalog.


| Declaração | Descrição | 
| --- | --- | 
| [ALTER VIEW DIALECT](alter-view-dialect.md) |  Atualiza uma visualização do Catálogo de Dados adicionando um dialeto para o mecanismo ou atualizando ou descartando um dialeto do mecanismo existente.  | 
| [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) |  Cria uma visualização do Catálogo de Dados a partir de uma consulta `SELECT` especificada. Para obter mais informações, consulte [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view). A cláusula `OR REPLACE` opcional permite atualizar a exibição existente substituindo-a  | 
| [DESCRIBE VIEW](describe-view.md) |  Mostra a lista de colunas para a exibição nomeada. Isso permite examinar os atributos de uma exibição complexa.   | 
| [DROP VIEW](drop-view.md) |  Exclui uma exibição existente. A cláusula `IF EXISTS` opcional suprime o erro se a exibição não existir.  | 
| [SHOW CREATE VIEW](show-create-view.md) |  Mostra a instrução SQL que cria a exibição específica.  | 
| [SHOW VIEWS](show-views.md) |  Lista as exibições no banco de dados especificado ou no banco de dados atual se você omitir o nome do banco de dados. Use a cláusula `LIKE` opcional com uma expressão regular para restringir a lista de nomes de exibições. Você também pode ver a lista de exibições no painel esquerdo no console.  | 
| [SHOW COLUMNS](show-columns.md) |  Liste as colunas no esquema para obter uma visualização.  | 

# Usar consultas salvas
<a name="saved-queries"></a>

É possível usar o console do Athena para salvar, editar, executar, renomear e excluir consultas criadas no editor de consultas.

## Considerações e limitações
<a name="saved-queries-considerations-and-limitations"></a>
+ É possível atualizar o nome, a descrição e o texto de consultas salvas.
+ Apenas é possível atualizar as consultas na sua própria conta.
+ Você não pode alterar o grupo de trabalho ou o banco de dados ao qual essa consulta pertence.
+ O Athena não mantém um histórico de modificações de consultas. Se quiser manter uma versão específica de uma consulta, salve-a com um nome diferente.

**nota**  
Os recursos do Amazon Athena agora podem ser acessados no Estúdio Unificado Amazon SageMaker (Preview), o que ajuda você a acessar os dados da sua organização e agir com base neles usando as melhores ferramentas. É possível migrar consultas salvas de um grupo de trabalho do Athena para um projeto do SageMaker Unified Studio, configurar projetos com grupos de trabalho existentes do Athena e manter as permissões necessárias por meio de atualizações de perfis do IAM. Para obter mais informações, consulte [Migrar recursos do Amazon Athena para o Estudio Unificado Amazon SageMaker (Preview)](https://github.com/aws/Unified-Studio-for-Amazon-Sagemaker/tree/main/migration/athena).

**Topics**
+ [

## Considerações e limitações
](#saved-queries-considerations-and-limitations)
+ [

# Salvar uma consulta com um nome
](saved-queries-name.md)
+ [

# Executar uma consulta salva
](saved-queries-run.md)
+ [

# Editar uma consulta salva
](saved-queries-edit.md)
+ [

# Renomear ou excluir uma consulta salva
](saved-queries-rename-or-delete.md)
+ [

# Renomear uma consulta salva não exibida
](saved-queries-rename-not-displayed.md)
+ [

# Excluir uma consulta salva não exibida
](saved-queries-delete-not-displayed.md)
+ [

# Usar a API do Athena para atualizar consultas salvas
](saved-queries-update-with-api.md)

# Salvar uma consulta com um nome
<a name="saved-queries-name"></a>

**Para salvar uma consulta e dar um nome para ela**

1. Insira ou execute uma consulta no editor de consultas do console do Athena.

1. Acima da janela do editor de consultas, na guia para a consulta, selecione os três pontos verticais e, em seguida, escolha **Save as** (Salvar como).

1. Na caixa de diálogo **Save query** (Salvar consulta), insira um nome para a consulta e uma descrição opcional. Você pode usar a janela expansível **Preview SQL query** (Visualizar consulta SQL) para verificar o conteúdo da consulta antes de a salvar.

1. Escolha **Save query** (Salvar consulta).

   No editor de consultas, a guia referente à consulta mostra o nome especificado.

# Executar uma consulta salva
<a name="saved-queries-run"></a>

**Como executar uma consulta salva**

1. No console do Athena, escolha a guia **Saved queries** (Consultas salvas).

1. Na lista **Saved queries** (Consultas salvas), escolha o ID da consulta que deseja executar.

   O editor de consultas mostra a consulta escolhida.

1. Escolha **Executar**.

# Editar uma consulta salva
<a name="saved-queries-edit"></a>

**Para editar uma consulta salva**

1. No console do Athena, escolha a guia **Saved queries** (Consultas salvas).

1. Na lista **Saved queries** (Consultas salvas), escolha o ID da consulta que deseja editar.

1. Edite consulta no editor de consultas.

1. Execute uma das seguintes etapas:
   + Para executar a consulta, escolha **Run** (Executar).
   + Para salvar a consulta, selecione os três pontos verticais na guia para a consulta e, em seguida, escolha **Save** (Salvar).
   + Para salvar a consulta com um nome diferente, selecione os três pontos verticais na guia para a consulta e, em seguida, escolha **Save as** (Salvar como).

# Renomear ou excluir uma consulta salva
<a name="saved-queries-rename-or-delete"></a>

**Para renomear ou excluir uma consulta salva já exibida no editor de consultas**

1. Selecione os três pontos verticais na guia para a consulta e, em seguida, escolha **Rename** (Renomear) ou **Delete** (Excluir).

1. Siga as solicitações para renomear ou excluir a consulta.

# Renomear uma consulta salva não exibida
<a name="saved-queries-rename-not-displayed"></a>

**Para renomear uma consulta salva não exibida no editor de consultas**

1. No console do Athena, escolha a guia **Saved queries** (Consultas salvas).

1. Marque a caixa de seleção referente à consulta que você deseja renomear.

1. Escolha **Rename (Renomear)**.

1. Na caixa de diálogo **Rename query** (Renomear consulta), edite o nome da consulta e sua descrição. Você pode usar a janela expansível **Preview SQL query** (Visualizar consulta SQL) para verificar o conteúdo da consulta antes de a renomear.

1. Escolha **Rename query** (Renomear consulta).

   A consulta renomeada aparece na lista **Saved queries** (Consultas salvas).

# Excluir uma consulta salva não exibida
<a name="saved-queries-delete-not-displayed"></a>

**Para excluir uma consulta salva não exibida no editor de consultas**

1. No console do Athena, escolha a guia **Saved queries** (Consultas salvas).

1. Marque uma ou mais das caixas de seleção referentes às consultas que você deseja excluir.

1. Escolha **Excluir**.

1. No prompt de confirmação, selecione **Excluir**.

   Uma ou mais consultas serão removidas da lista **Saved queries** (Consultas salvas).

# Usar a API do Athena para atualizar consultas salvas
<a name="saved-queries-update-with-api"></a>

Para informações sobre o uso da API do Athena para atualizar uma consulta salva, consulte a ação [UpdateNamedQuery](https://docs.aws.amazon.com/athena/latest/APIReference/API_UpdateNamedQuery.html) na Referência de APIs Athena.

# Usar consultas parametrizadas
<a name="querying-with-prepared-statements"></a>

É possível utilizar consultas parametrizadas do Athena para repetir a execução da mesma consulta com valores de parâmetros diferentes no momento da execução e ajudar a evitar ataques de injeção de SQL. No Athena, consultas parametrizadas podem assumir a forma de parâmetros de execução em qualquer consulta DML ou instruções preparadas para SQL.
+ Consultas com parâmetros de execução podem ser feitas em uma única etapa e não são específicas para um grupo de trabalho. Coloque pontos de interrogação em qualquer consulta DML para os valores que você deseja parametrizar. Ao executar a consulta, declare os valores do parâmetro de execução sequencialmente. A declaração de parâmetros e a atribuição de valores para esses parâmetros podem ser feitas na mesma consulta, mas de maneira dissociada. Ao contrário de instruções preparadas, é possível selecionar o grupo de trabalho ao enviar uma consulta com parâmetros de execução.
+ Instruções preparadas exigem duas instruções SQL separadas: `PREPARE` e `EXECUTE`. Primeiro, você define os parâmetros na instrução `PREPARE`. Em seguida, executa uma instrução `EXECUTE` que fornece os valores dos parâmetros definidos. Instruções preparadas são específicas de um grupo de trabalho, ou seja, não podem ser executadas fora do contexto do grupo de trabalho ao qual pertencem.

## Considerações e limitações
<a name="querying-with-prepared-statements-considerations-and-limitations"></a>
+ Há compatibilidade com consultas parametrizadas no mecanismo do Athena versão 2 e versões posteriores. Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md).
+ Atualmente, as consultas parametrizadas são aceitas apenas nas instruções `SELECT`, `INSERT INTO`, `CTAS` e `UNLOAD`.
+ Em consultas parametrizadas, parâmetros são posicionais e representados por`?`. Parâmetros recebem valores de acordo com sua ordem na consulta. Não há suporte para parâmetros nomeados.
+ No momento, parâmetros `?` podem ser inseridos somente na cláusula `WHERE`. Não há suporte para a sintaxe do tipo `SELECT ? FROM table`.
+ Parâmetros de ponto de interrogação não podem ser inseridos entre aspas duplas ou simples (ou seja, `'?'` e `"?"` não são uma sintaxe válida).
+ Para que os parâmetros de execução do SQL sejam tratados como strings, eles devem estar entre aspas simples em vez de aspas duplas.
+ Se necessário, você pode usar a função `CAST` ao inserir um valor para um termo parametrizado. Por exemplo, se você tiver uma coluna do tipo `date` parametrizada em uma consulta e quiser consultar a data `2014-07-05`, inserir `CAST('2014-07-05' AS DATE)` como valor do parâmetro retornará o resultado.
+ Instruções preparadas são específicas de um grupo de trabalho, e seus nomes devem ser exclusivos no grupo de trabalho.
+ São necessárias permissões do IAM para as instruções preparadas. Para obter mais informações, consulte [Configurar o acesso a instruções preparadas](security-iam-athena-prepared-statements.md).
+ Consultas com parâmetros de execução no console do Athena estão limitadas a um máximo de 25 pontos de interrogação.

**Topics**
+ [

## Considerações e limitações
](#querying-with-prepared-statements-considerations-and-limitations)
+ [

# Usar parâmetros de execução
](querying-with-prepared-statements-querying-using-execution-parameters.md)
+ [

# Usar instruções preparadas
](querying-with-prepared-statements-querying.md)
+ [

# Recursos adicionais
](querying-with-prepared-statements-additional-resources.md)

# Usar parâmetros de execução
<a name="querying-with-prepared-statements-querying-using-execution-parameters"></a>

É possível utilizar espaços reservados de ponto de interrogação em qualquer consulta DML para criar uma consulta parametrizada sem criar uma instrução preparada primeiro. Para executar essas consultas, use o console do Athena, a AWS CLI ou o AWS SDK e declare as variáveis no argumento `execution-parameters`.

**Topics**
+ [Usar o console do Athena](querying-with-prepared-statements-running-queries-with-execution-parameters-in-the-athena-console.md)
+ [Usar a AWS CLI](querying-with-prepared-statements-running-queries-with-execution-parameters-using-the-aws-cli.md)

# Executar consultas com parâmetros de execução no console do Athena
<a name="querying-with-prepared-statements-running-queries-with-execution-parameters-in-the-athena-console"></a>

Ao executar uma consulta parametrizada com parâmetros de execução (pontos de interrogação) no console do Athena, você deve informar os valores na ordem em que os pontos de interrogação ocorrem nessa consulta.

**Para executar uma consulta com parâmetros de execução**

1. Insira uma consulta com espaços reservados de ponto de interrogação no editor do Athena, como no seguinte exemplo.

   ```
   SELECT * FROM "my_database"."my_table"
   WHERE year = ? and month= ? and day= ?
   ```

1. Escolha **Executar**.

1. Na caixa de diálogo **Enter parameters** (Inserir parâmetros), insira um valor em ordem para cada um dos pontos de interrogação na consulta.  
![\[Insira valores para os parâmetros de consulta em ordem\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-with-prepared-statements-1.png)

1. Quando terminar de inserir os parâmetros, escolha **Run** (Executar). O editor mostra os resultados da consulta para os valores de parâmetro inseridos.

Nesse ponto, você pode realizar uma das seguintes ações:
+ Insira valores de parâmetros diferentes para a mesma consulta e escolha **Run again** (Execute novamente).
+ Para limpar todos os valores inseridos de uma só vez, escolha **Clear** (Limpar).
+ Para editar a consulta diretamente (por exemplo, para adicionar ou remover pontos de interrogação), feche primeiro a caixa de diálogo **Enter parameters** (Inserir parâmetros).
+ Para salvar a consulta parametrizada para uso posterior, escolha **Save** (Salvar) ou **Save as** (Salvar como) e depois dê um nome para ela. Para obter mais informações sobre o uso de consultas salvas, consulte [Usar consultas salvas](saved-queries.md).

Como conveniência, a caixa de diálogo **Enter parameters** (Inserir parâmetros) memoriza os valores inseridos anteriormente para a consulta, desde que você utilize a mesma guia no editor de consultas.

# Executar consultas com parâmetros de execução com a AWS CLI
<a name="querying-with-prepared-statements-running-queries-with-execution-parameters-using-the-aws-cli"></a>

Para usar a AWS CLI para executar consultas com parâmetros de execução, use o comando `start-query-execution` e forneça uma consulta parametrizada no argumento `query-string`. Em seguida, no argumento `execution-parameters`, forneça os valores para os parâmetros de execução. O exemplo a seguir ilustra essa técnica.

```
aws athena start-query-execution 
--query-string "SELECT * FROM table WHERE x = ? AND y = ?"
--query-execution-context "Database"="default" 
--result-configuration "OutputLocation"="s3://amzn-s3-demo-bucket;/..."
--execution-parameters "1" "2"
```

# Usar instruções preparadas
<a name="querying-with-prepared-statements-querying"></a>

Você pode usar uma instrução preparada para a execução repetida da mesma consulta com diferentes parâmetros de consulta. Uma instrução preparada contém espaços reservados de parâmetros dos quais os valores são fornecidos no runtime.

**nota**  
O número máximo de instruções preparadas em um grupo de trabalho é mil.

**Topics**
+ [Sintaxe de SQL](querying-with-prepared-statements-sql-statements.md)
+ [Usar o console do Athena](querying-with-prepared-statements-executing-prepared-statements-without-the-using-clause-athena-console.md)
+ [Usar a AWS CLI](querying-with-prepared-statements-cli-section.md)

# Sintaxe de SQL para instruções preparadas
<a name="querying-with-prepared-statements-sql-statements"></a>

É possível utilizar as instruções SQL `PREPARE`, `EXECUTE` e `DEALLOCATE PREPARE` para executar consultas parametrizadas no editor de consultas do console do Athena. 

 
+ Para especificar parâmetros nos quais você costuma usar valores literais, use pontos de interrogação na instrução `PREPARE`.
+ Para substituir os parâmetros por valores quando você executar a consulta, use a cláusula `USING` na instrução `EXECUTE`.
+ Para remover uma instrução preparada do conjunto de instruções preparadas em um grupo de trabalho, use a instrução `DEALLOCATE PREPARE`.

As seções a seguir apresentam mais detalhes sobre cada uma dessas instruções.

**Topics**
+ [

# PREPARE
](querying-with-prepared-statements-prepare.md)
+ [

# EXECUTE
](querying-with-prepared-statements-execute.md)
+ [

# DEALLOCATE PREPARE
](querying-with-prepared-statements-deallocate-prepare.md)

# PREPARE
<a name="querying-with-prepared-statements-prepare"></a>

Prepara uma instrução para execução futura. As instruções preparadas são salvas no grupo de trabalho atual com o nome que você especificar. A instrução pode incluir parâmetros no lugar de literais para serem substituídos quando a consulta for executada. Os parâmetros que serão substituídos por valores são indicados por pontos de interrogação.

## Sintaxe
<a name="querying-with-prepared-statements-prepare-syntax"></a>

```
PREPARE statement_name FROM statement
```

A tabela a seguir descreve esses parâmetros.


****  

| Parameter | Descrição | 
| --- | --- | 
| statement\$1name | O nome da instrução que será preparada. O nome deve ser exclusivo no grupo de trabalho. | 
| instrução | Uma consulta SELECT, CTAS ou INSERT INTO. | 

## Exemplos de PREPARE
<a name="querying-with-prepared-statements-prepare-examples"></a>

Os exemplos a seguir mostram o uso da instrução `PREPARE`. Os pontos de interrogação indicam os valores que serão inseridos pela instrução `EXECUTE` quando a consulta for executada.

```
PREPARE my_select1 FROM
SELECT * FROM nation
```

```
PREPARE my_select2 FROM
SELECT * FROM "my_database"."my_table" WHERE year = ?
```

```
PREPARE my_select3 FROM
SELECT order FROM orders WHERE productid = ? and quantity < ?
```

```
PREPARE my_insert FROM
INSERT INTO cities_usa (city, state)
SELECT city, state
FROM cities_world
WHERE country = ?
```

```
PREPARE my_unload FROM
UNLOAD (SELECT * FROM table1 WHERE productid < ?)
TO 's3://amzn-s3-demo-bucket/'
WITH (format='PARQUET')
```

# EXECUTE
<a name="querying-with-prepared-statements-execute"></a>

Executa uma instrução preparada. Os valores dos parâmetros são especificados na cláusula `USING`.

## Sintaxe
<a name="querying-with-prepared-statements-execute-syntax"></a>

```
EXECUTE statement_name [USING value1 [ ,value2, ... ] ]
```

*statement\$1name* é o nome da instrução preparada. *value1* e *value2* são os valores que serão especificados para os parâmetros na instrução.

## Exemplos de EXECUTE
<a name="querying-with-prepared-statements-execute-examples"></a>

O exemplo a seguir executa a instrução preparada `my_select1`, que não contém parâmetros.

```
EXECUTE my_select1
```

O exemplo a seguir executa a instrução preparada `my_select2`, que contém um único parâmetro.

```
EXECUTE my_select2 USING 2012
```

O exemplo a seguir executa a instrução preparada `my_select3`, que contém dois parâmetros.

```
EXECUTE my_select3 USING 346078, 12
```

O exemplo a seguir fornece um valor de string para um parâmetro na instrução preparada `my_insert`.

```
EXECUTE my_insert USING 'usa'
```

O exemplo a seguir fornece um valor numérico para o parâmetro `productid` na instrução preparada `my_unload`.

```
EXECUTE my_unload USING 12
```

# DEALLOCATE PREPARE
<a name="querying-with-prepared-statements-deallocate-prepare"></a>

Remove a instrução preparada com o nome especificado da lista de instruções preparadas no grupo de trabalho atual.

## Sintaxe
<a name="querying-with-prepared-statements-deallocate-prepare-syntax"></a>

```
DEALLOCATE PREPARE statement_name
```

*statement\$1name* é o nome da instrução preparada que será removida.

## Exemplo
<a name="querying-with-prepared-statements-deallocate-prepare-examples"></a>

O exemplo a seguir remove a instrução preparada `my_select1` do grupo de trabalho atual.

```
DEALLOCATE PREPARE my_select1
```

# Executar instruções preparadas e interativas no console do Athena
<a name="querying-with-prepared-statements-executing-prepared-statements-without-the-using-clause-athena-console"></a>

Se você executar uma instrução preparada existente com a sintaxe `EXECUTE` *prepared\$1statement* no editor de consultas, o Athena abrirá a caixa de diálogo **Enter parameters** (Inserir parâmetros), para que seja possível inserir os valores que normalmente entrariam na cláusula `USING` da instrução `EXECUTE ... USING`.

**Para executar uma instrução preparada usando a caixa de diálogo **Enter parameters** (Inserir parâmetros)**

1. No editor de consultas, em vez de usar a sintaxe `EXECUTE prepared_statement USING` *value1*`,` *value2* ` ...`, use a sintaxe `EXECUTE` *prepared\$1statement*.

1. Escolha **Executar**. A caixa de diálogo **Enter parameters** (Inserir parâmetros) é exibida.  
![\[Inserir valores de parâmetros para uma instrução preparada no console do Athena\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-with-prepared-statements-2.png)

1. Insira os valores em ordem na caixa de diálogo **Execution parameters** (Parâmetros de execução). Como o texto original da consulta não está visível, você deve se lembrar do significado de cada parâmetro posicional ou ter a instrução preparada disponível para referência.

1. Escolha **Executar**.

# Usar a AWS CLI para criar, executar e listar instruções preparadas
<a name="querying-with-prepared-statements-cli-section"></a>

É possível usar a AWS CLI para criar, executar e listar instruções preparadas.

**Topics**
+ [Criar](querying-with-prepared-statements-creating-prepared-statements-using-the-aws-cli.md)
+ [Execute](querying-with-prepared-statements-cli-executing-prepared-statements.md)
+ [Lista](querying-with-prepared-statements-listing.md)

# Criar instruções preparadas com o uso da AWS CLI
<a name="querying-with-prepared-statements-creating-prepared-statements-using-the-aws-cli"></a>

Para usar a AWS CLI para criar uma instrução preparada, é possível utilizar um dos seguintes comandos `athena`:
+ Use o comando `create-prepared-statement` e forneça uma instrução de consulta que tenha parâmetros de execução.
+ Use o comando `start-query-execution` e forneça uma string de consulta que use a sintaxe `PREPARE`.

## Usar create-prepared-statement
<a name="querying-with-prepared-statements-cli-using-create-prepared-statement"></a>

Em um comando `create-prepared-statement`, defina o texto da consulta no argumento `query-statement`, como no exemplo a seguir.

```
aws athena create-prepared-statement 
--statement-name PreparedStatement1 
--query-statement "SELECT * FROM table WHERE x = ?" 
--work-group athena-engine-v2
```

## Usar start-query-execution e a sintaxe PREPARE
<a name="querying-with-prepared-statements-cli-using-start-query-execution-and-the-prepare-syntax"></a>

Use o comando `start-query-execution`. Coloque a instrução `PREPARE` no argumento `query-string`, como no exemplo a seguir:

```
aws athena start-query-execution 
--query-string "PREPARE PreparedStatement1 FROM SELECT * FROM table WHERE x = ?" 
--query-execution-context '{"Database": "default"}' 
--result-configuration '{"OutputLocation": "s3://amzn-s3-demo-bucket/..."}'
```

# Executar instruções preparadas com o uso da AWS CLI
<a name="querying-with-prepared-statements-cli-executing-prepared-statements"></a>

Para executar uma declaração preparada com a AWS CLI, forneça valores para os parâmetros com um dos seguintes métodos:
+ Use o argumento `execution-parameters`.
+ Use a sintaxe SQL `EXECUTE ... USING` no argumento `query-string`.

## Usar o argumento execution-parameters
<a name="querying-with-prepared-statements-cli-using-the-execution-parameters-argument"></a>

Nessa abordagem, você usa o comando `start-query-execution` e fornece o nome de uma declaração preparada existente no argumento `query-string`. Em seguida, no argumento `execution-parameters`, forneça os valores para os parâmetros de execução. O exemplo a seguir mostra esse método.

```
aws athena start-query-execution 
--query-string "Execute PreparedStatement1" 
--query-execution-context "Database"="default" 
--result-configuration "OutputLocation"="s3://amzn-s3-demo-bucket/..."
--execution-parameters "1" "2"
```

## Usar EXECUTE ... USING
<a name="querying-with-prepared-statements-cli-using-the-execute-using-sql-syntax"></a>

Para executar uma instrução preparada existente usando a sintaxe `EXECUTE ... USING`, use o comando `start-query-execution` e coloque o nome da instrução preparada e os valores do parâmetro no argumento `query-string`, como no exemplo a seguir:

```
aws athena start-query-execution 
--query-string "EXECUTE PreparedStatement1 USING 1"
--query-execution-context '{"Database": "default"}' 
--result-configuration '{"OutputLocation": "s3://amzn-s3-demo-bucket/..."}'
```

# Listar instruções preparadas com o uso da AWS CLI
<a name="querying-with-prepared-statements-listing"></a>

Para listar as instruções preparadas para um grupo de trabalho específico, use o comando [list-prepared-statements](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/list-prepared-statements.html) da AWS CLI do Athena ou a ação de API [ListPreparedStatements](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListPreparedStatements.html) do Athena. O parâmetro `--work-group` é obrigatório.

```
aws athena list-prepared-statements --work-group primary
```

# Recursos adicionais
<a name="querying-with-prepared-statements-additional-resources"></a>

Veja as seguintes postagens relacionadas no blog de Big Data da AWS.
+ [Improve reusability and security using Amazon Athena parameterized queries](https://aws.amazon.com/blogs/big-data/improve-reusability-and-security-using-amazon-athena-parameterized-queries/) 
+ [Use Amazon Athena parameterized queries to provide data as a service](https://aws.amazon.com/blogs/big-data/use-amazon-athena-parameterized-queries-to-provide-data-as-a-service/) 

# Usar o otimizador baseado em custos
<a name="cost-based-optimizer"></a>

Você pode usar o atributo otimizador baseado em custos (CBO) no Athena SQL para otimizar as consultas. Opcionalmente, você pode solicitar que o Athena colete estatísticas no nível da tabela ou da coluna para uma das tabelas do AWS Glue. Se todas as tabelas da consulta tiverem estatísticas, o Athena usará as estatísticas para criar um plano de execução que ele determina que terá a melhor performance. O otimizador de consultas calcula planos alternativos com base em um modelo estatístico e depois seleciona o que tem maior probabilidade de executar a consulta em menos tempo.

As estatísticas das tabelas do AWS Glue são coletadas e armazenadas no AWS Glue Data Catalog, e disponibilizadas ao Athena para melhorar o planejamento e a execução das consultas. Essas estatísticas são coletadas no nível da coluna, como número de valores distintos, número de valores nulos, máximos e mínimos em tipos de arquivo como Parquet, ORC, JSON, ION, CSV e XML. O Amazon Athena usa essas estatísticas para otimizar as consultas aplicando os filtros mais restritivos no processamento das consultas assim que possível. Essa filtragem limita o uso da memória e o número de registros que devem ser lidos para fornecer os resultados das consultas.

Em conjunto com o CBO, o Athena usa um atributo denominado otimizador baseado em regras (RBO). O RBO aplica mecanicamente regras que devem melhorar a performance das consultas. O RBO geralmente é útil porque suas transformações visam simplificar o plano de consulta. Porém, como o RBO não realiza cálculos de custos nem comparações de planos, consultas mais complicadas tornam difícil para o RBO criar um plano ideal.

Por isso, o Athena usa ambos o RBO e o CBO para otimizar as consultas. Depois que o Athena identifica as oportunidades de melhorar a execução das consultas, ele cria um plano ideal. Para obter mais informações sobre detalhes do plano de execução, consulte [Visualização de planos de execução para consultas SQL](query-plans.md). Para ver uma discussão detalhada sobre como o CBO funciona, consulte [Speed up queries with the cost-based optimizer in Amazon Athena](https://aws.amazon.com/blogs/big-data/speed-up-queries-with-cost-based-optimizer-in-amazon-athena/) no AWS Big Data.

Para gerar estatísticas para tabelas do AWS Glue Catalog, você pode usar o console do Athena, o console do AWS Glue ou as APIs do AWS Glue. Como o Athena é integrado ao AWS Glue Catalog, você obtém automaticamente os aprimoramentos de performance das consultas correspondentes quando executa consultas no Amazon Athena.

## Considerações e limitações
<a name="cost-based-optimizer-considerations-and-limitations"></a>
+ **Tipos de tabela**: atualmente, o atributo CBO do Athena é compatível apenas com as tabelas do Hive e Iceberg que estão no AWS Glue Data Catalog.
+ **Athena for Spark**: o atributo CBO não está disponível no Athena for Spark.
+ **Preços**: para obter informações sobre preços, visite a [página de preços do AWS Glue](https://aws.amazon.com/glue/pricing).

## Gerar estatísticas de uma tabela com uso do console do Athena
<a name="cost-based-optimizer-generating-table-statistics-using-the-athena-console"></a>

Esta seção descreve como usar o console do Athena para gerar estatísticas no nível da tabela ou da coluna para uma tabela no AWS Glue. Para obter informações sobre o uso do AWS Glue para gerar estatísticas de tabelas, consulte [Working with column statistics](https://docs.aws.amazon.com/glue/latest/dg/column-statistics.html) no *AWS Glue Developer Guide*.

**Gerar estatísticas para uma tabela usando o console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Na lista **Tabelas** do editor de consultas do Athena, escolha os três pontos verticais para a tabela que você deseja e depois escolha **Gerar estatísticas.**  
![\[Menu de contexto para uma tabela no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-1.png)

1. Na caixa de diálogo **Gerar estatísticas**, escolha **Todas as colunas** para gerar estatísticas para todas as colunas da tabela ou escolha **Colunas selecionadas** para selecionar colunas específicas. **Todas as colunas** é a configuração padrão.  
![\[A caixa de diálogo para gerar estatísticas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-2.png)

1. Para **perfil do serviço do AWS Glue**, crie ou selecione um perfil de serviço existente para dar permissão ao AWS Glue para gerar estatísticas. O perfil de serviço do AWS Glue também exige permissões de [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) para o bucket do Amazon S3 que contém os dados da tabela.  
![\[Escolher um perfil de serviço do AWS Glue.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-3.png)

1. Escolha **Gerar estatísticas**. Um banner de notificação **Gerando estatísticas para a *table\$1name*** mostra o status da tarefa.  
![\[O banner de notificação Gerando estatísticas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-4.png)

1. Para visualizar detalhes no console do AWS Glue, escolha **Visualizar no Glue**. 

   Para obter informações sobre a visualização de estatísticas no console do AWS Glue, consulte [Viewing column statistics](https://docs.aws.amazon.com/glue/latest/dg/view-column-stats.html) no *AWS Glue Developer Guide*. 

1. Depois que as estatísticas são geradas, as tabelas e colunas que têm estatísticas trazem a palavra **Estatísticas** entre parênteses, como na imagem a seguir.  
![\[Uma tabela mostrando os ícones de estatísticas no editor de consultas do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cost-based-optimizer-5.png)

Agora, quando você executar consultas, o Athena realizará a otimização baseada em custos nas tabelas e colunas para as quais as estatísticas foram geradas.

## Habilitar e desabilitar estatísticas de tabelas
<a name="cost-based-optimizer-enabling-iceberg-table-statistics"></a>

Quando você gera estatísticas para uma tabela Iceberg seguindo as etapas da seção anterior, uma propriedade de tabela do Glue, denominada `use_iceberg_statistics`, é automaticamente adicionada à tabela Iceberg no AWS Glue Data Catalog e definida como **verdadeira** por padrão. Se você remover essa propriedade ou defini-la como **falsa**, o CBO não usará as estatísticas da tabela Iceberg ao tentar otimizar o plano de consultas durante a execução de consultas, mesmo que as estatísticas tenham sido geradas pelo Glue. Para obter mais informações sobre como gerar estatísticas de tabelas, consulte [Gerar estatísticas de uma tabela com uso do console do Athena](#cost-based-optimizer-generating-table-statistics-using-the-athena-console).

Por outro lado, as tabelas do Hive no Glue Data Catalog não têm uma propriedade de tabela semelhante para habilitar ou desabilitar o uso de estatísticas de tabelas para o CBO. Como resultado, o CBO sempre usa as estatísticas de tabelas geradas pelo Glue ao tentar otimizar o plano de consultas para tabelas do Hive. 

## Recursos adicionais
<a name="cost-based-optimizer-additional-resources"></a>

Para mais informações, consulte o recurso a seguir.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/zUHEXJdHUxs?si=rMAhJj3I5IlhN-1R/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/zUHEXJdHUxs?si=rMAhJj3I5IlhN-1R)


# Consultar dados do S3 Express One Zone
<a name="querying-express-one-zone"></a>

A classe de armazenamento Amazon S3 Express One Zone é uma classe de armazenamento do Amazon S3 com alta performance que fornece tempos de resposta abaixo de dez milissegundos. Dessa forma, essa classe é útil para aplicações que acessam dados frequentemente com centenas de milhares de solicitações por segundo.

A classe S3 Express One Zone replica e armazena dados na mesma zona de disponibilidade para otimizar a velocidade e os custos. Isso difere das classes de armazenamento regionais do Amazon S3, que replicam automaticamente os dados em, no mínimo, três zonas de disponibilidade da AWS em uma Região da AWS.

Para obter mais informações, consulte [What is S3 Express One Zone?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html) no *Guia do usuário do Amazon S3*.

## Pré-requisitos
<a name="querying-express-one-zone-prerequisites"></a>

Confirme se as seguintes condições foram atendidas antes de começar a usar:
+ **Versão 3 do mecanismo Athena**: para usar a classe S3 Express One Zone com o Athena SQL, o grupo de trabalho deve estar configurado para usar a versão 3 do mecanismo Athena.
+ **Permissões do S3 Express One Zone**: quando a classe S3 Express One Zone chama uma ação como `GET`, `LIST` ou `PUT` em um objeto do Amazon S3, a classe de armazenamento chama `CreateSession` em seu nome. Por esse motivo, a política do IAM deve permitir a ação `s3express:CreateSession`, que possibilita ao Athena invocar a operação de API correspondente.

## Considerações e limitações
<a name="querying-express-one-zone-considerations-and-limitations"></a>

Ao consultar a classe S3 Express One Zone com o Athena, considere os pontos apresentados a seguir. 
+ Os buckets do S3 Express One Zone oferecem suporte as criptografias `SSE_S3` e `SSE-KMS`. Os resultados da consulta do Athena são gravados usando a criptografia `SSE_S3`, independentemente da opção escolhida por você nas configurações do grupo de trabalho para criptografar os resultados da consulta. Essa limitação inclui todos os cenários em que o Athena grava dados em buckets da classe S3 Express One Zone, incluindo instruções `CREATE TABLE AS` (CTAS) e `INSERT INTO`.
+ Não há suporte para o crawler do AWS Glue para a criação de tabelas em dados do S3 Express One Zone.
+ Não há suporte para a instrução `MSCK REPAIR TABLE`. Como solução alternativa, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md).
+ Nenhuma instrução DDL de modificação de tabela para o Apache Iceberg (ou seja, nenhuma instrução `ALTER TABLE`) é compatível com o S3 Express One Zone.
+ O Lake Formation não é compatível com os buckets do S3 Express One Zone.
+ Não há suporte ou o suporte é limitado para os formatos de arquivos e de tabelas apresentados a seguir. Se os formatos não estiverem listados, mas forem compatíveis com o Athena (como Parquet, ORC e JSON), eles também terão suporte para uso com o armazenamento do S3 Express One Zone.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/querying-express-one-zone.html)

## Conceitos básicos
<a name="querying-express-one-zone-getting-started"></a>

Consultar dados da classe S3 Express One Zone com o Athena é simples. Para começar a usar, siga o procedimento apresentado a seguir.

**Como usar o Athena SQL para consultar dados da classe S3 Express One Zone**

1. Faça a transição dos seus dados para o armazenamento do S3 Express One Zone. Para obter mais informações, consulte [Configurar a classe de armazenamento de um objeto](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-howtoset) no *Guia do usuário do Amazon S3*.

1. Use uma instrução [CREATE TABLE](create-table.md) no Athena para catalogar seus dados no AWS Glue Data Catalog. Para obter informações sobre como criar tabelas no Athena, consulte [Criar tabelas no Athena](creating-tables.md) e a instrução [CREATE TABLE](create-table.md).

1. (Opcional) Configure a localização do resultado da consulta do grupo de trabalho do Athena para usar um *bucket de diretório* do Amazon S3. Os buckets de diretório do Amazon S3 têm uma performance aprimorada quando comparados aos buckets gerais e são projetados para workloads ou aplicações críticas à performance que requerem latência consistente abaixo de dez milissegundos. Para obter mais informações, consulte [Directory buckets overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) no *Guia do usuário do Amazon S3*.

# Consultar os objetos restaurados do Amazon Glacier
<a name="querying-glacier"></a>

É possível usar o Amazon Athena para consultar os objetos restaurados das [classes de armazenamento do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-glacier) do Amazon Glacier Flexible Retrieval (antigo Glacier) e do Amazon Glacier Deep Archive. É necessário habilitar esse recurso com base em tabelas. Se você não habilitar o atributo em uma tabela antes de executar a consulta, o Athena ignorará todos os objetos do Amazon Glacier Flexible Retrieval e do Amazon Glacier Deep Archive dessa tabela durante a execução da consulta. 

## Condições e limitações
<a name="querying-glacier-considerations-and-limitations"></a>
+  A consulta de objetos restaurados do Amazon Glacier é compatível apenas com a versão 3 do mecanismo do Athena. 
+  O atributo é compatível somente com tabelas do Apache Hive. 
+  É necessário restaurar seus objetos antes de consultar os dados; o Athena não restaura objetos para você. 

## Configurar uma tabela para usar objetos restaurados
<a name="querying-glacier-configuring-a-table-to-use-restored-objects"></a>

 Para configurar sua tabela do Athena de modo a incluir objetos restaurados em suas consultas, é necessário definir a propriedade de tabela `read_restored_glacier_objects` como `true`. Para fazer isso, você pode usar o editor de consultas do Athena ou o console do AWS Glue. Você também pode usar a [CLI do AWS Glue](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/update-table.html), a [API do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-UpdateTable) ou o [SDK do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/sdk-general-information-section.html). 

### Usar o editor de consultas do Athena
<a name="querying-glacier-using-the-athena-query-editor"></a>

 No Athena, você pode usar o comando [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) para definir a propriedade da tabela, como no exemplo a seguir. 

```
ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'true')
```

### Usar o console do AWS Glue
<a name="querying-glacier-using-the-aws-glue-console"></a>

 Edite a tabela no console do AWS Glue e realize as seguintes etapas para adicionar a propriedade de tabela `read_restored_glacier_objects`. 

**Para configurar as propriedades da tabela no console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Execute um destes procedimentos:
   + Escolha **Ir para catálogo de dados**.
   + No painel de navegação, escolha **Tabelas do catálogo de dados**.

1. Na página **Tabelas**, na lista de tabelas, escolha o link para a tabela que você deseja editar.

1. Selecione **Actions** (Ações), **Edit** (Editar).

1. Na página **Editar tabela**, na seção **Propriedades da tabela**, adicione o par de chave-valor a seguir.
   + Em **Chave**, adicione `read_restored_glacier_objects`.
   + Em **Valor**, insira `true`.

1. Escolha **Salvar**.

### Usar a AWS CLI
<a name="querying-glacier-using-the-aws-cli"></a>

 Na AWS CLI, você pode usar o comando [update-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/update-table.html) do AWS Glue e seu argumento `--table-input` para redefinir a tabela e, ao fazer isso, adicionar a propriedade `read_restored_glacier_objects`. No argumento `--table-input`, use a estrutura `Parameters` para especificar a propriedade `read_restored_glacier_objects` e o valor de `true`. O argumento para `--table-input` não deve ter espaços e deve usar barras invertidas como escape das aspas duplas. No exemplo a seguir, substitua *my\$1database* e *my\$1table* pelos nomes de seu banco de dados e tabela.

```
aws glue update-table \
   --database-name my_database \
   --table-input={\"Name\":\"my_table\",\"Parameters\":{\"read_restored_glacier_objects\":\"true\"}}
```

**Importante**  
O comando `update-table` do AWS Glue funciona no modo de substituição, o que significa que ele substitui a definição da tabela existente pela nova definição especificada pelo parâmetro `table-input`. Por esse motivo, não se esqueça de especificar também todos os campos que deseja que estejam em sua tabela no parâmetro `table-input` ao adicionar a propriedade `read_restored_glacier_objects`. 

# Lidar com atualizações de esquemas
<a name="handling-schema-updates-chapter"></a>

Esta seção apresenta orientações de como processar as atualizações de esquema nos vários formatos de dados. O Athena é um mecanismo de consulta “schema-on-read”. Isso significa que, quando você cria uma tabela no Athena, ele aplica esquemas durante a leitura dos dados. Ela não altera nem reescrever os dados subjacentes. 

Se você antecipar alterações nos esquemas de tabela, considere criá-los em um formato de dados adequado para suas necessidades. Seus objetivos são reutilizar as consultas existentes do Athena nos esquemas em desenvolvimento e evitar erros de incompatibilidade de esquemas ao consultar tabelas com partições.

Para atingir essas metas, escolha um formato de dados da tabela com base na tabela no seguinte tópico.

**Topics**
+ [

## Operações de atualização de esquema com suporte por formato de dados
](#summary-of-updates)
+ [

## Noções básicas do acesso ao índice para Apache ORC e Apache Parquet
](#index-access)
+ [

# Fazer atualizações de esquema
](make-schema-updates.md)
+ [

# Atualizar tabelas com partições
](updates-and-partitions.md)

## Operações de atualização de esquema com suporte por formato de dados
<a name="summary-of-updates"></a>

A tabela a seguir resume os formatos de armazenamento físico de dados e os manuseios do esquema com suporte. Use esta tabela para ajudar a escolher o formato que permitirá que você continue usando as consultas do Athena mesmo que seus esquemas sejam alterados ao longo do tempo. 

Nessa tabela, observe que o Parquet e ORC são formatos de coluna com diferentes métodos de acesso padrão à coluna. Por padrão, o Parquet acessa colunas por nome e o ORC por índice (valor ordinal). Portanto, o Athena oferece uma propriedade SerDe definida no momento da criação de uma tabela para alternar o método de acesso padrão a colunas, o que permite maior flexibilidade com o desenvolvimento do esquema. 

Para o Parquet, a propriedade `parquet.column.index.access` pode ser definida como `true`, que define que o método de acesso à coluna usará o número ordinal da coluna. Definir essa propriedade como `false` fará com que o método de acesso à coluna use o nome da coluna. Da mesma forma, para ORC, use a propriedade `orc.column.index.access` para controlar o método de acesso à coluna. Para obter mais informações, consulte [Noções básicas do acesso ao índice para Apache ORC e Apache Parquet](#index-access).

Os formatos CSV e TSV permitem que você faça todos os manuseios do esquema, exceto a reorganização de colunas ou a adição de colunas ao início da tabela. Por exemplo, se a evolução do seu esquema requer apenas a renomeação de colunas, mas não a remoção delas, você pode optar por criar suas tabelas nos formatos CSV ou TSV. Se você precisar remover colunas, não use os formatos CSV ou TSV. Em vez disso, use qualquer um dos outros formatos compatíveis, de preferência um formato de coluna, como Parquet ou ORC.


**Atualizações de esquema e formatos de dados no Athena**  

| Tipo esperado de atualização de esquema | Resumo | CSV (com e sem cabeçalhos) e TSV | JSON | AVRO | PARQUET: leitura por nome (padrão) | PARQUET: leitura por índice | ORC: leitura por índice (padrão) | ORC: leitura por nome | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  [Renomear colunas](updates-renaming-columns.md) | Armazene seus dados em CSV e TSV, ou em ORC e Parquet se eles são lidos por índice. | S | N | N | N  | S | S | N | 
|  [Adicionar colunas no início ou no meio da tabela](updates-add-columns-beginning-middle-of-table.md) | Armazene seus dados em JSON e AVRO, ou em Parquet e ORC se eles são lidos por nome. Não use CSV e TSV. | N | S | S | S | N | N | S | 
|  [Adicionar colunas no final da tabela](updates-add-columns-end-of-table.md) | Armazene seus dados em CSV ou TSV, JSON, AVRO, ORC ou Parquet. | S | S | S | S | S | S | S | 
| [Remover colunas](updates-removing-columns.md) |  Armazene seus dados em JSON e AVRO, ou em Parquet e ORC se eles são lidos por nome. Não use CSV e TSV. | N | S | S | S | N | N | S | 
| [Reclassificar colunas](updates-reordering-columns.md) | Armazene seus dados em AVRO, JSON ou em Parquet e ORC se eles são lidos por nome. | N | S | S | S | N | N | S | 
| [Alterar o tipo de dados de uma coluna](updates-changing-column-type.md) | Armazene seus dados em qualquer formato, mas faça o teste da consulta no Athena para garantir que os tipos de dados sejam compatíveis. No Parquet e no ORC, a alteração de um tipo de dados funciona apenas para tabelas particionadas. | S | S | S | S | S | S | S | 

## Noções básicas do acesso ao índice para Apache ORC e Apache Parquet
<a name="index-access"></a>

PARQUET e ORC são formatos de coluna para armazenamento físico de dados que podem ser lidos por índice ou por nome. O armazenamento dos dados em qualquer um desses formatos permite que você execute todas as operações nos esquemas e execute as consultas do Athena sem erros de incompatibilidade de esquemas. 
+ Por padrão, o Athena *lê o ORC por índice*, conforme definido em `SERDEPROPERTIES ( 'orc.column.index.access'='true')`. Para obter mais informações, consulte [ORC: leitura por índice](#orc-read-by-index).
+ O Athena lê *Parquet por nome, por padrão*, conforme definido em `SERDEPROPERTIES ( 'parquet.column.index.access'='false')`. Para obter mais informações, consulte [Parquet: leitura por nome](#parquet-read-by-name).

Uma vez que essas leituras são padrão, a especificação das propriedades SerDe em suas consultas `CREATE TABLE` é opcional; elas são usadas implicitamente. Quando são usadas, elas permitem que você execute algumas operações de atualização de esquema enquanto impedem outras operações semelhantes. Para habilitar essas operações, execute outra consulta `CREATE TABLE` e altere as configurações SerDe. 

**nota**  
As propriedades SerDe *não* são propagadas automaticamente para cada partição. Use instruções `ALTER TABLE ADD PARTITION` para definir as propriedades SerDe para cada partição. Para automatizar esse processo, escreva um script que execute instruções `ALTER TABLE ADD PARTITION`.

As seções a seguir descrevem esses casos em detalhes.

### ORC: leitura por índice
<a name="orc-read-by-index"></a>

Uma tabela no formato *ORC é lida por índice*, por padrão. Isso é definido pela seguinte sintaxe:

```
WITH SERDEPROPERTIES ( 
  'orc.column.index.access'='true')
```

A *leitura por índice* permite renomear colunas. No entanto, não será mais possível remover colunas nem as adicionar no meio da tabela. 

Para fazer com que o ORC seja lido por nome, o que permitirá que você adicione colunas no meio da tabela ou remova as colunas em ORC, defina a propriedade `orc.column.index.access` do SerDe como `false` na instrução `CREATE TABLE`. Com essa configuração, não será mais possível renomear colunas.

**nota**  
No mecanismo Athena versão 2, quando as tabelas ORC são definidas para serem lidas por nome, o Athena exige que todos os nomes de coluna dos arquivos ORC estejam em letras minúsculas. Como o Apache Spark não usa nomes de campo em letras minúsculas ao gerar arquivos ORC, o Athena talvez não consiga ler os dados que são gerados. A solução alternativa é renomear as colunas usando letras minúsculas ou usar o mecanismo Athena versão 3. 

O exemplo a seguir ilustra como alterar o ORC para que ele seja lido por nome:

```
CREATE EXTERNAL TABLE orders_orc_read_by_name (
   `o_comment` string,
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderpriority` string, 
   `o_orderstatus` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_orderdate` string
) 
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
WITH SERDEPROPERTIES ( 
  'orc.column.index.access'='false') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/orders_orc/';
```

### Parquet: leitura por nome
<a name="parquet-read-by-name"></a>

Uma tabela no formato *Parquet é lida por nome*, por padrão. Isso é definido pela seguinte sintaxe:

```
WITH SERDEPROPERTIES ( 
  'parquet.column.index.access'='false')
```

*A leitura por nome* permite que você remova colunas ou as adicione no meio da tabela. No entanto, não será mais possível renomeá-las. 

Para fazer com que o Parquet seja lido por índice, o que permitirá que você renomeie colunas, é necessário criar uma tabela com a propriedade `parquet.column.index.access` do SerDe e defini-la como `true`.

# Fazer atualizações de esquema
<a name="make-schema-updates"></a>

Este tópico descreve algumas alterações que você pode fazer no esquema em instruções `CREATE TABLE` sem alterar os dados de fato. Para atualizar um esquema, em alguns casos é possível usar um comando `ALTER TABLE`, mas em outros casos você não modifica uma tabela existente. Em vez disso, você cria uma tabela com um novo nome que modifica o esquema usado na instrução `CREATE TABLE` original.

Dependendo de como você espera que seus esquemas evoluam, para continuar usando as consultas do Athena, escolha um formato de dados compatível. 

Considere uma aplicação que lê informações de pedidos em uma tabela de `orders` que existe em dois formatos: CSV e Parquet. 

O exemplo a seguir cria uma tabela em Parquet:

```
CREATE EXTERNAL TABLE orders_parquet (
   `orderkey` int, 
   `orderstatus` string, 
   `totalprice` double, 
   `orderdate` string, 
   `orderpriority` string, 
   `clerk` string, 
   `shippriority` int
) STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_ parquet/';
```

O exemplo a seguir cria a mesma tabela em CSV:

```
CREATE EXTERNAL TABLE orders_csv (
   `orderkey` int, 
   `orderstatus` string, 
   `totalprice` double, 
   `orderdate` string, 
   `orderpriority` string, 
   `clerk` string, 
   `shippriority` int
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
```

Os tópicos a seguir mostram como as atualizações nessas tabelas afetam as consultas do Athena.

**Topics**
+ [

# Adicionar colunas no início ou no meio da tabela
](updates-add-columns-beginning-middle-of-table.md)
+ [

# Adicionar colunas no final da tabela
](updates-add-columns-end-of-table.md)
+ [

# Remover colunas
](updates-removing-columns.md)
+ [

# Renomear colunas
](updates-renaming-columns.md)
+ [

# Reclassificar colunas
](updates-reordering-columns.md)
+ [

# Alteração do tipo de dados de uma coluna
](updates-changing-column-type.md)

# Adicionar colunas no início ou no meio da tabela
<a name="updates-add-columns-beginning-middle-of-table"></a>

A adição de colunas é uma das alterações do esquema mais frequentes. Por exemplo, você pode adicionar uma nova coluna para enriquecer a tabela com novos dados. Ou você poderá adicionar uma nova coluna se a origem para uma coluna existente for alterada e manter a versão anterior deste coluna para ajustar os aplicativos que dependem delas.

Para adicionar colunas no início ou no meio da tabela e continuar executando consultas em tabelas existentes, use os formatos AVRO e JSON, bem como Parquet e ORC, se a propriedade do SerDe estiver definida para leitura por nome. Para mais informações, consulte [Noções básicas do acesso ao índice para Apache ORC e Apache Parquet](handling-schema-updates-chapter.md#index-access).

Não adicione colunas no início ou no meio da tabela em CSV e TSV, pois esses formatos dependem da classificação. Se uma coluna for adicionada em um desses casos, ocorrerá um erro de incompatibilidade de esquema quando o esquema de partições for alterado.

 O exemplo a seguir cria uma nova tabela que adiciona uma coluna `o_comment` no meio de uma tabela baseada em dados JSON.

```
CREATE EXTERNAL TABLE orders_json_column_addition (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_comment` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json/';
```

# Adicionar colunas no final da tabela
<a name="updates-add-columns-end-of-table"></a>

Se você criar tabelas em qualquer um dos formatos compatíveis com o Athena, como Parquet, ORC, Avro, JSON, CSV e TSV, poderá usar a instrução `ALTER TABLE ADD COLUMNS` para adicionar colunas após as colunas existentes, mas antes das colunas de partição.

O exemplo a seguir adiciona uma coluna `comment` no final da tabela `orders_parquet` antes de qualquer coluna de partição: 

```
ALTER TABLE orders_parquet ADD COLUMNS (comment string)
```

**nota**  
Para ver uma nova coluna de tabela no editor de consultas do Athena depois de executar `ALTER TABLE ADD COLUMNS`, atualize manualmente a lista de tabelas no editor e expanda a tabela outra vez.

# Remover colunas
<a name="updates-removing-columns"></a>

Talvez você precise remover colunas de tabelas se elas não contiverem dados ou restringir o acesso aos dados contidos nelas.
+ Você pode remover colunas de tabelas em JSON, Avro e em ORC e Parquet se elas forem lidas por nome. Para mais informações, consulte [Noções básicas do acesso ao índice para Apache ORC e Apache Parquet](handling-schema-updates-chapter.md#index-access). 
+ Não é recomendável remover colunas das tabelas em CSV e TSV se você deseja reter as tabelas que criou no Athena. A remoção de uma coluna rompe o esquema e requer que você recrie a tabela sem a coluna removida.

Neste exemplo, remova uma coluna ``totalprice`` de uma tabela em Parquet e execute uma consulta. No Athena, por padrão o Parquet é lido por nome. É por esse motivo que omitimos a configuração SERDEPROPERTIES que especifica a leitura por nome. Observe que a consulta a seguir é bem-sucedida, mesmo que você altere o esquema:

```
CREATE EXTERNAL TABLE orders_parquet_column_removed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

# Renomear colunas
<a name="updates-renaming-columns"></a>

Talvez você queira renomear colunas em suas tabelas para corrigir ortografia, tornar os nomes das colunas mais descritivos ou reutilizar uma coluna existente para evitar a reclassificação dela.

Você pode renomear colunas se armazenar seus dados em CSV e TSV, ou em Parquet e ORC, que são configurados para leitura por índice. Para mais informações, consulte [Noções básicas do acesso ao índice para Apache ORC e Apache Parquet](handling-schema-updates-chapter.md#index-access). 

O Athena lê os dados em CSV e TSV na ordem das colunas no esquema e os retorna na mesma ordem. Ele não usa os nomes de coluna para mapear os dados para uma coluna. É por esse motivo que você pode renomear as colunas em CSV ou TSV sem interromper as consultas do Athena. 

Uma estratégia para renomear colunas é criar uma tabela com base nos mesmos dados subjacentes, mas usando novos nomes de coluna. O exemplo a seguir cria uma tabela `orders_parquet` chamada `orders_parquet_column_renamed`. O exemplo altera o nome da coluna ``o_totalprice`` para ``o_total_price`` e executa uma consulta no Athena: 

```
CREATE EXTERNAL TABLE orders_parquet_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

No caso da tabela do Parquet, a consulta a seguir é executada. No entanto, a coluna renomeada não exibe dados, porque ela estava sendo acessada por nome (um padrão no Parquet) em vez de por índice:

```
SELECT * 
FROM orders_parquet_column_renamed;
```

Uma consulta com uma tabela em CSV tem aparência semelhante:

```
CREATE EXTERNAL TABLE orders_csv_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
```

No caso da tabela CSV, a consulta a seguir é executada, e os dados são exibidos em todas as colunas, incluindo aquela que foi renomeada:

```
SELECT * 
FROM orders_csv_column_renamed;
```

# Reclassificar colunas
<a name="updates-reordering-columns"></a>

Você pode reordenar colunas apenas em tabelas com dados em formatos de leitura por nome, como JSON ou Parquet, que leem por nome, por padrão. Você também pode fazer com que o ORC leia por nome, se necessário. Para mais informações, consulte [Noções básicas do acesso ao índice para Apache ORC e Apache Parquet](handling-schema-updates-chapter.md#index-access).

O exemplo a seguir cria uma tabela com as colunas em uma ordem diferente:

```
CREATE EXTERNAL TABLE orders_parquet_columns_reordered (
   `o_comment` string,
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderpriority` string, 
   `o_orderstatus` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_orderdate` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

# Alteração do tipo de dados de uma coluna
<a name="updates-changing-column-type"></a>

Convém usar outro tipo de coluna quando o tipo existente não puder mais conter a quantidade de informações necessárias. Por exemplo, os valores de uma coluna de ID podem exceder o tamanho do tipo de dados `INT` e exigir o uso do tipo de dados `BIGINT`.

## Considerações
<a name="updates-changing-column-type-considerations"></a>

Ao planejar usar um tipo de dados diferente para uma coluna, leve em consideração os seguintes pontos: 
+ Na maioria dos casos, você não pode alterar diretamente o tipo de dados de uma coluna. Em vez disso, você recria a tabela do Athena e define a coluna com o novo tipo de dados. 
+ Apenas certos tipos de dados podem ser lidos como outros tipos de dados. Consulte a tabela nesta seção para ver os tipos de dados que podem ser tratados dessa forma.
+ Para dados em formato Parquet e ORC, você não pode usar um tipo de dados diferente para uma coluna se a tabela não estiver particionada. 
+ Para tabelas particionadas no Parquet e no ORC, o tipo de coluna de uma partição pode ser diferente do tipo de coluna de outra partição, e o Athena aplicará `CAST` ao tipo desejado, se possível. Para mais informações, consulte [Evitar erros de não correspondência de esquema para tabelas com partições](updates-and-partitions.md#partitions-dealing-with-schema-mismatch-errors).
+ Para tabelas criadas usando o [LazySimpleSerDe](lazy-simple-serde.md) apenas, é possível usar a declaração `ALTER TABLE REPLACE COLUMNS` para substituir colunas existentes por um tipo de dados diferente, mas todas as colunas existentes que você deseja manter também devem ser redefinidas na declaração, caso contrário, elas serão excluídas. Para obter mais informações, consulte [ALTER TABLE REPLACE COLUMNS](alter-table-replace-columns.md).
+ Para tabelas Apache Iceberg apenas, você pode usar a declaração [ALTER TABLE CHANGE COLUMN](querying-iceberg-alter-table-change-column.md) para alterar o tipo de dados de uma coluna. A declaração `ALTER TABLE REPLACE COLUMNS` não é suportada para tabelas Iceberg. Para obter mais informações, consulte [Evoluir o esquema de tabelas do Iceberg](querying-iceberg-evolving-table-schema.md).

**Importante**  
É altamente recomendável testar e verificar suas consultas antes de executar as conversões de tipo de dados. Se o Athena não puder usar o tipo de dados de destino, a consulta `CREATE TABLE` poderá falhar. 

## Usar tipos de dados compatíveis
<a name="updates-changing-column-type-use-compatible-data-types"></a>

Sempre que possível, use tipos de dados compatíveis. A tabela a seguir lista os tipos de dados que podem ser tratados como outros tipos de dados:


| Tipos de dados originais | Tipos de dados de destino disponíveis | 
| --- | --- | 
| STRING | BYTE, TINYINT, SMALLINT, INT, BIGINT | 
| BYTE | TINYINT, SMALLINT, INT, BIGINT | 
| TINYINT | SMALLINT, INT, BIGINT | 
| SMALLINT | INT, BIGINT | 
| INT | BIGINT | 
| FLOAT | DOUBLE | 

O exemplo a seguir usa a instrução `CREATE TABLE` da tabela `orders_json` original para criar uma nova tabela chamada `orders_json_bigint`. A nova tabela usa `BIGINT` em vez de `INT` como tipo de dados para a coluna ``o_shippriority``. 

```
CREATE EXTERNAL TABLE orders_json_bigint (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` BIGINT
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json';
```

A seguinte consulta é executada com êxito, semelhante à consulta `SELECT` original, antes que o tipo de dados seja alterado:

```
Select * from orders_json 
LIMIT 10;
```

# Atualizar tabelas com partições
<a name="updates-and-partitions"></a>

No Athena, uma tabela e suas partições devem usar os mesmos formatos de dados, mas os esquemas podem ser diferentes. Quando você cria uma nova partição, essa partição geralmente herda o esquema da tabela. Com o passar do tempo, os esquemas podem começar a ser diferentes. Os motivos para isso incluem:
+ Se o esquema da tabela é alterado, os esquemas para as partições não são atualizados para permanecer em sincronia com o esquema da tabela. 
+ O Crawler do AWS Glue permite que você descubra dados em partições com esquemas diferentes. Isso significa que, se você criar uma tabela no Athena com o AWS Glue, depois que o crawler concluir o processamento, os esquemas da tabela e suas partições poderão ser diferentes.
+ Se você adicionar partições diretamente usando uma API da AWS.

O Athena processará tabelas com partições com êxito se elas estiverem de acordo com as restrições a seguir. Se essas restrições não forem atendidas, o Athena emitirá um erro HIVE\$1PARTITION\$1SCHEMA\$1MISMATCH. 
+ Cada esquema de partição é compatível com o esquema da tabela. 
+ O formato de dados da tabela permite o tipo de atualização que você deseja executar: adicionar, excluir, reclassificar colunas ou alterar um tipo de dados da coluna. 

  Por exemplo, para os formatos CSV e TSV, você pode renomear colunas, adicionar novas colunas no final da tabela e alterar o tipo de dados de uma coluna se os tipos forem compatíveis, mas você não pode remover colunas. Para outros formatos, você pode adicionar ou remover colunas ou alterar o tipo de dados de uma coluna para outro se os tipos forem compatíveis. Para obter informações, consulte [Resumo: atualizações e formatos de dados no Athena](handling-schema-updates-chapter.md#summary-of-updates). 

## Evitar erros de não correspondência de esquema para tabelas com partições
<a name="partitions-dealing-with-schema-mismatch-errors"></a>

No início da execução da consulta, o Athena verifica o esquema da tabela confirmando se cada tipo de dados da coluna é compatível entre a tabela e a partição. 
+ Para os tipos de armazenamento de dados ORC e Parquet, o Athena usa os nomes das colunas para a verificação de esquema com base no nome da coluna. Isso elimina erros `HIVE_PARTITION_SCHEMA_MISMATCH` nas tabelas com partições nos tipos Parquet e ORC. (Isso será verdadeiro no ORC se a propriedade SerDe for definida para acessar o índice por nome: `orc.column.index.access=FALSE`. Por padrão, o Parquet lê o índice por nome).
+ Para CSV, JSON e AVRO, o Athena usa uma verificação de esquema com base no índice. Isso significa que, se você encontrar um erro de incompatibilidade de esquema, deverá descartar a partição que está causando essa incompatibilidade e recriá-la, de modo que o Athena possa consultá-la sem falhas.

 O Athena compara o esquema da tabela com os esquemas da partição. Se você criar uma tabela em CSV, JSON e AVRO no Athena com o crawler do AWS Glue, depois que o crawler concluir o processamento, os esquemas da tabela e suas partições poderão ser diferentes. Se houver incompatibilidade entre os esquemas da tabela e da partição, haverá falha nas consultas no Athena devido a um erro de verificação de esquema semelhante a este: 'crawler\$1test.click\$1avro' is declared as type 'string', but partition 'partition\$10=2017-01-17' declared column 'col68' as type 'double'.

Uma solução comum para esses erros é eliminar a partição que está causando o erro e recriá-la. Para obter mais informações, consulte [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) e [ALTER TABLE ADD PARTITION](alter-table-add-partition.md).

# Consultar matrizes
<a name="querying-arrays"></a>

O Amazon Athena permite criar arrays, concatená-los, convertê-los em tipos de dados diferentes e filtrá-los, nivelá-los e classificá-los.

**Topics**
+ [

# Criar matrizes
](creating-arrays.md)
+ [Concatenar strings e matrizes](concatenating-strings-and-arrays.md)
+ [

# Converter tipos de dados de matriz
](converting-array-data-types.md)
+ [

# Descobrir tamanhos de matrizes
](finding-lengths.md)
+ [

# Acessar elementos de matrizes
](accessing-array-elements.md)
+ [

# Nivelar matrizes aninhadas
](flattening-arrays.md)
+ [

# Criar matrizes a partir de subconsultas
](creating-arrays-from-subqueries.md)
+ [

# Filtrar matrizes
](filtering-arrays.md)
+ [

# Classificar matrizes
](sorting-arrays.md)
+ [

# Usar funções de agregação com matrizes
](arrays-and-aggregation.md)
+ [

# Converter matrizes em strings
](converting-arrays-to-strings.md)
+ [

# Usar matrizes para criar mapas
](arrays-create-maps.md)
+ [Consultar matrizes de tipos complexos](rows-and-structs.md)

# Criar matrizes
<a name="creating-arrays"></a>

Para criar um literal de array no Athena, use a palavra-chave `ARRAY` seguida por colchetes `[ ]` e inclua os elementos do array separados por vírgulas.

## Exemplos
<a name="examples"></a>

Essa consulta cria uma matriz com quatro elementos.

```
SELECT ARRAY [1,2,3,4] AS items
```

Ela retorna:

```
+-----------+
| items     |
+-----------+
| [1,2,3,4] |
+-----------+
```

Essa consulta cria duas matrizes.

```
SELECT ARRAY[ ARRAY[1,2], ARRAY[3,4] ] AS items
```

Ela retorna:

```
+--------------------+
| items              |
+--------------------+
| [[1, 2], [3, 4]]   |
+--------------------+
```

Para criar uma matriz com base em colunas selecionadas de tipos compatíveis, use uma consulta, como neste exemplo:

```
WITH
dataset AS (
  SELECT 1 AS x, 2 AS y, 3 AS z
)
SELECT ARRAY [x,y,z] AS items FROM dataset
```

Essa consulta retorna:

```
+-----------+
| items     |
+-----------+
| [1,2,3]   |
+-----------+
```

No exemplo a seguir, duas matrizes são selecionadas e retornadas como uma mensagem de boas-vindas.

```
WITH
dataset AS (
  SELECT
    ARRAY ['hello', 'amazon', 'athena'] AS words,
    ARRAY ['hi', 'alexa'] AS alexa
)
SELECT ARRAY[words, alexa] AS welcome_msg
FROM dataset
```

Essa consulta retorna:

```
+----------------------------------------+
| welcome_msg                            |
+----------------------------------------+
| [[hello, amazon, athena], [hi, alexa]] |
+----------------------------------------+
```

Para criar uma matriz de pares chave/valor, use o operador `MAP` que utiliza uma matriz de chaves seguida de uma matriz de valores, como neste exemplo:

```
SELECT ARRAY[
   MAP(ARRAY['first', 'last', 'age'],ARRAY['Bob', 'Smith', '40']),
   MAP(ARRAY['first', 'last', 'age'],ARRAY['Jane', 'Doe', '30']),
   MAP(ARRAY['first', 'last', 'age'],ARRAY['Billy', 'Smith', '8'])
] AS people
```

Essa consulta retorna:

```
+-----------------------------------------------------------------------------------------------------+
| people                                                                                              |
+-----------------------------------------------------------------------------------------------------+
| [{last=Smith, first=Bob, age=40}, {last=Doe, first=Jane, age=30}, {last=Smith, first=Billy, age=8}] |
+-----------------------------------------------------------------------------------------------------+
```

# Concatenar strings e matrizes
<a name="concatenating-strings-and-arrays"></a>

A concatenação de strings e a concatenação de matrizes usam técnicas semelhantes.

## Concatenar strings
<a name="concatenating-strings"></a>

Para concatenar duas strings, você pode usar o operador de barra dupla `||`, como no exemplo a seguir.

```
SELECT 'This' || ' is' || ' a' || ' test.' AS Concatenated_String
```

Essa consulta retorna:


****  

| \$1 | Concatenated\$1String | 
| --- | --- | 
| 1 |  `This is a test.`  | 

Você pode usar a função `concat()` para obter o mesmo resultado.

```
SELECT concat('This', ' is', ' a', ' test.') AS Concatenated_String
```

Essa consulta retorna:


****  

| \$1 | Concatenated\$1String | 
| --- | --- | 
| 1 |  `This is a test.`  | 

Você pode usar a função `concat_ws()` para concatenar strings com o separador especificado no primeiro argumento.

```
SELECT concat_ws(' ', 'This', 'is', 'a', 'test.') as Concatenated_String
```

Essa consulta retorna:


****  

| \$1 | Concatenated\$1String | 
| --- | --- | 
| 1 |  `This is a test.`  | 

Para concatenar duas colunas do tipo de dados string usando um ponto, referencie as duas colunas usando aspas duplas e coloque o ponto entre aspas simples como uma string com codificação rígida. Se uma coluna não for do tipo de dados string, você poderá usar `CAST("column_name" as VARCHAR)` para converter a coluna primeiro.

```
SELECT "col1" || '.' || "col2" as Concatenated_String
FROM my_table
```

Essa consulta retorna:


****  

| \$1 | Concatenated\$1String | 
| --- | --- | 
| 1 |  `col1_string_value.col2_string_value`  | 

## Concatenar matrizes
<a name="concatenating-arrays"></a>

Você pode usar as mesmas técnicas para concatenar arrays.

Para concatenar vários arrays, use o operador de barra dupla `||`.

```
SELECT ARRAY [4,5] || ARRAY[ ARRAY[1,2], ARRAY[3,4] ] AS items
```

Essa consulta retorna:


****  

| \$1 | itens | 
| --- | --- | 
| 1 |  `[[4, 5], [1, 2], [3, 4]]`  | 

Para combinar vários arrays em um só, use o operador de barra dupla ou a função `concat()`.

```
WITH
dataset AS (
  SELECT
    ARRAY ['Hello', 'Amazon', 'Athena'] AS words,
    ARRAY ['Hi', 'Alexa'] AS alexa
)
SELECT concat(words, alexa) AS welcome_msg
FROM dataset
```

Essa consulta retorna:


****  

| \$1 | welcome\$1msg | 
| --- | --- | 
| 1 |  `[Hello, Amazon, Athena, Hi, Alexa]`  | 

Para obter mais informações sobre o uso de `concat()` em outras funções de string, consulte [String functions and operators](https://trino.io/docs/current/functions/string.html) (Funções e operadores de string) na documentação do Trino.

# Converter tipos de dados de matriz
<a name="converting-array-data-types"></a>

Para converter os dados dos arrays em tipos de dados compatíveis, use o operador `CAST`, como `CAST(value AS type)`. O Athena aceita todos os tipos de dados nativos do Presto.

```
SELECT
   ARRAY [CAST(4 AS VARCHAR), CAST(5 AS VARCHAR)]
AS items
```

Essa consulta retorna:

```
+-------+
| items |
+-------+
| [4,5] |
+-------+
```

Crie duas matrizes com elementos de par chave/valor, converta-as em JSON e concatene, como neste exemplo:

```
SELECT
   ARRAY[CAST(MAP(ARRAY['a1', 'a2', 'a3'], ARRAY[1, 2, 3]) AS JSON)] ||
   ARRAY[CAST(MAP(ARRAY['b1', 'b2', 'b3'], ARRAY[4, 5, 6]) AS JSON)]
AS items
```

Essa consulta retorna:

```
+--------------------------------------------------+
| items                                            |
+--------------------------------------------------+
| [{"a1":1,"a2":2,"a3":3}, {"b1":4,"b2":5,"b3":6}] |
+--------------------------------------------------+
```

# Descobrir tamanhos de matrizes
<a name="finding-lengths"></a>

A função `cardinality` retorna o tamanho de uma matriz, como neste exemplo:

```
SELECT cardinality(ARRAY[1,2,3,4]) AS item_count
```

Essa consulta retorna:

```
+------------+
| item_count |
+------------+
| 4          |
+------------+
```

# Acessar elementos de matrizes
<a name="accessing-array-elements"></a>

Para acessar elementos de matriz, use o operador `[]`, com 1 especificando o primeiro elemento, 2 especificando o segundo elemento e assim por diante, como neste exemplo:

```
WITH dataset AS (
SELECT
   ARRAY[CAST(MAP(ARRAY['a1', 'a2', 'a3'], ARRAY[1, 2, 3]) AS JSON)] ||
   ARRAY[CAST(MAP(ARRAY['b1', 'b2', 'b3'], ARRAY[4, 5, 6]) AS JSON)]
AS items )
SELECT items[1] AS item FROM dataset
```

Essa consulta retorna:

```
+------------------------+
| item                   |
+------------------------+
| {"a1":1,"a2":2,"a3":3} |
+------------------------+
```

Para acessar os elementos de uma matriz em uma determinada posição (conhecida como a posição de índice), use a função `element_at()` e especifique o nome da matriz e a posição de índice:
+ Se o índice for maior que 0, `element_at()` retornará o elemento especificado por você, contando do início ao fim da matriz. Ele se comporta como o operador `[]`.
+ Se o índice for menor que 0, `element_at()` retornará o elemento, contando do fim ao início da matriz.

A consulta a seguir cria uma matriz `words`e seleciona o primeiro elemento `hello` dela como o `first_word`, o segundo elemento `amazon` (contagem a partir do final da matriz) como o `middle_word` e o terceiro elemento `athena` como o `last_word`.

```
WITH dataset AS (
  SELECT ARRAY ['hello', 'amazon', 'athena'] AS words
)
SELECT
  element_at(words, 1) AS first_word,
  element_at(words, -2) AS middle_word,
  element_at(words, cardinality(words)) AS last_word
FROM dataset
```

Essa consulta retorna:

```
+----------------------------------------+
| first_word  | middle_word | last_word  |
+----------------------------------------+
| hello       | amazon      | athena     |
+----------------------------------------+
```

# Nivelar matrizes aninhadas
<a name="flattening-arrays"></a>

Ao trabalhar com matrizes aninhadas, você normalmente precisa expandir elementos de matriz aninhados para uma única matriz ou expandir a matriz para várias linhas.

## Usar a função de nivelamento
<a name="flattening-arrays-flatten-function"></a>

Para nivelar elementos de uma matriz aninhada em uma única matriz de valores, use a função `flatten`. Essa consulta retorna uma linha para cada elemento na matriz.

```
SELECT flatten(ARRAY[ ARRAY[1,2], ARRAY[3,4] ]) AS items
```

Essa consulta retorna:

```
+-----------+
| items     |
+-----------+
| [1,2,3,4] |
+-----------+
```

## Usar CROSS JOIN e UNNEST
<a name="flattening-arrays-cross-join-and-unnest"></a>

Para nivelar uma matriz em várias linhas, use `CROSS JOIN` com o operador `UNNEST`, como neste exemplo:

```
WITH dataset AS (
  SELECT
    'engineering' as department,
    ARRAY['Sharon', 'John', 'Bob', 'Sally'] as users
)
SELECT department, names FROM dataset
CROSS JOIN UNNEST(users) as t(names)
```

Essa consulta retorna:

```
+----------------------+
| department  | names  |
+----------------------+
| engineering | Sharon |
+----------------------|
| engineering | John   |
+----------------------|
| engineering | Bob    |
+----------------------|
| engineering | Sally  |
+----------------------+
```

Para nivelar uma matriz de pares chave/valor, transpor chaves selecionadas para colunas, como neste exemplo:

```
WITH
dataset AS (
  SELECT
    'engineering' as department,
     ARRAY[
      MAP(ARRAY['first', 'last', 'age'],ARRAY['Bob', 'Smith', '40']),
      MAP(ARRAY['first', 'last', 'age'],ARRAY['Jane', 'Doe', '30']),
      MAP(ARRAY['first', 'last', 'age'],ARRAY['Billy', 'Smith', '8'])
     ] AS people
  )
SELECT names['first'] AS
 first_name,
 names['last'] AS last_name,
 department FROM dataset
CROSS JOIN UNNEST(people) AS t(names)
```

Essa consulta retorna:

```
+--------------------------------------+
| first_name | last_name | department  |
+--------------------------------------+
| Bob        | Smith     | engineering |
| Jane       | Doe       | engineering |
| Billy      | Smith     | engineering |
+--------------------------------------+
```

Em uma lista de funcionários, selecione o funcionário com a maior pontuação combinada. `UNNEST` pode ser usado na cláusula `FROM` sem um `CROSS JOIN` anterior pois ele é o operador de junção padrão e, portanto, implícito.

```
WITH
dataset AS (
  SELECT ARRAY[
    CAST(ROW('Sally', 'engineering', ARRAY[1,2,3,4]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))),
    CAST(ROW('John', 'finance', ARRAY[7,8,9]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))),
    CAST(ROW('Amy', 'devops', ARRAY[12,13,14,15]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER)))
  ] AS users
),
users AS (
 SELECT person, score
 FROM
   dataset,
   UNNEST(dataset.users) AS t(person),
   UNNEST(person.scores) AS t(score)
)
SELECT person.name, person.department, SUM(score) AS total_score FROM users
GROUP BY (person.name, person.department)
ORDER BY (total_score) DESC
LIMIT 1
```

Essa consulta retorna:

```
+---------------------------------+
| name | department | total_score |
+---------------------------------+
| Amy  | devops     | 54          |
+---------------------------------+
```

Em uma lista de funcionários, selecione o funcionário com a pontuação individual mais alta.

```
WITH
dataset AS (
 SELECT ARRAY[
   CAST(ROW('Sally', 'engineering', ARRAY[1,2,3,4]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))),
   CAST(ROW('John', 'finance', ARRAY[7,8,9]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))),
   CAST(ROW('Amy', 'devops', ARRAY[12,13,14,15]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER)))
 ] AS users
),
users AS (
 SELECT person, score
 FROM
   dataset,
   UNNEST(dataset.users) AS t(person),
   UNNEST(person.scores) AS t(score)
)
SELECT person.name, score FROM users
ORDER BY (score) DESC
LIMIT 1
```

Essa consulta retorna:

```
+--------------+
| name | score |
+--------------+
| Amy  | 15    |
+--------------+
```

### Considerações sobre CROSS JOIN e UNNEST
<a name="flattening-arrays-cross-join-and-unnest-considerations"></a>

Se a função `UNNEST` for usada em uma ou mais matrizes na consulta e uma das matrizes for `NULL`, a consulta não retornará nenhuma linha. Se a função `UNNEST` for usada em uma matriz que é uma string vazia, a string vazia será retornada.

Por exemplo, na consulta apresentada a seguir, como a segunda matriz é nula, a consulta não retorna nenhuma linha.

```
SELECT 
    col1, 
    col2 
FROM UNNEST (ARRAY ['apples','oranges','lemons']) AS t(col1)
CROSS JOIN UNNEST (ARRAY []) AS t(col2)
```

No próximo exemplo, a segunda matriz foi modificada para conter uma string vazia. Para cada linha, a consulta retorna o valor em `col1` e uma string vazia para o valor em `col2`. A string vazia na segunda matriz é necessária para que os valores na primeira matriz sejam retornados.

```
SELECT 
    col1, 
    col2 
FROM UNNEST (ARRAY ['apples','oranges','lemons']) AS t(col1)
CROSS JOIN UNNEST (ARRAY ['']) AS t(col2)
```

# Criar matrizes a partir de subconsultas
<a name="creating-arrays-from-subqueries"></a>

Crie uma matriz com base em uma coleção de filas.

```
WITH
dataset AS (
  SELECT ARRAY[1,2,3,4,5] AS items
)
SELECT array_agg(i) AS array_items
FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
```

Essa consulta retorna:

```
+-----------------+
| array_items     |
+-----------------+
| [1, 2, 3, 4, 5] |
+-----------------+
```

Para criar um conjunto de valores exclusivos com base em um conjunto de linhas, use a palavra-chave `distinct`.

```
WITH
dataset AS (
  SELECT ARRAY [1,2,2,3,3,4,5] AS items
)
SELECT array_agg(distinct i) AS array_items
FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
```

Essa consulta retorna o resultado a seguir. Observe que a ordem não é garantida.

```
+-----------------+
| array_items     |
+-----------------+
| [1, 2, 3, 4, 5] |
+-----------------+
```

Para obter mais informações sobre como usar a função `array_agg`, consulte [Funções aggregate](https://trino.io/docs/current/functions/aggregate.html) na documentação do Trino.

# Filtrar matrizes
<a name="filtering-arrays"></a>

Crie uma matriz com base em uma coleção de filas caso elas correspondam aos critérios de filtro.

```
WITH
dataset AS (
  SELECT ARRAY[1,2,3,4,5] AS items
)
SELECT array_agg(i) AS array_items
FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
WHERE i > 3
```

Essa consulta retorna:

```
+-------------+
| array_items |
+-------------+
| [4, 5]      |
+-------------+
```

Filtrar uma matriz com base em se um dos elementos contêm um valor específico, como 2, como neste exemplo:

```
WITH
dataset AS (
  SELECT ARRAY
  [
    ARRAY[1,2,3,4],
    ARRAY[5,6,7,8],
    ARRAY[9,0]
  ] AS items
)
SELECT i AS array_items FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
WHERE contains(i, 2)
```

Essa consulta retorna:

```
+--------------+
| array_items  |
+--------------+
| [1, 2, 3, 4] |
+--------------+
```

## Uso a função `filter`
<a name="filtering-arrays-filter-function"></a>

```
 filter(ARRAY [list_of_values], boolean_function)
```

É possível utilizar a função `filter` em uma expressão `ARRAY` para criar um novo array que é o subconjunto dos itens na *list\$1of\$1values* cuja *boolean\$1function* é true. A função `filter` pode ser útil em casos nos quais não é possível usar a função *UNNEST*.

O exemplo a seguir filtra valores maiores que zero no array `[1,0,5,-1]`.

```
SELECT filter(ARRAY [1,0,5,-1], x -> x>0)
```

**Resultados**  
`[1,5]`

O exemplo a seguir filtra valores não nulos no array `[-1, NULL, 10, NULL]`.

```
SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)
```

**Resultados**  
`[-1,10]`

# Classificar matrizes
<a name="sorting-arrays"></a>

Para criar um array classificado de valores exclusivos com base em um conjunto de linhas, você pode usar a função [array\$1sort](https://prestodb.io/docs/current/functions/array.html#array_sort), como no exemplo a seguir.

```
WITH
dataset AS (
  SELECT ARRAY[3,1,2,5,2,3,6,3,4,5] AS items
)
SELECT array_sort(array_agg(distinct i)) AS array_items
FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
```

Essa consulta retorna:

```
+--------------------+
| array_items        |
+--------------------+
| [1, 2, 3, 4, 5, 6] |
+--------------------+
```

Para obter informações sobre como expandir uma matriz em várias linhas, consulte [Nivelar matrizes aninhadas](flattening-arrays.md).

# Usar funções de agregação com matrizes
<a name="arrays-and-aggregation"></a>
+ Para adicionar valores dentro de uma matriz, use `SUM`, como no exemplo a seguir.
+ Para agregar várias linhas dentro de uma matriz, use `array_agg`. Para ter mais informações, consulte [Criar matrizes a partir de subconsultas](creating-arrays-from-subqueries.md).

**nota**  
Desde o mecanismo do Athena versão 2, `ORDER BY` é permitido em funções de agregação.

```
WITH
dataset AS (
  SELECT ARRAY
  [
    ARRAY[1,2,3,4],
    ARRAY[5,6,7,8],
    ARRAY[9,0]
  ] AS items
),
item AS (
  SELECT i AS array_items
  FROM dataset, UNNEST(items) AS t(i)
)
SELECT array_items, sum(val) AS total
FROM item, UNNEST(array_items) AS t(val)
GROUP BY array_items;
```

Na última instrução do `SELECT`, em vez de usar `sum()` e `UNNEST`, você pode usar `reduce()` para reduzir o tempo de processamento e a transferência de dados, como no exemplo a seguir.

```
WITH
dataset AS (
  SELECT ARRAY
  [
    ARRAY[1,2,3,4],
    ARRAY[5,6,7,8],
    ARRAY[9,0]
  ] AS items
),
item AS (
  SELECT i AS array_items
  FROM dataset, UNNEST(items) AS t(i)
)
SELECT array_items, reduce(array_items, 0 , (s, x) -> s + x, s -> s) AS total
FROM item;
```

As consultas retornam os seguintes resultados. A ordem de resultados obtidos não é garantida.

```
+----------------------+
| array_items  | total |
+----------------------+
| [1, 2, 3, 4] | 10    |
| [5, 6, 7, 8] | 26    |
| [9, 0]       | 9     |
+----------------------+
```

# Converter matrizes em strings
<a name="converting-arrays-to-strings"></a>

Para converter uma matriz em uma string única, use a função `array_join`. O exemplo independente a seguir cria uma tabela chamada `dataset` que contém um array de alias chamado `words`. A consulta usa `array_join` para unir os elementos do array em `words`, separá-los com espaços e retornar a string resultante em uma coluna de alias chamada `welcome_msg`.

```
WITH
dataset AS (
  SELECT ARRAY ['hello', 'amazon', 'athena'] AS words
)
SELECT array_join(words, ' ') AS welcome_msg
FROM dataset
```

Essa consulta retorna:

```
+---------------------+
| welcome_msg         |
+---------------------+
| hello amazon athena |
+---------------------+
```

# Usar matrizes para criar mapas
<a name="arrays-create-maps"></a>

Os mapas são pares de chave-valor que consistem nos tipos de dados disponíveis no Athena. Para criar mapas, use o operador `MAP` e passe duas matrizes: a primeira é de nomes de coluna (chave) e a segunda é de valores. Todos os valores nas matrizes devem ser do mesmo tipo. Se qualquer um dos elementos de matriz de valor de mapa precisar ser de tipos diferentes, você poderá convertê-los depois.

## Exemplos
<a name="examples"></a>

Este exemplo seleciona um usuário em um conjunto de dados. Ele usa o operador `MAP` e passa duas matrizes. A primeira matriz inclui valores para nomes de coluna, como "primeiro", "último" e "idade". A segunda matriz consiste em valores para cada uma dessas colunas, como "Bob", "Smith", "35".

```
WITH dataset AS (
  SELECT MAP(
    ARRAY['first', 'last', 'age'],
    ARRAY['Bob', 'Smith', '35']
  ) AS user
)
SELECT user FROM dataset
```

Essa consulta retorna:

```
+---------------------------------+
| user                            |
+---------------------------------+
| {last=Smith, first=Bob, age=35} |
+---------------------------------+
```

Você pode recuperar valores `Map` selecionando o nome do campo seguido de `[key_name]`, como neste exemplo:

```
WITH dataset AS (
 SELECT MAP(
   ARRAY['first', 'last', 'age'],
   ARRAY['Bob', 'Smith', '35']
 ) AS user
)
SELECT user['first'] AS first_name FROM dataset
```

Essa consulta retorna:

```
+------------+
| first_name |
+------------+
| Bob        |
+------------+
```

# Consultar matrizes de tipos complexos e estruturas aninhadas
<a name="rows-and-structs"></a>

Os dados de origem normalmente contêm matrizes com tipos de dados complexos e estruturas aninhadas. Os exemplos nesta seção mostram como alterar o tipo de dados do elemento, localizar elementos em arrays e encontrar palavras-chave usando as consultas do Athena.

**Topics**
+ [

# Crie um `ROW`
](creating-row.md)
+ [

# Alterar nomes de campo em matrizes com uso de `CAST`
](changing-row-arrays-with-cast.md)
+ [

# Filtrar matrizes com uso da notação `.`
](filtering-with-dot.md)
+ [

# Filtrar matrizes com valores aninhados
](filtering-nested-with-dot.md)
+ [

# Filtrar matrizes com uso de `UNNEST`
](filtering-with-unnest.md)
+ [

# Localizar palavras-chave em matrizes usando `regexp_like`
](filtering-with-regexp.md)

# Crie um `ROW`
<a name="creating-row"></a>

**nota**  
Os exemplos neste seção usam `ROW` como um meio para criar dados de exemplo com os quais trabalhar. Ao consultar tabelas no Athena, você não precisa criar tipos de dados `ROW` porque eles já foram criados da sua origem dos dados. Quando você usa `CREATE_TABLE`, o Athena define um `STRUCT` nele, preenche-o com dados e cria o tipo de dados `ROW` para cada linha no conjunto de dados. O tipo de dados `ROW` subjacente consiste em campos nomeados de todos os tipos de dados SQL compatíveis.

```
WITH dataset AS (
 SELECT
   ROW('Bob', 38) AS users
 )
SELECT * FROM dataset
```

Essa consulta retorna:

```
+-------------------------+
| users                   |
+-------------------------+
| {field0=Bob, field1=38} |
+-------------------------+
```

# Alterar nomes de campo em matrizes com uso de `CAST`
<a name="changing-row-arrays-with-cast"></a>

Para alterar o nome de campo em uma matriz que contenha valores `ROW`, você pode `CAST` a declaração `ROW`:

```
WITH dataset AS (
  SELECT
    CAST(
      ROW('Bob', 38) AS ROW(name VARCHAR, age INTEGER)
    ) AS users
)
SELECT * FROM dataset
```

Essa consulta retorna:

```
+--------------------+
| users              |
+--------------------+
| {NAME=Bob, AGE=38} |
+--------------------+
```

**nota**  
No exemplo acima, você declara `name` como um `VARCHAR` , porque esse é o tipo no Presto. Se você declarar esse `STRUCT` dentro de uma instrução `CREATE TABLE`, use o tipo `String` porque o Hive define esse tipo de dados como `String`.

# Filtrar matrizes com uso da notação `.`
<a name="filtering-with-dot"></a>

No exemplo a seguir, selecione o campo `accountId` na coluna `userIdentity` de uma tabela de logs do AWS CloudTrail usando a notação `.`. Para obter mais informações, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md).

```
SELECT
  CAST(useridentity.accountid AS bigint) as newid
FROM cloudtrail_logs
LIMIT 2;
```

Essa consulta retorna:

```
+--------------+
| newid        |
+--------------+
| 112233445566 |
+--------------+
| 998877665544 |
+--------------+
```

Para consultar um conjunto de valores, execute esta consulta:

```
WITH dataset AS (
  SELECT ARRAY[
    CAST(ROW('Bob', 38) AS ROW(name VARCHAR, age INTEGER)),
    CAST(ROW('Alice', 35) AS ROW(name VARCHAR, age INTEGER)),
    CAST(ROW('Jane', 27) AS ROW(name VARCHAR, age INTEGER))
  ] AS users
)
SELECT * FROM dataset
```

Ela retorna este resultado:

```
+-----------------------------------------------------------------+
| users                                                           |
+-----------------------------------------------------------------+
| [{NAME=Bob, AGE=38}, {NAME=Alice, AGE=35}, {NAME=Jane, AGE=27}] |
+-----------------------------------------------------------------+
```

# Filtrar matrizes com valores aninhados
<a name="filtering-nested-with-dot"></a>

Matrizes grandes normalmente contêm estruturas aninhadas, e você precisa ser capaz de filtrar ou pesquisar valores dentro delas.

Para definir um conjunto de dados para uma matriz de valores que inclui um valor `BOOLEAN` aninhado, execute esta consulta:

```
WITH dataset AS (
  SELECT
    CAST(
      ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ) AS sites
)
SELECT * FROM dataset
```

Ela retorna este resultado:

```
+----------------------------------------------------------+
| sites                                                    |
+----------------------------------------------------------+
| {HOSTNAME=aws.amazon.com, FLAGGEDACTIVITY={ISNEW=true}}  |
+----------------------------------------------------------+
```

Em seguida, para filtrar e acessar o valor `BOOLEAN` desse elemento, continue usando a notação `.`

```
WITH dataset AS (
  SELECT
    CAST(
      ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ) AS sites
)
SELECT sites.hostname, sites.flaggedactivity.isnew
FROM dataset
```

Essa consulta seleciona os campos aninhados e retorna este resultado:

```
+------------------------+
| hostname       | isnew |
+------------------------+
| aws.amazon.com | true  |
+------------------------+
```

# Filtrar matrizes com uso de `UNNEST`
<a name="filtering-with-unnest"></a>

Para filtrar uma matriz que inclua uma estrutura aninhada por um dos elementos filho, emita uma consulta com um operador `UNNEST`. Para obter mais informações sobre `UNNEST`, consulte [Nivelar matrizes aninhadas](flattening-arrays.md).

Por exemplo, esta consulta encontra nomes de host de sites no conjunto de dados.

```
WITH dataset AS (
  SELECT ARRAY[
    CAST(
      ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('news.cnn.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    ),
    CAST(
      ROW('netflix.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN))
    )
  ] as items
)
SELECT sites.hostname, sites.flaggedActivity.isNew
FROM dataset, UNNEST(items) t(sites)
WHERE sites.flaggedActivity.isNew = true
```

Ela retorna:

```
+------------------------+
| hostname       | isnew |
+------------------------+
| aws.amazon.com | true  |
+------------------------+
```

# Localizar palavras-chave em matrizes usando `regexp_like`
<a name="filtering-with-regexp"></a>

Os exemplos a seguir ilustram como pesquisar uma palavra-chave em um conjunto de dados em um elemento dentro de uma matriz usando a função [regexp\$1like](https://prestodb.io/docs/current/functions/regexp.html). Ele usa como entrada um padrão de expressão regular para avaliar ou uma lista de termos separados por uma barra vertical (\$1), avalia o padrão e determina se a string especificada a contém.

O padrão da expressão regular precisa estar contido na string e não precisa corresponder a ela. Para corresponder à string inteira, coloque o padrão com ^ no início e \$1 no final, como `'^pattern$'`.

Considere uma matriz de sites contendo os respectivos nomes de host e um elemento `flaggedActivity`. Esse elemento inclui um `ARRAY`, contendo vários elementos `MAP`, cada um listando palavras-chave conhecidas diferentes e a contagem de popularidade. Suponhamos que você encontre uma palavra-chave dentro de um `MAP` nesta matriz.

Para pesquisar esse conjunto de dados para sites com uma palavra-chave específica, usamos `regexp_like` em vez do operador SQL `LIKE` semelhante, porque a pesquisa de um grande número de palavras-chave é mais eficiente com `regexp_like`.

**Example Exemplo 1: uso do `regexp_like`**  
A consulta neste exemplo usa a função `regexp_like` para pesquisar os termos `'politics|bigdata'` encontrados em valores em matrizes:  

```
WITH dataset AS (
  SELECT ARRAY[
    CAST(
      ROW('aws.amazon.com', ROW(ARRAY[
          MAP(ARRAY['term', 'count'], ARRAY['bigdata', '10']),
          MAP(ARRAY['term', 'count'], ARRAY['serverless', '50']),
          MAP(ARRAY['term', 'count'], ARRAY['analytics', '82']),
          MAP(ARRAY['term', 'count'], ARRAY['iot', '74'])
      ])
      ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
   ),
   CAST(
     ROW('news.cnn.com', ROW(ARRAY[
       MAP(ARRAY['term', 'count'], ARRAY['politics', '241']),
       MAP(ARRAY['term', 'count'], ARRAY['technology', '211']),
       MAP(ARRAY['term', 'count'], ARRAY['serverless', '25']),
       MAP(ARRAY['term', 'count'], ARRAY['iot', '170'])
     ])
     ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
   ),
   CAST(
     ROW('netflix.com', ROW(ARRAY[
       MAP(ARRAY['term', 'count'], ARRAY['cartoons', '1020']),
       MAP(ARRAY['term', 'count'], ARRAY['house of cards', '112042']),
       MAP(ARRAY['term', 'count'], ARRAY['orange is the new black', '342']),
       MAP(ARRAY['term', 'count'], ARRAY['iot', '4'])
     ])
     ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
   )
 ] AS items
),
sites AS (
  SELECT sites.hostname, sites.flaggedactivity
  FROM dataset, UNNEST(items) t(sites)
)
SELECT hostname
FROM sites, UNNEST(sites.flaggedActivity.flags) t(flags)
WHERE regexp_like(flags['term'], 'politics|bigdata')
GROUP BY (hostname)
```
Essa consulta retorna dois sites:  

```
+----------------+
| hostname       |
+----------------+
| aws.amazon.com |
+----------------+
| news.cnn.com   |
+----------------+
```

**Example Exemplo 2: uso do `regexp_like`**  
A consulta no exemplo a seguir agrega ao total de pontuações de popularidade dos sites correspondentes aos termos de pesquisa com a função `regexp_like` e, em seguida, ordena da mais alta para a mais baixa.   

```
WITH dataset AS (
  SELECT ARRAY[
    CAST(
      ROW('aws.amazon.com', ROW(ARRAY[
          MAP(ARRAY['term', 'count'], ARRAY['bigdata', '10']),
          MAP(ARRAY['term', 'count'], ARRAY['serverless', '50']),
          MAP(ARRAY['term', 'count'], ARRAY['analytics', '82']),
          MAP(ARRAY['term', 'count'], ARRAY['iot', '74'])
      ])
      ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
    ),
    CAST(
      ROW('news.cnn.com', ROW(ARRAY[
        MAP(ARRAY['term', 'count'], ARRAY['politics', '241']),
        MAP(ARRAY['term', 'count'], ARRAY['technology', '211']),
        MAP(ARRAY['term', 'count'], ARRAY['serverless', '25']),
        MAP(ARRAY['term', 'count'], ARRAY['iot', '170'])
      ])
      ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
    ),
    CAST(
      ROW('netflix.com', ROW(ARRAY[
        MAP(ARRAY['term', 'count'], ARRAY['cartoons', '1020']),
        MAP(ARRAY['term', 'count'], ARRAY['house of cards', '112042']),
        MAP(ARRAY['term', 'count'], ARRAY['orange is the new black', '342']),
        MAP(ARRAY['term', 'count'], ARRAY['iot', '4'])
      ])
      ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) ))
    )
  ] AS items
),
sites AS (
  SELECT sites.hostname, sites.flaggedactivity
  FROM dataset, UNNEST(items) t(sites)
)
SELECT hostname, array_agg(flags['term']) AS terms, SUM(CAST(flags['count'] AS INTEGER)) AS total
FROM sites, UNNEST(sites.flaggedActivity.flags) t(flags)
WHERE regexp_like(flags['term'], 'politics|bigdata')
GROUP BY (hostname)
ORDER BY total DESC
```
Essa consulta retorna dois sites:  

```
+------------------------------------+
| hostname       | terms    | total  |
+----------------+-------------------+
| news.cnn.com   | politics |  241   |
+----------------+-------------------+
| aws.amazon.com | bigdata |  10    |
+----------------+-------------------+
```

# Consultar dados geoespaciais
<a name="querying-geospatial-data"></a>

Os dados geoespaciais contêm identificadores que especificam uma posição geográfica para um objeto. Entre os exemplos desse tipo de dados estão previsões do tempo, rotas em mapa, tweets com posições geográficas, locais de lojas e rotas aéreas. Os dados geoespaciais têm uma função importante na analytics comercial, na geração de relatórios e na previsão.

Os identificadores geoespaciais, como latitude e longitude, permitem converter qualquer endereço postal em um conjunto de coordenadas geográficas.

## O que é uma consulta geoespacial?
<a name="geospatial-query-what-is"></a>

As consultas geoespaciais são tipos especializados de consultas SQL disponíveis no Athena. Elas diferem de consultas SQL não espaciais das seguintes maneiras:
+ Usando os seguintes tipos de dados de geometria especializados: `point`, `line`, `multiline`, `polygon`e `multipolygon`.
+ Expressando relacionamentos entre tipos de dados, como geometria `distance`, `equals`, `crosses`, `touches`, `overlaps`, `disjoint` e outros.

Com as consultas geoespaciais no Athena, você pode executar estas e outras operações semelhantes:
+ Encontrar a distância entre dois pontos.
+ Verificar se uma área (polígono) contém outra.
+ Verifique se uma linha cruza ou toca outra linha ou polígono.

Por exemplo, para obter um tipo de dados de geometria `point` de valores do tipo `double` para as coordenadas geográficas do Monte Rainier no Athena, use a função geoespacial `ST_Point (longitude, latitude)`, como no exemplo a seguir. 

```
ST_Point(-121.7602, 46.8527)
```

## Formatos de dados de entrada e tipos de dados de geometria
<a name="geospatial-input-data-formats-supported-geometry-types"></a>

Para usar as funções geoespaciais no Athena, insira os dados no formato WKT ou use o SerDe JSON do Hive. Você também pode usar os tipos de dados de geometria disponíveis no Athena.

### Formatos de dados de entrada
<a name="input-data-formats"></a>

Para processar as consultas geoespaciais, o Athena permite a entrada de dados nestes formatos:
+  **Well-Known Text (WKT – Texto bem conhecido)**. No Athena, o WKT é representado como um tipo de dados `varchar(x)` ou `string`.
+  **Dados geoespaciais codificados por JSON**. Para analisar arquivos JSON com dados geoespaciais e criar tabelas para eles, o Athena usa o [SerDe JSON do Hive](https://github.com/Esri/spatial-framework-for-hadoop/wiki/Hive-JSON-SerDe). Para obter mais informações sobre como usar esse SerDe no Athena, consulte [Bibliotecas SerDe JSON](json-serde.md).

### Tipos de dados de geometria
<a name="geometry-data-types"></a>

Para processar as consultas geoespaciais, o Athena aceita os seguintes tipos de dados de geometria especializados:
+  `point` 
+  `line` 
+  `polygon` 
+  `multiline` 
+  `multipolygon` 

## Funções geoespaciais aceitas
<a name="geospatial-functions-list"></a>

Para obter informações sobre as funções geoespaciais no mecanismo Athena versão 3, consulte [Geospatial functions](https://trino.io/docs/current/functions/geospatial.html) (Funções geoespaciais) na documentação do Trino.

# Exemplos: consultas geoespaciais
<a name="geospatial-example-queries"></a>

Os exemplos neste tópico criam duas tabelas de dados de exemplo disponíveis no GitHub e consultam as tabelas com base nos dados. Os dados de exemplo, que são apenas para fins ilustrativos e não têm garantia de serem precisos, estão nos seguintes arquivos:
+ **[https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/earthquake-data/earthquakes.csv](https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/earthquake-data/earthquakes.csv)** – lista terremotos ocorridos na Califórnia. A tabela `earthquakes` de exemplo usa campos desses dados.
+ **[https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/counties-data/california-counties.json](https://github.com/Esri/gis-tools-for-hadoop/blob/master/samples/data/counties-data/california-counties.json)**: lista os dados do condado no estado da Califórnia no [formato GeoJSON compatível com ESRI](https://doc.arcgis.com/en/arcgis-online/reference/geojson.htm). Os dados incluem muitos campos, como `AREA`, `PERIMETER`, `STATE`, `COUNTY` e `NAME`, mas a tabela `counties` de exemplo usa apenas dois: `Name` (string) e `BoundaryShape` (binário). 
**nota**  
O Athena usa `com.esri.json.hadoop.EnclosedEsriJsonInputFormat` para converter os dados JSON no formato binário geoespacial.

O exemplo de código a seguir cria uma tabela chamada `earthquakes`:

```
CREATE external TABLE earthquakes
(
 earthquake_date string,
 latitude double,
 longitude double,
 depth double,
 magnitude double,
 magtype string,
 mbstations string,
 gap string,
 distance string,
 rms string,
 source string,
 eventid string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/my-query-log/csv/';
```

O exemplo de código a seguir cria uma tabela chamada `counties`:

```
CREATE external TABLE IF NOT EXISTS counties
 (
 Name string,
 BoundaryShape binary
 )
ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.EsriJsonSerDe'
STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedEsriJsonInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/my-query-log/json/';
```

A consulta de exemplo a seguir usa a função `CROSS JOIN` nas tabelas `counties` e `earthquake`. O exemplo usa `ST_CONTAINS` para consultar os condados com limites que incluem locais de terremoto, que são especificados com `ST_POINT`. A consulta agrupa esses condados por nome, ordena-os por contagem e os retorna em ordem decrescente.

```
SELECT counties.name,
        COUNT(*) cnt
FROM counties
CROSS JOIN earthquakes
WHERE ST_CONTAINS (ST_GeomFromLegacyBinary(counties.boundaryshape), ST_POINT(earthquakes.longitude, earthquakes.latitude))
GROUP BY  counties.name
ORDER BY  cnt DESC
```

Essa consulta retorna:

```
+------------------------+
| name             | cnt |
+------------------------+
| Kern             | 36  |
+------------------------+
| San Bernardino   | 35  |
+------------------------+
| Imperial         | 28  |
+------------------------+
| Inyo             | 20  |
+------------------------+
| Los Angeles      | 18  |
+------------------------+
| Riverside        | 14  |
+------------------------+
| Monterey         | 14  |
+------------------------+
| Santa Clara      | 12  |
+------------------------+
| San Benito       | 11  |
+------------------------+
| Fresno           | 11  |
+------------------------+
| San Diego        | 7   |
+------------------------+
| Santa Cruz       | 5   |
+------------------------+
| Ventura          | 3   |
+------------------------+
| San Luis Obispo  | 3   |
+------------------------+
| Orange           | 2   |
+------------------------+
| San Mateo        | 1   |
+------------------------+
```

## Recursos adicionais
<a name="geospatial-example-queries-additional-resources"></a>

Para ver exemplos adicionais de consultas geoespaciais, consulte as seguintes postagens de blog:
+ [Estenda consultas geoespaciais no Amazon Athena com UDFs e AWS Lambda](https://aws.amazon.com/blogs/big-data/extend-geospatial-queries-in-amazon-athena-with-udfs-and-aws-lambda/) 
+ [Visualize mais de 200 anos de dados climáticos globais usando o Amazon Athena e o Amazon Quick](https://aws.amazon.com/blogs/big-data/visualize-over-200-years-of-global-climate-data-using-amazon-athena-and-amazon-quicksight/).
+ [Querying OpenStreetMap with Amazon Athena (Consultar OpenStreetMap com o Amazon Athena](https://aws.amazon.com/blogs/big-data/querying-openstreetmap-with-amazon-athena/)

# Consultar dados JSON
<a name="querying-JSON"></a>

O Amazon Athena permite analisar dados codificados em JSON, extrair dados JSON aninhado, pesquisar valores e saber o comprimento e o tamanho dos arrays JSON. Para aprender os fundamentos da consulta de dados JSON no Athena, considere os seguintes exemplos de dados do planeta:

```
{name:"Mercury",distanceFromSun:0.39,orbitalPeriod:0.24,dayLength:58.65}
{name:"Venus",distanceFromSun:0.72,orbitalPeriod:0.62,dayLength:243.02}
{name:"Earth",distanceFromSun:1.00,orbitalPeriod:1.00,dayLength:1.00}
{name:"Mars",distanceFromSun:1.52,orbitalPeriod:1.88,dayLength:1.03}
```

Observe como cada registro (basicamente, cada linha na tabela) está em uma linha diferente. Para consultar os dados JSON, você pode usar uma declaração `CREATE TABLE` como a seguinte:

```
CREATE EXTERNAL TABLE `planets_json`(
  `name` string,
  `distancefromsun` double,
  `orbitalperiod` double,
  `daylength` double)
ROW FORMAT SERDE
  'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/json/'
```

Para consultar os dados, use uma declaração `SELECT` como a seguinte.

```
SELECT * FROM planets_json
```

Os resultados da consulta são semelhantes aos seguintes:


****  

| \$1 | name | distância do sol | período orbital | duração do dia | 
| --- | --- | --- | --- | --- | 
| 1 | Mercúrio | 0,39 | 0,24 | 58,65 | 
| 2 | Vênus | 0,72 | 0,62 | 243,02 | 
| 3 | Terra | 1.0 | 1.0 | 1,0 | 
| 4 | Marte | 1,52 | 1,88 | 1,03 | 

Observe como a declaração `CREATE TABLE` usa [OpenX JSON SerDe](openx-json-serde.md), o que exige que cada registro JSON esteja em uma linha diferente. Se o JSON estiver em um formato pretty print ou se todos os registros estiverem em uma única linha, os dados não serão lidos corretamente.

Para consultar dados JSON que estejam em um formato pretty print, você pode usar [Amazon Ion Hive SerDe](ion-serde.md) em vez do OpenX JSON SerDe. Considere os dados anteriores armazenados em um formato pretty print:

```
{
  name:"Mercury",
  distanceFromSun:0.39,
  orbitalPeriod:0.24,
  dayLength:58.65
}
{
  name:"Venus",
  distanceFromSun:0.72,
  orbitalPeriod:0.62,
  dayLength:243.02
}
{
  name:"Earth",
  distanceFromSun:1.00,
  orbitalPeriod:1.00,
  dayLength:1.00
}
{
  name:"Mars",
  distanceFromSun:1.52,
  orbitalPeriod:1.88,
  dayLength:1.03
}
```

Para consultar esses dados sem reformatar, você pode usar uma declaração `CREATE TABLE` como a seguinte. Observe que, em vez de especificar o OpenX JSON SerDe, a instrução especifica `STORED AS ION`. 

```
CREATE EXTERNAL TABLE `planets_ion`(
  `name` string,
  `distancefromsun` DECIMAL(10, 2),
  `orbitalperiod` DECIMAL(10, 2),
  `daylength` DECIMAL(10, 2))
STORED AS ION
LOCATION
  's3://amzn-s3-demo-bucket/json-ion/'
```

A consulta `SELECT * FROM planets_ion` produz os mesmos resultados de antes. Para obter mais informações sobre a criação de tabelas dessa forma usando o Amazon Ion Hive SerDe, consulte [Criar tabelas do Amazon Ion](ion-serde-using-create-table.md).

O exemplo anterior de dados JSON não contém tipos de dados complexos, como arrays ou estruturas aninhadas. Para obter mais informações sobre como consultar dados JSON aninhado, consulte [Exemplo: desserializar JSON aninhado](openx-json-serde.md#nested-json-serde-example).

**Topics**
+ [

# Práticas recomendadas de leitura de dados JSON
](parsing-json-data.md)
+ [

# Extrair dados JSON de strings
](extracting-data-from-JSON.md)
+ [

# Pesquisar por valores em matrizes JSON
](searching-for-values.md)
+ [

# Obter comprimento e tamanho de matrizes JSON
](length-and-size.md)
+ [

# Solução de problemas de consultas JSON
](json-troubleshooting.md)

# Práticas recomendadas de leitura de dados JSON
<a name="parsing-json-data"></a>

JavaScript Object Notation (JSON) é um método comum para codificar estruturas de dados como texto. Muitos aplicativos e ferramentas produzem dados codificados em JSON.

No Amazon Athena, você pode criar tabelas com base em dados externos e incluir dados codificados em JSON nelas. Para esses tipos de dados de origem, use o Athena junto com [Bibliotecas SerDe JSON](json-serde.md). 

Use as seguintes dicas para ler dados codificados por JSON:
+ Escolha o SerDe certo: um JSON SerDe nativo, `org.apache.hive.hcatalog.data.JsonSerDe`; ou um OpenX SerDe, `org.openx.data.jsonserde.JsonSerDe`. Para obter mais informações, consulte [Bibliotecas SerDe JSON](json-serde.md).
+ Certifique-se de que cada registro codificado em JSON seja representado em uma linha separada, não formatado para impressão.
**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 
+ Gere seus dados codificados por JSON em colunas sem distinção entre letras maiúsculas e minúsculas.
+ Forneça uma opção para ignorar registros malformadas, como neste exemplo.

  ```
  CREATE EXTERNAL TABLE json_table (
    column_a string,
    column_b int
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
   LOCATION 's3://amzn-s3-demo-bucket/path/';
  ```
+ Converta os campos nos dados de origem que tenham um esquema indeterminado em strings codificadas em JSON no Athena.

Ao criar tabelas com os dados do JSON, o Athena analisa os dados com base no esquema existente e predefinido. No entanto, nem todos os dados podem ter um esquema predefinido. Para simplificar o gerenciamento de esquemas nesses casos, costuma ser útil converter os campos nos dados de origem que têm um esquema indeterminado em strings JSON no Athena e usar [Bibliotecas SerDe JSON](json-serde.md).

Por exemplo, considere um aplicativo IoT que publique eventos com campos comuns de sensores diferentes. Um desses campos deve armazenar uma carga útil personalizada que seja exclusiva do sensor que envia o evento. Nesse caso, como você não sabe o esquema, recomendamos armazenar as informações como uma string codificada em JSON. Para isso, converta os dados na tabela do Athena em JSON, como no exemplo a seguir. Você também pode converter os dados codificados em JSON em tipos de dados do Athena.

**Topics**
+ [

# Converter tipos de dados do Athena em JSON
](converting-native-data-types-to-json.md)
+ [

# Converter JSON em tipos de dados do Athena
](converting-json-to-native-data-types.md)

# Converter tipos de dados do Athena em JSON
<a name="converting-native-data-types-to-json"></a>

Para converter os tipos de dados do Athena em JSON, use `CAST`.

```
WITH dataset AS (
  SELECT
    CAST('HELLO ATHENA' AS JSON) AS hello_msg,
    CAST(12345 AS JSON) AS some_int,
    CAST(MAP(ARRAY['a', 'b'], ARRAY[1,2]) AS JSON) AS some_map
)
SELECT * FROM dataset
```

Essa consulta retorna:

```
+-------------------------------------------+
| hello_msg      | some_int | some_map      |
+-------------------------------------------+
| "HELLO ATHENA" | 12345    | {"a":1,"b":2} |
+-------------------------------------------+
```

# Converter JSON em tipos de dados do Athena
<a name="converting-json-to-native-data-types"></a>

Para converter os dados do JSON em tipos de dados do Athena, use `CAST`.

**nota**  
Neste exemplo, para denotar strings como codificadas em JSON, comece com a palavra-chave `JSON` e use aspas simples, como `JSON '12345'` 

```
WITH dataset AS (
  SELECT
    CAST(JSON '"HELLO ATHENA"' AS VARCHAR) AS hello_msg,
    CAST(JSON '12345' AS INTEGER) AS some_int,
    CAST(JSON '{"a":1,"b":2}' AS MAP(VARCHAR, INTEGER)) AS some_map
)
SELECT * FROM dataset
```

Essa consulta retorna:

```
+-------------------------------------+
| hello_msg    | some_int | some_map  |
+-------------------------------------+
| HELLO ATHENA | 12345    | {a:1,b:2} |
+-------------------------------------+
```

# Extrair dados JSON de strings
<a name="extracting-data-from-JSON"></a>

Você pode ter dados de origem contendo strings codificadas em JSON que não deseja necessariamente desserializar em uma tabela no Athena. Neste caso, você ainda pode executar operações SQL nesses dados usando as funções JSON disponíveis no Presto.

Considere essa string JSON como um conjunto de dados de exemplo.

```
{"name": "Susan Smith",
"org": "engineering",
"projects":
    [
     {"name":"project1", "completed":false},
     {"name":"project2", "completed":true}
    ]
}
```

## Exemplos: extração de propriedades
<a name="examples-extracting-properties"></a>

Para extrair as propriedades `name` e `projects` da string JSON, use a função `json_extract` como no exemplo a seguir. A função `json_extract` utiliza a coluna que contém a string JSON e a pesquisa usando uma expressão como `JSONPath` com a notação `.`

**nota**  
 `JSONPath` realiza um transversal de árvore simples. Ele usa o sinal `$` para denotar a raiz do documento JSON, seguido de um ponto final e um elemento aninhado diretamente na raiz, como `$.name`.

```
WITH dataset AS (
  SELECT '{"name": "Susan Smith",
           "org": "engineering",
           "projects": [{"name":"project1", "completed":false},
           {"name":"project2", "completed":true}]}'
    AS myblob
)
SELECT
  json_extract(myblob, '$.name') AS name,
  json_extract(myblob, '$.projects') AS projects
FROM dataset
```

O valor retornado é uma string codificada em JSON, e não um tipo de dados nativo do Athena.

```
+-----------------------------------------------------------------------------------------------+
| name           | projects                                                                     |
+-----------------------------------------------------------------------------------------------+
| "Susan Smith"  | [{"name":"project1","completed":false},{"name":"project2","completed":true}] |
+-----------------------------------------------------------------------------------------------+
```

Para extrair o valor escalar da string JSON, use a função `json_extract_scalar(json, json_path)`. É semelhante ao `json_extract`, mas retorna um valor de string `varchar` em vez de uma string codificada em JSON. O valor do parâmetro *json\$1path* deve ser um escalar (um booleano, número ou string).

**nota**  
Não use a função `json_extract_scalar` em matrizes, mapas ou structs.

```
WITH dataset AS (
  SELECT '{"name": "Susan Smith",
           "org": "engineering",
           "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}'
    AS myblob
)
SELECT
  json_extract_scalar(myblob, '$.name') AS name,
  json_extract_scalar(myblob, '$.projects') AS projects
FROM dataset
```

Essa consulta retorna:

```
+---------------------------+
| name           | projects |
+---------------------------+
| Susan Smith    |          |
+---------------------------+
```

Para obter o primeiro elemento da propriedade `projects` na matriz de exemplo, use a função `json_array_get` e especifique a posição de índice.

```
WITH dataset AS (
  SELECT '{"name": "Bob Smith",
           "org": "engineering",
           "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}'
    AS myblob
)
SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item
FROM dataset
```

Ele retorna o valor na posição de índice especificada na matriz codificada em JSON.

```
+---------------------------------------+
| item                                  |
+---------------------------------------+
| {"name":"project1","completed":false} |
+---------------------------------------+
```

Para retornar um tipo de string do Athena, use o operador `[]` dentro de uma expressão `JSONPath` e use a função `json_extract_scalar`. Para obter mais informações sobre o `[]`, consulte [Acessar elementos de matrizes](accessing-array-elements.md).

```
WITH dataset AS (
   SELECT '{"name": "Bob Smith",
             "org": "engineering",
             "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}'
     AS myblob
)
SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name
FROM dataset
```

Ela retorna este resultado:

```
+--------------+
| project_name |
+--------------+
| project1     |
+--------------+
```

# Pesquisar por valores em matrizes JSON
<a name="searching-for-values"></a>

Para determinar se um valor específico existe dentro de uma matriz codificada em JSON, use a função `json_array_contains`.

A consulta a seguir lista os nomes dos usuários que estão participando de "project2".

```
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"name": "Bob Smith", "org": "legal", "projects": ["project1"]}'),
    (JSON '{"name": "Susan Smith", "org": "engineering", "projects": ["project1", "project2", "project3"]}'),
    (JSON '{"name": "Jane Smith", "org": "finance", "projects": ["project1", "project2"]}')
  ) AS t (users)
)
SELECT json_extract_scalar(users, '$.name') AS user
FROM dataset
WHERE json_array_contains(json_extract(users, '$.projects'), 'project2')
```

Essa consulta retorna uma lista de usuários.

```
+-------------+
| user        |
+-------------+
| Susan Smith |
+-------------+
| Jane Smith  |
+-------------+
```

O exemplo de consulta a seguir lista os nomes de usuários que concluíram projetos com o número total de projetos realizados. Ele realiza estas ações:
+ Usa instruções `SELECT` aninhadas para fins de clareza.
+ Extrai a matriz de projetos.
+ Converte a matriz em uma matriz nativa de pares de chave/valor usando `CAST`.
+ Extrai cada elemento de matriz individual usando o operador `UNNEST`.
+ Filtra valores obtidos por projetos concluídos e os conta.

**nota**  
Ao usar `CAST` em `MAP`, você pode especificar o elemento de chave como `VARCHAR` (String nativa no Presto), mas deixar o valor como JSON, porque os valores no `MAP` são de tipos diferentes: string para o primeiro par de chave/valor e Booliano para o segundo.

```
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"name": "Bob Smith",
             "org": "legal",
             "projects": [{"name":"project1", "completed":false}]}'),
    (JSON '{"name": "Susan Smith",
             "org": "engineering",
             "projects": [{"name":"project2", "completed":true},
                          {"name":"project3", "completed":true}]}'),
    (JSON '{"name": "Jane Smith",
             "org": "finance",
             "projects": [{"name":"project2", "completed":true}]}')
  ) AS t (users)
),
employees AS (
  SELECT users, CAST(json_extract(users, '$.projects') AS
    ARRAY(MAP(VARCHAR, JSON))) AS projects_array
  FROM dataset
),
names AS (
  SELECT json_extract_scalar(users, '$.name') AS name, projects
  FROM employees, UNNEST (projects_array) AS t(projects)
)
SELECT name, count(projects) AS completed_projects FROM names
WHERE cast(element_at(projects, 'completed') AS BOOLEAN) = true
GROUP BY name
```

Esta consulta retorna o seguinte resultado:

```
+----------------------------------+
| name        | completed_projects |
+----------------------------------+
| Susan Smith | 2                  |
+----------------------------------+
| Jane Smith  | 1                  |
+----------------------------------+
```

# Obter comprimento e tamanho de matrizes JSON
<a name="length-and-size"></a>

Para obter o comprimento e o tamanho de matrizes JSON, é possível usar as funções `json_array_length` e `json_size`.

## Exemplo: `json_array_length`
<a name="example-json-array-length"></a>

Para obter o tamanho de uma matriz codificada em JSON, use a função `json_array_length`.

```
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"name":
            "Bob Smith",
            "org":
            "legal",
            "projects": [{"name":"project1", "completed":false}]}'),
    (JSON '{"name": "Susan Smith",
            "org": "engineering",
            "projects": [{"name":"project2", "completed":true},
                         {"name":"project3", "completed":true}]}'),
    (JSON '{"name": "Jane Smith",
             "org": "finance",
             "projects": [{"name":"project2", "completed":true}]}')
  ) AS t (users)
)
SELECT
  json_extract_scalar(users, '$.name') as name,
  json_array_length(json_extract(users, '$.projects')) as count
FROM dataset
ORDER BY count DESC
```

Essa consulta retorna este resultado:

```
+---------------------+
| name        | count |
+---------------------+
| Susan Smith | 2     |
+---------------------+
| Bob Smith   | 1     |
+---------------------+
| Jane Smith  | 1     |
+---------------------+
```

## Exemplo: `json_size`
<a name="example-json-size"></a>

Para obter o tamanho de uma matriz ou de um objeto codificado em JSON, use a função `json_size` e especifique a coluna que contém a string JSON e a expressão `JSONPath` para a matriz ou o objeto.

```
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"name": "Bob Smith", "org": "legal", "projects": [{"name":"project1", "completed":false}]}'),
    (JSON '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project2", "completed":true},{"name":"project3", "completed":true}]}'),
    (JSON '{"name": "Jane Smith", "org": "finance", "projects": [{"name":"project2", "completed":true}]}')
  ) AS t (users)
)
SELECT
  json_extract_scalar(users, '$.name') as name,
  json_size(users, '$.projects') as count
FROM dataset
ORDER BY count DESC
```

Essa consulta retorna este resultado:

```
+---------------------+
| name        | count |
+---------------------+
| Susan Smith | 2     |
+---------------------+
| Bob Smith   | 1     |
+---------------------+
| Jane Smith  | 1     |
+---------------------+
```

# Solução de problemas de consultas JSON
<a name="json-troubleshooting"></a>

Para obter ajuda sobre como solucionar problemas com consultas relacionadas ao JSON, leia [Erros relacionados ao JSON](troubleshooting-athena.md#troubleshooting-athena-json-related-errors) ou acesse os seguintes recursos:
+ [Recebo mensagens de erro ao tentar ler dados JSON no Amazon Athena](https://aws.amazon.com/premiumsupport/knowledge-center/error-json-athena/)
+ [Como resolver o erro “HIVE\$1CURSOR\$1ERROR: A linha não é um objeto JSON válido - JSONException: Chave duplicada” ao ler arquivos do AWS Config no Athena?)](https://aws.amazon.com/premiumsupport/knowledge-center/json-duplicate-key-error-athena-config/)
+ [A consulta SELECT COUNT no Amazon Athena retorna somente um registro, embora o arquivo JSON de entrada tenha vários registros](https://aws.amazon.com/premiumsupport/knowledge-center/select-count-query-athena-json-records/)
+ [Como posso ver o arquivo de origem do Amazon S3 para uma linha em uma tabela do Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/find-s3-source-file-athena-table-row/)

Consulte também [Considerações e limitações das consultas SQL no Amazon Athena](other-notable-limitations.md).

# Usar Machine Learning (ML) com o Amazon Athena
<a name="querying-mlmodel"></a>

O Machine Learning (ML) com Amazon Athena permite que você use o Athena para escrever instruções SQL que executam inferências de Machine Learning (ML) por meio da IA do Amazon SageMaker AI. Esse recurso simplifica o acesso a modelos de ML para análise de dados, eliminando a necessidade de usar métodos de programação complexos para executar inferências.

Para usar ML com Athena, você define uma função ML com Athena usando a cláusula `USING EXTERNAL FUNCTION`. A função aponta para o endpoint do modelo do SageMaker AI que você deseja usar e especifica os nomes das variáveis e os tipos de dados para transmitir ao modelo. As cláusulas subsequentes na consulta fazem referência à função para passar os valores para o modelo. O modelo executa inferências com base nos valores que a consulta passa e retorna os resultados da inferência. Para obter mais informações sobre o SageMaker AI e como os endpoints de IA dele funcionam, consulte o [Guia do desenvolvedor do Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/).

Para ver um exemplo que usa ML com inferência do Athena e do SageMaker AI para detectar um valor anômalo em um conjunto de resultados, consulte o artigo [Detecting anomalous values by invoking the Amazon Athena machine learning inference function](https://aws.amazon.com/blogs/big-data/detecting-anomalous-values-by-invoking-the-amazon-athena-machine-learning-inference-function/) no Blog de Big Data da AWS.

## Considerações e limitações
<a name="considerations-and-limitations"></a>
+ **Regiões disponíveis**: o recurso de ML do Athena está disponível nas Regiões da AWS compatíveis com o mecanismo do Athena versão 2 ou posterior.
+ **O endpoint do modelo do SageMaker AI deve aceitar e retornar `text/csv`**: para obter mais informações sobre formatos de dados, consulte [Common data formats for inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html) no *Guia do desenvolvedor do Amazon SageMaker AI*.
+ **O Athena não envia cabeçalhos CSV**: se seu endpoint do SageMaker AI for `text/csv`, o manipulador de entrada não deverá presumir que a primeira linha da entrada seja um cabeçalho CSV. Como o Athena não envia cabeçalhos CSV, a saída retornada ao Athena conterá uma linha a menos do que o esperado pelo Athena e causará um erro. 
+ **Escalabilidade do endpoint do SageMaker AI**: garanta que a escala do endpoint do modelo do SageMaker AI mencionado seja aumentada na vertical o suficiente para chamadas do Athena ao endpoint. Para obter mais informações, consulte [Automatically scale SageMaker models](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html) no *Guia do desenvolvedor do Amazon SageMaker AI* e [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html) na *Referência de API do Amazon SageMaker AI*.
+ **Permissões do IAM**: para executar uma consulta que especifica uma função ML com Athena, a entidade principal do IAM que executa a consulta deve ter permissão para executar a ação `sagemaker:InvokeEndpoint` no endpoint do modelo do SageMaker AI mencionado. Para ter mais informações, consulte [Permitir acesso a ML com o Athena](machine-learning-iam-access.md).
+ **Não é possível usar as funções ML com Athena diretamente nas cláusulas `GROUP BY`**

**Topics**
+ [

## Considerações e limitações
](#considerations-and-limitations)
+ [

# Usar ML com sintaxe do Athena
](ml-syntax.md)
+ [

# Consultar exemplos de uso de clientes
](ml-videos.md)

# Usar ML com sintaxe do Athena
<a name="ml-syntax"></a>

A cláusula `USING EXTERNAL FUNCTION` especifica uma função ML com Athena ou várias funções que podem ser referenciadas por uma instrução `SELECT` subsequente na consulta. Você define o nome da função, os nomes das variáveis e os tipos de dados das variáveis e dos valores de retorno.

## Resumo
<a name="ml-synopsis"></a>

A sintaxe a seguir mostra uma cláusula `USING EXTERNAL FUNCTION` que especifica uma função ML com Athena.

```
USING EXTERNAL FUNCTION ml_function_name (variable1 data_type[, variable2 data_type][,...])
RETURNS data_type 
SAGEMAKER 'sagemaker_endpoint'
SELECT ml_function_name()
```

## Parâmetros
<a name="udf-parameters"></a>

**USING EXTERNAL FUNCTION *ml\$1function\$1name* (*variable1* *data\$1type*[, *variable2* *data\$1type*][,...])**  
*ml\$1function\$1name* define o nome da função, que pode ser usada nas cláusulas de consultas subsequentes. Cada *variable data\$1type* especifica uma variável nomeada e o tipo de dados correspondente que o modelo do SageMaker AI aceita como entrada. O tipo de dados especificado deve ser um permitido pelo Athena.

**RETURNS *tipo\$1dados***  
*data\$1type* especifica o tipo de dados SQL que *ml\$1function\$1name* retorna para a consulta como saída do modelo do SageMaker AI.

**SAGEMAKER '*sagemaker\$1endpoint*'**  
*sagemaker\$1endpoint* especifica o endpoint do modelo do SageMaker AI.

**SELECT [...] *ml\$1function\$1name*(*expression*) [...]**  
A consulta SELECT que transmite os valores para as variáveis de função e o modelo do SageMaker AI para retornar um resultado. *ml\$1function\$1name* especifica a função que já foi definida na consulta, seguida de uma *expression* que é avaliada para passar os valores. Os valores que são passados e retornados devem coincidir com os tipos de dados correspondentes especificados para a função na cláusula `USING EXTERNAL FUNCTION`.

## Exemplo
<a name="ml-examples"></a>

O exemplo a seguir demonstra uma consulta que usa ML com Athena.

**Example**  

```
USING EXTERNAL FUNCTION predict_customer_registration(age INTEGER) 
    RETURNS DOUBLE
    SAGEMAKER 'xgboost-2019-09-20-04-49-29-303' 
SELECT predict_customer_registration(age) AS probability_of_enrolling, customer_id 
     FROM "sampledb"."ml_test_dataset" 
     WHERE predict_customer_registration(age) < 0.5;
```

# Consultar exemplos de uso de clientes
<a name="ml-videos"></a>

Os vídeos a seguir, que usam a versão de previsualização do Machine Learning (ML) com o Amazon Athena AI, mostram como você pode usar o SageMaker com o Athena.

## Prever a rotatividade de clientes
<a name="ml-videos-predict-churn"></a>

O vídeo a seguir mostra como combinar o Athena com os recursos de machine learning do Amazon SageMaker AI para prever a rotatividade de clientes.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/CUHbSpekRVg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/CUHbSpekRVg)


## Detectar botnets
<a name="ml-videos-detect-botnets"></a>

O vídeo a seguir mostra como uma empresa usa o Amazon Athena e o Amazon SageMaker AI para detectar botnets.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0dUv-jCt2aw/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0dUv-jCt2aw)


# Consultar com funções definidas pelo usuário
<a name="querying-udf"></a>

As funções definidas pelo usuário (UDFs) no Amazon Athena permitem criar funções personalizadas para processar registros ou grupos de registros. Uma UDF aceita parâmetros, executa o trabalho e retorna um resultado.

Para usar uma UDF no Athena, escreva uma cláusula `USING EXTERNAL FUNCTION` antes de uma instrução `SELECT` em uma consulta SQL. A instrução `SELECT` faz referência à UDF e define as variáveis que são passadas para a UDF quando a consulta é executada. A consulta SQL invoca uma função do Lambda usando o runtime Java ao chamar a UDF. As UDFs são definidas dentro da função do Lambda como métodos em um pacote de implantação Java. É possível definir várias UDFs no mesmo pacote de implantação Java para uma função do Lambda. Você também especifica o nome da função do Lambda na cláusula `USING EXTERNAL FUNCTION`.

Você tem duas opções para implantar uma função do Lambda para UDFs do Athena. É possível implantar a função diretamente no Lambda ou usar o AWS Serverless Application Repository. Para encontrar as funções do Lambda existentes para UDFs, pesquise no AWS Serverless Application Repository público ou em seu repositório privado e implante-as no Lambda. Você também pode criar ou modificar o código-fonte Java, empacotá-lo em um arquivo JAR e implantá-lo usando o Lambda ou o AWS Serverless Application Repository. Para ver exemplos de código-fonte e pacotes Java para você começar, consulte [Criar e implantar uma UDF com o Lambda](udf-creating-and-deploying.md). Para obter mais informações sobre o Lambda, consulte o [Guia do desenvolvedor do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/). Consulte mais informações sobre o AWS Serverless Application Repository no [Guia do desenvolvedor do AWS Serverless Application Repository](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/).

Para ver um exemplo que usa UDFs com o Athena para traduzir e analisar texto, consulte o artigo no blog do Machine Learning da AWS: [Traduzir e analisar texto usando funções SQL com Amazon Athena, Amazon Translate e Amazon Comprehend](https://aws.amazon.com/blogs/machine-learning/translate-and-analyze-text-using-sql-functions-with-amazon-athena-amazon-translate-and-amazon-comprehend/) (em inglês) ou assista a [video](udf-videos.md#udf-videos-xlate).

Para ver um exemplo de uso de UDFs para estender consultas geoespaciais no Amazon Athena, consulte [Estenda consultas geoespaciais no Amazon Athena com UDFs e AWS Lambda](https://aws.amazon.com/blogs/big-data/extend-geospatial-queries-in-amazon-athena-with-udfs-and-aws-lambda/) no *Blog de Big Data da AWS*.

**Topics**
+ [

# Vídeos sobre UDFs no Athena
](udf-videos.md)
+ [

# Considerações e limitações
](udf-considerations-limitations.md)
+ [

# Consultar com uso da sintaxe de consulta de UDFs
](udf-query-syntax.md)
+ [

# Criar e implantar uma UDF com o Lambda
](udf-creating-and-deploying.md)

# Vídeos sobre UDFs no Athena
<a name="udf-videos"></a>

Assista aos vídeos a seguir para saber mais como usar as UDFs no Athena.

**Vídeo: Apresentação das funções definidas pelo usuário (UDFs) no Amazon Athena**  
O vídeo a seguir mostra como você pode usar as UDFs no Amazon Athena para editar informações confidenciais.

**nota**  
A sintaxe neste vídeo é pré-lançamento, mas os conceitos são os mesmos. Usar o Athena sem o grupo de trabalho `AmazonAthenaPreviewFunctionality`. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/AxJ6jP4Pfmo/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/AxJ6jP4Pfmo)


**Vídeo: Traduzir, analisar e editar campos de texto usando consultas SQL no Amazon Athena**  
O vídeo a seguir mostra como você pode usar as UDFs no Amazon Athena junto com outros Serviços da AWS para traduzir e analisar texto.

**nota**  
A sintaxe neste vídeo é pré-lançamento, mas os conceitos são os mesmos. Para obter a sintaxe correta, consulte a publicação relacionada no blog: [Traduzir, editar e analisar texto usando funções SQL com Amazon Athena, Amazon Translate e Amazon Comprehend](https://aws.amazon.com/blogs/machine-learning/translate-and-analyze-text-using-sql-functions-with-amazon-athena-amazon-translate-and-amazon-comprehend/) (em inglês) no *blog do Machine Learning da AWS*.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Od7rXG-WMO4/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Od7rXG-WMO4)


# Considerações e limitações
<a name="udf-considerations-limitations"></a>

Considere os seguintes pontos ao usar funções definidas pelo usuário (UDFs) no Athena.
+ **Funções integradas do Athena**: as funções integradas no Athena são desenvolvidas para ter alta performance. Recomendamos usar as funções integradas em lugar das UDFs quando possível. Para obter mais informações sobre funções integradas, consulte [Funções no Amazon Athena](functions.md).
+ **Somente UDFs escalares**: o Athena aceita somente UDFs escalares, que processam uma linha por vez e retornam um único valor de coluna. O Athena passa um lote de linhas, possivelmente em paralelo, para a UDF sempre que invoca o Lambda. Ao desenvolver UDFs e consultas, esteja ciente do possível impacto desse processamento no tráfego de rede.
+ **As funções do manipulador UDF usam o formato abreviado**: use o formato abreviado (não o formato completo), para suas funções UDF (por exemplo, `package.Class` em vez de `package.Class::method`). 
+ **Os métodos UDF devem estar em letras minúsculas**: os métodos UDF devem estar em letras minúsculas. Não é permitida a combinação de maiúsculas e minúsculas. 
+ **Os métodos UDF exigem parâmetros**: os métodos UDF devem ter pelo menos um parâmetro de entrada. A tentativa de invocar um UDF definido sem parâmetros de entrada causa uma exceção de runtime. Os UDFs são destinados a executar funções em registros de dados, mas um UDF sem argumentos não recebe dados, então ocorre uma exceção.
+ **Suporte ao runtime do Java**: atualmente, as UDFs do Athena são compatíveis com os runtimes do Java 8, Java 11 e Java 17 para o Lambda. Para obter mais informações, consulte [Construir funções do Lambda com Java](https://docs.aws.amazon.com/lambda/latest/dg/lambda-java.html) no *Guia do desenvolvedor do AWS Lambda*.
**nota**  
 Para o Java 17, você deve definir o valor da variável `JAVA_TOOL_OPTIONS` do ambiente como `--add-opens=java.base/java.nio=ALL-UNNAMED` em seu Lambda. 
+ **Permissões do IAM**: para executar e criar instruções de consulta de UDF no Athena, o principal do IAM que executa a consulta deve ter permissão para executar ações além das funções do Athena. Para obter mais informações, consulte [Permitir acesso a UDFs do Athena: exemplos de políticas](udf-iam-access.md).
+ **Cotas do Lambda**: as cotas do Lambda se aplicam às UDFs. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ **Filtragem em nível de linha** – A filtragem em nível de linha do Lake Formation não é compatível com UDFs. 
+ **Visualizações**: não é possível usar visualizações com UDFs. 
+ **Problemas conhecidos**: para acessar a lista mais recente de problemas conhecidos, consulte [Limitations and issues](https://github.com/awslabs/aws-athena-query-federation/wiki/Limitations_And_Issues) (Limitações e problemas) na seção awslabs/aws-athena-query-federation do GitHub.

# Consultar com uso da sintaxe de consulta de UDFs
<a name="udf-query-syntax"></a>

A cláusula `USING EXTERNAL FUNCTION` especifica uma UDF ou várias UDFs que podem ser referenciadas por uma instrução `SELECT` subsequente na consulta. Você precisa do nome do método da UDF e do nome da função do Lambda que hospeda a UDF. No lugar do nome da função do Lambda, você pode usar o ARN do Lambda. Em cenários entre contas, o ARN do Lambda é obrigatório.

## Resumo
<a name="udf-synopsis"></a>

```
USING EXTERNAL FUNCTION UDF_name(variable1 data_type[, variable2 data_type][,...])
RETURNS data_type
LAMBDA 'lambda_function_name_or_ARN'
[, EXTERNAL FUNCTION UDF_name2(variable1 data_type[, variable2 data_type][,...]) 
RETURNS data_type 
LAMBDA 'lambda_function_name_or_ARN'[,...]]
SELECT  [...] UDF_name(expression) [, UDF_name2(expression)] [...]
```

## Parâmetros
<a name="udf-parameters"></a>

**USING EXTERNAL FUNCTION *UDF\$1name*(*variable1* *data\$1type*[, *variable2* *data\$1type*][,...])**  
*UDF\$1name* especifica o nome da UDF, que deve corresponder a um método Java com a função do Lambda referenciada. Cada *variable data\$1type* especifica uma variável nomeada e o tipo de dados correspondente que a UDF aceita como entrada. O *data\$1type* deve ser um dos tipos de dados do Athena permitidos listados na tabela a seguir e mapear para o tipo de dados Java correspondente.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/udf-query-syntax.html)

**RETURNS *tipo\$1dados***  
`data_type`O especifica o tipo de dados SQL que a UDF retorna como saída. Os tipos de dados do Athena listados na tabela acima são permitidos. Para o tipo de dados `DECIMAL`, use a sintaxe `RETURNS DECIMAL(precision, scale)` em que *precision* e *scale* são inteiros.

**LAMBDA '*lambda\$1function*'**  
*lambda\$1function* especifica o nome da função do Lambda que será invocada ao executar a UDF.

**SELECT [...] *UDF\$1name*(*expression*) [...]**  
A consulta `SELECT` que passa os valores para a UDF e retorna um resultado. *UDF\$1name* especifica a UDF que será usada, seguida de uma *expressão* que é avaliado para passar os valores. Os valores que são passados e retornados devem coincidir com os tipos de dados correspondentes especificados para a UDF na cláusula `USING EXTERNAL FUNCTION`.

### Exemplos
<a name="udf-examples"></a>

Para ver exemplos de consultas baseadas no código [AthenaUDFHandler.java](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-udfs/src/main/java/com/amazonaws/athena/connectors/udfs/AthenaUDFHandler.java) no GitHub, consulte a página [Amazon Athena UDF Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-udfs) (Conector de UDF do Amazon Athena). 

# Criar e implantar uma UDF com o Lambda
<a name="udf-creating-and-deploying"></a>

Para criar uma UDF personalizada, crie uma nova classe Java ao estender a classe `UserDefinedFunctionHandler`. O código-fonte para [UserDefinedFunctionHandler.java](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/handlers/UserDefinedFunctionHandler.java) no SDK está disponível no GitHub no [repositório](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk) awslabs/aws-athena-query-federation/athena-federation-sdk, junto com um [exemplo de implementações de UDF](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-udfs) que você pode analisar e modificar para criar uma UDF personalizada.

As etapas nessa seção demonstram a criação e compilação de um arquivo Jar da UDF usando [Apache Maven](https://maven.apache.org/index.html) da linha de comando e uma implantação.

Execute as etapas a seguir para criar uma UDF personalizada para o Athena usando o Maven

1. [Clonar o SDK e preparar o ambiente de desenvolvimento](#udf-create-install-sdk-prep-environment)

1. [Criar um projeto Maven](#create-maven-project)

1. [Adicionar dependências e plugins ao projeto Maven](#udf-add-maven-dependencies)

1. [Escrever código Java para UDFs](#udf-write-java)

1. [Compilar o arquivo JAR](#udf-create-package-jar)

1. [Implantar o JAR no AWS Lambda](#udf-create-deploy)

## Clonar o SDK e preparar o ambiente de desenvolvimento
<a name="udf-create-install-sdk-prep-environment"></a>

Antes de começar, certifique-se de que o git esteja instalado no sistema usando `sudo yum install git -y`.

**Como instalar o Query Federation SDK da AWS**
+ Digite o seguinte na linha de comando para clonar o repositório do SDK. Este repositório inclui o SDK, exemplos e um conjunto de conectores de fonte de dados. Para obter mais informações sobre conectores de fonte de dados, consulte [Usar a consulta federada do Amazon Athena](federated-queries.md).

  ```
  git clone https://github.com/awslabs/aws-athena-query-federation.git
  ```

**Como instalar pré-requisitos para este procedimento**

Se você trabalha em uma máquina de desenvolvimento que já tem o Apache Maven, a AWS CLI e a ferramenta de compilação do AWS Serverless Application Model instalados, pode ignorar esta etapa.

1. Na raiz do diretório `aws-athena-query-federation` criado ao executar a clonagem, execute o script [prepare\$1dev\$1env.sh](https://github.com/awslabs/aws-athena-query-federation/blob/master/tools/prepare_dev_env.sh) que prepara o ambiente de desenvolvimento.

1. Atualize o shell para fornecer novas variáveis criadas pelo processo de instalação ou reinicie a sessão do terminal.

   ```
   source ~/.profile
   ```
**Importante**  
Se você ignorar essa etapa, receberá erros posteriormente sobre a AWS CLI ou a ferramenta de compilação do AWS SAM não conseguir publicar a função do Lambda.

## Criar um projeto Maven
<a name="create-maven-project"></a>

Execute o seguinte comando para criar o projeto Maven. Substitua *groupId* pelo ID exclusivo da organização e substitua *my-athena-udf* pelo nome do aplicativo. Para obter mais informações, consulte [Como criar meu primeiro projeto Maven?](https://maven.apache.org/guides/getting-started/index.html#How_do_I_make_my_first_Maven_project) na documentação Apache Maven.

```
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=groupId \
-DartifactId=my-athena-udfs
```

## Adicionar dependências e plugins ao projeto Maven
<a name="udf-add-maven-dependencies"></a>

Adicione as configurações a seguir ao arquivo `pom.xml` do projeto Maven. Para ver um exemplo, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-udfs/pom.xml) no GitHub.

```
<properties>
    <aws-athena-federation-sdk.version>2022.47.1</aws-athena-federation-sdk.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-athena-federation-sdk</artifactId>
        <version>${aws-athena-federation-sdk.version}</version>
    </dependency>
</dependencies>
    
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <configuration>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
```

## Escrever código Java para UDFs
<a name="udf-write-java"></a>

Crie uma nova classe ao estender [UserDefinedFunctionHandler.java](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/handlers/UserDefinedFunctionHandler.java). Escreva as UDFs dentro da classe.

No exemplo a seguir, dois métodos Java para UDFs, `compress()` e `decompress()`, são criados dentro da classe `MyUserDefinedFunctions`.

```
*package *com.mycompany.athena.udfs;

public class MyUserDefinedFunctions
        extends UserDefinedFunctionHandler
{
    private static final String SOURCE_TYPE = "MyCompany";

    public MyUserDefinedFunctions()
    {
        super(SOURCE_TYPE);
    }

    /**
     * Compresses a valid UTF-8 String using the zlib compression library.
     * Encodes bytes with Base64 encoding scheme.
     *
     * @param input the String to be compressed
     * @return the compressed String
     */
    public String compress(String input)
    {
        byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);

        // create compressor
        Deflater compressor = new Deflater();
        compressor.setInput(inputBytes);
        compressor.finish();

        // compress bytes to output stream
        byte[] buffer = new byte[4096];
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(inputBytes.length);
        while (!compressor.finished()) {
            int bytes = compressor.deflate(buffer);
            byteArrayOutputStream.write(buffer, 0, bytes);
        }

        try {
            byteArrayOutputStream.close();
        }
        catch (IOException e) {
            throw new RuntimeException("Failed to close ByteArrayOutputStream", e);
        }

        // return encoded string
        byte[] compressedBytes = byteArrayOutputStream.toByteArray();
        return Base64.getEncoder().encodeToString(compressedBytes);
    }

    /**
     * Decompresses a valid String that has been compressed using the zlib compression library.
     * Decodes bytes with Base64 decoding scheme.
     *
     * @param input the String to be decompressed
     * @return the decompressed String
     */
    public String decompress(String input)
    {
        byte[] inputBytes = Base64.getDecoder().decode((input));

        // create decompressor
        Inflater decompressor = new Inflater();
        decompressor.setInput(inputBytes, 0, inputBytes.length);

        // decompress bytes to output stream
        byte[] buffer = new byte[4096];
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(inputBytes.length);
        try {
            while (!decompressor.finished()) {
                int bytes = decompressor.inflate(buffer);
                if (bytes == 0 && decompressor.needsInput()) {
                    throw new DataFormatException("Input is truncated");
                }
                byteArrayOutputStream.write(buffer, 0, bytes);
            }
        }
        catch (DataFormatException e) {
            throw new RuntimeException("Failed to decompress string", e);
        }

        try {
            byteArrayOutputStream.close();
        }
        catch (IOException e) {
            throw new RuntimeException("Failed to close ByteArrayOutputStream", e);
        }

        // return decoded string
        byte[] decompressedBytes = byteArrayOutputStream.toByteArray();
        return new String(decompressedBytes, StandardCharsets.UTF_8);
    }
}
```

## Compilar o arquivo JAR
<a name="udf-create-package-jar"></a>

Execute `mvn clean install` para compilar o projeto. Após a compilação com êxito, um arquivo JAR é criado na pasta `target` do projeto nomeado como `artifactId-version.jar`, no qual *artifactId* é o nome fornecido por você no projeto Maven, por exemplo, `my-athena-udfs`.

## Implantar o JAR no AWS Lambda
<a name="udf-create-deploy"></a>

Você tem duas opções para implantar o código no Lambda:
+ Implantar usando AWS Serverless Application Repository (recomendado)
+ Criar uma função do Lambda do arquivo JAR

### Opção 1: implantar no AWS Serverless Application Repository
<a name="udf-create-deploy-sar"></a>

Ao implantar o arquivo JAR no AWS Serverless Application Repository, você cria um arquivo YAML de modelo do AWS SAM que representa a arquitetura do aplicativo. Em seguida, você especifica esse arquivo YAML e um bucket do Amazon S3 no qual os artefatos da aplicação são carregados e disponibilizados para o AWS Serverless Application Repository. O procedimento abaixo usa o script [publish.sh](https://github.com/awslabs/aws-athena-query-federation/blob/master/tools/publish.sh) localizado no diretório `athena-query-federation/tools` do Athena Query Federation SDK clonado anteriormente.

Para obter mais informações e conhecer os requisitos, consulte [Publicar aplicações](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-publishing-applications.html) no *Guia do desenvolvedor do AWS Serverless Application Repository*, [Conceitos de modelo do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html) no *Guia do desenvolvedor do AWS Serverless Application Model* e [Publicar aplicações com tecnologia sem servidor usando a CLI do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html).

O exemplo a seguir demonstra parâmetros em um arquivo YAML. Adicione parâmetros similares ao arquivo YAML e salve-o no diretório de projetos. Consulte [athena-udf.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-udfs/athena-udfs.yaml) no GitHub para ver o exemplo completo.

```
Transform: 'AWS::Serverless-2016-10-31'
Metadata:
  'AWS::ServerlessRepo::Application':
    Name: MyApplicationName
    Description: 'The description I write for my application'
    Author: 'Author Name'
    Labels:
      - athena-federation
    SemanticVersion: 1.0.0
Parameters:
  LambdaFunctionName:
    Description: 'The name of the Lambda function that will contain your UDFs.'
    Type: String
  LambdaTimeout:
    Description: 'Maximum Lambda invocation runtime in seconds. (min 1 - 900 max)'
    Default: 900
    Type: Number
  LambdaMemory:
    Description: 'Lambda memory in MB (min 128 - 3008 max).'
    Default: 3008
    Type: Number
Resources:
  ConnectorConfig:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: !Ref LambdaFunctionName
      Handler: "full.path.to.your.handler. For example, com.amazonaws.athena.connectors.udfs.MyUDFHandler"
      CodeUri: "Relative path to your JAR file. For example, ./target/athena-udfs-1.0.jar"
      Description: "My description of the UDFs that this Lambda function enables."
      Runtime: java8
      Timeout: !Ref LambdaTimeout
      MemorySize: !Ref LambdaMemory
```

Copie o script `publish.sh` para o diretório de projetos no qual você salvou o arquivo YAML e execute o comando:

```
./publish.sh MyS3Location MyYamlFile
```

Por exemplo, se o local do bucket for `s3://amzn-s3-demo-bucket/mysarapps/athenaudf` e o arquivo YAML for salvo como `my-athena-udfs.yaml`:

```
./publish.sh amzn-s3-demo-bucket/mysarapps/athenaudf my-athena-udfs
```

**Como criar uma função do Lambda**

1. Abra o console do Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), escolha **Create function** (Criar função) e selecione **Browse serverless app repository** (Procurar repositório de aplicações sem servidor)

1. Selecione **Private applications (Aplicativos privados)**, localize o aplicativo na lista ou procure usando palavras-chave e selecione-o.

1. Verifique, forneça detalhes do aplicativo e selecione **Deploy (Implantar).**

   Agora você pode usar os nomes dos métodos definidos no arquivo JAR da função do Lambda como UDFs no Athena.

### Opção 2: criar uma função do Lambda diretamente
<a name="udf-create-deploy-lambda"></a>

Você também pode criar uma função do Lambda diretamente usando o console ou a AWS CLI. O exemplo a seguir demonstra o uso do comando da CLI `create-function` do Lambda. 

```
aws lambda create-function \
 --function-name MyLambdaFunctionName \
 --runtime java8 \
 --role arn:aws:iam::1234567890123:role/my_lambda_role \
 --handler com.mycompany.athena.udfs.MyUserDefinedFunctions \
 --timeout 900 \
 --zip-file fileb://./target/my-athena-udfs-1.0-SNAPSHOT.jar
```

# Consulta entre regiões
<a name="querying-across-regions"></a>

O Athena oferece suporte à consulta de dados do Amazon S3 em uma Região da AWS diferente da região na qual você está usando o Athena. A consulta entre regiões pode ser uma boa opção quando não é prático ou permitido mover dados, ou quando você deseja consultar dados em várias regiões. Mesmo que o Athena não esteja disponível em uma determinada região, será possível consultar os dados nela a partir de outra região na qual o Athena esteja disponível.

Para consultar dados em uma região, sua conta deve estar habilitada nessa região, mesmo que os dados do Amazon S3 não pertençam à sua conta. Para algumas regiões, como Leste dos EUA (Ohio), seu acesso à região é habilitado automaticamente quando sua conta é criada. Outras regiões exigem a opção de inclusão (status opt-in) da conta antes que você possa usá-la. Para obter a lista de regiões que exigem o status opt-in, consulte [Regiões disponíveis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions) no *Guia do usuário do Amazon EC2*. Para obter instruções específicas sobre como optar por uma região, consulte [Gerenciar regiões da AWS](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) no *Referência geral da Amazon Web Services*.

## Considerações e limitações
<a name="querying-across-regions-considerations-and-limitations"></a>
+ **Permissões de acesso a dados**: para consultar com êxito dados do Amazon S3 no Athena entre regiões, sua conta deve ter permissões para ler os dados. Se os dados que você deseja consultar pertencerem a outra conta, essa outra conta deverá lhe conceder acesso ao local do Amazon S3 que contém os dados.
+ **Cobranças de transferência de dados**: aplicam-se cobranças de transferência de dados do Amazon S3 para consultas entre regiões. A execução de uma consulta pode fazer com que mais dados sejam transferidos do que o tamanho do conjunto de dados. É recomendável que você comece testando suas consultas em um subconjunto de dados e analisando os custos no [AWS Cost Explorer](https://aws.amazon.com/aws-cost-management/aws-cost-explorer/).
+ **AWS Glue**: você pode usar o AWS Glue entre regiões. Podem ser aplicadas cobranças adicionais para tráfego do AWS Glue entre regiões. Para obter mais informações, consulte [Criar conexões do AWS Glue entre contas e entre regiões](https://aws.amazon.com/blogs/big-data/create-cross-account-and-cross-region-aws-glue-connections/) no *AWS Big Data Blog*.
+ **Opções de criptografia do Amazon S3**: há suporte para as opções de criptografia SSE-S3 e SSE-KMS nas consultas entre regiões. Não há suporte para CSE-KMS. Para obter mais informações, consulte [Opções de criptografia permitidas do Amazon S3](encryption.md#encryption-options-S3-and-Athena).
+ **Consultas federadas**: não há suporte para o uso de consultas federadas em Regiões da AWS. 

Desde que as condições acima sejam atendidas, você pode criar uma tabela do Athena que aponte para o valor `LOCATION` especificado e consultar os dados de forma transparente. Não é necessária nenhuma sintaxe especial. Para obter mais informações sobre criação de tabelas, consulte [Criar tabelas no Athena](creating-tables.md).

# Consultar o AWS Glue Data Catalog
<a name="querying-glue-catalog"></a>

Como o AWS Glue Data Catalog é usado por muitos Serviços da AWS como repositório central de metadados, você pode consultar metadados do catálogo de dados. Para fazer isso, use as consultas SQL no Athena. Você pode usar o Athena para consultar os metadados do catálogo do AWS Glue, como bancos de dados, tabelas, partições e colunas.

Para acessar os metadados do catálogo do AWS Glue, consulte o banco de dados `information_schema` no backend do Athena. As consultas de exemplo neste tópico mostram como usar o Athena para consultar os metadados do catálogo do AWS Glue em casos de uso comuns.

## Considerações e limitações
<a name="querying-glue-catalog-considerations-limitations"></a>
+ Em vez de consultar o banco de dados `information_schema`, é possível usar [comandos DDL](ddl-reference.md) individuais do Apache Hive para extrair informações de metadados para bancos de dados, tabelas, exibições, partições e colunas específicos do Athena. No entanto, a saída está em um formato não tabular.
+ As consultas de `information_schema` apresentam melhor performance se você tiver uma quantidade pequena a moderada de metadados do AWS Glue. Pode haver erros se você tiver uma grande quantidade de metadados.
+ Não é possível usar `CREATE VIEW` para criar uma exibição no banco de dados `information_schema`. 

**Topics**
+ [

## Considerações e limitações
](#querying-glue-catalog-considerations-limitations)
+ [

# Listar bancos de dados e pesquisar em um banco de dados especificado
](querying-glue-catalog-querying-available-databases-including-rdbms.md)
+ [

# Listar tabelas em um banco de dados especificado e pesquisar uma tabela por nome
](querying-glue-catalog-listing-tables.md)
+ [

# Listar partições de uma tabela específica
](querying-glue-catalog-listing-partitions.md)
+ [

# Listar ou pesquisar colunas de uma tabela ou visualização especificada
](querying-glue-catalog-listing-columns.md)
+ [

# Listar colunas que tabelas específicas têm em comum
](querying-glue-catalog-listing-columns-in-common.md)
+ [

# Listar todas as colunas de todas as tabelas
](querying-glue-catalog-listing-all-columns-for-all-tables.md)

# Listar bancos de dados e pesquisar em um banco de dados especificado
<a name="querying-glue-catalog-querying-available-databases-including-rdbms"></a>

Os exemplos nesta seção mostram como listar os bancos de dados em metadados por nome de esquema.

**Example – Listar bancos de dados**  
A consulta de exemplo a seguir lista os bancos de dados da tabela `information_schema.schemata`.  

```
SELECT schema_name
FROM   information_schema.schemata
LIMIT  10;
```
A tabela a seguir exibe os resultados do exemplo.  


****  

|  |  | 
| --- |--- |
| 6 | alb-databas1 | 
| 7 | alb\$1original\$1cust | 
| 8 | alblogsdatabase | 
| 9 | athena\$1db\$1test | 
| 10 | athena\$1ddl\$1db | 

**Example – Pesquisar em um banco de dados especificado**  
Na consulta de exemplo a seguir, `rdspostgresql` é um banco de dados de exemplo.  

```
SELECT schema_name
FROM   information_schema.schemata
WHERE  schema_name = 'rdspostgresql'
```
A tabela a seguir exibe os resultados do exemplo.  


****  

|  | schema\$1name | 
| --- | --- | 
| 1 | rdspostgresql | 

# Listar tabelas em um banco de dados especificado e pesquisar uma tabela por nome
<a name="querying-glue-catalog-listing-tables"></a>

Para listar os metadados de tabelas, você pode consultar um esquema ou nome de tabela.

**Example – Listar tabelas por esquema**  
A consulta a seguir lista tabelas que usam o esquema de tabela `rdspostgresql`.  

```
SELECT table_schema,
       table_name,
       table_type
FROM   information_schema.tables
WHERE  table_schema = 'rdspostgresql'
```
A tabela a seguir mostra um exemplo de resultado.  


****  

|  | table\$1schema | table\$1name | table\$1type | 
| --- | --- | --- | --- | 
| 1 | rdspostgresql | rdspostgresqldb1\$1public\$1account | BASE TABLE | 

**Example – Pesquisar uma tabela por nome**  
A consulta a seguir obtém informações de metadados para a tabela `athena1`.  

```
SELECT table_schema,
       table_name,
       table_type
FROM   information_schema.tables
WHERE  table_name = 'athena1'
```
A tabela a seguir mostra um exemplo de resultado.  


****  

|  | table\$1schema | table\$1name | table\$1type | 
| --- | --- | --- | --- | 
| 1 | padrão | athena1 | BASE TABLE | 

# Listar partições de uma tabela específica
<a name="querying-glue-catalog-listing-partitions"></a>

Você pode usar `SHOW PARTITIONS table_name` para listar as partições de uma tabela especificada, como no exemplo a seguir.

```
SHOW PARTITIONS cloudtrail_logs_test2
```

Você também pode usar uma consulta de metadados `$partitions` para listar os números e os valores de partição de uma tabela específica.

**Example — Consultar as partições de uma tabela usando a sintaxe \$1partitions**  
A consulta de exemplo a seguir lista as partições da tabela `cloudtrail_logs_test2` usando a sintaxe `$partitions`.  

```
SELECT * FROM default."cloudtrail_logs_test2$partitions" ORDER BY partition_number
```
A tabela a seguir exibe os resultados do exemplo.  


****  

|  | table\$1catalog | table\$1schema | table\$1name | Ano | Mês | Dia | 
| --- | --- | --- | --- | --- | --- | --- | 
| 1 | awsdatacatalog | padrão | cloudtrail\$1logs\$1test2 | 2020 | 08 | 10 | 
| 2 | awsdatacatalog | padrão | cloudtrail\$1logs\$1test2 | 2020 | 08 | 11 | 
| 3 | awsdatacatalog | padrão | cloudtrail\$1logs\$1test2 | 2020 | 08 | 12 | 

# Listar ou pesquisar colunas de uma tabela ou visualização especificada
<a name="querying-glue-catalog-listing-columns"></a>

Você pode listar todas as colunas de uma tabela, todas as colunas de uma exibição ou pesquisar uma coluna por nome em um banco de dados e tabela especificados.

Para listar as colunas, use uma consulta `SELECT *`. Na cláusula `FROM`, especifique `information_schema.columns`. Na cláusula `WHERE`, use `table_schema='database_name'` para especificar o banco de dados e `table_name = 'table_name'` para especificar a tabela ou a visualização que tem as colunas que você deseja listar.

**Example – Listar todas as colunas de uma tabela especificada**  
A consulta de exemplo a seguir lista todas as colunas da tabela `rdspostgresqldb1_public_account`.  

```
SELECT *
FROM   information_schema.columns
WHERE  table_schema = 'rdspostgresql'
       AND table_name = 'rdspostgresqldb1_public_account'
```
A tabela a seguir exibe os resultados do exemplo.  


****  

|  | table\$1catalog | table\$1schema | table\$1name | column\$1name | ordinal\$1position | column\$1default | is\$1nullable | data\$1type | comment | extra\$1info | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 1 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | password | 1 |  | SIM | varchar |  |  | 
| 2 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | user\$1id | 2 |  | SIM | integer |  |  | 
| 3 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | created\$1on | 3 |  | SIM | timestamp |  |  | 
| 4 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | last\$1login | 4 |  | SIM | timestamp |  |  | 
| 5 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | email | 5 |  | SIM | varchar |  |  | 
| 6 | awsdatacatalog | rdspostgresql | rdspostgresqldb1\$1public\$1account | username | 6 |  | SIM | varchar |  |  | 

**Example – Listar as colunas de uma visualização especificada**  
A consulta de exemplo a seguir lista todas as colunas no banco de dados `default` para a exibição `arrayview`.  

```
SELECT *
FROM   information_schema.columns
WHERE  table_schema = 'default'
       AND table_name = 'arrayview'
```
A tabela a seguir exibe os resultados do exemplo.  


****  

|  | table\$1catalog | table\$1schema | table\$1name | column\$1name | ordinal\$1position | column\$1default | is\$1nullable | data\$1type | comment | extra\$1info | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 1 | awsdatacatalog | padrão | arrayview | searchdate | 1 |  | SIM | varchar |  |  | 
| 2 | awsdatacatalog | padrão | arrayview | sid | 2 |  | SIM | varchar |  |  | 
| 3 | awsdatacatalog | padrão | arrayview | btid | 3 |  | SIM | varchar |  |  | 
| 4 | awsdatacatalog | padrão | arrayview | p | 4 |  | SIM | varchar |  |  | 
| 5 | awsdatacatalog | padrão | arrayview | infantprice | 5 |  | SIM | varchar |  |  | 
| 6 | awsdatacatalog | padrão | arrayview | sump | 6 |  | SIM | varchar |  |  | 
| 7 | awsdatacatalog | padrão | arrayview | journeymaparray | 7 |  | SIM | array(varchar) |  |  | 

**Example – Pesquisar uma coluna por nome em uma tabela e um banco de dados especificados**  
A consulta de exemplo a seguir procura metadados para a coluna `sid` na exibição `arrayview` do banco de dados `default`.  

```
SELECT *
FROM   information_schema.columns
WHERE  table_schema = 'default'
       AND table_name = 'arrayview' 
       AND column_name='sid'
```
A tabela a seguir mostra um exemplo de resultado.  


****  

|  | table\$1catalog | table\$1schema | table\$1name | column\$1name | ordinal\$1position | column\$1default | is\$1nullable | data\$1type | comment | extra\$1info | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 1 | awsdatacatalog | padrão | arrayview | sid | 2 |  | SIM | varchar |  |  | 

# Listar colunas que tabelas específicas têm em comum
<a name="querying-glue-catalog-listing-columns-in-common"></a>

É possível listar as colunas que tabelas específicas têm em comum em um banco de dados.
+ Use a sintaxe `SELECT column_name FROM information_schema.columns`.
+ Para a cláusula `WHERE`, use a sintaxe `WHERE table_name IN ('table1', 'table2')`.

**Example : listagem de colunas comuns para duas tabelas no mesmo banco de dados**  
O exemplo de consulta a seguir lista as colunas que as tabelas `table1` e `table2` têm em comum.  

```
SELECT column_name
FROM information_schema.columns
WHERE table_name IN ('table1', 'table2')
GROUP BY column_name
HAVING COUNT(*) > 1;
```

# Listar todas as colunas de todas as tabelas
<a name="querying-glue-catalog-listing-all-columns-for-all-tables"></a>

É possível listar todas as colunas de todas as tabelas no `AwsDataCatalog` ou para todas as tabelas em um banco de dados específico no `AwsDataCatalog`.
+ Para listar todas as colunas de todos os bancos de dados no `AwsDataCatalog`, use a consulta `SELECT * FROM information_schema.columns`.
+ Para restringir os resultados a um banco de dados específico, use `table_schema='database_name'` na cláusula `WHERE`.

**Example — Listagem de todas as colunas de todas as tabelas em um banco de dados específico**  
A consulta de exemplo a seguir lista todas as colunas de todas as tabelas no banco de dados `webdata`.  

```
SELECT * FROM information_schema.columns WHERE table_schema = 'webdata'            
```

# Consultar logs do AWS service (Serviço da AWS)
<a name="querying-aws-service-logs"></a>

Esta seção inclui vários procedimentos para usar o Amazon Athena para consultar conjuntos de dados conhecidos, como os logs do AWS CloudTrail, Amazon CloudFront, Classic Load Balancer, Application Load Balancer, Network Load Balancer, e os logs de fluxo do Amazon VPC.

As tarefas nesta seção usam o console do Athena, mas você também pode usar outras ferramentas como o [driver JDBC do Athena](connect-with-jdbc.md), a [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/athena/) ou a [referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/).

Para obter informações sobre como usar o AWS CloudFormation para criar automaticamente tabelas de log de serviço, partições e consultas de exemplo da AWS service (Serviço da AWS) no Athena, consulte [Automatizar a criação de tabelas de logs de serviço da AWS service (Serviço da AWS) e consultá-las com o Amazon Athena](https://aws.amazon.com/blogs/big-data/automating-aws-service-logs-table-creation-and-querying-them-with-amazon-athena/) no Blog de Big Data da AWS. Para obter informações sobre como usar uma biblioteca Python para o AWS Glue para criar um framework comum de processamento de logs de AWS service (Serviço da AWS) e consultá-los no Athena, consulte [Consulta com facilidade de logs de AWS service (Serviço da AWS) usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/easily-query-aws-service-logs-using-amazon-athena/).

Os tópicos nesta seção pressupõem que você configurou as permissões apropriadas para acessar o Athena e o bucket do Amazon S3 no qual os dados a serem consultados devem residir. Para ter mais informações, consulte [Acesso de configuração, administrativo e programático](setting-up.md) e [Conceitos básicos](getting-started.md).

**Topics**
+ [Application Load Balancer](application-load-balancer-logs.md)
+ [Elastic Load Balancing](elasticloadbalancer-classic-logs.md)
+ [CloudFront](cloudfront-logs.md)
+ [CloudTrail](cloudtrail-logs.md)
+ [Amazon EMR](emr-logs.md)
+ [Global Accelerator](querying-global-accelerator-flow-logs.md)
+ [GuardDuty](querying-guardduty.md)
+ [Network Firewall](querying-network-firewall-logs.md)
+ [Network Load Balancer](networkloadbalancer-classic-logs.md)
+ [Route 53](querying-r53-resolver-logs.md)
+ [Amazon SES](querying-ses-logs.md)
+ [Amazon VPC](vpc-flow-logs.md)
+ [AWS WAF](waf-logs.md)

# Consultar logs do Application Load Balancer
<a name="application-load-balancer-logs"></a>

O Application Load Balancer é uma opção de balanceamento de carga do Elastic Load Balancing que habilita a distribuição de tráfego em uma implantação de microsserviços usando contêineres. Consultar logs do Application Load Balancer permite consultar a origem do tráfego, a latência e os bytes transferidos de e para instâncias do Elastic Load Balancing e aplicativos de backend. Para obter mais informações, consulte [Logs de acesso para seu Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) e [Logs de conexão para seu Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) no *Guia do usuário para Application Load Balancers*.

## Pré-requisitos
<a name="application-load-balancer-logs-prerequisites"></a>
+ Habilite o [registro de acesso em log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) ou [registro de conexão em log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) para permitir que os logs do Application Load Balancer sejam salvos no seu bucket do Amazon S3.
+ Um banco de dados para conter a tabela que você criará para o Athena. Para criar um banco de dados, é possível usar o Athena ou o console do AWS Glue. Para obter mais informações, consulte [Criar bancos de dados no Athena](creating-databases.md) neste guia ou [Trabalhar com banco de dados no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-databases.html), no *Guia do desenvolvedor do AWS Glue*. 

**Topics**
+ [

## Pré-requisitos
](#application-load-balancer-logs-prerequisites)
+ [

# Criar a tabela para logs de acesso do ALB
](create-alb-access-logs-table.md)
+ [

# Criar a tabela para logs de acesso do ALB no Athena com uso da projeção de partições
](create-alb-access-logs-table-partition-projection.md)
+ [

# Exemplos de consultas para logs de acesso do ALB
](query-alb-access-logs-examples.md)
+ [

# Criar a tabela para logs de conexão do ALB
](create-alb-connection-logs-table.md)
+ [

# Criar a tabela para logs de conexão do ALB no Athena com uso da projeção de partições
](create-alb-connection-logs-table-partition-projection.md)
+ [

# Exemplo de consultas para logs de conexão do ALB
](query-alb-connection-logs-examples.md)
+ [

# Recursos adicionais
](application-load-balancer-logs-additional-resources.md)

# Criar a tabela para logs de acesso do ALB
<a name="create-alb-access-logs-table"></a>

1. Copie e cole a declaração `CREATE TABLE` a seguir em um editor de consulta no console do Athena e modifique-a conforme necessário para seus próprios requisitos de entrada de log. Para obter mais informações sobre os conceitos básicos do Athena, consulte [Conceitos básicos](getting-started.md). Substitua o caminho na cláusula `LOCATION` pela localização da pasta de log de acesso do Amazon S3. Para obter mais informações sobre o local do arquivo de log de acesso, consulte [Arquivos de log de acesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) no *Guia do usuário para Application Load Balancers*.

   Para obter informações sobre cada campo do arquivo de log, consulte [Entradas do log de acesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format) no *Guia do usuário para Application Load Balancers*.
**nota**  
A declaração de exemplo `CREATE TABLE` a seguir inclui as colunas `classification`, `classification_reason` e `conn_trace_id` (“ID de rastreabilidade” ou TID) adicionadas recentemente. Para criar uma tabela dos logs de acesso do Application Load Balancer que não contenham essas entradas, remova as colunas correspondentes da instrução `CREATE TABLE` e modifique a expressão regex de acordo. 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs (
               type string,
               time string,
               elb string,
               client_ip string,
               client_port int,
               target_ip string,
               target_port int,
               request_processing_time double,
               target_processing_time double,
               response_processing_time double,
               elb_status_code int,
               target_status_code string,
               received_bytes bigint,
               sent_bytes bigint,
               request_verb string,
               request_url string,
               request_proto string,
               user_agent string,
               ssl_cipher string,
               ssl_protocol string,
               target_group_arn string,
               trace_id string,
               domain_name string,
               chosen_cert_arn string,
               matched_rule_priority string,
               request_creation_time string,
               actions_executed string,
               redirect_url string,
               lambda_error_reason string,
               target_port_list string,
               target_status_code_list string,
               classification string,
               classification_reason string,
               conn_trace_id string
               )
               ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
               WITH SERDEPROPERTIES (
               'serialization.format' = '1',
               'input.regex' = 
           '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/access-log-folder-path/'
   ```
**nota**  
Sugerimos que o padrão *`?( .*)?`* no final do parâmetro `input.regex` permaneça sempre em vigor para lidar com futuras entradas de registro, caso novos campos de log do ALB sejam adicionados. 

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `alb_access_logs`, preparando os dados dela para você fazer as consultas.

# Criar a tabela para logs de acesso do ALB no Athena com uso da projeção de partições
<a name="create-alb-access-logs-table-partition-projection"></a>

Como os logs de acesso do ALB têm uma estrutura conhecida com um esquema de partição que você pode especificar antecipadamente, é possível reduzir o runtime das consultas e automatizar o gerenciamento de partições usando o atributo de projeção de partições do Athena. A projeção de partições adiciona automaticamente novas partições à medida que os dados são adicionados. Isso elimina a necessidade de adicionar manualmente as partições usando `ALTER TABLE ADD PARTITION`. 

O exemplo de instrução `CREATE TABLE` a seguir usa automaticamente a projeção de partições com base em logs de acesso do ALB a partir de uma data especificada até o dia atual para uma única região da AWS. A instrução é baseada no exemplo da seção anterior, mas adiciona as cláusulas `PARTITIONED BY` e `TBLPROPERTIES` para habilitar a projeção de partições. Nas cláusulas `LOCATION` e `storage.location.template`, substitua os espaços reservados pelos valores que identificam o local do bucket do Amazon S3 dos seus logs de acesso do ABL. Para obter mais informações sobre o local do arquivo de log de acesso, consulte [Arquivos de log de acesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) no *Guia do usuário para Application Load Balancers*. Em ‭`projection.day.range`‬, substitua ‭‭*01‭*‬/‭*01‭*‬/*2022* pela data de início que você deseja usar. Depois que você executar a consulta com êxito, poderá consultar a tabela. Você não precisa executar `ALTER TABLE ADD PARTITION` para carregar as partições. Para obter informações sobre cada campo do arquivo de log, consulte [Entradas de log de acesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format). 

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs (
            type string,
            time string,
            elb string,
            client_ip string,
            client_port int,
            target_ip string,
            target_port int,
            request_processing_time double,
            target_processing_time double,
            response_processing_time double,
            elb_status_code int,
            target_status_code string,
            received_bytes bigint,
            sent_bytes bigint,
            request_verb string,
            request_url string,
            request_proto string,
            user_agent string,
            ssl_cipher string,
            ssl_protocol string,
            target_group_arn string,
            trace_id string,
            domain_name string,
            chosen_cert_arn string,
            matched_rule_priority string,
            request_creation_time string,
            actions_executed string,
            redirect_url string,
            lambda_error_reason string,
            target_port_list string,
            target_status_code_list string,
            classification string,
            classification_reason string,
            conn_trace_id string
            )
            PARTITIONED BY
            (
             day STRING
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' = 
        '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2022/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

**nota**  
Sugerimos que o padrão *?( .\$1)?* no final do parâmetro `input.regex` permaneça sempre aplicado para lidar com futuras entradas de log, caso novos campos de log do ALB sejam adicionados. 

# Exemplos de consultas para logs de acesso do ALB
<a name="query-alb-access-logs-examples"></a>

A consulta a seguir conta o número de solicitações HTTP GET recebidas pelo load balancer agrupadas pelo endereço IP do cliente:

```
SELECT COUNT(request_verb) AS
 count,
 request_verb,
 client_ip
FROM alb_access_logs
GROUP BY request_verb, client_ip
LIMIT 100;
```

Outra consulta mostra os URLs visitados por usuários do navegador Safari:

```
SELECT request_url
FROM alb_access_logs
WHERE user_agent LIKE '%Safari%'
LIMIT 10;
```

A consulta a seguir mostra registros que têm valores de código de status ELB maiores ou iguais a 500.

```
SELECT * FROM alb_access_logs
WHERE elb_status_code >= 500
```

O exemplo a seguir mostra como analisar os registros por `datetime`:

```
SELECT client_ip, sum(received_bytes) 
FROM alb_access_logs
WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') 
     BETWEEN parse_datetime('2018-05-30-12:00:00','yyyy-MM-dd-HH:mm:ss') 
     AND parse_datetime('2018-05-31-00:00:00','yyyy-MM-dd-HH:mm:ss') 
GROUP BY client_ip;
```

O exemplo a seguir consulta a tabela que usa projeção de partição para todos os logs de acesso do ALB a partir do dia especificado.

```
SELECT * 
FROM alb_access_logs 
WHERE day = '2022/02/12'
```

# Criar a tabela para logs de conexão do ALB
<a name="create-alb-connection-logs-table"></a>

1. Copie e cole o exemplo de declaração `CREATE TABLE` a seguir em um editor de consulta no console do Athena e modifique-a conforme necessário para seus próprios requisitos de entrada de log. Para obter mais informações sobre os conceitos básicos do Athena, consulte [Conceitos básicos](getting-started.md). Substitua o caminho na cláusula `LOCATION` pela localização da pasta de log de conexão do Amazon S3. Para obter mais informações sobre o local do arquivo de log de conexão, consulte [Arquivos de log de conexão](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) no *Guia do usuário para Application Load Balancers*. Para obter informações sobre cada campo do arquivo de log, consulte [Entradas de log de conexão](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format). 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
            time string,
            client_ip string,
            client_port int,
            listener_port int,
            tls_protocol string,
            tls_cipher string,
            tls_handshake_latency double,
            leaf_client_cert_subject string,
            leaf_client_cert_validity string,
            leaf_client_cert_serial_number string,
            tls_verify_status string,
            conn_trace_id string
            ) 
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/connection-log-folder-path/'
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `alb_connection_logs`, preparando os dados dela para você fazer as consultas.

# Criar a tabela para logs de conexão do ALB no Athena com uso da projeção de partições
<a name="create-alb-connection-logs-table-partition-projection"></a>

Como os logs de conexão do ALB têm uma estrutura conhecida com um esquema de partição que você pode especificar antecipadamente, é possível reduzir o runtime das consultas e automatizar o gerenciamento de partições usando o atributo de projeção de partições do Athena. A projeção de partições adiciona automaticamente novas partições à medida que os dados são adicionados. Isso elimina a necessidade de adicionar manualmente as partições usando `ALTER TABLE ADD PARTITION`. 

O exemplo de instrução `CREATE TABLE` a seguir usa automaticamente a projeção de partições com base em logs de conexão do ALB a partir de uma data especificada até o dia atual para uma única região da AWS. A instrução é baseada no exemplo da seção anterior, mas adiciona as cláusulas `PARTITIONED BY` e `TBLPROPERTIES` para habilitar a projeção de partições. Nas cláusulas `LOCATION` e `storage.location.template`, substitua os espaços reservados pelos valores que identificam o local do bucket do Amazon S3 dos seus logs de conexão do ABL. Para obter mais informações sobre o local do arquivo de log de conexão, consulte [Arquivos de log de conexão](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) no *Guia do usuário para Application Load Balancers*. Em ‭`projection.day.range`‬, substitua ‭*01‭*‬/‭*01‭*/‬*2023* pela data de início que você deseja usar. Depois que você executar a consulta com êxito, poderá consultar a tabela. Você não precisa executar `ALTER TABLE ADD PARTITION` para carregar as partições. Para obter informações sobre cada campo do arquivo de log, consulte [Entradas de log de conexão](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format).

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
         time string,
         client_ip string,
         client_port int,
         listener_port int,
         tls_protocol string,
         tls_cipher string,
         tls_handshake_latency double,
         leaf_client_cert_subject string,
         leaf_client_cert_validity string,
         leaf_client_cert_serial_number string,
         tls_verify_status string,
         conn_trace_id string
         )
            PARTITIONED BY
            (
             day STRING
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2023/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

# Exemplo de consultas para logs de conexão do ALB
<a name="query-alb-connection-logs-examples"></a>

A consulta a seguir conta as ocorrências nas quais o valor de `tls_verify_status` não foi `'Success'`, agrupadas por endereço IP do cliente:

```
SELECT DISTINCT client_ip, count() AS count FROM alb_connection_logs
WHERE tls_verify_status != 'Success'
GROUP BY client_ip
ORDER BY count() DESC;
```

A consulta a seguir pesquisa ocorrências nas quais o valor de `tls_handshake_latency` foi superior a 2 segundos no intervalo de tempo especificado:

```
SELECT * FROM alb_connection_logs
WHERE 
  (
    parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') 
    BETWEEN 
    parse_datetime('2024-01-01-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
    AND 
    parse_datetime('2024-03-20-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
  ) 
  AND 
    (tls_handshake_latency >= 2.0);
```

# Recursos adicionais
<a name="application-load-balancer-logs-additional-resources"></a>

Para obter mais informações sobre o uso de logs do ALB, consulte os recursos a seguir.
+ [Como analisar os logs de acesso do meu Application Load Balancer usando o Amazon Athena](https://repost.aws/knowledge-center/athena-analyze-access-logs) no *Centro de Conhecimentos da AWS*.
+ Para obter informações sobre códigos de status HTTP do Elastic Load Balancing, consulte [Solução de problemas em Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html) no *Guia do usuário para Application Load Balancers*.
+ [Catalogue e analise os logs do Application Load Balancer com mais eficiência com classificadores personalizados AWS Glue e Amazon Athena](https://aws.amazon.com/blogs/big-data/catalog-and-analyze-application-load-balancer-logs-more-efficiently-with-aws-glue-custom-classifiers-and-amazon-athena/) no *Blog de Big Data da AWS*.

# Consulta a logs do Classic Load Balancer
<a name="elasticloadbalancer-classic-logs"></a>

Consulte os logs do Classic Load Balancer para analisar e saber os padrões do tráfego que entra e sai das instâncias e das aplicações de backend do Elastic Load Balancing. Você pode ver a origem do tráfego, da latência e dos bytes que foram transferidos.

Antes de analisar os logs do Elastic Load Balancing, configure-os para que sejam salvos no bucket de destino do Amazon S3. Para obter mais informações, consulte [Habilitar os logs de acesso do seu Classic Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html).

**Para criar a tabela de logs do Elastic Load Balancing**

1. Copie e cole a instrução DDL a seguir no console do Athena. Verifique a [sintaxe ](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/access-log-collection.html#access-log-entry-format) dos registros de log do Elastic Load Balancing. Pode ser necessário atualizar a consulta a seguir para incluir as colunas e a sintaxe Regex para a versão mais recente do registro. 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs (
    
    timestamp string,
    elb_name string,
    request_ip string,
    request_port int,
    backend_ip string,
    backend_port int,
    request_processing_time double,
    backend_processing_time double,
    client_response_time double,
    elb_response_code string,
    backend_response_code string,
    received_bytes bigint,
    sent_bytes bigint,
    request_verb string,
    url string,
    protocol string,
    user_agent string,
    ssl_cipher string,
    ssl_protocol string
   )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
   WITH SERDEPROPERTIES (
    'serialization.format' = '1',
    'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$'
   )
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/AWS_account_ID/elasticloadbalancing/';
   ```

1. Modifique o bucket `LOCATION` do Amazon S3 para especificar o destino dos logs do Elastic Load Balancing.

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `elb_logs`, preparando os dados dela para as consultas. Para obter mais informações, consulte [Consultas de exemplo](#query-elb-classic-example).

## Consultas de exemplo
<a name="query-elb-classic-example"></a>

Use uma consulta semelhante à consulta do exemplo a seguir. Ele lista os servidores de aplicativos de backend que retornaram um código de resposta de erro `4XX` ou `5XX`. Use o operador `LIMIT` para limitar o número de logs a serem consultados por vez.

```
SELECT
 timestamp,
 elb_name,
 backend_ip,
 backend_response_code
FROM elb_logs
WHERE backend_response_code LIKE '4%' OR
      backend_response_code LIKE '5%'
LIMIT 100;
```

Use uma consulta subsequente para somar o tempo de resposta de todas as transações agrupadas por endereço IP de backend e nome da instância do Elastic Load Balancing.

```
SELECT sum(backend_processing_time) AS
 total_ms,
 elb_name,
 backend_ip
FROM elb_logs WHERE backend_ip <> ''
GROUP BY backend_ip, elb_name
LIMIT 100;
```

Para obter mais informações, consulte [Analyzing data in S3 using Athena](https://aws.amazon.com/blogs/big-data/analyzing-data-in-s3-using-amazon-athena/) (Analisar dados no S3 usando o Athena).

# Consultar logs do Amazon CloudFront
<a name="cloudfront-logs"></a>

Você pode configurar o CDN do Amazon CloudFront para exportar os logs de acesso de distribuição da Web para o Amazon Simple Storage Service. Use esses logs para explorar os padrões de navegação dos usuários nas propriedades da Web processadas pelo CloudFront.

Antes de começar a consultar os logs, habilite o log de acesso de distribuições da Web de acordo com a sua distribuição preferida do CloudFront. Para obter informações, consulte [Logs de acesso](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html) no *Guia do desenvolvedor do Amazon CloudFront*. Anote o bucket do Amazon S3 no qual salva esses logs.

**Topics**
+ [

# Criação de uma tabela para os logs padrão do CloudFront (legado)
](create-cloudfront-table-standard-logs.md)
+ [

# Criação de uma tabela para os logs do CloudFront no Athena usando particionamento manual com JSON
](create-cloudfront-table-manual-json.md)
+ [

# Criação de uma tabela para os logs do CloudFront no Athena usando particionamento manual com Parquet
](create-cloudfront-table-manual-parquet.md)
+ [

# Criação de uma tabela para os logs do CloudFront no Athena usando projeção de particionamento com JSON
](create-cloudfront-table-partition-json.md)
+ [

# Criação de uma tabela para os logs do CloudFront no Athena usando projeção de particionamento com Parquet
](create-cloudfront-table-partition-parquet.md)
+ [

# Criar uma tabela para logs em tempo real do CloudFront
](create-cloudfront-table-real-time-logs.md)
+ [

# Recursos adicionais
](cloudfront-logs-additional-resources.md)

# Criação de uma tabela para os logs padrão do CloudFront (legado)
<a name="create-cloudfront-table-standard-logs"></a>

**nota**  
O procedimento a seguir funciona para os logs de acesso de distribuição da Web no CloudFront. Ele não se aplica a logs de streaming de distribuições RTMP.

**Para criar uma tabela para campos de arquivo de log padrão do CloudFront**

1. Copie e cole o exemplo de instrução DDL a seguir no editor de consultas no console do Athena. O exemplo de instrução usa os campos do arquivo de log documentados na seção [Campos de arquivo de log padrão](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) do *Guia do usuário do Amazon CloudFront.* Modifique o `LOCATION` para o bucket do Amazon S3 que armazena seus logs. Para obter informações sobre como usar o editor de consultas, acesse [Conceitos básicos](getting-started.md).

   Essa consulta especifica `ROW FORMAT DELIMITED` e `FIELDS TERMINATED BY '\t'` para indicar que os campos são delimitados por caracteres de tabulação. Para `ROW FORMAT DELIMITED`, o Athena usa o [LazySimpleSerDe](lazy-simple-serde.md) por padrão. A coluna `date` é escapada com acentos graves (`) porque se trata de uma palavra reservada no Athena. Para mais informações, consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_standard_logs (
     `date` DATE,
     time STRING,
     x_edge_location STRING,
     sc_bytes BIGINT,
     c_ip STRING,
     cs_method STRING,
     cs_host STRING,
     cs_uri_stem STRING,
     sc_status INT,
     cs_referrer STRING,
     cs_user_agent STRING,
     cs_uri_query STRING,
     cs_cookie STRING,
     x_edge_result_type STRING,
     x_edge_request_id STRING,
     x_host_header STRING,
     cs_protocol STRING,
     cs_bytes BIGINT,
     time_taken FLOAT,
     x_forwarded_for STRING,
     ssl_protocol STRING,
     ssl_cipher STRING,
     x_edge_response_result_type STRING,
     cs_protocol_version STRING,
     fle_status STRING,
     fle_encrypted_fields INT,
     c_port INT,
     time_to_first_byte FLOAT,
     x_edge_detailed_result_type STRING,
     sc_content_type STRING,
     sc_content_len BIGINT,
     sc_range_start BIGINT,
     sc_range_end BIGINT
   )
   ROW FORMAT DELIMITED 
   FIELDS TERMINATED BY '\t'
   LOCATION 's3://amzn-s3-demo-bucket/'
   TBLPROPERTIES ( 'skip.header.line.count'='2' )
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `cloudfront_standard_logs`, preparando os dados dela para você fazer as consultas.

## Consultas de exemplo
<a name="query-examples-cloudfront-logs"></a>

A consulta a seguir adiciona o número de bytes processados pelo CloudFront entre 9 e 11 de junho de 2018. Coloque o nome da coluna de data entre aspas duplas porque se trata de uma palavra reservada.

```
SELECT SUM(bytes) AS total_bytes
FROM cloudfront_standard_logs
WHERE "date" BETWEEN DATE '2018-06-09' AND DATE '2018-06-11'
LIMIT 100;
```

Para eliminar linhas duplicadas (por exemplo, linhas vazias duplicadas) dos resultados da consulta, é possível usar a instrução `SELECT DISTINCT`, conforme o exemplo a seguir. 

```
SELECT DISTINCT * 
FROM cloudfront_standard_logs 
LIMIT 10;
```

# Criação de uma tabela para os logs do CloudFront no Athena usando particionamento manual com JSON
<a name="create-cloudfront-table-manual-json"></a>

**Para criar uma tabela para os campos do arquivo de log padrão do CloudFront usando o formato JSON**

1. Copie e cole o exemplo de instrução DDL a seguir no editor de consultas no console do Athena. O exemplo de instrução usa os campos do arquivo de log documentados na seção [Campos de arquivo de log padrão](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) do *Guia do usuário do Amazon CloudFront.* Modifique o `LOCATION` para o bucket do Amazon S3 que armazena seus logs. 

   Essa consulta usa o OpenX JSON SerDe com as propriedades de SerDe apresentadas a seguir para realizar a leitura dos campos em JSON corretamente no Athena.

   ```
   CREATE EXTERNAL TABLE `cf_logs_manual_partition_json`(
     `date` string , 
     `time` string , 
     `x-edge-location` string , 
     `sc-bytes` string , 
     `c-ip` string , 
     `cs-method` string , 
     `cs(host)` string , 
     `cs-uri-stem` string , 
     `sc-status` string , 
     `cs(referer)` string , 
     `cs(user-agent)` string , 
     `cs-uri-query` string , 
     `cs(cookie)` string , 
     `x-edge-result-type` string , 
     `x-edge-request-id` string , 
     `x-host-header` string , 
     `cs-protocol` string , 
     `cs-bytes` string , 
     `time-taken` string , 
     `x-forwarded-for` string , 
     `ssl-protocol` string , 
     `ssl-cipher` string , 
     `x-edge-response-result-type` string , 
     `cs-protocol-version` string , 
     `fle-status` string , 
     `fle-encrypted-fields` string , 
     `c-port` string , 
     `time-to-first-byte` string , 
     `x-edge-detailed-result-type` string , 
     `sc-content-type` string , 
     `sc-content-len` string , 
     `sc-range-start` string , 
     `sc-range-end` string )
   ROW FORMAT SERDE 
     'org.openx.data.jsonserde.JsonSerDe' 
   WITH SERDEPROPERTIES ( 
     'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') 
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.mapred.TextInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/'
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `cf_logs_manual_partition_json`, preparando os dados dela para você fazer as consultas.

## Consultas de exemplo
<a name="query-examples-cloudfront-logs-manual-json"></a>

A consulta apresentada a seguir soma a quantidade de bytes fornecidos pelo CloudFront no dia 15 de janeiro de 2025.

```
SELECT sum(cast("sc-bytes" as BIGINT)) as sc
FROM cf_logs_manual_partition_json
WHERE "date"='2025-01-15'
```

Para eliminar linhas duplicadas (por exemplo, linhas vazias duplicadas) dos resultados da consulta, é possível usar a instrução `SELECT DISTINCT`, conforme o exemplo a seguir. 

```
SELECT DISTINCT * FROM cf_logs_manual_partition_json
```

# Criação de uma tabela para os logs do CloudFront no Athena usando particionamento manual com Parquet
<a name="create-cloudfront-table-manual-parquet"></a>

**Para criar uma tabela para os campos do arquivo de log padrão do CloudFront usando o formato Parquet**

1. Copie e cole o exemplo de instrução DDL a seguir no editor de consultas no console do Athena. O exemplo de instrução usa os campos do arquivo de log documentados na seção [Campos de arquivo de log padrão](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) do *Guia do usuário do Amazon CloudFront.* 

   Essa consulta usa o ParquetHiveSerDe com as propriedades de SerDe apresentadas a seguir para realizar a leitura dos campos em Parquet corretamente no Athena.

   ```
   CREATE EXTERNAL TABLE `cf_logs_manual_partition_parquet`(
     `date` string, 
     `time` string, 
     `x_edge_location` string, 
     `sc_bytes` string, 
     `c_ip` string, 
     `cs_method` string, 
     `cs_host` string, 
     `cs_uri_stem` string, 
     `sc_status` string, 
     `cs_referer` string, 
     `cs_user_agent` string, 
     `cs_uri_query` string, 
     `cs_cookie` string, 
     `x_edge_result_type` string, 
     `x_edge_request_id` string, 
     `x_host_header` string, 
     `cs_protocol` string, 
     `cs_bytes` string, 
     `time_taken` string, 
     `x_forwarded_for` string, 
     `ssl_protocol` string, 
     `ssl_cipher` string, 
     `x_edge_response_result_type` string, 
     `cs_protocol_version` string, 
     `fle_status` string, 
     `fle_encrypted_fields` string, 
     `c_port` string, 
     `time_to_first_byte` string, 
     `x_edge_detailed_result_type` string, 
     `sc_content_type` string, 
     `sc_content_len` string, 
     `sc_range_start` string, 
     `sc_range_end` string)
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/'
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `cf_logs_manual_partition_parquet`, preparando os dados dela para você fazer as consultas.

## Consultas de exemplo
<a name="query-examples-cloudfront-logs-manual-parquet"></a>

A consulta apresentada a seguir soma a quantidade de bytes fornecidos pelo CloudFront no dia 19 de janeiro de 2025.

```
SELECT sum(cast("sc_bytes" as BIGINT)) as sc
FROM cf_logs_manual_partition_parquet
WHERE "date"='2025-01-19'
```

Para eliminar linhas duplicadas (por exemplo, linhas vazias duplicadas) dos resultados da consulta, é possível usar a instrução `SELECT DISTINCT`, conforme o exemplo a seguir. 

```
SELECT DISTINCT * FROM cf_logs_manual_partition_parquet
```

# Criação de uma tabela para os logs do CloudFront no Athena usando projeção de particionamento com JSON
<a name="create-cloudfront-table-partition-json"></a>

Você pode reduzir o runtime da consulta e automatizar o gerenciamento de particionamento com o recurso de projeção de particionamento do Athena. A projeção de partições adiciona automaticamente novas partições à medida que os dados são adicionados. Isso elimina a necessidade de adicionar manualmente as partições usando `ALTER TABLE ADD PARTITION`.

A instrução CREATE TABLE, apresentada como exemplo a seguir, usa automaticamente a projeção de particionamento nos logs do CloudFront usando uma distribuição do CloudFront especificada até o momento, para uma única Região da AWS. Depois que você executar a consulta com êxito, poderá consultar a tabela.

```
CREATE EXTERNAL TABLE `cloudfront_logs_pp`(
  `date` string, 
  `time` string, 
  `x-edge-location` string, 
  `sc-bytes` string, 
  `c-ip` string, 
  `cs-method` string, 
  `cs(host)` string, 
  `cs-uri-stem` string, 
  `sc-status` string, 
  `cs(referer)` string, 
  `cs(user-agent)` string, 
  `cs-uri-query` string, 
  `cs(cookie)` string, 
  `x-edge-result-type` string, 
  `x-edge-request-id` string, 
  `x-host-header` string, 
  `cs-protocol` string, 
  `cs-bytes` string, 
  `time-taken` string, 
  `x-forwarded-for` string, 
  `ssl-protocol` string, 
  `ssl-cipher` string, 
  `x-edge-response-result-type` string, 
  `cs-protocol-version` string, 
  `fle-status` string, 
  `fle-encrypted-fields` string, 
  `c-port` string, 
  `time-to-first-byte` string, 
  `x-edge-detailed-result-type` string, 
  `sc-content-type` string, 
  `sc-content-len` string, 
  `sc-range-start` string, 
  `sc-range-end` string)
  PARTITIONED BY(
         distributionid string,
         year int,
         month int,
         day int,
         hour int )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 
  'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/'
TBLPROPERTIES (
  'projection.distributionid.type'='enum',
  'projection.distributionid.values'='E2Oxxxxxxxxxxx',
  'projection.day.range'='01,31', 
  'projection.day.type'='integer', 
  'projection.day.digits'='2', 
  'projection.enabled'='true', 
  'projection.month.range'='01,12', 
  'projection.month.type'='integer', 
  'projection.month.digits'='2', 
  'projection.year.range'='2025,2026', 
  'projection.year.type'='integer', 
  'projection.hour.range'='00,23',
  'projection.hour.type'='integer',
  'projection.hour.digits'='2',
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')
```

A seguir, apresentamos algumas considerações sobre as propriedades usadas no exemplo anterior.
+ **Nome da tabela**: o nome da tabela, *`cloudfront_logs_pp`*, pode ser alterado. Você pode alterá-lo para qualquer nome de sua preferência.
+ **Localização**: Altere `s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/` para direcionar para o seu bucket do Amazon S3.
+ **IDs de distribuição**: para `projection.distributionid.values`, você pode especificar vários IDs de distribuição, separando-os por vírgulas. Por exemplo, *<distributionID1>*, *<distributionID2>*.
+ **Intervalo de anos**: em `projection.year.range`, você pode definir o intervalo de anos com base nos seus dados. Por exemplo, você pode ajustá-lo para qualquer período, como 2025 e *2025*, *2026*.
**nota**  
Incluir partições vazias, como aquelas para datas futuras (por exemplo, 2025 a 2040), pode impactar a performance das consultas. No entanto, a projeção de partições foi projetada para lidar efetivamente com datas futuras. Para manter uma performance ideal, garanta que as partições sejam gerenciadas de forma estratégica e evite criar partições vazias excessivas sempre que possível.
+ **Modelo de local de armazenamento**: Você deve garantir que o modelo `storage.location.template` seja atualizado corretamente com base na estrutura de particionamento do CloudFront e no caminho do S3 apresentados a seguir.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/create-cloudfront-table-partition-json.html)

  Após confirmar que a estrutura de particionamento do CloudFront e a estrutura do S3 correspondem aos padrões necessários, atualize o modelo `storage.location.template` da seguinte forma:

  ```
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
  ```
**nota**  
A configuração adequada do modelo `storage.location.template` é essencial para assegurar o armazenamento e a recuperação adequados dos dados.

# Criação de uma tabela para os logs do CloudFront no Athena usando projeção de particionamento com Parquet
<a name="create-cloudfront-table-partition-parquet"></a>

A instrução CREATE TABLE, apresentada como exemplo a seguir, usa automaticamente a projeção de particionamento nos logs do CloudFront em Parquet usando uma distribuição do CloudFront especificada até o momento, para uma única Região da AWS. Depois que você executar a consulta com êxito, poderá consultar a tabela.

```
CREATE EXTERNAL TABLE `cloudfront_logs_parquet_pp`(
`date` string, 
`time` string, 
`x_edge_location` string, 
`sc_bytes` string, 
`c_ip` string, 
`cs_method` string, 
`cs_host` string, 
`cs_uri_stem` string, 
`sc_status` string, 
`cs_referer` string, 
`cs_user_agent` string, 
`cs_uri_query` string, 
`cs_cookie` string, 
`x_edge_result_type` string, 
`x_edge_request_id` string, 
`x_host_header` string, 
`cs_protocol` string, 
`cs_bytes` string, 
`time_taken` string, 
`x_forwarded_for` string, 
`ssl_protocol` string, 
`ssl_cipher` string, 
`x_edge_response_result_type` string, 
`cs_protocol_version` string, 
`fle_status` string, 
`fle_encrypted_fields` string, 
`c_port` string, 
`time_to_first_byte` string, 
`x_edge_detailed_result_type` string, 
`sc_content_type` string, 
`sc_content_len` string, 
`sc_range_start` string, 
`sc_range_end` string)
PARTITIONED BY(
 distributionid string,
 year int,
 month int,
 day int,
 hour int )
ROW FORMAT SERDE 
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/'
TBLPROPERTIES (
'projection.distributionid.type'='enum',
'projection.distributionid.values'='E3OK0LPUNWWO3',
'projection.day.range'='01,31',
'projection.day.type'='integer',
'projection.day.digits'='2',
'projection.enabled'='true',
'projection.month.range'='01,12',
'projection.month.type'='integer',
'projection.month.digits'='2',
'projection.year.range'='2019,2025',
'projection.year.type'='integer',
'projection.hour.range'='01,12',
'projection.hour.type'='integer',
'projection.hour.digits'='2',
'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')
```

A seguir, apresentamos algumas considerações sobre as propriedades usadas no exemplo anterior.
+ **Nome da tabela**: o nome da tabela, *`cloudfront_logs_pp`*, pode ser alterado. Você pode alterá-lo para qualquer nome de sua preferência.
+ **Localização**: Altere `s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/` para direcionar para o seu bucket do Amazon S3.
+ **IDs de distribuição**: para `projection.distributionid.values`, você pode especificar vários IDs de distribuição, separando-os por vírgulas. Por exemplo, *<distributionID1>*, *<distributionID2>*.
+ **Intervalo de anos**: em `projection.year.range`, você pode definir o intervalo de anos com base nos seus dados. Por exemplo, você pode ajustá-lo para qualquer período, como *2025* e *2026*.
**nota**  
Incluir partições vazias, como aquelas para datas futuras (por exemplo, 2025 a 2040), pode impactar a performance das consultas. No entanto, a projeção de partições foi projetada para lidar efetivamente com datas futuras. Para manter uma performance ideal, garanta que as partições sejam gerenciadas de forma estratégica e evite criar partições vazias excessivas sempre que possível.
+ **Modelo de local de armazenamento**: Você deve garantir que o modelo `storage.location.template` seja atualizado corretamente com base na estrutura de particionamento do CloudFront e no caminho do S3 apresentados a seguir.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/create-cloudfront-table-partition-parquet.html)

  Após confirmar que a estrutura de particionamento do CloudFront e a estrutura do S3 correspondem aos padrões necessários, atualize o modelo `storage.location.template` da seguinte forma:

  ```
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
  ```
**nota**  
A configuração adequada do modelo `storage.location.template` é essencial para assegurar o armazenamento e a recuperação adequados dos dados.

# Criar uma tabela para logs em tempo real do CloudFront
<a name="create-cloudfront-table-real-time-logs"></a>

**Para criar uma tabela para campos de arquivo de log em tempo real do CloudFront**

1. Copie e cole o exemplo de instrução DDL a seguir no editor de consultas no console do Athena. O exemplo de instrução usa os campos do arquivo de log documentados na seção [Logs em tempo real](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) do *Guia do usuário do Amazon CloudFront*. Modifique o `LOCATION` para o bucket do Amazon S3 que armazena seus logs. Para obter informações sobre como usar o editor de consultas, acesse [Conceitos básicos](getting-started.md).

   Essa consulta especifica `ROW FORMAT DELIMITED` e `FIELDS TERMINATED BY '\t'` para indicar que os campos são delimitados por caracteres de tabulação. Para `ROW FORMAT DELIMITED`, o Athena usa o [LazySimpleSerDe](lazy-simple-serde.md) por padrão. A coluna `timestamp` é escapada com acentos graves (`) porque se trata de uma palavra reservada no Athena. Para mais informações, consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).

   O exemplo a seguir contém todos os campos disponíveis. Você pode comentar ou remover campos que não sejam necessários.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_real_time_logs ( 
   `timestamp` STRING,
   c_ip STRING,
   time_to_first_byte BIGINT,
   sc_status BIGINT,
   sc_bytes BIGINT,
   cs_method STRING,
   cs_protocol STRING,
   cs_host STRING,
   cs_uri_stem STRING,
   cs_bytes BIGINT,
   x_edge_location STRING,
   x_edge_request_id STRING,
   x_host_header STRING,
   time_taken BIGINT,
   cs_protocol_version STRING,
   c_ip_version STRING,
   cs_user_agent STRING,
   cs_referer STRING,
   cs_cookie STRING,
   cs_uri_query STRING,
   x_edge_response_result_type STRING,
   x_forwarded_for STRING,
   ssl_protocol STRING,
   ssl_cipher STRING,
   x_edge_result_type STRING,
   fle_encrypted_fields STRING,
   fle_status STRING,
   sc_content_type STRING,
   sc_content_len BIGINT,
   sc_range_start STRING,
   sc_range_end STRING,
   c_port BIGINT,
   x_edge_detailed_result_type STRING,
   c_country STRING,
   cs_accept_encoding STRING,
   cs_accept STRING,
   cache_behavior_path_pattern STRING,
   cs_headers STRING,
   cs_header_names STRING,
   cs_headers_count BIGINT,
   primary_distribution_id STRING,
   primary_distribution_dns_name STRING,
   origin_fbl STRING,
   origin_lbl STRING,
   asn STRING
   )
   ROW FORMAT DELIMITED 
   FIELDS TERMINATED BY '\t'
   LOCATION 's3://amzn-s3-demo-bucket/'
   TBLPROPERTIES ( 'skip.header.line.count'='2' )
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `cloudfront_real_time_logs`, preparando os dados dela para você fazer as consultas.

# Recursos adicionais
<a name="cloudfront-logs-additional-resources"></a>

Para obter mais informações sobre como usar o Athena para consultar os logs do CloudFront, leia as publicações do [blog sobre big data da AWS](https://aws.amazon.com/blogs/big-data/) a seguir.

[Consulte facilmente os logs de AWS service (Serviço da AWS) usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/easily-query-aws-service-logs-using-amazon-athena/) de 29 de maio de 2019 (em inglês).

[Analise seus logs de acesso do Amazon CloudFront em grande escala](https://aws.amazon.com/blogs/big-data/analyze-your-amazon-cloudfront-access-logs-at-scale/) (21 de dezembro de 2018).

[Construa uma arquitetura serverless para analisar os logs de acesso do Amazon CloudFront usando AWS Lambda, Amazon Athena e o Amazon Managed Service for Apache Flink](https://aws.amazon.com/blogs/big-data/build-a-serverless-architecture-to-analyze-amazon-cloudfront-access-logs-using-aws-lambda-amazon-athena-and-amazon-kinesis-analytics/) (26 de maio de 2017).

# Consultar logs do AWS CloudTrail
<a name="cloudtrail-logs"></a>

O AWS CloudTrail é um serviço que registra chamadas de API da AWS e eventos de contas da Amazon Web Services. 

Os logs do CloudTrail incluem detalhes sobre todas as chamadas de API feitas para seus Serviços da AWS, incluindo o console. O CloudTrail gera arquivos de log criptografados e os armazena no Amazon S3. Para saber mais, consulte o [Guia do usuário do AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html). 

**nota**  
Se você quiser realizar consultas SQL nas informações de eventos do CloudTrail entre contas, regiões e datas, considere usar o CloudTrail Lake. O CloudTrail Lake é uma alternativa da AWS à criação de trilhas que agregam informações de uma empresa em um único armazenamento pesquisável de dados de eventos. Em vez de usar o armazenamento de bucket do Amazon S3, ele armazena eventos em um data lake, o que permite consultas mais avançadas e rápidas. Você pode usá-lo para criar consultas SQL que pesquisem eventos em organizações, regiões e em períodos temporais personalizados. Como você executa consultas do CloudTrail Lake diretamente no console do CloudTrail, o uso do CloudTrail Lake não requer o Athena. Para obter mais informações, consulte a Documentação do [CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html).

O uso do Athena com os logs do CloudTrail é uma ótima maneira de melhorar a análise das atividades da AWS service (Serviço da AWS). Por exemplo, é possível usar consultas para identificar tendências e isolar ainda mais a atividade por atributos, como endereço IP de origem ou usuário.

Uma aplicação comum é usar os logs do CloudTrail para analisar a segurança e a compatibilidade das atividades operacionais. Para obter um exemplo detalhado, consulte a publicação no Blog de Big Data da AWS, [Análise de segurança, conformidade e atividades operacionais usando o AWS CloudTrail e o Amazon Athena](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

Você pode usar o Athena para consultar esses arquivos de log diretamente no Amazon S3 especificando o `LOCATION` dos arquivos de log. É possível fazer isso de duas formas:
+ Criando tabelas para arquivos de log do CloudTrail diretamente no console do CloudTrail.
+ Criando tabelas manualmente para arquivos de log do CloudTrail no console do Athena.

**Topics**
+ [

# Noções básicas de logs do CloudTrail e tabelas do Athena
](create-cloudtrail-table-understanding.md)
+ [

# Usar o console do CloudTrail para criar uma tabela do Athena com logs do CloudTrail
](create-cloudtrail-table-ct.md)
+ [

# Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual
](create-cloudtrail-table.md)
+ [

# Criar uma tabela para uma trilha em toda a organização usando particionamento manual
](create-cloudtrail-table-org-wide-trail.md)
+ [

# Criar a tabela para logs do CloudTrail no Athena usando a projeção de partições
](create-cloudtrail-table-partition-projection.md)
+ [

# Exemplo de consultas de log do CloudTrail
](query-examples-cloudtrail-logs.md)

# Noções básicas de logs do CloudTrail e tabelas do Athena
<a name="create-cloudtrail-table-understanding"></a>

Antes de começar a criar tabelas, você deve conhecer melhor o CloudTrail e saber como ele armazena os dados. Isso pode ajudar a criar as tabelas necessárias, tanto pelo console do CloudTrail quanto pelo Athena.

O CloudTrail salva logs como arquivos de texto JSON no formato compactado gzip (`*.json.gz`). O local dos arquivos de log depende de como você configura as trilhas, da Região da AWS ou das regiões onde você está registrando, além de outros fatores. 

Para obter mais informações de onde os logs são armazenados, da estrutura JSON e do conteúdo do arquivo de registro, consulte os seguintes tópicos no [Manual do usuário do AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html):
+  [Encontrar os arquivos de log do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html) 
+  [Exemplos de arquivos de log do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html) 
+  [Conteúdo do registro do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)
+  [Referência de eventos do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference.html) 

Para coletar e salvar os logs no Amazon S3, habilite o CloudTrail no Console de gerenciamento da AWS. Para obter mais informações, consulte [Criar uma trilha](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html) no *Guia do usuário do AWS CloudTrail*.

# Usar o console do CloudTrail para criar uma tabela do Athena com logs do CloudTrail
<a name="create-cloudtrail-table-ct"></a>

Você pode criar uma tabela do Athena não particionada para consultar logs do CloudTrail diretamente no console do CloudTrail. A criação de uma tabela do Athena pelo console do CloudTrail requer que você esteja conectado com um perfil que tenha permissões suficientes para criar tabelas no Athena.

**nota**  
Não é possível usar o console do CloudTrail para criar uma tabela do Athena para logs de trilha da organização. Em vez disso, crie a tabela manualmente usando o console do Athena para que você possa especificar o local correto de armazenamento. Para obter informações sobre trilhas de organização, consulte [Criar uma trilha para uma organização](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html) no *Manual do usuário do AWS CloudTrail*.
+ Para obter informações sobre como configurar permissões para o Athena, consulte [Acesso de configuração, administrativo e programático](setting-up.md).
+ Para obter informações sobre como criar uma tabela com partições, consulte [Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual](create-cloudtrail-table.md).

**Para criar uma tabela do Athena para uma trilha do CloudTrail no console do CloudTrail**

1. Abra o console do CloudTrail em [https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/).

1. No painel de navegação, selecione **Event history (Histórico de eventos)**. 

1. Escolha **Create Athena table** (Criar tabela do Athena).  
![\[Escolher Create Athena table\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/cloudtrail-logs-create-athena-table.png)

1. Em **Storage location** (Local de armazenamento), use a seta para baixo para selecionar o bucket do Amazon S3 onde os arquivos de log estão armazenados para a trilha que será consultada.
**nota**  
Para localizar o nome do bucket associado a uma trilha, escolha **Trails** (Trilhas) no painel de navegação do CloudTrail e visualize a coluna **S3 bucket** (Bucket do S3) da trilha. Para ver o local do bucket do Amazon S3, escolha o link do bucket na coluna **S3 bucket** (Bucket do S3). O console do Amazon S3 é aberto no local do bucket do CloudTrail. 

1. Escolha **Criar tabela**. A tabela é criada com um nome padrão que inclui o nome do bucket do Amazon S3.

# Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual
<a name="create-cloudtrail-table"></a>

É possível criar manualmente tabelas de arquivos de log do CloudTrail no console do Athena e executar consultas no Athena.

**Para criar uma tabela do Athena para uma trilha do CloudTrail no console do Athena**

1. Copie e cole a instrução DDL a seguir em um editor de consultas do console do Athena e modifique-a de acordo com seus requisitos. Observe que, como os arquivos de log do CloudTrail não são um rastreamento de pilha ordenada de chamadas de API públicas, os campos dos arquivos de log não aparecem em nenhuma ordem específica.

   ```
   CREATE EXTERNAL TABLE cloudtrail_logs (
   eventversion STRING,
   useridentity STRUCT<
                  type:STRING,
                  principalid:STRING,
                  arn:STRING,
                  accountid:STRING,
                  invokedby:STRING,
                  accesskeyid:STRING,
                  username:STRING,
                  onbehalfof: STRUCT<
                       userid: STRING,
                       identitystorearn: STRING>,
     sessioncontext:STRUCT<
       attributes:STRUCT<
                  mfaauthenticated:STRING,
                  creationdate:STRING>,
       sessionissuer:STRUCT<  
                  type:STRING,
                  principalid:STRING,
                  arn:STRING, 
                  accountid:STRING,
                  username:STRING>,
       ec2roledelivery:string,
       webidfederationdata: STRUCT<
                  federatedprovider: STRING,
                  attributes: map<string,string>>
     >
   >,
   eventtime STRING,
   eventsource STRING,
   eventname STRING,
   awsregion STRING,
   sourceipaddress STRING,
   useragent STRING,
   errorcode STRING,
   errormessage STRING,
   requestparameters STRING,
   responseelements STRING,
   additionaleventdata STRING,
   requestid STRING,
   eventid STRING,
   resources ARRAY<STRUCT<
                  arn:STRING,
                  accountid:STRING,
                  type:STRING>>,
   eventtype STRING,
   apiversion STRING,
   readonly STRING,
   recipientaccountid STRING,
   serviceeventdetails STRING,
   sharedeventid STRING,
   vpcendpointid STRING,
   vpcendpointaccountid STRING,
   eventcategory STRING,
   addendum STRUCT<
     reason:STRING,
     updatedfields:STRING,
     originalrequestid:STRING,
     originaleventid:STRING>,
   sessioncredentialfromconsole STRING,
   edgedevicedetails STRING,
   tlsdetails STRUCT<
     tlsversion:STRING,
     ciphersuite:STRING,
     clientprovidedhostheader:STRING>
   )
   PARTITIONED BY (region string, year string, month string, day string)
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';
   ```
**nota**  
Sugerimos usar o `org.apache.hive.hcatalog.data.JsonSerDe` exibido no exemplo. Embora exista um `com.amazon.emr.hive.serde.CloudTrailSerde`, no momento ele não processa alguns dos campos mais recentes do CloudTrail. 

1. (Opcional) Remova quaisquer campos não obrigatórios para a tabela. Se for necessário ler somente um determinado conjunto de colunas, sua definição de tabela poderá excluir as outras colunas.

1. Modifique `s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/` para apontar para o bucket do Amazon S3 que contém os dados de log que você deseja consultar. O exemplo usa um valor `LOCATION` de logs para uma determinada conta, mas você pode usar o grau de especificidade adequado ao aplicativo. Por exemplo:
   + Para analisar dados de várias contas, você pode reverter o especificador `LOCATION` para indicar todos os `AWSLogs` usando `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'`.
   + Para analisar dados de uma data, conta e região específica, use `LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.` 
   + Para analisar dados de atividade de rede em vez de eventos de gerenciamento, substitua `/CloudTrail/` na cláusula `LOCATION` por `/CloudTrail-NetworkActivity/`. 

   O uso do nível mais alto na hierarquia de objetos proporciona maior flexibilidade ao consultar usando o Athena.

1. Verifique se os campos estão listados corretamente. Para obter mais informações sobre a lista completa de campos em um registro do CloudTrail, consulte [Conteúdo do registro do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html).

   A declaração de exemplo `CREATE TABLE` na Etapa 1 usa [Hive JSON SerDe](hive-json-serde.md). No exemplo, os campos `requestparameters`, `responseelements` e `additionaleventdata` são listados como tipo `STRING` na consulta, mas são tipos de dados `STRUCT` usados em JSON. Portanto, para obter dados desses campos, use funções `JSON_EXTRACT`. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md). Para melhorias de performance, o exemplo particiona os dados por Região da AWS, ano, mês e dia.

1. Execute a instrução `CREATE TABLE` no console do Athena.

1. Use o comando [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) a fim de carregar as partições para que você consiga consultá-las, conforme o exemplo a seguir.

   ```
   ALTER TABLE table_name ADD 
      PARTITION (region='us-east-1',
                 year='2019',
                 month='02',
                 day='01')
      LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'
   ```

# Criar uma tabela para uma trilha em toda a organização usando particionamento manual
<a name="create-cloudtrail-table-org-wide-trail"></a>

Para criar uma tabela para arquivos de log do CloudTrail em toda a organização no Athena, siga as etapas listadas em [Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual](create-cloudtrail-table.md), mas faça as modificações observadas no procedimento a seguir.

**Criar uma tabela do Athena para logs do CloudTrail em toda a organização**

1. Na instrução `CREATE TABLE`, modifique a cláusula `LOCATION` para incluir o ID da organização, como no exemplo a seguir:

   ```
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/'
   ```

1. Na cláusula `PARTITIONED BY`, adicione uma entrada para o ID da conta como cadeia de caracteres, como no exemplo a seguir:

   ```
   PARTITIONED BY (account string, region string, year string, month string, day string)
   ```

   O exemplo a seguir mostra o resultado combinado:

   ```
   ...
   
   PARTITIONED BY (account string, region string, year string, month string, day string) 
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/Account_ID/CloudTrail/'
   ```

1. Na instrução `ALTER TABLE`, na cláusula `ADD PARTITION`, inclua o ID da organização, como no exemplo a seguir:

   ```
   ALTER TABLE table_name ADD
   PARTITION (account='111122223333',
   region='us-east-1',
   year='2022',
   month='08',
   day='08')
   ```

1. Na instrução `ALTER TABLE`, na cláusula `LOCATION`, inclua o ID da organização, o ID da conta e a partição que você deseja adicionar, como no exemplo a seguir:

   ```
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/Account_ID/CloudTrail/us-east-1/2022/08/08/'
   ```

   No exemplo a seguir, a instrução `ALTER TABLE` mostra o resultado combinado:

   ```
   ALTER TABLE table_name ADD
   PARTITION (account='111122223333',
   region='us-east-1',
   year='2022',
   month='08',
   day='08')
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/111122223333/CloudTrail/us-east-1/2022/08/08/'
   ```

Observe que, em uma grande organização, usar esse método para adicionar e manter manualmente uma partição para cada ID de conta da organização pode ser complicado. Nesse cenário, considere usar o CloudTrail Lake em vez do Athena. O CloudTrail Lake oferece as seguintes vantagens:
+ Agrega automaticamente os logs em toda a organização
+ Não requer configuração ou manutenção de partições ou de uma tabela do Athena
+ As consultas são executadas diretamente no console do CloudTrail
+ Usa uma linguagem de consultas compatível com SQL

Para obter mais informações, consulte [Trabalhar com o AWS Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html), no *Guia do usuário do AWS CloudTrail*. 

# Criar a tabela para logs do CloudTrail no Athena usando a projeção de partições
<a name="create-cloudtrail-table-partition-projection"></a>

Como os logs do CloudTrail têm uma estrutura conhecida com um esquema de partição que você pode especificar antecipadamente, é possível reduzir o runtime das consultas e automatizar o gerenciamento de partições usando o atributo de projeção de partições do Athena. A projeção de partições adiciona automaticamente novas partições à medida que os dados são adicionados. Isso elimina a necessidade de adicionar manualmente as partições usando `ALTER TABLE ADD PARTITION`. 

A instrução de exemplo `CREATE TABLE` a seguir usa automaticamente a projeção de partições com base nos logs do CloudTrail a partir de uma data especificada até o dia de hoje para uma única Região da AWS. Nas cláusulas `LOCATION` e `storage.location.template`, substitua os espaços reservados *bucket*, *account-id* e *aws-region* pelos valores idênticos correspondentes. Em ‭`projection.timestamp.range`‬, substitua ‭*2020*/*01*/*01* pela data de início que você deseja usar. Depois que você executar a consulta com êxito, poderá consultar a tabela. Você não precisa executar `ALTER TABLE ADD PARTITION` para carregar as partições.

```
CREATE EXTERNAL TABLE cloudtrail_logs_pp(
    eventversion STRING,
    useridentity STRUCT<
        type: STRING,
        principalid: STRING,
        arn: STRING,
        accountid: STRING,
        invokedby: STRING,
        accesskeyid: STRING,
        username: STRING,
        onbehalfof: STRUCT<
             userid: STRING,
             identitystorearn: STRING>,
        sessioncontext: STRUCT<
            attributes: STRUCT<
                mfaauthenticated: STRING,
                creationdate: STRING>,
            sessionissuer: STRUCT<
                type: STRING,
                principalid: STRING,
                arn: STRING,
                accountid: STRING,
                username: STRING>,
            ec2roledelivery:string,
            webidfederationdata: STRUCT<
                federatedprovider: STRING,
                attributes: map<string,string>>
        >
    >,
    eventtime STRING,
    eventsource STRING,
    eventname STRING,
    awsregion STRING,
    sourceipaddress STRING,
    useragent STRING,
    errorcode STRING,
    errormessage STRING,
    requestparameters STRING,
    responseelements STRING,
    additionaleventdata STRING,
    requestid STRING,
    eventid STRING,
    readonly STRING,
    resources ARRAY<STRUCT<
        arn: STRING,
        accountid: STRING,
        type: STRING>>,
    eventtype STRING,
    apiversion STRING,
    recipientaccountid STRING,
    serviceeventdetails STRING,
    sharedeventid STRING,
    vpcendpointid STRING,
    vpcendpointaccountid STRING,
    eventcategory STRING,
    addendum STRUCT<
      reason:STRING,
      updatedfields:STRING,
      originalrequestid:STRING,
      originaleventid:STRING>,
    sessioncredentialfromconsole STRING,
    edgedevicedetails STRING,
    tlsdetails STRUCT<
      tlsversion:STRING,
      ciphersuite:STRING,
      clientprovidedhostheader:STRING>
  )
PARTITIONED BY (
   `timestamp` string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/account-id/CloudTrail/aws-region'
TBLPROPERTIES (
  'projection.enabled'='true', 
  'projection.timestamp.format'='yyyy/MM/dd', 
  'projection.timestamp.interval'='1', 
  'projection.timestamp.interval.unit'='DAYS', 
  'projection.timestamp.range'='2020/01/01,NOW', 
  'projection.timestamp.type'='date', 
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')
```

Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

# Exemplo de consultas de log do CloudTrail
<a name="query-examples-cloudtrail-logs"></a>

O exemplo a seguir mostra a parte de uma consulta que retorna todas as solicitações anônimas (não assinadas) da tabela criada para os logs de eventos do CloudTrail. Essa consulta seleciona as solicitações em que `useridentity.accountid` são anônimos e `useridentity.arn` não é especificado:

```
SELECT *
FROM cloudtrail_logs
WHERE 
    eventsource = 's3.amazonaws.com' AND 
    eventname in ('GetObject') AND 
    useridentity.accountid = 'anonymous' AND 
    useridentity.arn IS NULL AND
    requestparameters LIKE '%[your bucket name ]%';
```

Para obter mais informações, consulte a publicação no Blog de Big Data da AWS, [Análise de segurança, conformidade e atividades operacionais usando o AWS CloudTrail e o Amazon Athena](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

## Consulta de campos aninhados nos logs do CloudTrail
<a name="cloudtrail-logs-nested-fields"></a>

Como os campos `userIdentity` e `resources` são tipos de dados aninhados, é necessário um tratamento especial para consultá-los.

O objeto `userIdentity` consiste em tipos `STRUCT` aninhados. É possível consultá-los usando um ponto para separar os campos, como no seguinte exemplo:

```
SELECT 
    eventsource, 
    eventname,
    useridentity.sessioncontext.attributes.creationdate,
    useridentity.sessioncontext.sessionissuer.arn
FROM cloudtrail_logs
WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL
ORDER BY eventsource, eventname
LIMIT 10
```

O campo `resources` é um array de objetos `STRUCT`. Para esses arrays, use `CROSS JOIN UNNEST` para remover o aninhamento do array de modo que você possa consultar seus objetos.

O exemplo a seguir retorna todas as linhas em que o ARN do recurso termina com `example/datafile.txt`. Para legibilidade, a função [replace](https://prestodb.io/docs/current/functions/string.html#replace) remove a substring inicial `arn:aws:s3:::` do ARN.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource,
    eventname,
    eventtime,
    useragent
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt'
ORDER BY eventtime
```

Veja a seguir exemplos de consultas de eventos `DeleteBucket`. A consulta extrai do objeto `resources` o nome do bucket e o ID da conta à qual o bucket pertence.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket,
    eventtime AS time_deleted,
    useridentity.username, 
    unnested.resources_entry.accountid as bucket_acct_id 
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE eventname = 'DeleteBucket'
ORDER BY eventtime
```

Para obter mais informações sobre como remover o aninhamento, consulte [Filtrar matrizes](filtering-arrays.md).

## Dicas para consultar logs do CloudTrail
<a name="tips-for-querying-cloudtrail-logs"></a>

Considere o seguinte ao explorar dados do log do CloudTrail:
+ Antes de consultar os logs, verifique se a tabela de logs tem a mesma aparência da tabela em [Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual](create-cloudtrail-table.md). Se não for a primeira tabela, exclua a tabela existente usando o seguinte comando: `DROP TABLE cloudtrail_logs`.
+ Depois de ignorar a tabela existente, recrie-a. Para obter mais informações, consulte [Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual](create-cloudtrail-table.md).

  Verifique se os campos na consulta do Athena estão listados corretamente. Para obter informações sobre a lista completa de campos em um registro do CloudTrail, consulte [Conteúdo do registro do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html). 

  Se a consulta incluir campos em formatos JSON, como `STRUCT`, extraia dados de JSON. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md). 

  Algumas sugestões para realizar consultas em sua tabela do CloudTrail:
+ Comece observando quais usuários do chamaram quais operações da API e de quais endereços IP de origem.
+ Use a consulta SQL básica a seguir como o modelo. Cole a consulta no console do Athena e execute-a.

  ```
  SELECT
   useridentity.arn,
   eventname,
   sourceipaddress,
   eventtime
  FROM cloudtrail_logs
  LIMIT 100;
  ```
+ Modifique a consulta para explorar ainda mais seus dados.
+ Para melhorar a performance, inclua a cláusula `LIMIT` para retornar um subconjunto especificado de linhas.

# Consulta a logs do Amazon EMR
<a name="emr-logs"></a>

As aplicações do Amazon EMR e de big data executadas no Amazon EMR geram arquivos de log. Os arquivos de log são gravados no [nó primário](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html), e você também pode configurar o Amazon EMR para armazená-los automaticamente no Amazon S3. Você pode usar o Amazon Athena para consultar esses logs e identificar eventos e tendências de aplicações e clusters. Para obter mais informações sobre os tipos de arquivos de log no Amazon EMR e como salvá-los no Amazon S3, consulte [View log files](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) (Exibir arquivos de log) no *Guia de gerenciamento do Amazon EMR*.

**Topics**
+ [

# Criação e consulta a uma tabela básica baseada em arquivos de log do Amazon EMR
](emr-create-table.md)
+ [

# Criar e consultar uma tabela particionada baseada nos logs do Amazon EMR
](emr-create-table-partitioned.md)

# Criação e consulta a uma tabela básica baseada em arquivos de log do Amazon EMR
<a name="emr-create-table"></a>

O exemplo a seguir cria uma tabela básica, `myemrlogs`, com base em arquivos de log salvos em `s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/elasticmapreduce/`. O local do Amazon S3 usado nos exemplos abaixo reflete o padrão do local predefinido dos logs de um cluster do EMR criado pela conta da Amazon Web Services *123456789012* na região *us-west-2*. Se você usar um local personalizado, o padrão será s3://amzn-s3-demo-bucket/*ClusterID*.

Para obter informações sobre a criação de uma tabela particionada para potencialmente aprimorar a performance da consulta e reduzir a transferência de dados, consulte [Criar e consultar uma tabela particionada baseada nos logs do Amazon EMR](emr-create-table-partitioned.md).

```
CREATE EXTERNAL TABLE `myemrlogs`(
  `data` string COMMENT 'from deserializer')
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'
```

## Consultas de exemplo
<a name="emr-example-queries-basic"></a>

Os exemplos de consultas a seguir podem ser executados na tabela `myemrlogs` criada pelo exemplo anterior.

**Example – Consultar os logs de etapas para ocorrências de ERROR, WARN, INFO, EXCEPTION, FATAL ou DEBUG**  

```
SELECT data,
        "$PATH"
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'s-86URH188Z6B1')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example – Consultar um log de instância específico, i-00b3c0a839ece0a9c, para ERROR, WARN, INFO, EXCEPTION, FATAL ou DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'i-00b3c0a839ece0a9c')
        AND regexp_like("$PATH",'state')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example – Consultar os logs da aplicação Presto para ERROR, WARN, INFO, EXCEPTION, FATAL ou DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'presto')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example – Consultar os logs da aplicação Namenode para ERROR, WARN, INFO, EXCEPTION, FATAL ou DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'namenode')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example – Consultar todos os logs por data e hora para ERROR, WARN, INFO, EXCEPTION, FATAL ou DEBUG**  

```
SELECT distinct("$PATH") AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'2019-07-23-10')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

# Criar e consultar uma tabela particionada baseada nos logs do Amazon EMR
<a name="emr-create-table-partitioned"></a>

Esses exemplos usam o mesmo local de log para criar uma tabela do Athena, mas a tabela é particionada e uma partição é criada para cada local de log. Para obter mais informações, consulte [Particionar dados](partitions.md).

A consulta a seguir cria a tabela particionada denominada `mypartitionedemrlogs`:

```
CREATE EXTERNAL TABLE `mypartitionedemrlogs`(
  `data` string COMMENT 'from deserializer')
 partitioned by (logtype string)
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'
```

Na sequência, as instruções de consulta a seguir criam as partições de tabela com base nos subdiretórios dos tipos diferentes de log que o Amazon EMR cria no Amazon S3:

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='containers')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/containers/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='hadoop-mapreduce')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-mapreduce/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='hadoop-state-pusher')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-state-pusher/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='node')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/node/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='steps')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/steps/'
```

Depois de criar as partições, você pode executar uma consulta `SHOW PARTITIONS` na tabela para confirmar:

```
SHOW PARTITIONS mypartitionedemrlogs;
```

## Consultas de exemplo
<a name="emr-example-queries-partitioned"></a>

Os exemplos a seguir demonstram que consultas para entradas de log específicas usam a tabela e as partições criadas pelos exemplos acima.

**Example – Consultar os logs da aplicação application\$11561661818238\$10002 na partição de contêineres para ERROR ou WARN**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='containers'
        AND regexp_like("$PATH",'application_1561661818238_0002')
        AND regexp_like(data, 'ERROR|WARN') limit 100;
```

**Example – Consultar a partição Hadoop-Mapreduce do trabalho job\$11561661818238\$10004 e as falhas de redução**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='hadoop-mapreduce'
        AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;
```

**Example – Consultar os logs do Hive na partição do nó em relação ao ID de consulta 056e0609-33e1-4611-956c-7a31b42d2663**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='node'
        AND regexp_like("$PATH",'hive')
        AND regexp_like(data,'056e0609-33e1-4611-956c-7a31b42d2663') limit 100;
```

**Example – Consultar os logs do Resourcemanager na partição do nó em relação à aplicação 1567660019320\$10001\$101\$1000001**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='node'
        AND regexp_like(data,'resourcemanager')
        AND regexp_like(data,'1567660019320_0001_01_000001') limit 100
```

# Consultar logs de fluxo do AWS Global Accelerator
<a name="querying-global-accelerator-flow-logs"></a>

É possível usar o AWS Global Accelerator para criar aceleradoras que direcionam o tráfego de rede para endpoints ideais na rede global da AWS. Para obter mais informações sobre o Global Accelerator, consulte [What is AWS Global Accelerator?](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html) (O que é o ?).

Os logs de fluxo do Global Accelerator permitem que você capture as informações sobre o tráfego de endereço IP que entra e sai das interfaces de rede em suas aceleradoras. Os dados do log de fluxo são publicados no Amazon S3, de onde é possível recuperá-los e visualizá-los. Para obter mais informações, consulte [Flow logs in AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html) (Logs de fluxo do ).

É possível usar o Athena para consultar os logs de fluxo do Global Accelerator criando uma tabela que especifica o local deles no Amazon S3.

**Para criar a tabela de logs de fluxo do Global Accelerator**

1. Copie e cole a instrução DDL a seguir no console do Athena. Esta consulta especifica *ROW FORMAT DELIMITED* e omite a especificação de um [SerDe](serde-reference.md), o que significa que a consulta usa [`LazySimpleSerDe`](lazy-simple-serde.md). Nesta consulta, os campos terminam com um espaço.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS aga_flow_logs (
     version string,
     account string,
     acceleratorid string,
     clientip string,
     clientport int,
     gip string,
     gipport int,
     endpointip string,
     endpointport int,
     protocol string,
     ipaddresstype string,
     numpackets bigint,
     numbytes int,
     starttime int,
     endtime int,
     action string,
     logstatus string,
     agasourceip string,
     agasourceport int,
     endpointregion string,
     agaregion string,
     direction string,
     vpc_id string,
     reject_reason string
   )
   PARTITIONED BY (dt string)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ' '
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region/'
   TBLPROPERTIES ("skip.header.line.count"="1");
   ```

1. Modifique o valor `LOCATION` para apontar para o bucket do Amazon S3 que contém os dados de log.

   ```
   's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/'
   ```

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `aga_flow_logs`, disponibilizando os dados dela para consultas.

1. Crie partições para ler os dados, conforme a consulta de exemplo a seguir. Esta consulta cria uma única partição para uma data especificada. Substitua os espaços reservados por data e local.

   ```
   ALTER TABLE aga_flow_logs
   ADD PARTITION (dt='YYYY-MM-dd')
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/YYYY/MM/dd';
   ```

## Consultas de exemplo para logs de fluxo do AWS Global Accelerator
<a name="querying-global-accelerator-flow-logs-examples"></a>

**Example – Listar as solicitações que passam por um local da borda específico**  
A consulta de exemplo a seguir lista as solicitações que passaram pelo ponto de presença do LHR. Use o operador `LIMIT` para limitar o número de logs a serem consultados por vez.  

```
SELECT 
  clientip, 
  agaregion, 
  protocol, 
  action 
FROM 
  aga_flow_logs 
WHERE 
  agaregion LIKE 'LHR%' 
LIMIT 
  100;
```

**Example – Listar os endereços IP dos endpoints que recebem a maioria das solicitações HTTPS**  
Para ver quais endereços IP do endpoint estão recebendo o maior número de solicitações HTTPS, use a seguinte consulta. Esta consulta conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna os 10 principais endereços IP.  

```
SELECT 
  SUM(numpackets) AS packetcount, 
  endpointip 
FROM 
  aga_flow_logs 
WHERE 
  endpointport = 443 
GROUP BY 
  endpointip 
ORDER BY 
  packetcount DESC 
LIMIT 
  10;
```

# Consultar descobertas do Amazon GuardDuty
<a name="querying-guardduty"></a>

O [Amazon GuardDuty](https://aws.amazon.com/guardduty/) é um serviço de monitoramento de segurança que ajuda a identificar atividades inesperadas e potencialmente mal-intencionadas ou não autorizadas em seu ambiente AWS. Quando detecta atividades inesperadas e potencialmente mal-intencionadas, o GuardDuty gera [descobertas](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings.html) de segurança que você pode exportar para o Amazon S3 para armazenamento e análise. Depois de exportar as descobertas para o Amazon S3, você pode usar o Athena para consultá-las. Este artigo mostra como criar uma tabela no Athena para as descobertas do GuardDuty e consultá-las.

Para obter mais informações sobre o Amazon GuardDuty, consulte o [Manual do usuário do Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/).

## Pré-requisitos
<a name="querying-guardduty-prerequisites"></a>
+ Habilite o recurso GuardDuty para exportar as descobertas para o Amazon S3. Para conhecer as etapas, consulte [Exporting findings](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html) (Exportar descobertas) no Guia do usuário do Amazon GuardDuty.

## Criar uma tabela no Athena para as descobertas do GuardDuty
<a name="querying-guardduty-creating-a-table-in-athena-for-guardduty-findings"></a>

Para consultar as descobertas do GuardDuty no Athena, crie uma tabela para elas.

**Para criar uma tabela no Athena para as descobertas do GuardDuty**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Copie a instrução DDL a seguir no console do Athena. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'` para apontar para as descobertas do GuardDuty no Amazon S3.

   ```
   CREATE EXTERNAL TABLE `gd_logs` (
     `schemaversion` string,
     `accountid` string,
     `region` string,
     `partition` string,
     `id` string,
     `arn` string,
     `type` string,
     `resource` string,
     `service` string,
     `severity` string,
     `createdat` string,
     `updatedat` string,
     `title` string,
     `description` string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'
    TBLPROPERTIES ('has_encrypted_data'='true')
   ```
**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

1. Execute a consulta no console do Athena para registrar a tabela `gd_logs`. Quando a consulta for concluída, as descobertas estarão prontas para serem consultadas no Athena.

## Consultas de exemplo
<a name="querying-guardduty-examples"></a>

Os exemplos a seguir mostram como consultar as descobertas do GuardDuty no Athena.

**Example – Exfiltração de dados de DNS**  
A consulta a seguir retorna informações sobre as instâncias do Amazon EC2 que podem estar exfiltrando dados por meio das consultas de DNS.  

```
SELECT
    title,
    severity,
    type,
    id AS FindingID,
    accountid,
    region,
    createdat,
    updatedat,
    json_extract_scalar(service, '$.count') AS Count,
    json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID,
    json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType,
    json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName,
    json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol,
    json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blocked
FROM gd_logs
WHERE type = 'Trojan:EC2/DNSDataExfiltration'
ORDER BY severity DESC
```

**Example – Acesso de usuário do IAM não autorizado**  
A consulta a seguir retorna todos os tipos de descoberta `UnauthorizedAccess:IAMUser` referentes a um principal do IAM de todas as regiões.   

```
SELECT title,
         severity,
         type,
         id,
         accountid,
         region,
         createdat,
         updatedat,
         json_extract_scalar(service, '$.count') AS Count, 
         json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, 
         json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalled
FROM gd_logs
WHERE type LIKE '%UnauthorizedAccess:IAMUser%' 
ORDER BY severity desc;
```

## Dicas para consultar descobertas do GuardDuty
<a name="querying-guardduty-tips"></a>

Ao criar a consulta, mantenha os seguintes pontos em mente.
+ Para extrair dados de campos JSON aninhados, use as funções `json_extract` ou `json_extract_scalar` do Presto. Para ter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md).
+ Certifique-se de que todos os caracteres nos campos JSON estejam em minúsculas.
+  Para obter informações sobre como baixar resultados de consulta, verifique [Baixar arquivos de resultados de consultas via console do Athena](saving-query-results.md).

# Consultar logs do AWS Network Firewall
<a name="querying-network-firewall-logs"></a>

AWS Network Firewall é um serviço gerenciado que você pode usar para implantar proteções de rede essenciais em suas instâncias do Amazon Virtual Private Cloud. O AWS Network Firewall funciona em conjunto com o AWS Firewall Manager para que você possa criar políticas com base nas regras do AWS Network Firewall e aplicá-las a suas VPCs e contas de maneira centralizada. Para obter mais informações sobre AWS Network Firewall, consulte [AWS Network Firewall](https://aws.amazon.com/network-firewall/).

É possível configurar os logs do AWS Network Firewall para o tráfego que você encaminha para o mecanismo de regras com estado do firewall. Os logs apresentam informações detalhadas sobre o tráfego de rede, incluindo a hora em que o mecanismo com estado recebeu um pacote, os detalhes do pacote e qualquer ação de regra com estado realizada no pacote. Os logs são publicados no destino de logs que você configurou, de onde é possível recuperá-los e visualizá-los. Para obter mais informações, consulte [Registrar o tráfego de rede do AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html) no *Guia do desenvolvedor do AWS Network Firewall* (em inglês).

**Topics**
+ [

# Criar e consultar uma tabela para logs de alertas
](querying-network-firewall-logs-sample-alert-logs-table.md)
+ [

# Criar e consultar uma tabela para logs de fluxo de rede
](querying-network-firewall-logs-sample-netflow-logs-table.md)

# Criar e consultar uma tabela para logs de alertas
<a name="querying-network-firewall-logs-sample-alert-logs-table"></a>

1. Modifique o exemplo de instrução DDL a seguir para se adequar à estrutura do seu log de alertas. Pode ser necessário atualizar a instrução para incluir as colunas da versão mais recente dos logs. Para obter mais informações, consulte [Conteúdo de um log de firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html#firewall-logging-contents) no *Guia do desenvolvedor do AWS Network Firewall*.

   ```
   CREATE EXTERNAL TABLE network_firewall_alert_logs (
     firewall_name string,
     availability_zone string,
     event_timestamp string,
     event struct<
       timestamp:string,
       flow_id:bigint,
       event_type:string,
       src_ip:string,
       src_port:int,
       dest_ip:string,
       dest_port:int,
       proto:string,
       app_proto:string,
       sni:string,
       tls_inspected:boolean,
       tls_error:struct<
         error_message:string>,
       revocation_check:struct<
         leaf_cert_fpr:string,
         status:string,
         action:string>,
       alert:struct<
         alert_id:string,
         alert_type:string,
         action:string,
         signature_id:int,
         rev:int,
         signature:string,
         category:string,
         severity:int,
         rule_name:string,
         alert_name:string,
         alert_severity:string,
         alert_description:string,
         file_name:string,
         file_hash:string,
         packet_capture:string,
         reference_links:array<string>
       >, 
       src_country:string, 
       dest_country:string, 
       src_hostname:string, 
       dest_hostname:string, 
       user_agent:string, 
       url:string
      >
   )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://amzn-s3-demo-bucket/path_to_alert_logs_folder/';
   ```

1. Modifique a cláusula `LOCATION` para especificar a pasta para seus logs no Amazon S3.

1. Execute sua consulta `CREATE TABLE` no editor de consultas do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `network_firewall_alert_logs`, preparando os dados para os quais ela direciona para as consultas.

## Consulta de exemplo
<a name="querying-network-firewall-logs-alert-log-sample-query"></a>

O exemplo de consulta de log de alertas nesta seção filtra os eventos nos quais a inspeção TLS foi realizada e que têm alertas com um nível de severidade de 2 ou superior.

A consulta usa aliases para criar cabeçalhos de coluna de saída que mostram o `struct` ao qual a coluna pertence. Por exemplo, o título da coluna do campo `event.alert.category` é `event_alert_category` em vez de apenas`category`. Para personalizar ainda mais os nomes das colunas, você pode modificar os aliases de acordo com suas preferências. Por exemplo, você pode usar sublinhados ou outros separadores para delimitar os nomes de `struct` e os nomes dos campos. 

Lembre-se de modificar os nomes de colunas e as referências de `struct` com base na definição da tabela e nos campos que você deseja no resultado da consulta.

```
SELECT 
  firewall_name,
  availability_zone,
  event_timestamp,
  event.timestamp AS event_timestamp,
  event.flow_id AS event_flow_id,
  event.event_type AS event_type,
  event.src_ip AS event_src_ip,
  event.src_port AS event_src_port,
  event.dest_ip AS event_dest_ip,
  event.dest_port AS event_dest_port,
  event.proto AS event_protol,
  event.app_proto AS event_app_proto,
  event.sni AS event_sni,
  event.tls_inspected AS event_tls_inspected,
  event.tls_error.error_message AS event_tls_error_message,
  event.revocation_check.leaf_cert_fpr AS event_revocation_leaf_cert,
  event.revocation_check.status AS event_revocation_check_status,
  event.revocation_check.action AS event_revocation_check_action,
  event.alert.alert_id AS event_alert_alert_id,
  event.alert.alert_type AS event_alert_alert_type,
  event.alert.action AS event_alert_action,
  event.alert.signature_id AS event_alert_signature_id,
  event.alert.rev AS event_alert_rev,
  event.alert.signature AS event_alert_signature,
  event.alert.category AS event_alert_category,
  event.alert.severity AS event_alert_severity,
  event.alert.rule_name AS event_alert_rule_name,
  event.alert.alert_name AS event_alert_alert_name,
  event.alert.alert_severity AS event_alert_alert_severity,
  event.alert.alert_description AS event_alert_alert_description,
  event.alert.file_name AS event_alert_file_name,
  event.alert.file_hash AS event_alert_file_hash,
  event.alert.packet_capture AS event_alert_packet_capture,
  event.alert.reference_links AS event_alert_reference_links,
  event.src_country AS event_src_country,
  event.dest_country AS event_dest_country,
  event.src_hostname AS event_src_hostname,
  event.dest_hostname AS event_dest_hostname,
  event.user_agent AS event_user_agent,
  event.url AS event_url
FROM 
  network_firewall_alert_logs 
WHERE 
  event.alert.severity >= 2
  AND event.tls_inspected = true 
LIMIT 10;
```

# Criar e consultar uma tabela para logs de fluxo de rede
<a name="querying-network-firewall-logs-sample-netflow-logs-table"></a>

1. Modifique o exemplo de instrução DDL a seguir para se adequar à estrutura do seu log de fluxo de redes. Pode ser necessário atualizar a instrução para incluir as colunas da versão mais recente dos logs. Para obter mais informações, consulte [Conteúdo de um log de firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html#firewall-logging-contents) no *Guia do desenvolvedor do AWS Network Firewall*.

   ```
   CREATE EXTERNAL TABLE network_firewall_netflow_logs (
     firewall_name string,
     availability_zone string,
     event_timestamp string,
     event struct<
       timestamp:string,
       flow_id:bigint,
       event_type:string,
       src_ip:string,
       src_port:int,
       dest_ip:string,
       dest_port:int,
       proto:string,
       app_proto:string,
       tls_inspected:boolean,
       netflow:struct<
         pkts:int,
         bytes:bigint,
         start:string,
         `end`:string,
         age:int,
         min_ttl:int,
         max_ttl:int,
         tcp_flags:struct<
           syn:boolean,
           fin:boolean,
           rst:boolean,
           psh:boolean,
           ack:boolean,
           urg:boolean
           >
         >
       >
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
   LOCATION 's3://amzn-s3-demo-bucket/path_to_netflow_logs_folder/';
   ```

1. Modifique a cláusula `LOCATION` para especificar a pasta para seus logs no Amazon S3.

1. Execute a consulta `CREATE TABLE` no editor de consultas do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `network_firewall_netflow_logs`, preparando os dados para os quais ela direciona para as consultas.

## Consulta de exemplo
<a name="querying-network-firewall-logs-netflow-log-sample-query"></a>

O exemplo de consulta de log do Netflow nesta seção filtra os eventos nos quais a inspeção TLS foi realizada.

A consulta usa aliases para criar cabeçalhos de coluna de saída que mostram o `struct` ao qual a coluna pertence. Por exemplo, o título da coluna do campo `event.netflow.bytes` é `event_netflow_bytes` em vez de apenas`bytes`. Para personalizar ainda mais os nomes das colunas, você pode modificar os aliases de acordo com suas preferências. Por exemplo, você pode usar sublinhados ou outros separadores para delimitar os nomes de `struct` e os nomes dos campos. 

Lembre-se de modificar os nomes de colunas e as referências de `struct` com base na definição da tabela e nos campos que você deseja no resultado da consulta.

```
SELECT
  event.src_ip AS event_src_ip,
  event.dest_ip AS event_dest_ip,
  event.proto AS event_proto,
  event.app_proto AS event_app_proto,
  event.tls_inspected AS event_tls_inspected,
  event.netflow.pkts AS event_netflow_pkts,
  event.netflow.bytes AS event_netflow_bytes,
  event.netflow.tcp_flags.syn AS event_netflow_tcp_flags_syn 
FROM network_firewall_netflow_logs 
WHERE event.tls_inspected = true
```

# Consultar logs do Network Load Balancer
<a name="networkloadbalancer-classic-logs"></a>

Use o Athena para analisar e processar os logs do Network Load Balancer. Esses logs recebem informações detalhadas sobre as solicitações Transport Layer Security (TLS) enviadas ao Network Load Balancer. Você pode usar esses logs de acesso para analisar padrões de tráfego e solucionar problemas. 

Antes de analisar os logs de acesso do Network Load Balancer, habilite-os e configure-os para serem salvos no bucket de destino do Amazon S3. Para obter mais informações, além de informações sobre cada entrada de log de acesso do Network Load Balancer, consulte [Access logs for your Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html).

**Para criar a tabela de logs do Network Load Balancer**

1. Copie e cole a instrução DDL a seguir no console do Athena. Verifique a [sintaxe ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html#access-log-file-format) dos registros de log do Network Load Balancer. Atualize a instrução conforme necessário para incluir as colunas e o regex correspondentes aos seus registros de log.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS nlb_tls_logs (
               type string,
               version string,
               time string,
               elb string,
               listener_id string,
               client_ip string,
               client_port int,
               target_ip string,
               target_port int,
               tcp_connection_time_ms double,
               tls_handshake_time_ms double,
               received_bytes bigint,
               sent_bytes bigint,
               incoming_tls_alert int,
               cert_arn string,
               certificate_serial string,
               tls_cipher_suite string,
               tls_protocol_version string,
               tls_named_group string,
               domain_name string,
               alpn_fe_protocol string,
               alpn_be_protocol string,
               alpn_client_preference_list string,
               tls_connection_creation_time string
               )
               ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
               WITH SERDEPROPERTIES (
               'serialization.format' = '1',
               'input.regex' = 
               '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/AWS_account_ID/elasticloadbalancing/region';
   ```

1. Modifique o bucket `LOCATION` do Amazon S3 para especificar o destino dos logs do Network Load Balancer.

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `nlb_tls_logs`, preparando os dados dela para as consultas.

## Consultas de exemplo
<a name="query-nlb-example"></a>

Para ver quantas vezes um certificado é usado, use uma consulta semelhante a este exemplo:

```
SELECT count(*) AS 
         ct,
         cert_arn
FROM "nlb_tls_logs"
GROUP BY  cert_arn;
```

A consulta a seguir mostra quantos usuários estão usando uma versão do TLS anterior à versão 1.3:

```
SELECT tls_protocol_version,
         COUNT(tls_protocol_version) AS 
         num_connections,
         client_ip
FROM "nlb_tls_logs"
WHERE tls_protocol_version < 'tlsv13'
GROUP BY tls_protocol_version, client_ip;
```

Use a consulta a seguir para identificar conexões que levam muito tempo de handshake do TLS.

```
SELECT *
FROM "nlb_tls_logs"
ORDER BY  tls_handshake_time_ms DESC 
LIMIT 10;
```

Use a consulta a seguir para identificar e contar as versões de protocolo TLS e os conjuntos de cifras que foram negociados nos últimos 30 dias.

```
SELECT tls_cipher_suite,
         tls_protocol_version,
         COUNT(*) AS ct
FROM "nlb_tls_logs"
WHERE from_iso8601_timestamp(time) > current_timestamp - interval '30' day
        AND NOT tls_protocol_version = '-'
GROUP BY tls_cipher_suite, tls_protocol_version
ORDER BY ct DESC;
```

# Consultar logs de consultas do Amazon Route 53 Resolver
<a name="querying-r53-resolver-logs"></a>

Você pode criar tabelas do Athena para seus logs de consulta do Amazon Route 53 Resolver e consultá-las no Athena.

O log de consulta do Route 53 Resolver é destinado ao registro de consultas de DNS feitas por recursos em uma VPC, recursos on-premises que usam endpoints do Resolver de entrada, consultas que usam um endpoint do Resolver de saída para resolução de DNS recursiva e consultas que usam regras de firewall de DNS do Route 53 Resolver para bloquear, permitir ou monitorar uma lista de domínios. Para obter mais informações sobre o log de consulta do Resolver, veja [Log de consulta do Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs.html) no *Guia do desenvolvedor do Amazon Route 53*. Para obter informações sobre cada um dos campos nos logs, consulte [Valores que aparecem em logs de consultas do Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs-format.html) no *Guia do desenvolvedor do Amazon Route 53*.

**Topics**
+ [

# Criar a tabela de logs de consulta do resolvedor
](querying-r53-resolver-logs-creating-the-table.md)
+ [

# Usar projeção de partições
](querying-r53-resolver-logs-partitioning-example.md)
+ [

# Consultas de exemplo
](querying-r53-resolver-logs-example-queries.md)

# Criar a tabela de logs de consulta do resolvedor
<a name="querying-r53-resolver-logs-creating-the-table"></a>

Você pode usar o editor de consultas no console do Athena para criar e consultar uma tabela com os logs de consulta do Route 53 Resolver.

**Para criar e consultar uma tabela do Athena com os logs de consulta do Route 53 Resolver**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas do Athena, insira a instrução `CREATE TABLE` a seguir. Substitua os valores da cláusula `LOCATION` pelos correspondentes ao local dos logs do Resolver no Amazon S3.

   ```
   CREATE EXTERNAL TABLE r53_rlogs (
     version string,
     account_id string,
     region string,
     vpc_id string,
     query_timestamp string,
     query_name string,
     query_type string,
     query_class
       string,
     rcode string,
     answers array<
       struct<
         Rdata: string,
         Type: string,
         Class: string>
       >,
     srcaddr string,
     srcport int,
     transport string,
     srcids struct<
       instance: string,
       resolver_endpoint: string
       >,
     firewall_rule_action string,
     firewall_rule_group_id string,
     firewall_domain_list_id string
    )
        
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/aws_account_id/vpcdnsquerylogs/{vpc-id}/'
   ```

   Como os dados de log de consulta do Resolver estão no formato JSON, a instrução CREATE TABLE usa a [Biblioteca SerDe do JSON](json-serde.md) para analisar os dados.
**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

1. Selecione **Executar consulta**. A instrução cria uma tabela do Athena chamada `r53_rlogs` com colunas que representam cada um dos campos em seus dados de log do Resolver.

1. No editor de consultas do console do Athena, execute a consulta a seguir para verificar se a tabela foi criada.

   ```
   SELECT * FROM "r53_rlogs" LIMIT 10
   ```

# Usar projeção de partições
<a name="querying-r53-resolver-logs-partitioning-example"></a>

O exemplo a seguir mostra uma declaração `CREATE TABLE` para logs de consulta do Resolver que usa projeção de partição e é particionada por VPC e por data. Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

```
CREATE EXTERNAL TABLE r53_rlogs (
  version string,
  account_id string,
  region string,
  vpc_id string,
  query_timestamp string,
  query_name string,
  query_type string,
  query_class string,
  rcode string,
  answers array<
    struct<
      Rdata: string,
      Type: string,
      Class: string>
    >,
  srcaddr string,
  srcport int,
  transport string,
  srcids struct<
    instance: string,
    resolver_endpoint: string
    >,
  firewall_rule_action string,
  firewall_rule_group_id string,
  firewall_domain_list_id string
)
PARTITIONED BY (
`date` string,
`vpc` string
)
ROW FORMAT SERDE      'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT          'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION              's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/'
TBLPROPERTIES(
'projection.enabled' = 'true',
'projection.vpc.type' = 'enum',
'projection.vpc.values' = 'vpc-6446ae02',
'projection.date.type' = 'date',
'projection.date.range' = '2023/06/26,NOW',
'projection.date.format' = 'yyyy/MM/dd',
'projection.date.interval' = '1',
'projection.date.interval.unit' = 'DAYS',
'storage.location.template' = 's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/${vpc}/${date}/'
)
```

# Consultas de exemplo
<a name="querying-r53-resolver-logs-example-queries"></a>

Os exemplos a seguir mostram algumas consultas do Athena que você pode executar em seus logs de consulta do Resolver.

## Exemplo 1: logs de consulta em ordem decrescente de query\$1timestamp
<a name="querying-r53-resolver-logs-example-1-query-logs-in-descending-query_timestamp-order"></a>

A consulta a seguir exibe os resultados do log em ordem decrescente de `query_timestamp`.

```
SELECT * FROM "r53_rlogs"
ORDER BY query_timestamp DESC
```

## Exemplo 2: logs de consulta com horários de início e de término específicos
<a name="querying-r53-resolver-logs-example-2-query-logs-within-specified-start-and-end-times"></a>

As consultas a seguir analisam os logs entre meia-noite e 8h no dia 24 de setembro de 2020. Substitua os horários de início e de término de acordo com os seus requisitos.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode
FROM "r53_rlogs"
WHERE (parse_datetime(query_timestamp,'yyyy-MM-dd''T''HH:mm:ss''Z')
     BETWEEN parse_datetime('2020-09-24-00:00:00','yyyy-MM-dd-HH:mm:ss') 
     AND parse_datetime('2020-09-24-00:08:00','yyyy-MM-dd-HH:mm:ss'))
ORDER BY query_timestamp DESC
```

## Exemplo 3: logs de consulta baseados em um padrão de nome especificado de consulta de DNS
<a name="querying-r53-resolver-logs-example-3-query-logs-based-on-a-specified-dns-query-name-pattern"></a>

A consulta a seguir seleciona os registros com nome de consulta que inclui a string “example.com”.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE query_name LIKE '%example.com%'
ORDER BY query_timestamp DESC
```

## Exemplo 4: solicitações de log de consulta sem resposta
<a name="querying-r53-resolver-logs-example-4-query-log-requests-with-no-answer"></a>

A consulta a seguir seleciona as entradas de log em que a solicitação não recebeu resposta.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE cardinality(answers) = 0
```

## Exemplo 5: logs de consulta com uma resposta específica
<a name="querying-r53-resolver-logs-example-5-query-logs-with-a-specific-answer"></a>

A consulta a seguir mostra os logs nos quais o valor `answer.Rdata` tem o endereço IP especificado.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answer.Rdata
FROM "r53_rlogs"
CROSS JOIN UNNEST(r53_rlogs.answers) as st(answer)
WHERE answer.Rdata='203.0.113.16';
```

# Consultar logs de eventos do Amazon SES
<a name="querying-ses-logs"></a>

É possível utilizar o Amazon Athena para consultar logs de eventos do [Amazon Simple Email Service](https://aws.amazon.com/ses/) (Amazon SES).

O Amazon SES é uma plataforma de e-mail que oferece uma forma conveniente e com bom custo-benefício de enviar e receber e-mails usando seus próprios endereços de e-mail e domínios. Você pode monitorar suas atividades de envio do Amazon SES em nível granular usando eventos, métricas e estatísticas.

Com base nas características que você define, é possível publicar eventos do Amazon SES no [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/), no [Amazon Data Firehose](https://aws.amazon.com/kinesis/data-firehose/) ou no [Amazon Simple Notification Service](https://aws.amazon.com/sns/). Depois que as informações forem armazenadas no Amazon S3, você poderá consultá-las no Amazon Athena. 

Para ver um exemplo de declaração `CREATE TABLE` do Athena para os logs do Amazon SES, incluindo etapas sobre como criar visualizações e nivelar arrays aninhadas nos dados do log de eventos do Amazon SES, consulte "Step 3: Using Amazon Athena to query the SES event logs" na postagem do blog da AWS, [Analyzing Amazon SES event data with AWS Analytics Services](https://aws.amazon.com/blogs/messaging-and-targeting/analyzing-amazon-ses-event-data-with-aws-analytics-services/).

# Consultar os logs de fluxo do Amazon VPC
<a name="vpc-flow-logs"></a>

Os logs de fluxo do Amazon Virtual Private Cloud capturam informações do tráfego de IP de entrada e saída das interfaces de rede em uma VPC. Use os logs para investigar padrões de tráfego de rede e identificar ameaças e riscos em toda a rede da VPC.

Para consultar seus logs de fluxo da Amazon VPC, você tem duas opções:

****
+ **Console do Amazon VPC**: use o recurso de integração do Athena no console do Amazon VPC para gerar um modelo do CloudFormation que cria um banco de dados, um grupo de trabalho e uma tabela de logs de fluxo do Athena com particionamento para você. O modelo também cria um conjunto de [consultas de log de fluxo predefinidas](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html#predefined-queries) que você pode usar para obter insights sobre o tráfego que passa pela VPC.

  Para obter mais informações sobre essa abordagem, consulte [Consultar logs de fluxo usando o Amazon Athena](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html) no *Guia do usuário da Amazon VPC*.
+ **Console do Amazon Athena**: crie suas tabelas e consultas diretamente no console do Athena. Para obter mais informações, continue lendo esta página.

Antes de começar a consultar os logs no Athena, [habilite os logs de fluxo da VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/flow-logs.html) e configure-os para serem salvos em seu bucket do Amazon S3. Depois de criar os logs, deixe-os em execução por alguns minutos para coletar alguns dados. Os logs são criados no formato de compactação GZIP que o Athena permite que você consulte diretamente. 

Ao criar um log de fluxo da VPC, você pode usar um formato personalizado quando desejar especificar os campos que devem ser retornados no log de fluxo e a ordem em que devem aparecer. Para obter mais informações sobre registros de logs de fluxo, consulte [Registros de log de fluxo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) no *Guia do usuário da Amazon VPC*.

## Considerações e limitações
<a name="vpc-flow-logs-common-considerations"></a>

Ao criar tabelas no Athena para logs de fluxo da Amazon VPC, lembre-se dos seguintes pontos:
+ Por padrão, no Athena, o Parquet acessará as colunas por nome. Para obter mais informações, consulte [Lidar com atualizações de esquemas](handling-schema-updates-chapter.md).
+ Use os nomes nos registros de log de fluxo para os nomes das colunas no Athena. Os nomes das colunas no esquema do Athena devem corresponder exatamente aos nomes dos campos nos logs de fluxo da Amazon VPC, com as seguintes diferenças: 
  + Substitua os hifens nos nomes dos campos do log da Amazon VPC por sublinhados nos nomes das colunas do Athena. Para obter informações sobre caracteres aceitáveis em nomes de bancos de dados, nomes de tabelas e nomes de colunas no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).
  + Escape os nomes de registro do log de fluxo que são [palavras-chave reservadas](reserved-words.md) no Athena, colocando-os entre caracteres de crase. 
+ Os logs de fluxos da VPC são específicos da Conta da AWS. Quando você publica seus arquivos de log no Amazon S3, o caminho criado pela Amazon VPC no Amazon S3 inclui o ID da Conta da AWS que foi usada para criar o log de fluxo. Para obter mais informações, consulte [Publicar logs de fluxo no Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html), no *Guia do usuário da Amazon VPC*.

**Topics**
+ [

## Considerações e limitações
](#vpc-flow-logs-common-considerations)
+ [

# Criar e consultar uma tabela para logs de fluxo da Amazon VPC
](vpc-flow-logs-create-table-statement.md)
+ [

# Criar tabelas para logs de fluxo no formato Apache Parquet
](vpc-flow-logs-parquet.md)
+ [

# Criar e consultar uma tabela para logs de fluxo da Amazon VPC com o uso de projeção de partições
](vpc-flow-logs-partition-projection.md)
+ [

# Criar tabelas para logs de fluxo no formato do Apache Parquet com o uso de projeção de partições
](vpc-flow-logs-partition-projection-parquet-example.md)
+ [

# Recursos adicionais
](query-examples-vpc-logs-additional-resources.md)

# Criar e consultar uma tabela para logs de fluxo da Amazon VPC
<a name="vpc-flow-logs-create-table-statement"></a>

O procedimento a seguir cria uma tabela da Amazon VPC para os logs de fluxo da Amazon VPC. Ao criar um log de fluxo em um formato personalizado, você cria uma tabela com campos que correspondem aos campos especificados quando criou o log de fluxo, na mesma ordem em que os especificou.

**Para criar uma tabela do Athena para logs de fluxo da Amazon VPC**

1. Insira uma instrução DDL como a que se segue no editor de consultas do console do Athena, seguindo as diretrizes na seção [Considerações e limitações](vpc-flow-logs.md#vpc-flow-logs-common-considerations). A instrução do exemplo cria uma tabela com as colunas de logs de fluxo da Amazon VPC nas versões 2 a 5, conforme documentado em [Registros de log de fluxo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records). Se você usar outro conjunto ou outra ordem de colunas, modifique a instrução conforme apropriado.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (`date` date)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ' '
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'
   TBLPROPERTIES ("skip.header.line.count"="1");
   ```

   Observe os seguintes pontos:
   + A consulta especifica `ROW FORMAT DELIMITED` e omite a especificação de um SerDe. Isso significa que a consulta usa [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md). Nesta consulta, os campos terminam com um espaço.
   + A cláusula `PARTITIONED BY` usa o tipo `date`. Isso torna possível usar operadores matemáticos em consultas para selecionar qual é mais antiga ou mais recente em relação a uma determinada data.
**nota**  
Como `date` é uma palavra-chave reservada em instruções DDL, é necessário fazer o escape dela com acentos graves. Para obter mais informações, consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).
   + Para um log de fluxo da VPC com um formato personalizado diferente, modifique os campos para que correspondam aos campos especificados ao criar o log de fluxo.

1. Modifique `LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'` para apontar para o bucket do Amazon S3 que contém os dados de log.

1. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela `vpc_flow_logs`, preparando os dados dela para você fazer as consultas.

1. Crie partições para poder ler os dados, conforme o exemplo de consulta a seguir. Esta consulta cria uma única partição para uma data especificada. Substitua os espaços reservados por data e local, conforme necessário. 
**nota**  
Esta consulta cria apenas uma única partição, para uma data especificada por você. Para automatizar o processo, use um script que execute essa consulta e crie partições dessa maneira para `year/month/day` ou use uma instrução `CREATE TABLE` que especifique a [projeção das partições](vpc-flow-logs-partition-projection.md).

   ```
   ALTER TABLE vpc_flow_logs
   ADD PARTITION (`date`='YYYY-MM-dd')
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';
   ```

## Exemplos de consulta para a tabela vpc\$1flow\$1logs
<a name="query-examples-vpc-logs"></a>

Use o editor de consultas no console do Athena para executar instruções SQL na tabela criada. É possível salvar as consultas, visualizar consultas anteriores ou baixar os resultados da consulta no formato CSV. Nos exemplos a seguir, substitua `vpc_flow_logs` pelo nome da tabela. Modifique os valores das colunas e outras variáveis de acordo com os seus requisitos.

A consulta de exemplo a seguir lista um máximo de 100 logs de fluxo para a data especificada.

```
SELECT * 
FROM vpc_flow_logs 
WHERE date = DATE('2020-05-04') 
LIMIT 100;
```

A consulta a seguir lista todas as conexões TCP rejeitadas e usa a coluna de partição de data recém-criada, `date`, para extrair dela o dia da semana em que ocorreram esses eventos.

```
SELECT day_of_week(date) AS
  day,
  date,
  interface_id,
  srcaddr,
  action,
  protocol
FROM vpc_flow_logs
WHERE action = 'REJECT' AND protocol = 6
LIMIT 100;
```

Para ver qual dos servidores está recebendo o maior número de solicitações HTTPS, use a consulta a seguir. Ela conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna os 10 principais da última semana.

```
SELECT SUM(packets) AS
  packetcount,
  dstaddr
FROM vpc_flow_logs
WHERE dstport = 443 AND date > current_date - interval '7' day
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10;
```

# Criar tabelas para logs de fluxo no formato Apache Parquet
<a name="vpc-flow-logs-parquet"></a>

O procedimento a seguir cria uma tabela da Amazon VPC para os logs de fluxo da Amazon VPC no formato Apache Parquet.

**Para criar uma tabela do Athena para logs de fluxo da Amazon VPC no formato Parquet**

1. Insira uma instrução DDL como a que se segue no editor de consultas do console do Athena, seguindo as diretrizes na seção [Considerações e limitações](vpc-flow-logs.md#vpc-flow-logs-common-considerations). A instrução do exemplo cria uma tabela com as colunas de logs de fluxo da Amazon VPC nas versões 2 a 5, conforme documentado em [Registros de log de fluxo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) no formato Parquet, com partição do Hive por hora. Se você não tiver partições por hora, remova `hour` da cláusula `PARTITIONED BY`.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs_parquet (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (
     `aws-account-id` string,
     `aws-service` string,
     `aws-region` string,
     `year` string, 
     `month` string, 
     `day` string,
     `hour` string
   )
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/prefix/AWSLogs/'
   TBLPROPERTIES (
     'EXTERNAL'='true', 
     'skip.header.line.count'='1'
     )
   ```

1. Modifique a amostra `LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/'` para apontar para o caminho do Amazon S3 que contém os dados de log.

1. Execute a consulta no console do Athena.

1. Se os dados estiverem em um formato compatível com o Hive, execute o comando a seguir no console do Athena para atualizar e carregar as partições do Hive no metastore. Após a conclusão da consulta, você pode consultar os dados na tabela `vpc_flow_logs_parquet`.

   ```
   MSCK REPAIR TABLE vpc_flow_logs_parquet
   ```

   Se não estiver usando dados compatíveis com o Hive, execute [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para carregar as partições.

Para obter mais informações sobre como usar o Athena para consultar logs de fluxo da Amazon VPC no formato Parquet, consulte a publicação [Optimize performance and reduce costs for network analytics with VPC Flow Logs in Apache Parquet format](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/) (Otimize a performance e reduza os custos de análise de rede com logs de fluxo da VPC no formato Apache Parquet) no *blog sobre big data da AWS*.

# Criar e consultar uma tabela para logs de fluxo da Amazon VPC com o uso de projeção de partições
<a name="vpc-flow-logs-partition-projection"></a>

Use uma instrução `CREATE TABLE` como a que se segue para criar uma tabela, particionar a tabela e preencher as partições automaticamente usando [projeção de partições](partition-projection.md). Substitua o nome da tabela `test_table_vpclogs` no exemplo pelo nome da tabela. Edite a cláusula `LOCATION` para especificar o bucket do Amazon S3 que contém os dados de log da Amazon VPC.

A instrução `CREATE TABLE` a seguir é para logs de fluxo da VPC fornecidos em um formato de particionamento em um estilo diferente do Hive. O exemplo permite a agregação de várias contas. Se você estiver centralizando logs de fluxo de VPC de diversas contas em um bucket do Amazon S3, o ID da conta deverá ser inserido no caminho do Amazon S3.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (accid string, region string, day string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION '$LOCATION_OF_LOGS'
TBLPROPERTIES
(
"skip.header.line.count"="1",
"projection.enabled" = "true",
"projection.accid.type" = "enum",
"projection.accid.values" = "$ACCID_1,$ACCID_2",
"projection.region.type" = "enum",
"projection.region.values" = "$REGION_1,$REGION_2,$REGION_3",
"projection.day.type" = "date",
"projection.day.range" = "$START_RANGE,NOW",
"projection.day.format" = "yyyy/MM/dd",
"storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/${accid}/vpcflowlogs/${region}/${day}"
)
```

## Exemplos de consulta para test\$1table\$1vpclogs
<a name="query-examples-vpc-logs-pp"></a>

Os exemplos de consulta a seguir consultam a `test_table_vpclogs` criada pela instrução `CREATE TABLE` anterior. Substitua `test_table_vpclogs` nas consultas pelo nome de sua própria tabela. Modifique os valores das colunas e outras variáveis de acordo com os seus requisitos.

Para retornar as primeiras 100 entradas de log de acesso em ordem cronológica para o período de tempo especificado, execute uma consulta como a que se segue.

```
SELECT *
FROM test_table_vpclogs
WHERE day >= '2021/02/01' AND day < '2021/02/28'
ORDER BY day ASC
LIMIT 100
```

Para ver qual servidor recebe os dez principais pacotes HTTP para um período de tempo especificado, execute uma consulta como a que se segue. A consulta conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna as 10 principais entradas da semana anterior.

```
SELECT SUM(packets) AS packetcount, 
       dstaddr
FROM test_table_vpclogs
WHERE dstport = 443
  AND day >= '2021/03/01'
  AND day < '2021/03/31'
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10
```

Para retornar os logs que foram criados durante um período de tempo especificado, execute uma consulta como a que se segue.

```
SELECT interface_id,
       srcaddr,
       action,
       protocol,
       to_iso8601(from_unixtime(start)) AS start_time,
       to_iso8601(from_unixtime("end")) AS end_time
FROM test_table_vpclogs
WHERE DAY >= '2021/04/01'
  AND DAY < '2021/04/30'
```

Para retornar os logs de acesso de um endereço IP de origem em um determinado intervalo de tempo, execute uma consulta como a que se segue.

```
SELECT *
FROM test_table_vpclogs
WHERE srcaddr = '10.117.1.22'
  AND day >= '2021/02/01'
  AND day < '2021/02/28'
```

Para listas as conexões TCP rejeitadas, execute uma consulta como a que se segue.

```
SELECT day,
       interface_id,
       srcaddr,
       action,
       protocol
FROM test_table_vpclogs
WHERE action = 'REJECT' AND protocol = 6 AND day >= '2021/02/01' AND day < '2021/02/28'
LIMIT 10
```

Para retornar os logs de acesso para o intervalo de endereços IP que começa com `10.117`, execute uma consulta como a que se segue.

```
SELECT *
FROM test_table_vpclogs
WHERE split_part(srcaddr,'.', 1)='10'
  AND split_part(srcaddr,'.', 2) ='117'
```

Para retornar os logs de acesso para um endereço IP de destino em um determinado intervalo de tempo, execute uma consulta como a que segue.

```
SELECT *
FROM test_table_vpclogs
WHERE dstaddr = '10.0.1.14'
  AND day >= '2021/01/01'
  AND day < '2021/01/31'
```

# Criar tabelas para logs de fluxo no formato do Apache Parquet com o uso de projeção de partições
<a name="vpc-flow-logs-partition-projection-parquet-example"></a>

A instrução `CREATE TABLE` de projeção de partições para logs de fluxo da VPC a seguir está no formato do Apache Parquet, não é compatível com o Hive e é particionada por hora e por data, em vez de por dia. Substitua o nome da tabela `test_table_vpclogs_parquet` no exemplo pelo nome da tabela. Edite a cláusula `LOCATION` para especificar o bucket do Amazon S3 que contém os dados de log da Amazon VPC.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs_parquet (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (region string, date string, hour string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/'
TBLPROPERTIES (
"EXTERNAL"="true",
"skip.header.line.count" = "1",
"projection.enabled" = "true",
"projection.region.type" = "enum",
"projection.region.values" = "us-east-1,us-west-2,ap-south-1,eu-west-1",
"projection.date.type" = "date",
"projection.date.range" = "2021/01/01,NOW",
"projection.date.format" = "yyyy/MM/dd",
"projection.hour.type" = "integer",
"projection.hour.range" = "00,23",
"projection.hour.digits" = "2",
"storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}"
)
```

# Recursos adicionais
<a name="query-examples-vpc-logs-additional-resources"></a>

Para obter mais informações sobre como usar o Athena para analisar logs de fluxo de VPC, consulte as postagens do blog de AWS big data a seguir:
+ [Analyze VPC Flow Logs with point-and-click Amazon Athena integration](https://aws.amazon.com/blogs/networking-and-content-delivery/analyze-vpc-flow-logs-with-point-and-click-amazon-athena-integration/) (Análise de logs de fluxo de VPC com a integração de apontar e clicar do Amazon Athena) 
+ [Como analisar logs de fluxo do VPC usando o Amazon Athena e o Quick](https://aws.amazon.com/blogs/big-data/analyzing-vpc-flow-logs-using-amazon-athena-and-amazon-quicksight/)
+ [Optimize performance and reduce costs for network analytics with VPC Flow Logs in Apache Parquet format](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/) (Otimização da performance e redução dos custos de análise de rede com os logs de fluxo de VPC no formato Apache Parquet)

# Consultar logs do AWS WAF
<a name="waf-logs"></a>

O AWS WAF é um firewall para aplicações Web que permite monitorar e controlar as solicitações HTTP e HTTPS que as aplicações Web protegidas recebem dos clientes. Você define como lidar com as solicitações da Web configurando regras dentro de uma lista de controle de acesso (ACL) da Web do AWS WAF. Depois, você protege uma aplicação Web associando a ela uma ACL da Web. Exemplos de recursos de aplicações Web que você pode proteger com o AWS WAF incluem distribuições do Amazon CloudFront, APIs REST do Amazon API Gateway e Application Load Balancers. Para obter mais informações sobre o AWS WAF, consulte [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) no *AWS WAF Developer Guide*.

Os logs do AWS WAF incluem informações sobre o tráfego que é analisado pela sua ACL da Web, como a hora em que o AWS WAF recebeu a solicitação do recurso da AWS, os detalhes da solicitação e a ação para a regra correspondente de cada solicitação.

Você pode configurar uma ACL da Web do AWS WAF para publicar logs em um de vários destinos, onde você pode consultá-los e visualizá-los. Para obter mais informações sobre a configuração de registro em log de ACL da Web e sobre o conteúdo dos logs do AWS WAF, consulte [Logging AWS WAF web ACL traffic](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) no *AWS WAF developer guide*.

Para obter informações sobre como usar o Athena para analisar logs do AWS WAF para obter informações sobre a detecção de ameaças e possíveis ataques à segurança, consulte a postagem do blog Networking & Content Delivery da AWS [Como usar as consultas do Amazon Athena para analisar logs do AWS WAF e fornecer a visibilidade necessária para a detecção de ameaças](https://aws.amazon.com/blogs/networking-and-content-delivery/how-to-use-amazon-athena-queries-to-analyze-aws-waf-logs-and-provide-the-visibility-needed-for-threat-detection/).

Para ver um exemplo de como agregar os logs do AWS WAF em um repositório central de data lake e consultá-los no Athena, leia a publicação em AWS Big Data Blog: [Analyzing AWS WAF logs with OpenSearch Service, Amazon Athena, and QuickSight](https://aws.amazon.com/blogs/big-data/analyzing-aws-waf-logs-with-amazon-es-amazon-athena-and-amazon-quicksight/).

Este tópico fornece exemplos de instruções `CREATE TABLE` para projeção de partições, particionamento manual e uma que não usa nenhum particionamento.

**nota**  
As instruções `CREATE TABLE` neste tópico podem ser usadas para logs do AWS WAF v1 e v2. Na v1, o campo `webaclid` contém um ID. Na v2, o campo `webaclid` contém um ARN completo. As instruções `CREATE TABLE` aqui tratam esse conteúdo de forma agnóstica usando o tipo de dados `string`.

**Topics**
+ [

# Criar uma tabela para logs do S3 do AWS WAF no Athena usando a projeção de partições
](create-waf-table-partition-projection.md)
+ [

# Criar uma tabela para logs do S3 do AWS WAF no Athena usando a partição manual
](create-waf-table-manual-partition.md)
+ [

# Criar uma tabela para logs do AWS WAF sem particionamento
](create-waf-table.md)
+ [

# Consultas de exemplo para logs do AWS WAF
](query-examples-waf-logs.md)

# Criar uma tabela para logs do S3 do AWS WAF no Athena usando a projeção de partições
<a name="create-waf-table-partition-projection"></a>

Como os logs do AWS WAF têm uma estrutura conhecida com um esquema de partição que você pode especificar antecipadamente, é possível reduzir o runtime das consultas e automatizar o gerenciamento de partições usando o recurso de [projeção de partições](partition-projection.md) do Athena. A projeção de partições adiciona automaticamente novas partições à medida que os dados são adicionados. Isso elimina a necessidade de adicionar manualmente as partições usando `ALTER TABLE ADD PARTITION`. 

A instrução de exemplo `CREATE TABLE` a seguir usa automaticamente a projeção de partições com base nos logs do AWS WAF desde uma data especificada até o dia de hoje para diferentes regiões da AWS. A cláusula `PARTITION BY` neste exemplo particiona por região e data, mas você pode modificá-la de acordo com seus requisitos. Modifique os campos conforme necessário para corresponder à saída do log. Nas cláusulas `LOCATION` e `storage.location.template`, substitua os espaços reservados *amzn-s3-demo-bucket* e *AWS\$1ACCOUNT\$1NUMBER* por valores que identifiquem o local do bucket do Amazon S3 dos seus logs do AWS WAF. Em ‭`projection.day.range`‬, substitua ‭*2021‭*/‭*01‭*‬/‭*01‭*‬ pela data de início que você desejar usar. Depois que você executar a consulta com êxito, poderá consultar a tabela. Você não precisa executar `ALTER TABLE ADD PARTITION` para carregar as partições. 

```
CREATE EXTERNAL TABLE `waf_logs_partition_projection`(
  `timestamp` bigint, 
  `formatversion` int, 
  `webaclid` string, 
  `terminatingruleid` string, 
  `terminatingruletype` string, 
  `action` string, 
  `terminatingrulematchdetails` array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>, 
  `httpsourcename` string, 
  `httpsourceid` string, 
  `rulegrouplist` array<struct<rulegroupid:string,terminatingrule:struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>>,nonterminatingmatchingrules:array<struct<ruleid:string,action:string,overriddenaction:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>,excludedrules:string>>, 
  `ratebasedrulelist` array<struct<ratebasedruleid:string,limitkey:string,maxrateallowed:int>>, 
  `nonterminatingmatchingrules` array<struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>, 
  `requestheadersinserted` array<struct<name:string,value:string>>, 
  `responsecodesent` string, 
  `httprequest` struct<clientip:string,country:string,headers:array<struct<name:string,value:string>>,uri:string,args:string,httpversion:string,httpmethod:string,requestid:string,fragment:string,scheme:string,host:string>,
  `labels` array<struct<name:string>>, 
  `captcharesponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `challengeresponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `ja3fingerprint` string, 
  `ja4fingerprint` string, 
  `oversizefields` string, 
  `requestbodysize` int, 
  `requestbodysizeinspectedbywaf` int)
  PARTITIONED BY ( 
   `log_time` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/testui/'
TBLPROPERTIES (
 'projection.enabled'='true',
  'projection.log_time.format'='yyyy/MM/dd/HH/mm',
  'projection.log_time.interval'='1',
  'projection.log_time.interval.unit'='minutes',
  'projection.log_time.range'='2025/01/01/00/00,NOW',
  'projection.log_time.type'='date',
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/testui/${log_time}')
```

**nota**  
O formato do caminho na cláusula `LOCATION` no exemplo corresponde ao padrão, mas pode variar com base na configuração AWS WAF implementada. Por exemplo, o exemplo de caminho de log do AWS WAF a seguir é para uma distribuição do CloudFront:   

```
s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/cloudfronyt/2025/01/01/00/00/
```
Se você tiver problemas ao criar ou consultar sua tabela de logs do AWS WAF, confirme a localização de seus dados de log ou [entre em contato com o Suporte](https://console.aws.amazon.com/support/home/).

Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

# Criar uma tabela para logs do S3 do AWS WAF no Athena usando a partição manual
<a name="create-waf-table-manual-partition"></a>

Esta seção descreve como criar uma tabela para logs do AWS WAF usando a partição manual.

Nas cláusulas `LOCATION` e `storage.location.template`, substitua os espaços reservados *amzn-s3-demo-bucket* e *AWS\$1ACCOUNT\$1NUMBER* por valores que identifiquem o local do bucket do Amazon S3 dos seus logs do AWS WAF.

```
CREATE EXTERNAL TABLE `waf_logs_manual_partition`(
  `timestamp` bigint, 
  `formatversion` int, 
  `webaclid` string, 
  `terminatingruleid` string, 
  `terminatingruletype` string, 
  `action` string, 
  `terminatingrulematchdetails` array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>, 
  `httpsourcename` string, 
  `httpsourceid` string, 
  `rulegrouplist` array<struct<rulegroupid:string,terminatingrule:struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>>,nonterminatingmatchingrules:array<struct<ruleid:string,action:string,overriddenaction:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>,excludedrules:string>>, 
  `ratebasedrulelist` array<struct<ratebasedruleid:string,limitkey:string,maxrateallowed:int>>, 
  `nonterminatingmatchingrules` array<struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>, 
  `requestheadersinserted` array<struct<name:string,value:string>>, 
  `responsecodesent` string, 
  `httprequest` struct<clientip:string,country:string,headers:array<struct<name:string,value:string>>,uri:string,args:string,httpversion:string,httpmethod:string,requestid:string,fragment:string,scheme:string,host:string>, 
  `labels` array<struct<name:string>>, 
  `captcharesponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `challengeresponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `ja3fingerprint` string, 
  `ja4fingerprint` string, 
  `oversizefields` string, 
  `requestbodysize` int, 
  `requestbodysizeinspectedbywaf` int)
  PARTITIONED BY ( `year` string, `month` string, `day` string, `hour` string, `min` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/webacl/'
```

# Criar uma tabela para logs do AWS WAF sem particionamento
<a name="create-waf-table"></a>

Esta seção descreve como criar uma tabela para logs do AWS WAF sem particionamento ou projeção de partição.

**nota**  
Por motivos de desempenho e custo, não recomendamos usar o esquema não particionado para consultas. Para obter mais informações, consulte [Top 10 Performance Tuning Tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (As 10 melhores dicas para ajustar o desempenho do Amazon Athena) no AWS Big Data Blog.

**Como criar a tabela de AWS WAF**

1. Copie e cole a instrução DDL a seguir no console do Athena. Modifique os campos conforme necessário para corresponder à saída do log. Modifique o valor de `LOCATION` do bucket do Amazon S3 de forma que ele corresponda a uma localização que armazena seus logs.

   Essa consulta usa o [OpenX JSON SerDe](openx-json-serde.md).
**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

   ```
   CREATE EXTERNAL TABLE `waf_logs`(
     `timestamp` bigint,
     `formatversion` int,
     `webaclid` string,
     `terminatingruleid` string,
     `terminatingruletype` string,
     `action` string,
     `terminatingrulematchdetails` array <
                                       struct <
                                           conditiontype: string,
                                           sensitivitylevel: string,
                                           location: string,
                                           matcheddata: array < string >
                                             >
                                        >,
     `httpsourcename` string,
     `httpsourceid` string,
     `rulegrouplist` array <
                         struct <
                             rulegroupid: string,
                             terminatingrule: struct <
                                                 ruleid: string,
                                                 action: string,
                                                 rulematchdetails: array <
                                                                      struct <
                                                                          conditiontype: string,
                                                                          sensitivitylevel: string,
                                                                          location: string,
                                                                          matcheddata: array < string >
                                                                             >
                                                                       >
                                                   >,
                             nonterminatingmatchingrules: array <
                                                                 struct <
                                                                     ruleid: string,
                                                                     action: string,
                                                                     overriddenaction: string,
                                                                     rulematchdetails: array <
                                                                                          struct <
                                                                                              conditiontype: string,
                                                                                              sensitivitylevel: string,
                                                                                              location: string,
                                                                                              matcheddata: array < string >
                                                                                                 >
                                                                      >,
                                                                     challengeresponse: struct <
                                                                               responsecode: string,
                                                                               solvetimestamp: string
                                                                                 >,
                                                                     captcharesponse: struct <
                                                                               responsecode: string,
                                                                               solvetimestamp: string
                                                                                 >
                                                                       >
                                                                >,
                             excludedrules: string
                               >
                          >,
   `ratebasedrulelist` array <
                            struct <
                                ratebasedruleid: string,
                                limitkey: string,
                                maxrateallowed: int
                                  >
                             >,
     `nonterminatingmatchingrules` array <
                                       struct <
                                           ruleid: string,
                                           action: string,
                                           rulematchdetails: array <
                                                                struct <
                                                                    conditiontype: string,
                                                                    sensitivitylevel: string,
                                                                    location: string,
                                                                    matcheddata: array < string >
                                                                       >
                                                                >,
                                           challengeresponse: struct <
                                                               responsecode: string,
                                                               solvetimestamp: string
                                                                >,
                                           captcharesponse: struct <
                                                               responsecode: string,
                                                               solvetimestamp: string
                                                                >
                                             >
                                        >,
     `requestheadersinserted` array <
                                   struct <
                                       name: string,
                                       value: string
                                         >
                                    >,
     `responsecodesent` string,
     `httprequest` struct <
                       clientip: string,
                       country: string,
                       headers: array <
                                   struct <
                                       name: string,
                                       value: string
                                         >
                                    >,
                       uri: string,
                       args: string,
                       httpversion: string,
                       httpmethod: string,
                       requestid: string
                         >,
     `labels` array <
                  struct <
                      name: string
                        >
                   >,
     `captcharesponse` struct <
                           responsecode: string,
                           solvetimestamp: string,
                           failureReason: string
                             >,
     `challengeresponse` struct <
                           responsecode: string,
                           solvetimestamp: string,
                           failureReason: string
                           >,
     `ja3Fingerprint` string,
     `oversizefields` string,
     `requestbodysize` int,
     `requestbodysizeinspectedbywaf` int
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/prefix/'
   ```

1. Execute a instrução `CREATE EXTERNAL TABLE` no editor de consultas do console do Athena. Isso registra a tabela `waf_logs` e disponibiliza os dados dela para consultas no Athena.

# Consultas de exemplo para logs do AWS WAF
<a name="query-examples-waf-logs"></a>

Muitos dos exemplos de consultas nesta seção usam a tabela de projeção de partições criada anteriormente. Modifique o nome da tabela, os valores das colunas e outras variáveis de acordo com os seus requisitos. Para melhorar a performance das suas consultas e reduzir os custos, adicione a coluna de partição à condição de filtro.

**Topics**
+ [

# Contar indicadores, endereços IP ou regras correspondentes
](query-examples-waf-logs-count.md)
+ [

# Consultar usando data e hora
](query-examples-waf-logs-date-time.md)
+ [

# Consultar solicitações ou endereços bloqueados
](query-examples-waf-logs-blocked-requests.md)

# Contar indicadores, endereços IP ou regras correspondentes
<a name="query-examples-waf-logs-count"></a>

Os exemplos nesta seção consultam contagens de itens de log de interesse.
+ [Count the number of referrers that contain a specified term](#waf-example-count-referrers-with-specified-term)
+ [Count all matched IP addresses in the last 10 days that have matched excluded rules](#waf-example-count-matched-ip-addresses)
+ [Group all counted managed rules by the number of times matched](#waf-example-group-managed-rules-by-times-matched)
+ [Group all counted custom rules by number of times matched](#waf-example-group-custom-rules-by-times-matched)

**Example  – Contar o número de indicadores que contêm um termo especificado**  
A consulta a seguir conta o número de indicadores que contêm o termo “amazon” para o intervalo de datas especificado.  

```
WITH test_dataset AS 
  (SELECT header FROM waf_logs
    CROSS JOIN UNNEST(httprequest.headers) AS t(header) WHERE "date" >= '2021/03/01'
    AND "date" < '2021/03/31')
SELECT COUNT(*) referer_count 
FROM test_dataset 
WHERE LOWER(header.name)='referer' AND header.value LIKE '%amazon%'
```

**Example  – Contar todos os endereços IP que corresponderam a regras excluídas nos últimos 10 dias**  
A consulta a seguir conta o número de vezes nos últimos 10 dias que o endereço IP correspondeu à regra excluída no grupo de regras.   

```
WITH test_dataset AS 
  (SELECT * FROM waf_logs 
    CROSS JOIN UNNEST(rulegrouplist) AS t(allrulegroups))
SELECT 
  COUNT(*) AS count, 
  "httprequest"."clientip", 
  "allrulegroups"."excludedrules",
  "allrulegroups"."ruleGroupId"
FROM test_dataset 
WHERE allrulegroups.excludedrules IS NOT NULL AND from_unixtime(timestamp/1000) > now() - interval '10' day
GROUP BY "httprequest"."clientip", "allrulegroups"."ruleGroupId", "allrulegroups"."excludedrules"
ORDER BY count DESC
```

**Example  – Agrupar todas as regras gerenciadas contadas pelo número de vezes de correspondência**  
Se você definiu as ações de regras do grupo de regras como Count na configuração de ACL da Web antes de 27 de outubro de 2022, o AWS WAF salvou suas substituições no JSON da ACL da Web como `excludedRules`. Agora, a configuração JSON para substituir uma regra para Count está nas configurações `ruleActionOverrides`. Para obter mais informações, consulte [Substituições de ações em grupos de regras](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-rule-group-override-options.html) no *Guia do desenvolvedor do AWS WAF*. Para extrair regras gerenciadas no modo Count da nova estrutura de logs, consulte `nonTerminatingMatchingRules` na seção `ruleGroupList` em vez do campo `excludedRules`, como no exemplo a seguir.  

```
SELECT
 count(*) AS count,
 httpsourceid,
 httprequest.clientip,
 t.rulegroupid, 
 t.nonTerminatingMatchingRules
FROM "waf_logs" 
CROSS JOIN UNNEST(rulegrouplist) AS t(t) 
WHERE action <> 'BLOCK' AND cardinality(t.nonTerminatingMatchingRules) > 0 
GROUP BY t.nonTerminatingMatchingRules, action, httpsourceid, httprequest.clientip, t.rulegroupid 
ORDER BY "count" DESC 
Limit 50
```

**Example  – Agrupar todas as regras personalizadas contadas pelo número de vezes de correspondência**  
A consulta a seguir agrupa todas as regras personalizadas contadas pelo número de vezes de correspondência.  

```
SELECT
  count(*) AS count,
         httpsourceid,
         httprequest.clientip,
         t.ruleid,
         t.action
FROM "waf_logs" 
CROSS JOIN UNNEST(nonterminatingmatchingrules) AS t(t) 
WHERE action <> 'BLOCK' AND cardinality(nonTerminatingMatchingRules) > 0 
GROUP BY t.ruleid, t.action, httpsourceid, httprequest.clientip 
ORDER BY "count" DESC
Limit 50
```

Para obter informações sobre os locais de log de regras personalizadas e grupos de regras gerenciados, consulte [Monitoramento e ajuste](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing-activities.html) no *Guia do desenvolvedor do AWS WAF*.

# Consultar usando data e hora
<a name="query-examples-waf-logs-date-time"></a>

Os exemplos desta seção incluem consultas que usam valores de data e hora.
+ [Return the timestamp field in human-readable ISO 8601 format](#waf-example-return-human-readable-timestamp)
+ [Return records from the last 24 hours](#waf-example-return-records-last-24-hours)
+ [Return records for a specified date range and IP address](#waf-example-return-records-date-range-and-ip)
+ [For a specified date range, count the number of IP addresses in five minute intervals](#waf-example-count-ip-addresses-in-date-range)
+ [Count the number of X-Forwarded-For IP in the last 10 days](#waf-example-count-x-forwarded-for-ip)

**Example  – Retornar o campo de carimbo de data/hora no formato ISO 8601 legível**  
A consulta a seguir usa as funções `from_unixtime` e `to_iso8601` para retornar o campo `timestamp` no formato ISO 8601 legível (por exemplo, `2019-12-13T23:40:12.000Z` em vez de `1576280412771`). A consulta também retorna o nome, o ID e a solicitação da fonte HTTP.   

```
SELECT to_iso8601(from_unixtime(timestamp / 1000)) as time_ISO_8601,
       httpsourcename,
       httpsourceid,
       httprequest
FROM waf_logs
LIMIT 10;
```

**Example  – Retornar os registros das últimas 24 horas**  
A consulta a seguir usa um filtro na cláusula `WHERE` para retornar o nome, o ID e os campos de solicitação da fonte HTTP dos registros nas últimas 24 horas.  

```
SELECT to_iso8601(from_unixtime(timestamp/1000)) AS time_ISO_8601, 
       httpsourcename, 
       httpsourceid, 
       httprequest 
FROM waf_logs
WHERE from_unixtime(timestamp/1000) > now() - interval '1' day
LIMIT 10;
```

**Example  – Retornar os registros para um intervalo de datas e endereço IP especificados**  
A consulta a seguir lista os registros em um intervalo de datas especificado para um endereço IP de cliente especificado.  

```
SELECT * 
FROM waf_logs 
WHERE httprequest.clientip='53.21.198.66' AND "date" >= '2021/03/01' AND "date" < '2021/03/31'
```

**Example  – Para um intervalo de datas especificado, contar o número de endereços IP em intervalos de cinco minutos**  
A consulta a seguir conta, durante um determinado intervalo de datas, o número de endereços IP em intervalos de cinco minutos.  

```
WITH test_dataset AS 
  (SELECT 
     format_datetime(from_unixtime((timestamp/1000) - ((minute(from_unixtime(timestamp / 1000))%5) * 60)),'yyyy-MM-dd HH:mm') AS five_minutes_ts,
     "httprequest"."clientip" 
     FROM waf_logs 
     WHERE "date" >= '2021/03/01' AND "date" < '2021/03/31')
SELECT five_minutes_ts,"clientip",count(*) ip_count 
FROM test_dataset 
GROUP BY five_minutes_ts,"clientip"
```

**Example  – Contar o número de X-Forwarded-For IP nos últimos 10 dias**  
A consulta a seguir filtra os cabeçalhos de solicitação e conta o número de X-Forwarded-For IP nos últimos 10 dias.  

```
WITH test_dataset AS
  (SELECT header
   FROM waf_logs
   CROSS JOIN UNNEST (httprequest.headers) AS t(header)
   WHERE from_unixtime("timestamp"/1000) > now() - interval '10' DAY) 
SELECT header.value AS ip,
       count(*) AS COUNT 
FROM test_dataset 
WHERE header.name='X-Forwarded-For' 
GROUP BY header.value 
ORDER BY COUNT DESC
```

Para obter mais informações sobre as funções de data e hora, consulte [Date and Time Functions and Operators](https://trino.io/docs/current/functions/datetime.html) (Funções e operadores de data e hora) na documentação do Trino.

# Consultar solicitações ou endereços bloqueados
<a name="query-examples-waf-logs-blocked-requests"></a>

Os exemplos desta seção consultam solicitações ou endereços bloqueados.
+ [Extract the top 100 IP addresses blocked by a specified rule type](#waf-example-extract-top-100-blocked-ip-by-rule)
+ [Count the number of times a request from a specified country has been blocked](#waf-example-count-request-blocks-from-country)
+ [Count the number of times a request has been blocked, grouping by specific attributes](#waf-example-count-request-blocks-by-attribute)
+ [Count the number of times a specific terminating rule ID has been matched](#waf-example-count-terminating-rule-id-matches)
+ [Retrieve the top 100 IP addresses blocked during a specified date range](#waf-example-top-100-ip-addresses-blocked-for-date-range)

**Example  – Extrair os 100 primeiros endereços IP bloqueados por um tipo de regra especificado**  
A consulta a seguir extrai e conta os 100 primeiros endereços IP que foram bloqueados pela regra de encerramento `RATE_BASED` durante o intervalo de datas especificado.  

```
SELECT COUNT(httpRequest.clientIp) as count,
httpRequest.clientIp
FROM waf_logs
WHERE terminatingruletype='RATE_BASED' AND action='BLOCK' and "date" >= '2021/03/01'
AND "date" < '2021/03/31'
GROUP BY httpRequest.clientIp
ORDER BY count DESC
LIMIT 100
```

**Example  – Contar o número de vezes que uma solicitação foi bloqueada de um país especificado**  
A consulta a seguir conta o número de vezes que a solicitação chegou de um endereço IP pertencente à Irlanda (IE) e foi bloqueada pela regra de encerramento `RATE_BASED`.  

```
SELECT 
  COUNT(httpRequest.country) as count, 
  httpRequest.country 
FROM waf_logs
WHERE 
  terminatingruletype='RATE_BASED' AND 
  httpRequest.country='IE'
GROUP BY httpRequest.country
ORDER BY count
LIMIT 100;
```

**Example  – Contar o número de vezes que uma solicitação foi bloqueada, agrupando por atributos específicos**  
A consulta a seguir conta o número de vezes que a solicitação foi bloqueada, com resultados agrupados por WebACL, RuleId, ClientIP e HTTP Request URI.  

```
SELECT 
  COUNT(*) AS count,
  webaclid,
  terminatingruleid,
  httprequest.clientip,
  httprequest.uri
FROM waf_logs
WHERE action='BLOCK'
GROUP BY webaclid, terminatingruleid, httprequest.clientip, httprequest.uri
ORDER BY count DESC
LIMIT 100;
```

**Example  – Contar o número de vezes em que houve correspondência com um ID de regra de encerramento específico**  
A consulta a seguir conta o número de vezes que um ID de regra de encerramento específico foi correspondido (`WHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e'`). A consulta agrupa os resultados por WebACL, Action, ClientIP e HTTP Request URI.  

```
SELECT 
  COUNT(*) AS count,
  webaclid,
  action,
  httprequest.clientip,
  httprequest.uri
FROM waf_logs
WHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e'
GROUP BY webaclid, action, httprequest.clientip, httprequest.uri
ORDER BY count DESC
LIMIT 100;
```

**Example  – Recuperar os 100 primeiros endereços IP bloqueados durante um intervalo de datas especificado**  
A consulta a seguir extrai os 100 primeiros endereços IP que foram bloqueados durante um intervalo de datas especificado. A consulta também lista o número de vezes que os endereços IP foram bloqueados.  

```
SELECT "httprequest"."clientip", "count"(*) "ipcount", "httprequest"."country"
FROM waf_logs
WHERE "action" = 'BLOCK' and "date" >= '2021/03/01'
AND "date" < '2021/03/31'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "ipcount" DESC limit 100
```

Para obter informações sobre a consulta de logs do Amazon S3, veja os seguintes tópicos:
+ [Como analisar os logs de acesso do servidor do Amazon S3 usando o Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/analyze-logs-athena/) na Central de Conhecimento da AWS
+ [Consultar os logs de acesso do Amazon S3 para solicitações usando o Amazon Athena](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-s3-access-logs-to-identify-requests.html#querying-s3-access-logs-for-requests) no Guia do usuário do Amazon Simple Storage Service
+ [Usar o AWS CloudTrail para identificar solicitações do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudtrail-request-identification.html) no Guia do usuário do Amazon Simple Storage Service

# Consultar logs do servidor Web armazenados no Amazon S3
<a name="querying-web-server-logs"></a>

Você pode usar o Athena para consultar logs do servidor Web armazenados no Amazon S3. Os tópicos desta seção mostram como criar tabelas no Athena para consultar logs do servidor Web em uma variedade de formatos.

**Topics**
+ [

# Consulta de logs do Apache armazenados no Amazon S3
](querying-apache-logs.md)
+ [

# Consultar logs do Internet Information Server (IIS) armazenados no Amazon S3
](querying-iis-logs.md)

# Consulta de logs do Apache armazenados no Amazon S3
<a name="querying-apache-logs"></a>

Você pode usar o Amazon Athena para consultar [arquivos de log do servidor HTTP do Apache](https://httpd.apache.org/docs/2.4/logs.html) armazenados em sua conta do Amazon S3. Este tópico mostra como criar esquemas de tabela para consultar os arquivos de [log de acesso](https://httpd.apache.org/docs/2.4/logs.html#accesslog) do Apache no formato de log comum.

Os campos no formato de log comum incluem endereço IP do cliente, ID do cliente, ID do usuário, carimbo de data/hora de recebimento da solicitação, texto da solicitação do cliente, código de status do servidor e tamanho do objeto retornado ao cliente.

O exemplo de dados a seguir mostra o formato de log comum do Apache.

```
198.51.100.7 - Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232
198.51.100.14 - Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165
198.51.100.22 - Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287
198.51.100.9 - Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230
198.51.100.2 - Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30
198.51.100.13 - Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608
198.51.100.11 - Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344
```

## Criar uma tabela no Athena para logs do Apache
<a name="querying-apache-logs-creating-a-table-in-athena"></a>

Antes de consultar os logs do Apache armazenados no Amazon S3, você deve criar um esquema de tabela para o Athena no qual ele possa ler os dados do log. Para criar uma tabela do Athena de logs do Apache, você pode usar [Grok SerDe](grok-serde.md). Para obter mais informações sobre como usar o SerDe do Grok, consulte [Escrever classificadores grok personalizados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok) no *Guia do desenvolvedor do AWS Glue*.

**Para criar uma tabela no Athena para logs do servidor Web do Apache**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a instrução DDL a seguir no editor de consultas do Athena. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/apache-log-folder/'` para apontar para seus logs do Apache no Amazon S3.

   ```
   CREATE EXTERNAL TABLE apache_logs (
     client_ip string,
     client_id string,
     user_id string,
     request_received_time string,
     client_request string,
     server_status string,
     returned_obj_size string
     )
   ROW FORMAT SERDE
      'com.amazonaws.glue.serde.GrokSerDe'
   WITH SERDEPROPERTIES (
      'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{USERNAME:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$'
      )
   STORED AS INPUTFORMAT
      'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
      's3://amzn-s3-demo-bucket/apache-log-folder/';
   ```

1. Execute a consulta no console do Athena para registrar a tabela `apache_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

### Consultas de exemplo
<a name="querying-apache-logs-example-select-queries"></a>

**Example – Filtro para erros 404**  
A consulta de exemplo a seguir seleciona a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `apache_logs`. A cláusula `WHERE` filtra o código de status HTTP `404` (página não encontrada).  

```
SELECT request_received_time, client_request, server_status
FROM apache_logs
WHERE server_status = '404'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 404 em um log do Apache pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-apache-logs-1.png)


**Example – Filtro para solicitações com êxito**  
A consulta de exemplo a seguir seleciona o ID do usuário, a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `apache_logs`. A cláusula `WHERE` filtra o código de status HTTP `200` (com êxito).  

```
SELECT user_id, request_received_time, client_request, server_status
FROM apache_logs
WHERE server_status = '200'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 200 em um log do Apache pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-apache-logs-2.png)


**Example – Filtrar por carimbo de data/hora**  
O exemplo a seguir consulta registros cujo horário de recebimento da solicitação é superior ao horário no carimbo de data/hora especificado.  

```
SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00
```

# Consultar logs do Internet Information Server (IIS) armazenados no Amazon S3
<a name="querying-iis-logs"></a>

Você pode usar o Amazon Athena para consultar os logs do servidor Web do Microsoft Internet Information Server (IIS) armazenados na sua conta do Amazon S3. O IIS usa uma [variedade](https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525807(v%3Dvs.90)) de formatos de arquivo de log, mas este tópico mostra como criar esquemas de tabela para consultar logs no formato de arquivo de log do IIs e estendido do W3C usando o Athena.

Como os formatos de arquivo de log do IIS e estendido do W3C usam delimitadores de caractere único (espaços e vírgulas, respectivamente) e não têm valores entre aspas, você pode usar o [LazySimpleSerDe](lazy-simple-serde.md) para criar tabelas do Athena para eles.

**Topics**
+ [

# Consultar o formato de arquivo de log estendido do W3C
](querying-iis-logs-w3c-extended-log-file-format.md)
+ [

# Consultar o formato de arquivo de log do IIS
](querying-iis-logs-iis-log-file-format.md)
+ [

# Consulta ao formato de arquivo de log do NCSA
](querying-iis-logs-ncsa-log-file-format.md)

# Consultar o formato de arquivo de log estendido do W3C
<a name="querying-iis-logs-w3c-extended-log-file-format"></a>

O formato de dados de arquivo de log [estendido do W3C](https://docs.microsoft.com/en-us/windows/win32/http/w3c-logging) tem campos separados por espaços. Os campos que aparecem nos logs estendidos do W3C são determinados por um administrador do servidor Web que escolhe quais campos de log serão incluídos. Os dados de log de exemplo a seguir têm os campos `date, time`, `c-ip`, `s-ip`, `cs-method`, `cs-uri-stem`, `sc-status`, `sc-bytes`, `cs-bytes`, `time-taken` e `cs-version`.

```
2020-01-19 22:48:39 203.0.113.5 198.51.100.2 GET /default.html 200 540 524 157 HTTP/1.0
2020-01-19 22:49:40 203.0.113.10 198.51.100.12 GET /index.html 200 420 324 164 HTTP/1.0
2020-01-19 22:50:12 203.0.113.12 198.51.100.4 GET /image.gif 200 324 320 358 HTTP/1.0
2020-01-19 22:51:44 203.0.113.15 198.51.100.16 GET /faq.html 200 330 324 288 HTTP/1.0
```

## Criar uma tabela no Athena para logs estendidos do W3C
<a name="querying-iis-logs-creating-a-table-in-athena-for-w3c-extended-logs"></a>

Antes de consultar os logs estendidos do W3C, você deve criar um esquema de tabela para que o Athena possa ler os dados do log.

**Para criar uma tabela no Athena para logs estendidos do W3C**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole uma instrução DDL como a seguinte no console do Athena, observando estes pontos:

   1. Adicione ou remova as colunas no exemplo para corresponder aos campos nos logs que você deseja consultar.

   1. Os nomes de colunas no formato de arquivo de log estendido do W3C contêm hifens (`-`). No entanto, de acordo com as [Convenções de nomenclatura do Athena](tables-databases-columns-names.md), a instrução de exemplo `CREATE TABLE` os substitui por sublinhados (`_`).

   1. Para especificar o delimitador de espaço, use `FIELDS TERMINATED BY ' '`.

   1. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/w3c-log-folder/'` para apontar para seus logs estendidos do W3C no Amazon S3.

   ```
   CREATE EXTERNAL TABLE `iis_w3c_logs`( 
     date_col string, 
     time_col string, 
     c_ip string,
     s_ip string,
     cs_method string, 
     cs_uri_stem string, 
     sc_status string,
     sc_bytes string,
     cs_bytes string,
     time_taken string,
     cs_version string
     ) 
   ROW FORMAT DELIMITED  
     FIELDS TERMINATED BY ' '  
   STORED AS INPUTFORMAT  
     'org.apache.hadoop.mapred.TextInputFormat'  
   OUTPUTFORMAT  
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
   LOCATION   's3://amzn-s3-demo-bucket/w3c-log-folder/'
   ```

1. Execute a consulta no console do Athena para registrar a tabela `iis_w3c_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consulta select de log estendido do W3C
<a name="querying-iis-logs-example-w3c-extended-log-select-query"></a>

A consulta de exemplo a seguir seleciona data, hora, destino da solicitação e tempo gasto na solicitação da tabela `iis_w3c_logs`. A cláusula `WHERE` filtra os casos em que o método HTTP é `GET` e o código de status HTTP é `200` (com êxito).

```
SELECT date_col, time_col, cs_uri_stem, time_taken
FROM iis_w3c_logs
WHERE cs_method = 'GET' AND sc_status = '200'
```

A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.

![\[Exemplo de resultados de consulta no Athena de arquivos de log estendidos do W3C armazenados no Amazon S3.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-1.png)


## Combinar os campos de data e hora
<a name="querying-iis-logs-example-w3c-extended-log-combining-date-and-time"></a>

Os campos `date` e `time` delimitados por espaços são entradas separadas nos dados de origem do log, mas você pode combiná-los em um carimbo de data/hora, se desejar. Use as funções [concat()](https://prestodb.io/docs/current/functions/string.html#concat) e [date\$1parse()](https://prestodb.io/docs/current/functions/datetime.html#date_parse) em uma consulta [SELECT](select.md) ou [CREATE TABLE AS SELECT](create-table-as.md) para concatenar e converter as colunas de data e hora no formato de carimbo de data/hora. O exemplo a seguir usa a consulta CTAS para criar uma nova tabela com uma coluna `derived_timestamp`.

```
CREATE TABLE iis_w3c_logs_w_timestamp AS
SELECT 
  date_parse(concat(date_col,' ', time_col),'%Y-%m-%d %H:%i:%s') as derived_timestamp, 
  c_ip, 
  s_ip, 
  cs_method, 
  cs_uri_stem, 
  sc_status, 
  sc_bytes, 
  cs_bytes, 
  time_taken, 
  cs_version
FROM iis_w3c_logs
```

Depois de criar a tabela, consulte a nova coluna de carimbo de data/hora diretamente, como no exemplo a seguir.

```
SELECT derived_timestamp, cs_uri_stem, time_taken
FROM iis_w3c_logs_w_timestamp
WHERE cs_method = 'GET' AND sc_status = '200'
```

A imagem a seguir mostra os resultados da consulta.

![\[Resultados da consulta de arquivo de log estendido do W3C em uma tabela com uma coluna de carimbo de data/hora derivada.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-1a.png)


# Consultar o formato de arquivo de log do IIS
<a name="querying-iis-logs-iis-log-file-format"></a>

Ao contrário do formato estendido do W3C, o [Formato de arquivo de log do IIS](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc728311(v%3dws.10)) tem um conjunto fixo de campos e inclui uma vírgula como delimitador. O LazySimpleSerDe trata a vírgula como o delimitador e o espaço após a vírgula como o início do próximo campo.

O exemplo a seguir apresenta dados de amostra no formato de arquivo de log do IIS.

```
203.0.113.15, -, 2020-02-24, 22:48:38, W3SVC2, SERVER5, 198.51.100.4, 254, 501, 488, 200, 0, GET, /index.htm, -, 
203.0.113.4, -, 2020-02-24, 22:48:39, W3SVC2, SERVER6, 198.51.100.6, 147, 411, 388, 200, 0, GET, /about.html, -, 
203.0.113.11, -, 2020-02-24, 22:48:40, W3SVC2, SERVER7, 198.51.100.18, 170, 531, 468, 200, 0, GET, /image.png, -, 
203.0.113.8, -, 2020-02-24, 22:48:41, W3SVC2, SERVER8, 198.51.100.14, 125, 711, 868, 200, 0, GET, /intro.htm, -,
```

## Criar uma tabela no Athena para arquivos de log do IIS
<a name="querying-iis-logs-creating-a-table-in-athena-for-iis-log-files"></a>

Para consultar os logs no formato de arquivo de log do IIS no Amazon S3, crie primeiro um esquema de tabela para que o Athena possa ler os dados do log.

**Para criar uma tabela no Athena para logs no formato de arquivo de log do IIS**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a seguinte instrução DDL no console do Athena, observando estes pontos:

   1. Para especificar a vírgula como delimitador, use `FIELDS TERMINATED BY ','`.

   1. Modifique os valores em LOCATION 's3://amzn-s3-demo-bucket/*iis-log-file-folder*/' para apontarem para seus arquivos de log no formato de log do IIS no Amazon S3.

   ```
   CREATE EXTERNAL TABLE `iis_format_logs`(
   client_ip_address string,
   user_name string,
   request_date string,
   request_time string,
   service_and_instance string,
   server_name string,
   server_ip_address string,
   time_taken_millisec string,
   client_bytes_sent string,
   server_bytes_sent string,
   service_status_code string,
   windows_status_code string,
   request_type string,
   target_of_operation string,
   script_parameters string
      )
   ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
   STORED AS INPUTFORMAT
     'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/iis-log-file-folder/'
   ```

1. Execute a consulta no console do Athena para registrar a tabela `iis_format_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consulta select no formato de log do IIS
<a name="querying-iis-logs-example-iis-log-format-select-query"></a>

A consulta de exemplo a seguir seleciona data, hora, destino da solicitação e tempo gasto em milissegundos da tabela `iis_format_logs`. A cláusula `WHERE` filtra os casos em que o tipo de solicitação é `GET` e o código de status HTTP é `200` (com êxito). Na consulta, observe que os espaços à esquerda em `' GET'` e `' 200'` são necessários para que a consulta seja bem-sucedida. 

```
SELECT request_date, request_time, target_of_operation, time_taken_millisec
FROM iis_format_logs
WHERE request_type = ' GET' AND service_status_code = ' 200'
```

A imagem a seguir mostra os resultados da consulta dos dados de exemplo.

![\[Resultados da consulta de exemplo no Athena de arquivos de log no formato do IIS armazenados no Amazon S3.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-2.png)


# Consulta ao formato de arquivo de log do NCSA
<a name="querying-iis-logs-ncsa-log-file-format"></a>

O IIS também usa o formato de [log do NCSA](https://docs.microsoft.com/en-us/windows/win32/http/ncsa-logging), que tem um número fixo de campos em formato de texto ASCII separados por espaços. A estrutura é semelhante ao formato de log comum usado para logs de acesso do Apache. Os campos no formato de dados de log comum do NCSA incluem endereço IP do cliente, ID do cliente (não costuma ser usado), ID do usuário do domínio, carimbo de data/hora de recebimento da solicitação, texto da solicitação do cliente, código de status do servidor e tamanho do objeto retornado ao cliente.

O exemplo a seguir mostra os dados no formato de log comum do NCSA, conforme documentado para o IIS.

```
198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232
198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165
198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287
198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230
198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30
198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608
198.51.100.11 - ExampleCorp\Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344
```

## Criar uma tabela no Athena para logs do NCSA do IIS
<a name="querying-iis-logs-ncsa-creating-a-table-in-athena"></a>

Na instrução `CREATE TABLE`, você pode usar [Grok SerDe](grok-serde.md) e um padrão do grok similar ao usado nos [logs do servidor Web do Apache](querying-apache-logs.md). Ao contrário dos logs do Apache, o padrão do grok usa `%{DATA:user_id}` para o terceiro campo, em vez de `%{USERNAME:user_id}` para considerar a presença da barra invertida em `domain\user_id`. Para obter mais informações sobre como usar o SerDe do Grok, consulte [Escrever classificadores grok personalizados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok) no *Guia do desenvolvedor do AWS Glue*.

**Para criar uma tabela no Athena para logs do servidor Web do NCSA do IIS**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Cole a instrução DDL a seguir no editor de consultas do Athena. Modifique os valores em `LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/'` para apontar para seus logs do NCSA do IIS no Amazon S3.

   ```
   CREATE EXTERNAL TABLE iis_ncsa_logs(
     client_ip string,
     client_id string,
     user_id string,
     request_received_time string,
     client_request string,
     server_status string,
     returned_obj_size string
     )
   ROW FORMAT SERDE
      'com.amazonaws.glue.serde.GrokSerDe'
   WITH SERDEPROPERTIES (
      'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{DATA:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$'
      )
   STORED AS INPUTFORMAT
      'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
      's3://amzn-s3-demo-bucket/iis-ncsa-logs/';
   ```

1. Execute a consulta no console do Athena para registrar a tabela `iis_ncsa_logs`. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.

## Exemplo de consultas Select para logs do NCSA do IIS
<a name="querying-iis-logs-ncsa-example-select-queries"></a>

**Example – Filtragem de erros 404**  
A consulta de exemplo a seguir seleciona a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `iis_ncsa_logs`. A cláusula `WHERE` filtra o código de status HTTP `404` (página não encontrada).  

```
SELECT request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '404'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 404 em um log do NCSA do IIS pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-3.png)


**Example – Filtragem de solicitações com êxito de um domínio específico**  
A consulta de exemplo a seguir seleciona o ID do usuário, a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela `iis_ncsa_logs`. A cláusula `WHERE` filtra as solicitações com código de status HTTP `200`(com êxito) de usuários no domínio `AnyCompany`.  

```
SELECT user_id, request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
```
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.  

![\[Consultar entradas HTTP 200 em um log do NCSA do IIS pelo Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/querying-iis-logs-4.png)


# Usar transações ACID do Athena
<a name="acid-transactions"></a>

O termo “transações ACID” se refere a um conjunto de propriedades ([atomicidade](https://en.wikipedia.org/wiki/Atomicity_(database_systems)), [consistência](https://en.wikipedia.org/wiki/Consistency_(database_systems)), [isolamento](https://en.wikipedia.org/wiki/Isolation_(database_systems)) e [durabilidade](https://en.wikipedia.org/wiki/Durability_(database_systems))) que garantem a integridade dos dados nas transações de banco de dados. As transações ACID permitem que vários usuários adicionem e excluam objetos do Amazon S3 de maneira atômica, simultaneamente e com confiabilidade, ao mesmo tempo que isolam as consultas existentes mantendo a consistência de leitura para consultas no data lake. As transações ACID do Athena adicionam operações de inserção, exclusão, atualização e viagem no tempo à linguagem de manipulação de dados (DML) SQL do Athena. Você e vários usuários podem usar as transações ACID do Athena simultaneamente para fazer modificações confiáveis nos dados do Amazon S3 no nível da linha. As transações do Athena gerenciam automaticamente a semântica e a coordenação dos bloqueios e não requerem uma solução personalizada de bloqueio de registros.

As transações do ACID do Athena e a sintaxe SQL familiar simplificam as atualizações de dados empresariais e regulamentares. Por exemplo, para responder a uma solicitação de eliminação de dados, você pode executar uma operação `DELETE` em SQL. Para fazer correções manuais em registros, você pode usar uma única instrução `UPDATE`. Para recuperar dados que foram excluídos recentemente, você pode emitir consultas de viagem no tempo usando uma instrução `SELECT`.

Como elas são montadas em formatos de tabela compartilhada, as transações ACID do Athena são compatíveis com outros serviços e mecanismos, como o [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) e o [Apache Spark](https://spark.apache.org/) que também suportam formatos de tabela compartilhada.

As transações do Athena estão disponíveis por meio do console do Athena, de operações de API e dos drivers ODBC e JDBC.

**Topics**
+ [

# Consultar tabelas do Linux Foundation Delta Lake
](delta-lake-tables.md)
+ [

# Consultar conjuntos de dados do Apache Hudi
](querying-hudi.md)
+ [

# Consultar tabelas do Apache Iceberg
](querying-iceberg.md)

# Consultar tabelas do Linux Foundation Delta Lake
<a name="delta-lake-tables"></a>

O Linux Foundation [Delta Lake](https://delta.io/) é um formato de tabela para análise de big data. É possível usar o Amazon Athena para ler tabelas Delta Lake armazenadas no Amazon S3 de forma direta, sem a necessidade de gerar arquivos de manifesto ou executar a instrução `MSCK REPAIR`.

O formato Delta Lake armazena os valores mínimo e máximo de cada arquivo de dados por coluna. A implementação do Athena usa essas informações para habilitar o salto de arquivos em predicados com a finalidade de eliminar arquivos indesejados da consideração.

## Considerações e limitações
<a name="delta-lake-tables-considerations-and-limitations"></a>

O suporte para o Delta Lake no Athena tem as limitações e considerações a seguir:
+ **Somente tabelas com catálogo do AWS Glue**: o suporte nativo do Delta Lake é compatível somente por meio de tabelas registradas no AWS Glue. Se você tiver uma tabela Delta Lake registrada em outro metastore, ainda poderá mantê-la e tratá-la como metastore principal. Como os metadados do Delta Lake são armazenados no sistema de arquivos (por exemplo, no Amazon S3) e não no metastore, o Athena requer somente a propriedade “location” no AWS Glue para ler as tabelas Delta Lake.
+ **Somente versão 3 do mecanismo**: as consultas do Delta Lake tem suporte somente na versão 3 do mecanismo do Athena. Você deve garantir que o grupo de trabalho criado esteja configurado para usar a versão 3 do mecanismo do Athena.
+ **Nenhum suporte para passagem de tempo**: não há suporte para consultas que usam as funcionalidades de passagem de tempo do Delta Lake.
+ **Somente leitura**: não há suporte para gravar instruções DML, como `UPDATE`, `INSERT` ou `DELETE`.
+ **Compatibilidade com o Lake Formation**: a integração com o Lake Formation está disponível para tabelas do Delta Lake com seu esquema sincronizado com o AWS Glue. Para obter mais informações, consulte [Usar o AWS Lake Formation com o Amazon Athena](https://docs.aws.amazon.com/lake-formation/latest/dg/athena-lf.html) e [Configurar permissões para uma tabela do Delta Lake](https://docs.aws.amazon.com/lake-formation/latest/dg/set-up-delta-table.html) no *Guia de desenvolvedor do AWS Lake Formation*.
+ **Suporte DDL limitado**: as instruções DDL a seguir são compatíveis: `CREATE EXTERNAL TABLE`, `SHOW COLUMNS`, `SHOW TBLPROPERTIES`, `SHOW PARTITIONS`, `SHOW CREATE TABLE` e `DESCRIBE`. Para obter informações sobre como usar a instrução `CREATE EXTERNAL TABLE`, consulte a seção [Introdução às tabelas do Delta Lake](delta-lake-tables-getting-started.md).
+ **Não é possível ignorar os objetos do Amazon Glacier**: se os objetos na tabela do Linux Foundation Delta Lake estiverem em uma classe de armazenamento do Amazon Glacier, definir a propriedade da tabela `read_restored_glacier_objects` como `false` não surtirá efeito.

  Por exemplo, suponhamos que você emita o seguinte comando:

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')
  ```

  Para tabelas do Iceberg e do Delta Lake, o comando gera o erro Chave de propriedade da tabela não compatível: read\$1restored\$1glacier\$1objects. Para as tabelas do Hudi, o comando `ALTER TABLE` não gera erro, mas mesmo assim os objetos do Amazon Glacier não são ignorados. A execução de consultas `SELECT` após o comando `ALTER TABLE` continua a retornar todos os objetos.
+ **Tabelas criptografadas**: o Athena não é compatível com a leitura nativa de tabelas do Delta Lake criptografadas pelo CSE-KMS. Isso inclui as instruções SELECT e as instruções DDL.

### Versionamento do Delta Lake e do Athena
<a name="delta-lake-tables-versioning"></a>

O Athena não usa o [versionamento](https://docs.delta.io/latest/releases.html) listado na documentação do Delta Lake. Para determinar se as tabelas do Delta Lake são compatíveis com o Athena, considere estas duas características:
+ **Versão do leitor**: cada tabela do Delta Lake tem uma versão de leitor. Atualmente, a versão é um número de 1 a 3. Consultas que incluírem uma tabela com uma versão de leitor não compatível com o Athena apresentarão falhas.
+ **Características da tabela**: cada tabela do Delta Lake também pode declarar um conjunto de atributos de leitor/gravador. Como o Athena é compatível com o Delta Lake apenas para leitura, a compatibilidade do atributo de gravação de tabelas não se aplica. Porém, consultas em tabelas com atributos de leitura de tabela não compatíveis apresentarão falhas.

A tabela a seguir mostra as versões e os atributos do leitor de tabela do Delta Lake que são compatíveis com o Athena.


****  

| Tipo da consulta | Versões de leitor compatíveis | Atributos de leitor compatíveis | 
| --- | --- | --- | 
| DQL (instruções SELECT) | <= 3 | [Mapeamento de colunas](https://docs.delta.io/latest/delta-column-mapping.html), [timestampNtz](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#timestamp-without-timezone-timestampntz), [vetores de exclusão](https://docs.delta.io/latest/delta-deletion-vectors.html) | 
| DDL | <= 1 | Não aplicável. Os atributos de leitor só podem ser declarados em tabelas com um leitor versão 2 ou superior. | 
+ Para obter uma lista dos recursos de tabela do Delta Lake, consulte [Valid feature names in table features](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#valid-feature-names-in-table-features) no GitHub.com
+ Para ver uma lista dos atributos do Delta Lake por versão de protocolo, consulte [Features by protocol version](https://docs.delta.io/latest/versioning.html#features-by-protocol-version) no GitHub.com.

Para criar uma tabela do Delta Lake no Athena com uma versão de leitor acima de 1, consulte [Sincronizar metadados do Delta Lake](delta-lake-tables-syncing-metadata.md).

**Topics**
+ [

## Considerações e limitações
](#delta-lake-tables-considerations-and-limitations)
+ [

# Tipos de dados de colunas com suporte
](delta-lake-tables-supported-data-types-columns.md)
+ [

# Introdução às tabelas do Delta Lake
](delta-lake-tables-getting-started.md)
+ [

# Consultar tabelas do Delta Lake com SQL
](delta-lake-tables-querying.md)
+ [

# Sincronizar metadados do Delta Lake
](delta-lake-tables-syncing-metadata.md)
+ [

# Recursos adicionais
](delta-lake-tables-additional-resources.md)

# Tipos de dados de colunas com suporte
<a name="delta-lake-tables-supported-data-types-columns"></a>

Esta seção descreve os tipos de dados com suporte para colunas sem partições e com partições. 

## Tipos de dados compatíveis para colunas sem partições
<a name="delta-lake-tables-supported-data-types-non-partition-columns"></a>

Para colunas sem partições, há suporte para todos os tipos de dados compatíveis com o Athena, exceto `CHAR`. Não há suporte para `CHAR` no próprio protocolo do Delta Lake). Os tipos de dados compatíveis incluem:

```
boolean
tinyint
smallint
integer
bigint
double
float
decimal
varchar
string
binary
date
timestamp
array
map
struct
```

## Tipos de dados compatíveis para colunas com partições
<a name="delta-lake-tables-supported-data-types-partition-columns"></a>

Para colunas com partições, o Athena é compatível com tabelas com os tipos de dados a seguir:

```
boolean
integer
smallint
tinyint
bigint
decimal
float
double
date
timestamp
varchar
```

Para obter mais informações sobre os tipos de dados no Athena, consulte [Tipos de dados no Amazon Athena](data-types.md).

# Introdução às tabelas do Delta Lake
<a name="delta-lake-tables-getting-started"></a>

Para ser consultável, a tabela Delta Lake deve existir no AWS Glue. Se a tabela estiver no Amazon S3, mas não estiver no AWS Glue, execute uma instrução `CREATE EXTERNAL TABLE` usando a sintaxe a seguir. Se a tabela já existe no AWS Glue (por exemplo, porque você está usando o Apache Spark ou outro mecanismo com o AWS Glue), você pode ignorar esta etapa. Observe a omissão das definições das colunas, da biblioteca SerDe e de outras propriedades da tabela. Ao contrário das tabelas Hive tradicionais, os metadados da tabela Delta Lake são inferidos do log de transações do Delta Lake e sincronizados diretamente com o AWS Glue.

```
CREATE EXTERNAL TABLE
  [db_name.]table_name
  LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
  TBLPROPERTIES ('table_type' = 'DELTA')
```

**nota**  
Essa instrução não é compatível com buckets do S3 que têm pagamentos por solicitante habilitados. Se você quiser criar uma tabela do Delta Lake em um bucket do S3 com pagamentos por solicitante habilitados, siga as orientações e a instrução DDL em [Sincronizar metadados do Delta Lake](delta-lake-tables-syncing-metadata.md).
Para tabelas Delta Lake, as instruções `CREATE TABLE` que incluem mais do que as propriedades `LOCATION` e `table_type` não são permitidas.

# Consultar tabelas do Delta Lake com SQL
<a name="delta-lake-tables-querying"></a>

Para consultar uma tabela Delta Lake, use a sintaxe SQL padrão `SELECT`:

```
[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
```

Para obter mais informações sobre a sintaxe `SELECT`, consulte [SELECT](select.md) na documentação do Athena.

O formato Delta Lake armazena os valores mínimo e máximo de cada arquivo de dados por coluna. O Athena usa essas informações para habilitar o salto de arquivo em predicados com a finalidade de eliminar arquivos desnecessários da consideração.

# Sincronizar metadados do Delta Lake
<a name="delta-lake-tables-syncing-metadata"></a>

O Athena sincroniza os metadados da tabela, incluindo o esquema, as colunas com partições e as propriedades da tabela, para o AWS Glue se você usar o Athena para criar a tabela Delta Lake. Com o passar do tempo, esses metadados podem perder a sincronização com os metadados da tabela subjacente no log de transações. Para manter a tabela atualizada, escolha uma das seguintes opções:
+ Use o crawler do AWS Glue para tabelas Delta Lake. Para obter mais informações, consulte [Introducing native Delta Lake table support with AWS Glue crawlers](https://aws.amazon.com/blogs/big-data/introducing-native-delta-lake-table-support-with-aws-glue-crawlers/) no *Blog do AWS Big Data* e [Programar um crawler do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html) no Guia do desenvolvedor do AWS Glue.
+ Solte e recrie a tabela no Athena.
+ Use o SDK, a CLI ou o console do AWS Glue para atualizar manualmente o esquema no AWS Glue.

Observe que os recursos a seguir exigem que seu esquema do AWS Glue sempre tenha o mesmo esquema do log de transações:
+ Lake Formation
+ Visualizações
+ Filtros de linha e coluna

Se o seu fluxo de trabalho não exigir nenhuma dessas funcionalidades e você preferir não manter essa compatibilidade, pode usar o DDL `CREATE TABLE` no Athena e depois adicionar o caminho do Amazon S3 como um parâmetro SerDe no AWS Glue.

## Criar uma tabela do Delta Lake usando os consoles do Athena e do AWS Glue
<a name="delta-lake-tables-syncing-metadata-console"></a>

Você pode usar o procedimento a seguir para criar uma tabela do Delta Lake com os consoles do Athena e do AWS Glue.

**Para criar uma tabela Delta Lake usando o Athena e consoles do AWS Glue**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No editor de consultas do Athena, use o seguinte DDL para criar sua tabela Delta Lake. Observe que, ao usar esse método, o valor de `TBLPROPERTIES` deve ser `'spark.sql.sources.provider' = 'delta'`, e não`'table_type' = 'delta'`.

   Observe que esse mesmo esquema (com uma única coluna chamada `col` de tipo `array<string>`) é inserido quando você usa o Apache Spark (Athena para Apache Spark) ou a maioria dos outros mecanismos para criar sua tabela.

   ```
   CREATE EXTERNAL TABLE
      [db_name.]table_name(col array<string>)
      LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
      TBLPROPERTIES ('spark.sql.sources.provider' = 'delta')
   ```

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

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

1. Na lista de tabelas, escolha o link da sua tabela.

1. Na página da tabela, escolha **Ações**, **Editar tabela**.

1. Na seção **Parâmetros do Serde**, adicione a chave **path** com o valor **s3://amzn-s3-demo-bucket/*your-folder*/**.

1. Escolha **Salvar**.

## Criar uma tabela do Delta Lake usando a AWS CLI
<a name="delta-lake-tables-syncing-metadata-cli"></a>

Para criar uma tabela do Delta Lake usando a AWS CLI, insira um comando como o que se segue.

```
aws glue create-table --database-name dbname \
    --table-input '{"Name" : "tablename", "StorageDescriptor":{
            "Columns" : [
                {
                    "Name": "col",
                    "Type": "array<string>"
                }
            ],
            "Location" : "s3://amzn-s3-demo-bucket/<prefix>/",
            "SerdeInfo" : {
                "Parameters" : {
                    "serialization.format" : "1",
                    "path" : "s3://amzn-s3-demo-bucket/<prefix>/"
                }
            }
        },
        "PartitionKeys": [],
        "TableType": "EXTERNAL_TABLE",
        "Parameters": {
            "EXTERNAL": "TRUE",
            "spark.sql.sources.provider": "delta"
        }
    }'
```

# Recursos adicionais
<a name="delta-lake-tables-additional-resources"></a>

Para uma discussão sobre o uso de tabelas do Delta Lake com AWS Glue e fazendo consultas com o Athena, consulte [Gerencie as operações de dados do UPSERT usando o Delta Lake de código aberto e AWS Glue](https://aws.amazon.com/blogs/big-data/handle-upsert-data-operations-using-open-source-delta-lake-and-aws-glue/) no *Blog de Big Data da AWS*.

# Consultar conjuntos de dados do Apache Hudi
<a name="querying-hudi"></a>

O [https://hudi.incubator.apache.org/](https://hudi.incubator.apache.org/) é um framework de gerenciamento de dados de código aberto que simplifica o processamento incremental de dados. As ações de inserção, atualização, upsert e exclusão no nível do registro são processadas de forma muito mais granular, reduzindo a sobrecarga. `Upsert` refere-se à capacidade de inserir registros em um conjunto de dados existente, se eles ainda não existirem, ou atualizá-los, se já existirem.

O Hudi processa os eventos de inserção e atualização de dados sem criar muitos arquivos pequenos que podem causar problemas de performance em analytics. O Apache Hudi monitora automaticamente as alterações e mescla os arquivos para que mantenham o dimensionamento ideal. Isso evita a necessidade de criar soluções personalizadas que monitoram e regravam muitos arquivos pequenos em menos arquivos grandes.

Os conjuntos de dados do Hudi são adequados para os seguintes casos de uso:
+ Cumprir os regulamentos de privacidade, como o [Regulamento geral de proteção de dados](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation) (RGPD) e o [California Consumer Privacy Act](https://en.wikipedia.org/wiki/California_Consumer_Privacy_Act) (CCPA), que determinam o direito das pessoas de remover informações pessoais ou alterar o modo como os dados são utilizados.
+ Trabalhar com dados de streaming de sensores e outros dispositivos da Internet das Coisas (IoT) que exigem eventos específicos de inserção e atualização de dados.
+ Implementar o [sistema de Change Data Capture (CDC – Captura de dados de alteração)](https://en.wikipedia.org/wiki/Change_data_capture).

O tipo de conjunto de dados do Hudi pode ser um destes:
+ **Copy on Write (CoW – Copiar na gravação)**: os dados são armazenados em um formato colunar (Parquet), e cada atualização cria uma nova versão dos arquivos durante uma gravação.
+ **Merge on Read (MoR – Mesclar na leitura)**: os dados são armazenados usando uma combinação de formatos colunares (Parquet) e baseados em linha (Avro). As atualizações são registradas em arquivos `delta` baseados em linha e compactadas conforme necessário para criar novas versões dos arquivos colunares.

Com conjuntos de dados CoW, sempre que há uma atualização para um registro, o arquivo que contém o registro é regravado com os valores atualizados. Com um conjunto de dados MoR, sempre que há uma atualização, o Hudi grava apenas a linha do registro alterado. MoR é mais adequado para cargas de trabalho com maior volume de gravações ou alterações e menor volume de leituras. O tipo CoW é mais adequado para workloads com maior volume de leituras em dados que mudam com menos frequência.

O Hudi oferece três tipos de consulta para acessar os dados:
+ **Consultas de snapshot**: consultas que veem o snapshot mais recente da tabela a partir de uma determinada ação de confirmação ou compactação. Para tabelas MoR, as consultas de snapshot expõem o estado mais recente da tabela mesclando os arquivos base e delta da fatia de arquivo mais recente no momento da consulta. 
+ **Consultas incrementais**: as consultas veem somente os novos dados gravados na tabela, a partir de uma determinada confirmação/compactação. Desse modo, os streams de alteração são fornecidos para habilitar pipelines de dados incrementais.
+ **Ler consultas otimizadas**: para tabelas MoR, as consultas veem os dados mais recentes compactados. Para tabelas CoW, as consultas veem os dados mais recentes confirmados.

A tabela a seguir mostra os possíveis tipos de consulta do Hudi para cada tipo de tabela.


| Tipo de tabela | Possíveis tipos de consulta do Hudi | 
| --- | --- | 
| Copiar na gravação | snapshot, incremental | 
| Mesclar na leitura | snapshot, incremental, otimizado para leitura | 

Para obter mais informações sobre as vantagens e desvantagens dos tipos de tabela e consulta, acesse [Table & Queries Types](https://hudi.apache.org/docs/table_types/) na documentação do Apache Hudi.

## Alteração de terminologia do Hudi: as visualizações agora são consultas
<a name="querying-hudi-hudi-dataset-table-types-terminology"></a>

A partir da versão 0.5.1 do Apache Hudi, o que antes era chamado de visualizações agora é chamado de consultas. A tabela a seguir resume as alterações entre os termos antigos e novos.


| Termo antigo | Termo novo | 
| --- | --- | 
|  CoW: visualização otimizada para leitura MoR: visualização em tempo real  |  Consultas de snapshot  | 
| Visualização incremental | Consulta incremental | 
| MoR: visualização otimizada para leitura | Consulta otimizada para leitura | 

**Topics**
+ [

## Alteração de terminologia do Hudi: as visualizações agora são consultas
](#querying-hudi-hudi-dataset-table-types-terminology)
+ [

# Considerações e limitações
](querying-hudi-in-athena-considerations-and-limitations.md)
+ [

# Exemplos de criação de tabelas do tipo Copiar na gravação (CoW)
](querying-hudi-copy-on-write-create-table-examples.md)
+ [

# Exemplos de criação de tabelas do tipo Mesclar na leitura (MoR)
](querying-hudi-merge-on-read-create-table-examples.md)
+ [

# Usar de metadados Hudi para aprimorar a performance
](querying-hudi-metadata-table.md)
+ [

# Recursos adicionais
](querying-hudi-additional-resources.md)

# Considerações e limitações
<a name="querying-hudi-in-athena-considerations-and-limitations"></a>

Ao usar o Athena para ler tabelas do Apache Hudi, considere os pontos apresentados a seguir.
+ **Operações de leitura e gravação**: o Athena pode ler conjuntos de dados compactados do Hudi, mas não pode gravar dados do Hudi.
+ **Versões do Hudi**: o Athena é compatível com a versão 0.14.0 (padrão) e a 0.15.0 do Hudi. O Athena não pode garantir a compatibilidade de leitura com tabelas criadas com versões posteriores do Hudi. Para obter mais informações sobre os recursos e o versionamento do Hudi, consulte a [documentação do Hudi](https://hudi.apache.org/) no site do Apache. Observe que a versão 0.15.0 do conector Hudi no Athena não oferece suporte a tabelas inicializadas. Para usar a versão 0.15.0 do conector Hudi, defina a seguinte propriedade da tabela:

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('athena_enable_native_hudi_connector_implementation' = 'true')
  ```
+ **Consultas entre contas**: a versão 0.15.0 do conector Hudi não é compatível com consultas entre contas.
+ **Tipos de consulta**: atualmente, o Athena permite consultas de snapshots e consultas otimizadas para leitura, mas não permite consultas incrementais. Nas tabelas MoR, todos os dados expostos a consultas otimizadas para leitura são compactados. Isso permite uma boa performance, mas não inclui as confirmações delta mais recentes. As consultas de snapshot contêm os dados mais recentes, mas geram um pouco de sobrecarga computacional, o que reduz a performance dessas consultas. Para obter mais informações sobre as vantagens e desvantagens dos tipos de tabela e consulta, acesse [Table & Queries Types](https://hudi.apache.org/docs/table_types/) na documentação do Apache Hudi.
+ **Consultas incrementais** — O Athena não aceita consultas incrementais.
+ **CTAS** — O Athena não aceita [CTAS](ctas.md) nem [INSERT INTO](insert-into.md) em dados do Hudi. Se você quiser ajuda do Athena para escrever conjuntos de dados do Hudi, envie feedback para athena-feedback@amazon.com.

  Para obter mais informações sobre como escrever dados do Hudi, consulte os seguintes recursos:
  + [Working with a Hudi dataset](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hudi-work-with-dataset.html) (Trabalhar com um conjunto de dados do Hudi) no [Guia de apresentação do Amazon EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/).
  + [Writing Data](https://hudi.apache.org/docs/0.8.0/writing_data.html) (Gravar dados) na documentação do Apache Hudi.
+ **MSCK REPAIR TABLE** — Não é permitido usar MSCK REPAIR TABLE em tabelas do Hudi no Athena. Se você precisar carregar uma tabela do Hudi que não foi criada no AWS Glue, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md).
+ **Não é possível ignorar os objetos do Amazon Glacier**: se os objetos na tabela do Apache Hudi estiverem em uma classe de armazenamento do Amazon Glacier, definir a propriedade da tabela `read_restored_glacier_objects` como `false` não surtirá efeito.

  Por exemplo, suponhamos que você emita o seguinte comando:

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')
  ```

  Para tabelas do Iceberg e do Delta Lake, o comando gera o erro Chave de propriedade da tabela não compatível: read\$1restored\$1glacier\$1objects. Para as tabelas do Hudi, o comando `ALTER TABLE` não gera erro, mas mesmo assim os objetos do Amazon Glacier não são ignorados. A execução de consultas `SELECT` após o comando `ALTER TABLE` continua a retornar todos os objetos.
+ **Consultas de timestamp** — Atualmente, as consultas que tentam ler colunas de timestamp nas tabelas de tempo real do Hudi falham ou produzem resultados vazios. Essa limitação se aplica somente às consultas que leem uma coluna de timestamp. As consultas que incluem somente colunas sem timestamp da mesma tabela são bem-sucedidas. 

  Consultas com falha retornam uma mensagem semelhante à seguinte: 

  GENERIC\$1INTERNAL\$1ERROR: class org.apache.hadoop.io.ArrayWritable cannot be cast to class org.apache.hadoop.hive.serde2.io.TimestampWritableV2 (org.apache.hadoop.io.ArrayWritable and org.apache.hadoop.hive.serde2.io.TimestampWritableV2 are in unnamed module of loader io.trino.server.PluginClassLoader @75c67992)
+ **Permissões de Lake Formation no conector Hudi 0.15.0**: esta limitação se aplica somente quando você opta por usar o conector Hudi nativo (versão 0.15.0) definindo a propriedade da tabela `athena_enable_native_hudi_connector_implementation` como `true`. Por padrão, o Athena usa o conector Hudi versão 0.14.0, que não exige essa permissão adicional. Para consultar uma tabela protegida do Lake Formation, você deve conceder permissões ao Lake Formation tanto para a localização dos dados da tabela quanto para o diretório de metadados `.hoodie`. Por exemplo, se sua tabela Hudi estiver localizada em `s3://bucket/hudi-table/`, você deve se registrar e conceder permissões tanto para `s3://bucket/hudi-table/` quanto para `s3://bucket/hudi-table/.hoodie/` no Lake Formation. O diretório `.hoodie` contém arquivos de metadados (como `hoodie.properties`) que o Athena precisa ler durante o planejamento da consulta. Sem permissões para o diretório `.hoodie`, as consultas falharão com erros de permissão negada.

# Exemplos de criação de tabelas do tipo Copiar na gravação (CoW)
<a name="querying-hudi-copy-on-write-create-table-examples"></a>

Se você já tem tabelas do Hudi criadas no AWS Glue, pode consultá-las diretamente no Athena. Ao criar tabelas do Hudi particionadas no Athena, você deve executar `ALTER TABLE ADD PARTITION` para carregar os dados do Hudi antes de poder consultá-los.

## Tabela CoW não particionada
<a name="querying-hudi-nonpartitioned-cow-table"></a>

O exemplo a seguir cria uma tabela CoW não particionada no Athena.

```
CREATE EXTERNAL TABLE `non_partition_cow`(
  `_hoodie_commit_time` string,
  `_hoodie_commit_seqno` string,
  `_hoodie_record_key` string,
  `_hoodie_partition_path` string,
  `_hoodie_file_name` string,
  `event_id` string,
  `event_time` string,
  `event_name` string,
  `event_guests` int,
  `event_type` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
  'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/folder/non_partition_cow/'
```

## Tabela CoW particionada
<a name="querying-hudi-partitioned-cow-table"></a>

O exemplo a seguir cria uma tabela CoW particionada no Athena.

```
CREATE EXTERNAL TABLE `partition_cow`(
  `_hoodie_commit_time` string, 
  `_hoodie_commit_seqno` string, 
  `_hoodie_record_key` string, 
  `_hoodie_partition_path` string, 
  `_hoodie_file_name` string, 
  `event_id` string, 
  `event_time` string, 
  `event_name` string, 
  `event_guests` int)
PARTITIONED BY ( 
  `event_type` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hudi.hadoop.HoodieParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION
  's3://amzn-s3-demo-bucket/folder/partition_cow/'
```

O exemplo `ALTER TABLE ADD PARTITION` a seguir adiciona duas partições à tabela `partition_cow` de exemplo.

```
ALTER TABLE partition_cow ADD
  PARTITION (event_type = 'one') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_cow/one/' 
  PARTITION (event_type = 'two') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_cow/two/'
```

# Exemplos de criação de tabelas do tipo Mesclar na leitura (MoR)
<a name="querying-hudi-merge-on-read-create-table-examples"></a>

O Hudi cria duas tabelas no metastore para MoR: uma tabela para consultas de snapshot e uma tabela para consultas otimizadas para leitura. As duas tabelas podem ser consultadas. Nas versões do Hudi anteriores à 0.5.1, a tabela de consultas otimizadas para leitura tinha o nome que você especificava ao criá-la. A partir do Hudi versão 0.5.1, o nome da tabela recebe o sufixo `_ro` por padrão. O nome da tabela de consultas de snapshot é aquele que você especifica com acrescentado `_rt`.

## Tabela MoR não particionada
<a name="querying-hudi-nonpartitioned-merge-on-read-table"></a>

O exemplo a seguir cria uma tabela MoR não particionada no Athena para consultas otimizadas para leitura. Observe que as consultas otimizadas para leitura usam o formato de entrada `HoodieParquetInputFormat`.

```
CREATE EXTERNAL TABLE `nonpartition_mor`(
  `_hoodie_commit_time` string, 
  `_hoodie_commit_seqno` string, 
  `_hoodie_record_key` string, 
  `_hoodie_partition_path` string, 
  `_hoodie_file_name` string, 
  `event_id` string, 
  `event_time` string, 
  `event_name` string, 
  `event_guests` int, 
  `event_type` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hudi.hadoop.HoodieParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION
  's3://amzn-s3-demo-bucket/folder/nonpartition_mor/'
```

O exemplo a seguir cria uma tabela MoR não particionada no Athena para consultas de snapshot. Para consultas de snapshot, use o formato de entrada `HoodieParquetRealtimeInputFormat`.

```
CREATE EXTERNAL TABLE `nonpartition_mor_rt`(
  `_hoodie_commit_time` string, 
  `_hoodie_commit_seqno` string, 
  `_hoodie_record_key` string, 
  `_hoodie_partition_path` string, 
  `_hoodie_file_name` string, 
  `event_id` string, 
  `event_time` string, 
  `event_name` string, 
  `event_guests` int, 
  `event_type` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION
  's3://amzn-s3-demo-bucket/folder/nonpartition_mor/'
```

## Tabela MoR particionada
<a name="querying-hudi-partitioned-merge-on-read-table"></a>

O exemplo a seguir cria uma tabela MoR particionada no Athena para consultas otimizadas para leitura.

```
CREATE EXTERNAL TABLE `partition_mor`(
  `_hoodie_commit_time` string, 
  `_hoodie_commit_seqno` string, 
  `_hoodie_record_key` string, 
  `_hoodie_partition_path` string, 
  `_hoodie_file_name` string, 
  `event_id` string, 
  `event_time` string, 
  `event_name` string, 
  `event_guests` int)
PARTITIONED BY ( 
  `event_type` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hudi.hadoop.HoodieParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/folder/partition_mor/'
```

O exemplo `ALTER TABLE ADD PARTITION` a seguir adiciona duas partições à tabela `partition_mor` de exemplo.

```
ALTER TABLE partition_mor ADD
  PARTITION (event_type = 'one') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_mor/one/'
  PARTITION (event_type = 'two') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_mor/two/'
```

O exemplo a seguir cria uma tabela MoR particionada no Athena para consultas de snapshot.

```
CREATE EXTERNAL TABLE `partition_mor_rt`(
  `_hoodie_commit_time` string, 
  `_hoodie_commit_seqno` string, 
  `_hoodie_record_key` string, 
  `_hoodie_partition_path` string, 
  `_hoodie_file_name` string, 
  `event_id` string, 
  `event_time` string, 
  `event_name` string, 
  `event_guests` int)
PARTITIONED BY ( 
  `event_type` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 
  'org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat'
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/folder/partition_mor/'
```

Da mesma forma, o exemplo `ALTER TABLE ADD PARTITION` a seguir adiciona duas partições à tabela `partition_mor_rt` de exemplo.

```
ALTER TABLE partition_mor_rt ADD
  PARTITION (event_type = 'one') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_mor/one/'
  PARTITION (event_type = 'two') LOCATION 's3://amzn-s3-demo-bucket/folder/partition_mor/two/'
```

# Usar de metadados Hudi para aprimorar a performance
<a name="querying-hudi-metadata-table"></a>

O Apache Hudi tem uma [tabela de metadados](https://hudi.apache.org/docs/next/metadata/) que contém recursos de indexação para melhorar a performance, como listagem de arquivos, possibilidade de ignorar dados usando estatísticas de coluna e um índice baseado em filtro de Bloom.

Desses recursos, o Athena atualmente só é compatível com o índice de listagem de arquivos. O índice de listagem de arquivos elimina chamadas do sistema de arquivos, como "listar arquivos", ao buscar as informações de um índice que mantém uma partição para mapeamento de arquivos. Isso elimina a necessidade de listar recursivamente todas as partições no caminho da tabela para obter uma visão do sistema de arquivos. Quando você trabalha com grandes conjuntos de dados, essa indexação reduz muito a latência que, de outra forma, ocorreria ao obter arquivos durante gravações e consultas. Também evita gargalos, como controle de utilização de solicitações nas chamadas `LIST` do Amazon S3.

**nota**  
No momento, o Athena não é compatível com a possibilidade de ignorar dados nem com a indexação com filtro de Bloom.

## Habilitar tabela de metadados do Hudi
<a name="querying-hudi-metadata-table-enabling-the-hudi-metadata-table"></a>

A listagem de arquivos baseada em tabela de metadados é desabilitada por padrão. Para habilitar a tabela de metadados do Hudi e a correspondente funcionalidade de listagem de arquivos, defina a propriedade da tabela `hudi.metadata-listing-enabled` como `TRUE`.

**Exemplo**  
O exemplo de `ALTER TABLE SET TBLPROPERTIES` a seguir habilita a tabela de metadados `partition_cow` no exemplo.

```
ALTER TABLE partition_cow SET TBLPROPERTIES('hudi.metadata-listing-enabled'='TRUE')
```

## Usar metadados gerados por bootstrap
<a name="querying-hudi-hudi-dataset-table-types-bootstrap"></a>

A partir do Apache Hudi versão 0.6.0, o recurso de operação de bootstrap oferece melhor performance com conjuntos de dados do Parquet existentes. Em vez de reescrever o conjunto de dados, uma operação de bootstrap pode gerar apenas os metadados, sem alterar o conjunto de dados. 

Você pode usar o Athena para consultar tabelas de uma operação de bootstrap, assim como as outras tabelas baseadas em dados no Amazon S3. Na instrução `CREATE TABLE`, especifique o caminho da tabela do Hudi na cláusula `LOCATION`. 

Para obter mais informações sobre como criar tabelas do Hudi usando a operação de bootstrap no Amazon EMR, consulte o artigo [New features from Apache Hudi available in Amazon EMR](https://aws.amazon.com/blogs/big-data/new-features-from-apache-hudi-available-in-amazon-emr/) (Novos recursos do Apache Hudi disponíveis no Amazon EMR) no blog da AWS sobre big data.

# Recursos adicionais
<a name="querying-hudi-additional-resources"></a>

Para obter mais recursos sobre como usar o Apache Hudi com Athena, veja os recursos a seguir.

## Vídeo
<a name="querying-hudi-videos"></a>

O vídeo a seguir mostra como você pode usar o Amazon Athena para consultar um conjunto de dados do Apache Hudi otimizado para leitura em seu data lake baseado no Amazon S3.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/TVcreqxBaGA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/TVcreqxBaGA)


## Publicações no blog
<a name="querying-hudi-big-data-blogs"></a>

As postagens do blog de AWS Big Data a seguir incluem descrições de como você pode usar o Apache Hudi com o Athena.
+ [Use o AWS Data Exchange para compartilhar facilmente conjuntos de dados do Apache Hudi](https://aws.amazon.com/blogs/big-data/use-aws-data-exchange-to-seamlessly-share-apache-hudi-datasets/) 
+ [Criar um data lake transacional quase em tempo real baseado em Apache HUDI usando o AWS DMS, o Amazon Kinesis, o ETL de streaming do AWS Glue e visualização de dados usando o Quick](https://aws.amazon.com/blogs/big-data/create-an-apache-hudi-based-near-real-time-transactional-data-lake-using-aws-dms-amazon-kinesis-aws-glue-streaming-etl-and-data-visualization-using-amazon-quicksight/) 
+ Para obter informações sobre o uso de conectores personalizados do AWS Glue e trabalhos do AWS Glue 2.0 para a criação de uma tabela do Apache Hudi que você possa consultar com o Athena, consulte [Gravar em tabelas do Apache Hudi com o uso do conector personalizado do AWS Glue](https://aws.amazon.com/blogs/big-data/writing-to-apache-hudi-tables-using-aws-glue-connector/).
+ Para acessar um artigo sobre o uso do Apache Hudi, do AWS Glue e do Amazon Athena para a criação de uma estrutura de processamento de dados para um data lake, consulte [Simplificar o processamento operacional de dados em data lakes com o uso do AWS Glue e do Apache Hudi](https://aws.amazon.com/blogs/big-data/simplify-operational-data-processing-in-data-lakes-using-aws-glue-and-apache-hudi/).

# Consultar tabelas do Apache Iceberg
<a name="querying-iceberg"></a>

É possível usar o Athena para realizar consultas de leitura, viagem no tempo, gravação e DDL em tabelas do Apache Iceberg.

[Apache Iceberg](https://iceberg.apache.org/) é um formato de tabela aberta para conjuntos de dados analíticos muito grandes. O Iceberg gerencia grandes coleções de arquivos como tabelas e suporta modernas operações de data lake analítico, como inserção, atualização, exclusão no nível do registro e consultas de viagem no tempo. A especificação do Iceberg permite uma evolução contínua da tabela, como uma evolução de esquema e partição, e é concebida para otimizar o uso no Amazon S3. O Iceberg também ajuda a garantir a correção dos dados em cenários de gravação simultâneos.

Para obter mais informações sobre o Apache Iceberg, consulte [https://iceberg.apache.org/](https://iceberg.apache.org/).

## Considerações e limitações
<a name="querying-iceberg-considerations-and-limitations"></a>

O suporte do Athena para tabelas Iceberg tem as seguintes considerações e limitações:
+ **Suporte à versão Iceberg** — O Athena é compatível com o Apache Iceberg versão 1.4.2. 
+ **Tabelas registradas no Lake Formation**: o Athena atualmente não é compatível com operações DDL em tabelas Iceberg registradas no Lake Formation. 
+ **Consultas do esquema de informações**: ao consultar o esquema de informações de tabelas Iceberg, o Athena usa metadados do S3 como fonte confiável para metadados de colunas. Isso significa que as informações das colunas são derivadas dos arquivos do S3 subjacentes, não de metadados do catálogo. Esse comportamento é diferente do de outros formatos de tabelas, em que os metadados do catálogo podem ser a principal fonte de informações das colunas.
+ **Tabelas somente com catálogo do AWS Glue**: apenas tabelas Iceberg criadas com base no catálogo do AWS Glue de acordo com as especificações definidas pela [implementação de código aberto do catálogo do Glue](https://iceberg.apache.org/docs/latest/aws/#glue-catalog) são compatíveis com o Athena.
+ **Suporte de bloqueio de tabela apenas pelo AWS Glue**: ao contrário da implementação de código aberto do catálogo do Glue, que oferece suporte ao bloqueio personalizado de plug-in, o Athena oferece suporte apenas ao bloqueio otimista do AWS Glue. Usar o Athena para modificar uma tabela do Iceberg com qualquer outra implementação de bloqueio causará perda de dados e quebra de transações.
+ **Formatos de arquivo compatíveis**: a versão 3 do mecanismo Athena oferece suporte aos formatos de arquivo do Iceberg apresentados a seguir.
  + Parquet
  + ORC
  + Avro
+ **Metadados restritos do Iceberg**: o Lake Formation não avalia as tabelas de metadados do Iceberg. Portanto, as tabelas de metadados do Iceberg serão restritas se houver algum filtro de linha ou célula do Lake Formation presente na tabela base ou se você não tiver permissões para visualizar todas as colunas na tabela base. Nesses casos, quando você consulta as tabelas de metadados do Iceberg `$partitions`, `$files`, `$manifests` e `$snapshots`, a consulta falha e você recebe um erro `AccessDeniedException`. Além disso, a coluna de metadados `$path` tem as mesmas restrições do Lake Formation e falha quando selecionada pela consulta. Todas as outras tabelas de metadados podem ser consultadas independentemente dos filtros do Lake Formation. Para obter mais informações, consulte [Tabelas de metadados](https://trino.io/docs/current/connector/iceberg.html#metadata-tables).
+ **Tabelas Iceberg v2**: o Athena só cria e opera tabelas Iceberg v2. Para saber a diferença entre as tabelas da v1 e v2, consulte [Alterações de versão do formato](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) na documentação do Apache Iceberg.
+ **Exibição de tipos de hora sem fuso horário**: a hora e o timestamp sem tipos de fuso horário são exibidos no UTC. Se o fuso horário não for especificado em uma expressão de filtro em uma coluna de hora, o UTC será usado.
+ **Precisão dos dados relacionados ao timestamp**: embora o Iceberg seja compatível com uma precisão de microssegundos para o tipo de dados de timestamp, o Athena é compatível apenas com a precisão de milissegundos para timestamps em leituras e gravações. Para dados em colunas relacionadas a horas gravadas durante operações de compactação manual, o Athena retém somente uma precisão de milissegundos.
+ **Operações sem suporte**: as seguintes operações do Athena não são compatíveis com tabelas Iceberg. 
  + [ALTER TABLE SET LOCATION](alter-table-set-location.md)
+ **Visualizações**: use `CREATE VIEW` para criar visualizações do Athena, conforme descrito em [Trabalhar com visualizações](views.md). Se você tiver interesse em usar a [especificação de visualização do Iceberg](https://github.com/apache/iceberg/blob/master/format/view-spec.md) para criar visualizações, entre em contato com [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com). 
+ **Comandos de gerenciamento de TTF não compatíveis com o AWS Lake Formation**: embora seja possível usar o Lake Formation para gerenciar permissões de acesso de leitura para TransactionTable Formats (TTFs), como Apache Iceberg, Apache Hudi e Linux Foundation Delta Lake, não é possível usar o Lake Formation para gerenciar permissões para operações como `VACUUM`, `MERGE`, `UPDATE` ou `OPTIMIZE` com esses formatos de tabela. Para obter mais informações sobre a integração do Lake Formation com o Athena, consulte [Usar o AWS Lake Formation com o Amazon Athena](https://docs.aws.amazon.com/lake-formation/latest/dg/athena-lf.html) no *Guia do desenvolvedor do AWS Lake Formation*.
+ **Particionar por campos aninhados** - A partição por campos aninhados não é suportada. A tentativa de fazer isso produz a mensagem NÃO SUPORTADO: *particionar por campo aninhado não é suportado: column\$1name.nested\$1field\$1name*.**
+ **Não é possível ignorar os objetos do Amazon Glacier**: se os objetos da tabela do Apache Iceberg estiverem em uma classe de armazenamento do Amazon Glacier, definir a propriedade da tabela `read_restored_glacier_objects` como `false` não surtirá efeito.

  Por exemplo, suponhamos que você emita o seguinte comando:

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')
  ```

  Para tabelas do Iceberg e do Delta Lake, o comando gera o erro Chave de propriedade da tabela não compatível: read\$1restored\$1glacier\$1objects. Para as tabelas do Hudi, o comando `ALTER TABLE` não gera erro, mas mesmo assim os objetos do Amazon Glacier não são ignorados. A execução de consultas `SELECT` após o comando `ALTER TABLE` continua a retornar todos os objetos.

Se quiser que o Athena ofereça suporte a recurso específico, envie comentários para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com).

**Topics**
+ [

## Considerações e limitações
](#querying-iceberg-considerations-and-limitations)
+ [

# Criar tabelas do Iceberg
](querying-iceberg-creating-tables.md)
+ [

# Consultar dados de tabelas do Iceberg
](querying-iceberg-table-data.md)
+ [

# Executar consultas de viagem no tempo e viagem nas versões
](querying-iceberg-time-travel-and-version-travel-queries.md)
+ [

# Atualizar dados nas tabelas do Iceberg
](querying-iceberg-updating-iceberg-table-data.md)
+ [

# Gerenciar tabelas do Iceberg
](querying-iceberg-managing-tables.md)
+ [

# Evoluir o esquema de tabelas do Iceberg
](querying-iceberg-evolving-table-schema.md)
+ [

# Executar outras operações de DDL em tabelas do Iceberg
](querying-iceberg-additional-operations.md)
+ [

# Otimizar tabelas do Iceberg
](querying-iceberg-data-optimization.md)
+ [

# Consultar as visões materializadas do Catálogo de Dados do AWS Glue
](querying-iceberg-gdc-mv.md)
+ [

# Tipos de dados suportados para tabelas Iceberg no Athena
](querying-iceberg-supported-data-types.md)
+ [

# Recursos adicionais
](querying-iceberg-additional-resources.md)

# Criar tabelas do Iceberg
<a name="querying-iceberg-creating-tables"></a>

Para criar uma tabela Iceberg para uso no Athena, você pode usar uma instrução `CREATE TABLE` conforme documentada nesta página, ou pode usar um crawler do AWS Glue.

## Usar uma instrução CREATE TABLE
<a name="querying-iceberg-creating-tables-query-editor"></a>

O Athena cria tabelas do Iceberg v2. Para saber a diferença entre as tabelas da v1 e v2, consulte [Alterações de versão do formato](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) na documentação do Apache Iceberg.

A cláusula `CREATE TABLE` do Athena cria uma tabela Iceberg sem dados. Você poderá consultar uma tabela diretamente de sistemas externos, como o Apache Spark, se a tabela usar o [catálogo do Glue de código aberto do Iceberg](https://iceberg.apache.org/docs/latest/aws/#glue-catalog). Você não precisa criar uma tabela externa.

**Atenção**  
Executar `CREATE EXTERNAL TABLE` resulta na mensagem de erro External keyword not supported for table type ICEBERG (Palavra-chave externa não compatível com o tipo de tabela ICEBERG). 

Para criar uma tabela Iceberg no Athena, defina a propriedade `'table_type'` da tabela como `'ICEBERG'` na cláusula `TBLPROPERTIES`, como no resumo da sintaxe a seguir.

```
CREATE TABLE
  [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
  [PARTITIONED BY (col_name | transform, ... )]
  LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
  TBLPROPERTIES ( 'table_type' ='ICEBERG' [, property_name=property_value] )
```

Para obter informações sobre os tipos de dados que você pode consultar em tabelas Iceberg, consulte [Tipos de dados suportados para tabelas Iceberg no Athena](querying-iceberg-supported-data-types.md).

### Usar partições
<a name="querying-iceberg-partitioning"></a>

Para criar tabelas Iceberg com partições, use a sintaxe `PARTITIONED BY`. As colunas usadas para particionamento devem ser especificadas primeiro nas declarações de colunas. O tipo de coluna não deve ser incluído dentro da cláusula `PARTITIONED BY`. Você também pode definir [transformações de partição](https://iceberg.apache.org/spec/#partition-transforms) na sintaxe `CREATE TABLE`. Para especificar várias colunas para particionamento, separe as colunas por vírgula (`,`), como no exemplo a seguir.

```
CREATE TABLE iceberg_table (id bigint, data string, category string)
  PARTITIONED BY (category, bucket(16, id))
  LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
  TBLPROPERTIES ( 'table_type' = 'ICEBERG' )
```

A tabela a seguir mostra as funções de transformação de partição disponíveis.


****  

| Função | Descrição | Tipos compatíveis | 
| --- | --- | --- | 
| year(ts) | Partição por ano | date, timestamp | 
| month(ts) | Partição por mês | date, timestamp | 
| day(ts)  | Partição por dia | date, timestamp | 
| hour(ts) | Partição por hora | timestamp | 
| bucket(N, col) | Partição por buckets N de mod de valor por hash. Esse conceito é semelhante ao bucket por hash para tabelas do Hive. | int, long, decimal, date, timestamp, string, binary  | 
| truncate(L, col) | Partição por valor truncada para L | int, long, decimal, string | 

O Athena suporta o particionamento oculto do Iceberg. Para obter mais informações, consulte [Particionamento oculto do Iceberg](https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning) na documentação do Apache Iceberg.

### Especificar propriedades das tabelas
<a name="querying-iceberg-table-properties"></a>

Esta seção descreve as propriedades de tabela que você pode especificar como pares de valores-chave na cláusula `TBLPROPERTIES` da instrução `CREATE TABLE`. O Athena permite apenas uma lista predefinida de pares de valores-chave nas propriedades da tabela para criar ou alterar tabelas Iceberg. As tabelas a seguir mostram as propriedades de tabela que você pode especificar. Para obter mais informações sobre essas opções de compactação, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md) mais adiante neste documento. Se você quiser que o Athena suporte uma propriedade específica de configuração de tabela de código aberto, envie comentários para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com). 

***formato***


****  

|  |  | 
| --- |--- |
| Descrição | Formato de dados do arquivo | 
| Valores de propriedade permitidos | O formato de arquivo compatível e as combinações de compactação variam conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md). | 
| Valor padrão | parquet | 

***write\$1compression***


****  

|  |  | 
| --- |--- |
| Descrição | Codec de compactação de arquivo | 
| Valores de propriedade permitidos | O formato de arquivo compatível e as combinações de compactação variam conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md). | 
| Valor padrão |  A compactação de gravação padrão varia conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md).  | 

***optimize\$1rewrite\$1data\$1file\$1threshold***


****  

|  |  | 
| --- |--- |
| Descrição | Configuração específica de otimização de dados. Se houver menos arquivos de dados que exigem otimização do que o limite fornecido, os arquivos não serão regravados. Isso permite acumular mais arquivos de dados para produzir arquivos mais próximos do tamanho de destino e ignorar computação desnecessária para economizar custos. | 
| Valores de propriedade permitidos | Um número positivo. Deve ser menor que 50. | 
| Valor padrão | 5 | 

***optimize\$1rewrite\$1delete\$1file\$1threshold***


****  

|  |  | 
| --- |--- |
| Descrição | Configuração específica de otimização de dados. Se houver menos arquivos de exclusão associados a um arquivo de dados do que o limite, o arquivo de dados não será regravado. Isso permite acumular mais arquivos de exclusão para cada arquivo de dados para economizar custos. | 
| Valores de propriedade permitidos | Um número positivo. Deve ser menor que 50. | 
| Valor padrão | 2 | 

***vacuum\$1min\$1snapshots\$1to\$1keep***


****  

|  |  | 
| --- |--- |
| Descrição |  Número mínimo de snapshots a serem retidos na ramificação principal de uma tabela. Esse valor tem precedência sobre a propriedade `vacuum_max_snapshot_age_seconds`. Se o mínimo restante de snapshots for mais antigo do que a idade especificada por `vacuum_max_snapshot_age_seconds`, os snapshots serão mantidos e o valor de `vacuum_max_snapshot_age_seconds` será ignorado.  | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 1 | 

***vacuum\$1max\$1snapshot\$1age\$1seconds***


****  

|  |  | 
| --- |--- |
| Descrição | Período máximo para reter os snapshots na ramificação principal. Esse valor será ignorado se o mínimo restante de snapshots especificado por vacuum\$1min\$1snapshots\$1to\$1keep for maior que a idade especificada. Essa propriedade de comportamento da tabela corresponde à propriedade history.expire.max-snapshot-age-ms na configuração do Apache Iceberg. | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 432 mil segundos (cinco dias) | 

***vacuum\$1max\$1metadata\$1files\$1to\$1keep***


****  

|  |  | 
| --- |--- |
| Descrição | O número máximo de arquivos de metadados anteriores a serem retidos na ramificação principal da tabela. | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 100 | 

***write\$1data\$1path\$1enabled***


****  

|  |  | 
| --- |--- |
| Descrição | Quando definida como true, a tabela Iceberg é criada com a propriedade write.data.path em vez da propriedade obsoleta write.object-storage.path. Use essa opção para garantir a compatibilidade com o Iceberg 1.9.0 e versões posteriores, que não oferecem mais suporte à propriedade obsoleta. | 
| Valores de propriedade permitidos | true, false | 
| Valor padrão | false | 

### Exemplo de instrução CREATE TABLE
<a name="querying-iceberg-example-create-table-statement"></a>

O exemplo a seguir cria uma tabela do Iceberg com três colunas.

```
CREATE TABLE iceberg_table (
  id int,
  data string,
  category string) 
PARTITIONED BY (category, bucket(16,id)) 
LOCATION 's3://amzn-s3-demo-bucket/iceberg-folder' 
TBLPROPERTIES (
  'table_type'='ICEBERG',
  'format'='parquet',
  'write_compression'='snappy',
  'optimize_rewrite_delete_file_threshold'='10'
)
```

## Usar CREATE TABLE AS SELECT (CTAS)
<a name="querying-iceberg-creating-tables-ctas"></a>

Para obter informações sobre a criação de uma tabela do Iceberg usando a instrução `CREATE TABLE AS`, consulte [CREATE TABLE AS](create-table-as.md), com atenção especial à seção [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties).

## Usar um crawler do AWS Glue
<a name="querying-iceberg-creating-tables-crawler"></a>

Você pode usar um crawler do AWS Glue para registrar automaticamente suas tabelas Iceberg no AWS Glue Data Catalog. Se quiser migrar de outro catálogo do Iceberg, você pode criar e agendar um crawler do AWS Glue e fornecer os caminhos do Amazon S3 onde as tabelas do Iceberg estão localizadas. Você pode especificar a profundidade máxima dos caminhos do Amazon S3 que o crawler do AWS Glue pode percorrer. Depois de agendar um crawler do AWS Glue, ele extrairá as informações do esquema e atualizará o AWS Glue Data Catalog com as alterações do esquema toda vez que for executado. O crawler do AWS Glue é compatível com a mesclagem de esquemas nos snapshots e atualiza o local mais recente do arquivo de metadados no AWS Glue Data Catalog. Para obter mais informações, consulte [Data Catalog and crawlers in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html). 

# Consultar dados de tabelas do Iceberg
<a name="querying-iceberg-table-data"></a>

Para consultar um conjunto de dados Iceberg, use a instrução `SELECT` padrão, como a que se segue. As consultas atendem à [especificação de formato v2](https://iceberg.apache.org/spec/#format-versioning) do Apache Iceberg e realizam a mesclagem na leitura das exclusões de posição e igualdade.

```
SELECT * FROM [db_name.]table_name [WHERE predicate]
```

Para otimizar os tempos de consulta, todos os predicados são enviados para onde os dados residem.

Para obter informações sobre consultas de viagem no tempo e viagem nas versões, consulte [Executar consultas de viagem no tempo e viagem nas versões](querying-iceberg-time-travel-and-version-travel-queries.md).

## Criar e consultar visualizações com tabelas do Iceberg
<a name="querying-iceberg-views"></a>

Para criar e consultar visualizações do Athena em tabelas do Iceberg, use visualizações `CREATE VIEW` conforme descrito em [Trabalhar com visualizações](views.md).

Exemplo:

```
CREATE VIEW view1 AS SELECT * FROM iceberg_table
```

```
SELECT * FROM view1 
```

Se você tiver interesse em usar a [especificação de visualização do Iceberg](https://github.com/apache/iceberg/blob/master/format/view-spec.md) para criar visualizações, entre em contato com [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com). 

## Consultar metadados de tabelas do Iceberg
<a name="querying-iceberg-table-metadata"></a>

Em uma consulta `SELECT`, é possível usar as seguintes propriedades após *table\$1name* para consultar metadados de tabela do Iceberg:
+ **\$1files**: mostra os arquivos de dados atuais de uma tabela.
+ **\$1manifests**: mostra os manifestos do arquivo atual de uma tabela.
+ **\$1history**: mostra o histórico de uma tabela.
+ **\$1partitions**: mostra as partições atuais de uma tabela.
+ **\$1snapshots**: mostra os snapshots de uma tabela.
+ **\$1refs**: mostra as referências de uma tabela.

### Exemplos
<a name="querying-iceberg-table-metadata-syntax"></a>

A instrução a seguir lista os arquivos de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$files"
```

A instrução a seguir lista os manifestos de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$manifests" 
```

A instrução a seguir mostra o histórico de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$history"
```

O exemplo a seguir mostra as partições de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$partitions" 
```

O exemplo a seguir lista os snapshots de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$snapshots" 
```

O exemplo a seguir mostra as referências de uma tabela do Iceberg.

```
SELECT * FROM "dbname"."tablename$refs" 
```

## Usar o controle de acesso detalhado do Lake Formation
<a name="querying-iceberg-working-with-lf-fgac"></a>

A versão 3 do mecanismo do Athena é compatível com o controle de acesso detalhado do Lake Formation com tabelas do Iceberg, incluindo o controle de acesso de segurança em nível de coluna e de linha. Esse controle de acesso funciona com consultas de passagem de tempo e com tabelas que realizaram a evolução do esquema. Para obter mais informações, consulte [Controle de acesso detalhado do Lake Formation e grupos de trabalho do Athena](lf-athena-limitations.md#lf-athena-limitations-fine-grained-access-control).

Se a criação da sua tabela do Iceberg ocorreu exterior ao Athena, use o [SDK do Apache Iceberg](https://iceberg.apache.org/releases/), versão 0.13.0 ou superior, para que as informações da coluna da tabela do Iceberg sejam preenchidas no AWS Glue Data Catalog. Se a tabela do Iceberg não contiver informações de coluna no AWS Glue, você poderá usar a instrução [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) do Athena ou o SDK do Iceberg mais recente para corrigir a tabela e atualizar as informações da coluna no AWS Glue. 

# Executar consultas de viagem no tempo e viagem nas versões
<a name="querying-iceberg-time-travel-and-version-travel-queries"></a>

Toda tabela Apache Iceberg mantém um manifesto versionado dos objetos do Amazon S3 que contém. Versões anteriores do manifesto podem ser usadas para consultas de viagem no tempo e de viagem nas versões.

As consultas de viagem no tempo no Athena consultam o Amazon S3 para obter dados históricos usando um snapshot consistente a partir de uma data e hora especificadas. As consultas de viagem nas versões do Athena consultam o Amazon S3 para obter dados históricos a partir de um ID de snapshot especificado.

## Consultas de viagem no tempo
<a name="querying-iceberg-time-travel-queries"></a>

Para executar uma consulta de viagem no tempo, use `FOR TIMESTAMP AS OF timestamp` após o nome da tabela na instrução `SELECT`, como no exemplo a seguir.

```
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp
```

O horário do sistema a ser especificado para a viagem é um carimbo de data/hora ou uma carimbo de data/hora com um fuso horário. Se não for especificado, o Athena considera o valor como um carimbo de data/hora no horário UTC.

O exemplo a seguir de consultas de viagem no tempo selecionam dados do CloudTrail para a data e hora especificadas.

```
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2020-01-01 10:00:00 UTC'
```

```
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)
```

## Consultas de viagem nas versões
<a name="querying-iceberg-version-travel-queries"></a>

Para executar uma consulta de viagem nas versões (ou seja, exibir um snapshot consistente a partir de uma versão especificada), use `FOR VERSION AS OF version` após o nome da tabela na instrução `SELECT`, como no exemplo a seguir.

```
SELECT * FROM [db_name.]table_name FOR VERSION AS OF version         
```

O parâmetro *versão* é o ID do snapshot `bigint` associado a uma versão da tabela Iceberg.

O exemplo de consulta de viagem nas versões a seguir seleciona dados para a versão especificada.

```
SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
```

**nota**  
As cláusulas `FOR SYSTEM_TIME AS OF` e `FOR SYSTEM_VERSION AS OF` na versão 2 do mecanismo do Athena foram substituídas pelas cláusulas `FOR TIMESTAMP AS OF` e `FOR VERSION AS OF` na versão 3 do mecanismo do Athena.

### Recuperar ID do snapshot
<a name="querying-iceberg-table-snapshot-id"></a>

Você pode usar a classe Java [SnapshotUtil](https://iceberg.apache.org/javadoc/1.6.0/org/apache/iceberg/util/SnapshotUtil.html) fornecida pelo Iceberg para recuperar o ID do snapshot do Iceberg, como no exemplo a seguir.

```
import org.apache.iceberg.Table;
import org.apache.iceberg.aws.glue.GlueCatalog;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.util.SnapshotUtil;

import java.text.SimpleDateFormat;
import java.util.Date;

Catalog catalog = new GlueCatalog();

Map<String, String> properties = new HashMap<String, String>();
properties.put("warehouse", "s3://amzn-s3-demo-bucket/my-folder");
catalog.initialize("my_catalog", properties);

Date date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2022/01/01 00:00:00");
long millis = date.getTime();

TableIdentifier name = TableIdentifier.of("db", "table");
Table table = catalog.loadTable(name);
long oldestSnapshotIdAfter2022 = SnapshotUtil.oldestAncestorAfter(table, millis);
```

## Combinar viagens no tempo e viagens nas versões
<a name="querying-iceberg-combining-time-and-version-travel"></a>

Você pode usar a sintaxe de viagem no tempo e viagem nas versões na mesma consulta para especificar condições diferentes de temporização e versionamento, como no exemplo a seguir.

```
SELECT table1.*, table2.* FROM 
  [db_name.]table_name FOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 
  FULL JOIN 
  [db_name.]table_name FOR VERSION AS OF 5487432386996890161 AS table2 
  ON table1.ts = table2.ts 
  WHERE (table1.id IS NULL OR table2.id IS NULL)
```

# Atualizar dados nas tabelas do Iceberg
<a name="querying-iceberg-updating-iceberg-table-data"></a>

Os dados da tabela do Iceberg podem ser gerenciados diretamente no Athena usando as consultas `INSERT`, `UPDATE` e `DELETE`. Cada transação de gerenciamento de dados produz um novo snapshot, que pode ser consultado usando a viagem no tempo. As instruções `UPDATE` e `DELETE` seguem a especificação de [exclusão de posição](https://iceberg.apache.org/spec/#position-delete-files) no nível de linha do formato v2 do Iceberg e aplicam o isolamento do snapshot.

**nota**  
No momento, o Athena SQL não oferece suporte à abordagem copy-on-write. As operações `UPDATE`, `MERGE INTO` e `DELETE FROM` sempre usam a abordagem de mesclagem na leitura com exclusões posicionais, independentemente das propriedades da tabela especificada. Caso você tenha configurado propriedades da tabela como `write.update.mode`, `write.merge.mode` e/ou `write.delete.mode` para usar copy-on-write, suas consultas não falharão, pois o Athena as ignorará e continuará usando merge-on-read. 

Use os comandos a seguir para executar operações de gerenciamento de dados em tabelas Iceberg.

**Topics**
+ [

# INSERT INTO
](querying-iceberg-insert-into.md)
+ [

# DELETE
](querying-iceberg-delete.md)
+ [

# UPDATE
](querying-iceberg-update.md)
+ [

# MERGE INTO
](querying-iceberg-merge-into.md)

# INSERT INTO
<a name="querying-iceberg-insert-into"></a>

Insere dados em uma tabela Iceberg. O `INSERT INTO` do Athena Iceberg, da mesma forma que as consultas `INSERT INTO` atuais em tabelas externas do Hive, é cobrado pela quantidade de dados verificados. Para inserir dados em uma tabela Iceberg, use a sintaxe a seguir, na qual *query* pode ser `VALUES (val1, val2, ...)` ou `SELECT (col1, col2, …) FROM [db_name.]table_name WHERE predicate`. Para obter detalhes de sintaxe e semântica do SQL, consulte [INSERT INTO](insert-into.md).

```
INSERT INTO [db_name.]table_name [(col1, col2, …)] query
```

Os exemplos a seguir inserem valores na tabela `iceberg_table`.

```
INSERT INTO iceberg_table VALUES (1,'a','c1')
```

```
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
```

```
INSERT INTO iceberg_table SELECT * FROM another_table
```

# DELETE
<a name="querying-iceberg-delete"></a>

O `DELETE` do Athena Iceberg grava arquivos de exclusão da posição do Iceberg em uma tabela. Essa operação é conhecida como uma exclusão mesclar na leitura. Em contraste com uma exclusão copiar na gravação, a exclusão mesclar na leitura é mais eficiente porque não grava os dados do arquivo novamente. Ao ler dados do Iceberg, o Athena mescla os arquivos de exclusão da posição do Iceberg com arquivos de dados para produzir a visualização mais recente de uma tabela. Para remover esses arquivos de exclusão de posição, você pode executar a [ação de compactação REWRITE DATA](querying-iceberg-data-optimization.md#querying-iceberg-data-optimization-rewrite-data-action). As operações `DELETE` são cobradas pela quantidade de dados verificados. Para ver a sintaxe, consulte [DELETE](delete-statement.md).

O exemplo a seguir exclui as linhas de `iceberg_table` que têm `c3` como o valor para `category`.

```
DELETE FROM iceberg_table WHERE category='c3'
```

# UPDATE
<a name="querying-iceberg-update"></a>

O `UPDATE` do Athena Iceberg grava arquivos de exclusão da posição do Iceberg e linhas recém-atualizadas como arquivos de dados na mesma transação. O `UPDATE` pode ser considerado como uma combinação de `INSERT INTO` e `DELETE`. As operações `UPDATE` são cobradas pela quantidade de dados verificados. Para ver a sintaxe, consulte [UPDATE](update-statement.md).

O exemplo a seguir atualiza os valores especificados na tabela `iceberg_table`.

```
UPDATE iceberg_table SET category='c2' WHERE category='c1'
```

# MERGE INTO
<a name="querying-iceberg-merge-into"></a>

Atualiza, exclui ou insere linhas de forma condicional em uma tabela do Iceberg. Uma única instrução pode combinar ações de atualização, exclusão e inserção. Para ver a sintaxe, consulte [MERGE INTO](merge-into-statement.md).

**nota**  
`MERGE INTO` é transacional e é compatível somente com tabelas do Apache Iceberg na versão 3 do mecanismo do Athena.

O exemplo a seguir exclui todos os clientes da tabela `t` que estão na tabela de origem `s`.

```
MERGE INTO accounts t USING monthly_accounts_update s
ON t.customer = s.customer
WHEN MATCHED
THEN DELETE
```

O exemplo a seguir atualiza a tabela de destino `t` com as informações do cliente presentes na tabela de origem `s`. Para linhas de clientes na tabela `t` que têm linhas de clientes correspondentes na tabela `s`, o exemplo incrementa as aquisições na tabela t. Se a tabela `t` não corresponder a uma linha de cliente na tabela `s`, o exemplo irá inserir a linha de cliente da tabela `s` na tabela`t` .

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED
        THEN UPDATE SET purchases = s.purchases + t.purchases
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```

O exemplo a seguir atualiza condicionalmente a tabela de destino `t` com informações presentes na tabela de origem `s`. O exemplo exclui qualquer linha de destino correspondente cujo endereço de origem seja “Centreville”. Para todas as outras linhas correspondentes, o exemplo adiciona as aquisições da origem e define o endereço de destino como o endereço da origem. Se não houver correspondência na tabela de destino, o exemplo irá inserir a linha da tabela de origem.

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED AND s.address = 'Centreville'
        THEN DELETE
    WHEN MATCHED
        THEN UPDATE
            SET purchases = s.purchases + t.purchases, address = s.address
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```

# Gerenciar tabelas do Iceberg
<a name="querying-iceberg-managing-tables"></a>

O Athena oferece suporte às operações DDL a seguir para tabelas Iceberg.

**Topics**
+ [

# ALTER TABLE RENAME
](querying-iceberg-alter-table-rename.md)
+ [

# ALTER TABLE SET TBLPROPERTIES
](querying-iceberg-alter-table-set-properties.md)
+ [

# ALTER TABLE UNSET TBLPROPERTIES
](querying-iceberg-alter-table-unset-properties.md)
+ [

# DESCRIBE
](querying-iceberg-describe-table.md)
+ [

# DESCARTAR TABELA
](querying-iceberg-drop-table.md)
+ [

# SHOW CREATE TABLE
](querying-iceberg-show-create-table.md)
+ [

# SHOW TBLPROPERTIES
](querying-iceberg-show-table-properties.md)

# ALTER TABLE RENAME
<a name="querying-iceberg-alter-table-rename"></a>

Renomeia uma tabela.

Como os metadados de uma tabela Iceberg são armazenados no Amazon S3, você pode atualizar o banco de dados e o nome da tabela de uma tabela Iceberg gerenciada sem afetar as informações de tabela subjacentes.

## Resumo
<a name="querying-iceberg-alter-table-rename-synopsis"></a>

```
ALTER TABLE [db_name.]table_name RENAME TO [new_db_name.]new_table_name
```

## Exemplo
<a name="querying-iceberg-alter-table-rename-example"></a>

```
ALTER TABLE my_db.my_table RENAME TO my_db2.my_table2
```

# ALTER TABLE SET TBLPROPERTIES
<a name="querying-iceberg-alter-table-set-properties"></a>

Adiciona propriedades a uma tabela Iceberg e define os valores atribuídos a elas.

De acordo com as [especificações do Iceberg](https://iceberg.apache.org/#spec/#table-metadata-fields), as propriedades de tabela são armazenadas no arquivo de metadados da tabela Iceberg, e não em AWS Glue. O Athena não aceita propriedades de tabela personalizadas. Consulte a seção [Especificar propriedades das tabelas](querying-iceberg-creating-tables.md#querying-iceberg-table-properties) para ver os pares de chave-valor permitidos. Você também pode usar `ALTER TABLE SET TBLPROPERTIES` e `ALTER TABLE UNSET TBLPROPERTIES` para definir ou remover as propriedades da tabela `write.data.path` e `write.object-storage.path` do Iceberg. Se você quiser que o Athena suporte uma propriedade específica de configuração de tabela de código aberto, envie comentários para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com).

## Resumo
<a name="querying-iceberg-alter-table-set-properties-synopsis"></a>

```
ALTER TABLE [db_name.]table_name SET TBLPROPERTIES ('property_name' = 'property_value' [ , ... ])
```

## Exemplo
<a name="querying-iceberg-alter-table-set-properties-example"></a>

```
ALTER TABLE iceberg_table SET TBLPROPERTIES (
  'format'='parquet',
  'write_compression'='snappy',
  'optimize_rewrite_delete_file_threshold'='10'
)
```

O exemplo a seguir define a propriedade `write.data.path` em uma tabela Iceberg existente.

```
ALTER TABLE iceberg_table SET TBLPROPERTIES (
  'write.data.path'='s3://amzn-s3-demo-bucket/your-folder/data'
)
```

# ALTER TABLE UNSET TBLPROPERTIES
<a name="querying-iceberg-alter-table-unset-properties"></a>

Descarta as propriedades existentes de uma tabela Iceberg.

## Resumo
<a name="querying-iceberg-alter-table-unset-properties-synopsis"></a>

```
ALTER TABLE [db_name.]table_name UNSET TBLPROPERTIES ('property_name' [ , ... ])
```

## Exemplo
<a name="querying-iceberg-alter-table-unset-properties-example"></a>

```
ALTER TABLE iceberg_table UNSET TBLPROPERTIES ('write_compression')
```

O exemplo a seguir remove a propriedade `write.data.path` de uma tabela Iceberg.

```
ALTER TABLE iceberg_table UNSET TBLPROPERTIES ('write.data.path')
```

# DESCRIBE
<a name="querying-iceberg-describe-table"></a>

Descreve informações da tabela.

## Resumo
<a name="querying-iceberg-describe-table-synopsis"></a>

```
DESCRIBE [FORMATTED] [db_name.]table_name
```

Quando a opção `FORMATTED` é especificada, a saída exibe informações adicionais, como localização e propriedades da tabela.

## Exemplo
<a name="querying-iceberg-describe-table-example"></a>

```
DESCRIBE iceberg_table
```

# DESCARTAR TABELA
<a name="querying-iceberg-drop-table"></a>

Descarta uma tabela Iceberg.

**Atenção**  
Como as tabelas Iceberg são consideradas tabelas gerenciadas no Athena, descartar uma tabela Iceberg remove todos os dados na tabela.

## Resumo
<a name="querying-iceberg-drop-table-synopsis"></a>

```
DROP TABLE [IF EXISTS] [db_name.]table_name
```

## Exemplo
<a name="querying-iceberg-drop-table-example"></a>

```
DROP TABLE iceberg_table
```

# SHOW CREATE TABLE
<a name="querying-iceberg-show-create-table"></a>

Exibe uma declaração DDL `CREATE TABLE` que pode ser usada para recriar a tabela Iceberg no Athena. Se o Athena não puder reproduzir a estrutura da tabela (por exemplo, quando a tabela tiver propriedades personalizadas especificadas), um erro UNSUPPORTED (NÃO SUPORTADO) será gerado.

## Resumo
<a name="querying-iceberg-show-create-table-synopsis"></a>

```
SHOW CREATE TABLE [db_name.]table_name
```

## Exemplo
<a name="querying-iceberg-show-create-table-example"></a>

```
SHOW CREATE TABLE iceberg_table
```

# SHOW TBLPROPERTIES
<a name="querying-iceberg-show-table-properties"></a>

Mostra uma ou mais propriedades de uma tabela Iceberg. Somente as propriedades de tabela compatíveis com o Athena são mostradas.

## Resumo
<a name="querying-iceberg-show-table-properties-synopsis"></a>

```
SHOW TBLPROPERTIES [db_name.]table_name [('property_name')]
```

## Exemplo
<a name="querying-iceberg-show-table-properties-example"></a>

```
SHOW TBLPROPERTIES iceberg_table
```

# Evoluir o esquema de tabelas do Iceberg
<a name="querying-iceberg-evolving-table-schema"></a>

As atualizações de esquema do Iceberg são alterações somente de metadados. Nenhum arquivo de dados é alterado quando você executa uma atualização de esquema. 

O formato Iceberg suporta as seguintes alterações na evolução do esquema:
+ **Adicionar**: adiciona uma nova coluna a uma tabela ou a uma `struct` aninhada.
+ **Descartar**: remove uma coluna existente de uma tabela ou `struct` aninhada.
+ **Renomear**: renomeia uma coluna ou campo existente em uma `struct` aninhada.
+ **Reordenar**: altera a ordem das colunas.
+  **Promoção de tipo**: amplia o tipo de uma coluna, um campo `struct`, uma chave `map`, um valor `map` ou um elemento `list`. Atualmente, há suporte para os seguintes casos nas tabelas Iceberg: 
  + inteiro para grande inteiro
  + float para double
  + aumento da precisão de um tipo decimal

É possível usar instruções do DDL nesta seção para modificar o esquema de tabelas do Iceberg.

**Topics**
+ [

# ALTER TABLE ADD COLUMNS
](querying-iceberg-alter-table-add-columns.md)
+ [

# ALTER TABLE DROP COLUMN
](querying-iceberg-alter-table-drop-column.md)
+ [

# ALTER TABLE CHANGE COLUMN
](querying-iceberg-alter-table-change-column.md)
+ [

# SHOW COLUMNS
](querying-iceberg-show-columns.md)

# ALTER TABLE ADD COLUMNS
<a name="querying-iceberg-alter-table-add-columns"></a>

Adiciona uma ou mais colunas a uma tabela Iceberg existente.

## Resumo
<a name="querying-iceberg-alter-table-add-columns-synopsis"></a>

```
ALTER TABLE [db_name.]table_name ADD COLUMNS (col_name data_type [,...])
```

## Exemplos
<a name="querying-iceberg-alter-table-add-columns-example"></a>

O exemplo a seguir adiciona uma coluna `comment` do tipo `string` em uma tabela Iceberg.

```
ALTER TABLE iceberg_table ADD COLUMNS (comment string)
```

O exemplo a seguir adiciona uma coluna `point` do tipo `struct` em uma tabela Iceberg.

```
ALTER TABLE iceberg_table 
ADD COLUMNS (point struct<x: double, y: double>)
```

O exemplo a seguir adiciona uma coluna `points`, que é uma matriz de structs , em uma tabela Iceberg.

```
ALTER TABLE iceberg_table 
ADD COLUMNS (points array<struct<x: double, y: double>>)
```

# ALTER TABLE DROP COLUMN
<a name="querying-iceberg-alter-table-drop-column"></a>

Descarta uma coluna de uma tabela Iceberg existente.

## Resumo
<a name="querying-iceberg-alter-table-drop-column-synopsis"></a>

```
ALTER TABLE [db_name.]table_name DROP COLUMN col_name
```

## Exemplo
<a name="querying-iceberg-alter-table-drop-column-example"></a>

```
ALTER TABLE iceberg_table DROP COLUMN userid
```

# ALTER TABLE CHANGE COLUMN
<a name="querying-iceberg-alter-table-change-column"></a>

Altera o nome, tipo, ordem ou comentário de uma coluna em uma tabela do Iceberg.

**nota**  
`ALTER TABLE REPLACE COLUMNS`Não há suporte ao . Como `REPLACE COLUMNS` remove todas as colunas e, em seguida, adiciona colunas novas, ele não é compatível no Iceberg. `CHANGE COLUMN` é a sintaxe preferida para a evolução do esquema. 

## Resumo
<a name="querying-iceberg-alter-table-change-column-synopsis"></a>

```
ALTER TABLE [db_name.]table_name
  CHANGE [COLUMN] col_old_name col_new_name column_type 
  [COMMENT col_comment] [FIRST|AFTER column_name]
```

## Exemplo
<a name="querying-iceberg-alter-table-change-column-example"></a>

```
ALTER TABLE iceberg_table CHANGE comment blog_comment string AFTER id
```

# SHOW COLUMNS
<a name="querying-iceberg-show-columns"></a>

Mostra as colunas em uma tabela.

## Resumo
<a name="querying-iceberg-show-columns-synopsis"></a>

```
SHOW COLUMNS (FROM|IN) [db_name.]table_name
```

## Exemplo
<a name="querying-iceberg-alter-table-change-column-example"></a>

```
SHOW COLUMNS FROM iceberg_table
```

# Executar outras operações de DDL em tabelas do Iceberg
<a name="querying-iceberg-additional-operations"></a>

Além das operações de evolução de esquema descritas em [Evoluir o esquema de tabelas do Iceberg](querying-iceberg-evolving-table-schema.md), você também pode realizar as operações de DDL a seguir nas tabelas do Apache Iceberg no Athena.

## Operações no banco de dados
<a name="querying-iceberg-additional-operations-database-level-operations"></a>

Quando você usa [DROP DATABASE](drop-database.md) com a opção `CASCADE`, todos os dados da tabela Iceberg também são removidos. As operações DDL a seguir não têm efeito nas tabelas Iceberg.
+ [CREATE DATABASE](create-database.md)
+ [ALTER DATABASE SET DBPROPERTIES](alter-database-set-dbproperties.md)
+ [SHOW DATABASES](show-databases.md)
+ [SHOW TABLES](show-tables.md)
+ [SHOW VIEWS](show-views.md)

## Operações relacionadas à partição
<a name="querying-iceberg-additional-operations-partition-related-operations"></a>

Como as tabelas Iceberg usam o [particionamento oculto](https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning), você não precisa trabalhar diretamente com partições físicas. Por isso, as tabelas Iceberg no Athena não são compatíveis com as seguintes operações DDL relacionadas à partição:
+ [SHOW PARTITIONS](show-partitions.md)
+ [ALTER TABLE ADD PARTITION](alter-table-add-partition.md)
+ [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md)
+ [ALTER TABLE RENAME PARTITION](alter-table-rename-partition.md)

Se quiser ver a [evolução da partição](https://iceberg.apache.org/docs/latest/evolution/#partition-evolution) no Athena, envie comentários para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com).

## Descarregar tabelas do Iceberg
<a name="querying-iceberg-additional-operations-unload-iceberg-table"></a>

As tabelas Iceberg podem ser descarregadas em arquivos em uma pasta no Amazon S3. Para mais informações, consulte [UNLOAD](unload.md).

## MSCK REPAIR
<a name="querying-iceberg-additional-operations-msck-repair"></a>

Como as tabelas Iceberg acompanham as informações de layout da tabela, executar [MSCK REPAIR TABLE](msck-repair-table.md), como se faz com tabelas do Hive, não é necessário nem compatível.

# Otimizar tabelas do Iceberg
<a name="querying-iceberg-data-optimization"></a>

O Athena fornece vários recursos de otimização para melhorar a performance das consultas nas tabelas do Apache Iceberg. À medida que os dados se acumulam, as consultas podem se tornar menos eficientes devido ao aumento da sobrecarga de processamento de arquivos e ao custo computacional de aplicar exclusões no nível de linha armazenadas nos arquivos de exclusão do Iceberg. Para enfrentar esses desafios, o Athena é compatível com os operadores manuais de compactação e vacuum para otimizar a estrutura da tabela. O Athena também trabalha com estatísticas do Iceberg para permitir a otimização de consultas com base em custos e a indexação de colunas do Parquet para o descarte preciso dos dados durante a execução da consulta. Esses recursos trabalham juntos para reduzir o tempo de execução da consulta, minimizar a verificação de dados e reduzir os custos. Este tópico descreve como usar esses recursos de otimização para manter consultas de alta performance em suas tabelas do Iceberg.

## OPTIMIZE
<a name="querying-iceberg-data-optimization-rewrite-data-action"></a>

A ação de compactação `OPTIMIZE table REWRITE DATA` regrava os arquivos de dados em um layout mais otimizado com base no tamanho e no número de delete files associados. Para obter detalhes sobre a sintaxe e as propriedades da tabela, consulte [OPTIMIZE](optimize-statement.md).

### Exemplo
<a name="querying-iceberg-data-optimization-example"></a>

O exemplo a seguir mescla delete files em arquivos de dados e produz arquivos próximos ao tamanho do arquivo de destino, em que o valor de `category` é `c1`.

```
OPTIMIZE iceberg_table REWRITE DATA USING BIN_PACK
  WHERE category = 'c1'
```

## VACUUM
<a name="querying-iceberg-vacuum"></a>

`VACUUM` executa a [expiração do snapshot](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots) e a [remoção de arquivos órfãos](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files). Essas ações reduzem o tamanho dos metadados e removem os arquivos que não estão no estado atual da tabela e que também são mais antigos do que o período de retenção especificado para a tabela. Para obter detalhes sobre a sintaxe, consulte [VACUUM](vacuum-statement.md).

### Exemplo
<a name="querying-iceberg-vacuum-example"></a>

O exemplo a seguir usa uma propriedade de tabela para configurar a tabela `iceberg_table` para reter os últimos três dias de dados e, em seguida, usa `VACUUM` para expirar os snapshots antigos e remover os arquivos órfãos da tabela.

```
ALTER TABLE iceberg_table SET TBLPROPERTIES (
  'vacuum_max_snapshot_age_seconds'='259200'
)

VACUUM iceberg_table
```

## Usar estatísticas de tabelas do Iceberg
<a name="querying-iceberg-data-optimization-statistics"></a>

O otimizador baseado em custos do Athena usa estatísticas do Iceberg para produzir planos de consulta ideais. Quando as estatísticas são geradas para suas tabelas do Iceberg, o Athena usa automaticamente essas informações para tomar decisões inteligentes sobre a ordenação de junções, os filtros e o comportamento de agregação, geralmente melhorando a performance das consultas e reduzindo custos.

As estatísticas do Iceberg são ativadas por padrão quando você usa as Tabelas do S3. Para outras tabelas do Iceberg, o Athena usa a propriedade `use_iceberg_statistics` da tabela para determinar se as estatísticas devem ser usadas para a otimização baseada em custos. Para começar, consulte [Otimizar a performance da consulta usando estatísticas de coluna](https://docs.aws.amazon.com//glue/latest/dg/column-statistics.html) no *Guia do usuário do AWS Glue*, ou use o [console do Athena](https://docs.aws.amazon.com/athena/latest/ug/cost-based-optimizer.html) para gerar estatísticas sob demanda em suas tabelas do Iceberg.

## Usar indexação de colunas do Parquet
<a name="querying-iceberg-data-optimization-parquet-column-indexing"></a>

A indexação de colunas do Parquet possibilita que o Athena realize um descarte de dados mais preciso durante a execução da consulta, aproveitando as estatísticas mínimo/máximo no nível da página, além das estatísticas no nível do grupo de linhas. Isso permite que o Athena pule páginas desnecessárias em grupos de linhas, reduzindo significativamente a quantidade de dados verificados e melhorando a performance das consultas. Ele funciona melhor para consultas com predicados de filtro seletivo em colunas classificadas, melhorando o tempo de execução e a eficiência da verificação de dados, ao mesmo tempo em que reduz a quantidade de dados que a Athena precisa ler no Amazon S3.

O Athena usará índices de coluna do Parquet por padrão com Tabelas do S3 se os índices de coluna estiverem presentes nos arquivos Parquet subjacentes. Para outras tabelas do Iceberg, o Athena usa a propriedade `use_iceberg_parquet_column_index` para determinar se deve utilizar os índices das colunas no arquivo Parquet. Defina essa propriedade da tabela usando o console do AWS Glue ou a API `UpdateTable`.

# Consultar as visões materializadas do Catálogo de Dados do AWS Glue
<a name="querying-iceberg-gdc-mv"></a>

O Athena permite que você consulte as visões materializadas do Catálogo de Dados do AWS Glue. As visões materializadas do Catálogo de Dados do Glue armazenam resultados pré-processados de consultas SQL como tabelas do Apache Iceberg.

Quando você cria visões materializadas do Catálogo de Dados do Glue usando o Apache Spark no Amazon EMR ou AWS Glue, as definições da visão e os metadados são armazenados no Catálogo de Dados do AWS Glue. Os resultados pré-processados são armazenados como tabelas do Apache Iceberg no Amazon S3. Você pode consultar essas visões materializadas do Athena usando instruções `SELECT` de SQL padrão, da mesma forma que consultaria tabelas normais do Iceberg.

## Pré-requisitos
<a name="querying-iceberg-gdc-mv-prerequisites"></a>

Antes de consultar visões materializadas no Athena, verifique o seguinte:
+ A visão materializada existe no Catálogo de Dados do AWS Glue e foi criada usando o Apache Spark (versão 7.12.0 do Amazon EMR ou posterior, ou versão 5.1 do AWS Glue ou posterior)
+ Para consultar visões materializadas no Athena, você precisa das seguintes permissões do AWS Lake Formation:
  + Permissão `SELECT` na visão materializada
  + Permissão `DESCRIBE` na visão materializada
  + Acesso ao local subjacente do Amazon S3 em que os dados da visão materializada são armazenados
+ Os dados subjacentes da visão materializada são armazenados em buckets da Tabela do Amazon S3 ou em buckets de uso geral do Amazon S3
+ Você tem acesso ao banco de dados do Catálogo de Dados do AWS Glue contendo a visão materializada
+ Para visões materializadas armazenadas em buckets das Tabelas do Amazon S3, certifique-se de que seu perfil do IAM tenha as permissões necessárias para acessar o catálogo das Tabelas do S3.

## Considerações e limitações
<a name="querying-iceberg-gdc-mv-considerations"></a>
+ O Athena não é compatível com as seguintes operações para visões materializadas: `ALTER`, `CREATE MATERIALIZED VIEW`, `REFRESH MATERIALIZED VIEW`, `DROP`, `INSERT`, `UPDATE`, `MERGE`, `DELETE`, `OPTIMIZE`, `VACUUM`. Para criar visões materializadas, use o Apache Spark no Amazon EMR ou o AWS Glue. As operações de atualização devem ser realizadas por meio da API do Catálogo de Dados do AWS Glue ou do Apache Spark. Modifique as visões materializadas usando o Apache Spark.

## Consultar visões materializadas
<a name="querying-iceberg-gdc-mv-operations"></a>

O Athena trata as visões materializadas como tabelas padrão do Iceberg para operações de leitura, permitindo que você acesse os dados pré-processados sem exigir alterações especiais na sintaxe ou na configuração.

Para consultar uma visão materializada no Athena, use as instruções `SELECT` padrão:

```
SELECT * FROM my_database.sales_summary_mv;
```

Você pode aplicar filtros, agregações e junções da mesma forma que faria com tabelas normais:

```
SELECT
  region,
  SUM(total_sales) as sales_total
FROM my_database.sales_summary_mv
WHERE year = 2025
GROUP BY region
ORDER BY sales_total DESC;
```

## Operações compatíveis
<a name="querying-iceberg-gdc-mv-supported"></a>

O Athena é compatível com as seguintes operações nas visões materializadas:
+ Consultas `SELECT`: leia dados de visões materializadas usando instruções `SELECT` de SQL padrão
+ `DESCRIBE`: visualize o esquema e os metadados das visões materializadas
+ `SHOW TABLES`: liste as visões materializadas junto com outras tabelas em um banco de dados
+ Operações `JOIN`: junte as visões materializadas com outras tabelas ou visões
+ Filtragem e agregação - aplique cláusulas `WHERE`, `GROUP BY` e funções de agregação

# Tipos de dados suportados para tabelas Iceberg no Athena
<a name="querying-iceberg-supported-data-types"></a>

O Athena pode consultar tabelas Iceberg que contêm os seguintes tipos de dados:

```
binary
boolean
date
decimal
double
float
int
list
long
map
string
struct
timestamp without time zone
```

Para obter mais informações sobre tipos de tabela Iceberg, consulte a [página de esquemas para Iceberg](https://iceberg.apache.org/docs/latest/schemas/) na documentação do Apache.

A tabela a seguir mostra a relação entre tipos de dados do Athena e tipos de dados de tabela Iceberg.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/querying-iceberg-supported-data-types.html)

Para obter mais informações sobre tipos de dados no Athena, consulte [Tipos de dados no Amazon Athena](data-types.md).

# Recursos adicionais
<a name="querying-iceberg-additional-resources"></a>

O artigo a seguir está na documentação de Recomendações da AWS.
+ [Trabalhar com tabelas do Apache Iceberg usando o SQL do Amazon Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-athena.html) 

Para artigos detalhados sobre como usar o Athena com tabelas do Apache Iceberg, consulte as seguintes postagens no *AWSBlog de Big Data*.
+ [Implemente um processo CDC sem servidor com o Apache Iceberg usando o Amazon DynamoDB e o Amazon Athena](https://aws.amazon.com/blogs/big-data/implement-a-serverless-cdc-process-with-apache-iceberg-using-amazon-dynamodb-and-amazon-athena/) 
+ [Acelere a engenharia de atributos de ciência de dados em lagos de dados transacionais usando o Amazon Athena com o Apache Iceberg](https://aws.amazon.com/blogs/big-data/accelerate-data-science-feature-engineering-on-transactional-data-lakes-using-amazon-athena-with-apache-iceberg/) 
+ [Crie um data lake no Apache Iceberg usando o Amazon Athena, o Amazon EMR e AWS Glue](https://aws.amazon.com/blogs/big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/) 
+ [Execute inserções em um data lake usando o Amazon Athena e o Apache Iceberg](https://aws.amazon.com/blogs/big-data/perform-upserts-in-a-data-lake-using-amazon-athena-and-apache-iceberg/) 
+ [Crie um data lake transacional usando o Apache Iceberg, AWS Glue e compartilhamentos de dados entre contas usando o AWS Lake Formation e o Amazon Athena](https://aws.amazon.com/blogs/big-data/build-a-transactional-data-lake-using-apache-iceberg-aws-glue-and-cross-account-data-shares-using-aws-lake-formation-and-amazon-athena/) 
+ [Use o Apache Iceberg em um data lake para oferecer suporte ao processamento incremental de dados](https://aws.amazon.com/blogs/big-data/use-apache-iceberg-in-a-data-lake-to-support-incremental-data-processing/) 
+ [Crie um data lake Apache Iceberg em tempo real alinhado ao GDPR](https://aws.amazon.com/blogs/big-data/build-a-real-time-gdpr-aligned-apache-iceberg-data-lake/) 
+ [Automatize a replicação de fontes relacionais em um data lake transacional com o Apache Iceberg e AWS Glue](https://aws.amazon.com/blogs/big-data/automate-replication-of-relational-sources-into-a-transactional-data-lake-with-apache-iceberg-and-aws-glue/) 
+ [Interaja com tabelas do Apache Iceberg usando o Amazon Athena e permissões refinadas entre contas usando AWS Lake Formation](https://aws.amazon.com/blogs/big-data/interact-with-apache-iceberg-tables-using-amazon-athena-and-cross-account-fine-grained-permissions-using-aws-lake-formation/) 
+ [Crie um data lake transacional na tecnologia sem servidor com o Apache Iceberg, o Amazon EMR Sem Servidor e o Amazon Athena](https://aws.amazon.com/blogs/big-data/build-a-serverless-transactional-data-lake-with-apache-iceberg-amazon-emr-serverless-and-amazon-athena/) 

# Segurança do Amazon Athena
<a name="security"></a>

A segurança da nuvem na AWS é a nossa maior prioridade. Como cliente da AWS, você contará com um data center e uma arquitetura de rede criados para atender aos requisitos das organizações com as maiores exigências de segurança.

A segurança é uma responsabilidade compartilhada entre a AWS e você. O [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) descreve isto como segurança *da* nuvem e segurança *na* nuvem:
+ **Segurança da nuvem:** a AWS é responsável pela proteção da infraestrutura que executa Serviços da AWS na Nuvem AWS. A AWS também fornece serviços que podem ser usados com segurança. A eficácia de nossa segurança é regularmente testada e verificada por auditores terceirizados como parte dos [programas de conformidade da AWS](https://aws.amazon.com/compliance/programs/). Para saber mais sobre os programas de compatibilidade aplicáveis ao Athena, consulte [Serviços da AWS no escopo pelo programa de compatibilidade](https://aws.amazon.com/compliance/services-in-scope/).
+ **Segurança na nuvem**: sua responsabilidade é determinada pelo AWS service (Serviço da AWS) que você usa. Você também é responsável por outros fatores, inclusive a confidencialidade dos dados, os requisitos da organização, as leis e as regulamentações vigentes. 

Essa documentação ajudará você a entender como aplicar o modelo de responsabilidade compartilhada ao usar o Amazon Athena. Os tópicos a seguir mostram como configurar o Athena para atender aos seus objetivos de segurança e compatibilidade. Você também aprenderá a usar outros Serviços da AWS que podem ajudá-lo a monitorar e proteger seus recursos do Athena.

**Topics**
+ [

# Proteção de dados no Athena
](security-data-protection.md)
+ [

# Gerenciamento de identidade e acesso no Athena
](security-iam-athena.md)
+ [

# Registrar em log e monitorar o Athena
](security-logging-monitoring.md)
+ [

# Validação de conformidade
](security-compliance-validation.md)
+ [

# Resiliência no Athena
](security-resilience.md)
+ [

# Segurança da infraestrutura no Athena
](security-infrastructure.md)
+ [

# Análise de vulnerabilidade e configuração no Athena
](security-vulnerability-management.md)
+ [

# Usar o Athena para consultar dados registrados no AWS Lake Formation
](security-athena-lake-formation.md)

# Proteção de dados no Athena
<a name="security-data-protection"></a>

O [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/)AWS se aplica à proteção de dados no . Conforme descrito nesse modelo, AWS é responsável por proteger a infraestrutura global que executa todas as Nuvem AWS. Você é responsável por manter o controle sobre o conteúdo hospedado nessa infraestrutura. Você também é responsável pelas tarefas de configuração e gerenciamento de segurança dos Serviços da AWS que usa. Para saber mais sobre a privacidade de dados, consulte as [Data Privacy FAQ](https://aws.amazon.com/compliance/data-privacy-faq/). Para saber mais sobre a proteção de dados na Europa, consulte a postagem do blog [AWS Shared Responsibility Model and RGPD](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) no *Blog de segurança da AWS*.

Para fins de proteção de dados, recomendamos que você proteja as credenciais da Conta da AWS e configure as contas de usuário individuais com Centro de Identidade do AWS IAM ou AWS Identity and Access Management (IAM). Dessa maneira, cada usuário receberá apenas as permissões necessárias para cumprir suas obrigações de trabalho. Recomendamos também que você proteja seus dados das seguintes formas:
+ Use uma autenticação multifator (MFA) com cada conta.
+ Use SSL/TLS para se comunicar com os recursos da AWS. Exigimos TLS 1.2 e recomendamos TLS 1.3.
+ Configure os logs de API e atividade do usuário com AWS CloudTrail. Para saber mais sobre como usar as trilhas do CloudTrail para capturar atividades da AWS, consulte [Working with CloudTrail trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) no *Guia do usuário do AWS CloudTrail*.
+ Use as soluções de criptografia AWS, juntamente com todos os controles de segurança padrão em Serviços da AWS.
+ Use serviços gerenciados de segurança avançada, como o Amazon Macie, que ajuda a localizar e proteger dados sensíveis armazenados no Amazon S3.
+ Se você precisar de módulos criptográficos validados pelo FIPS 140-3 ao acessar a AWS por meio de uma interface de linha de comandos ou de uma API, use um endpoint do FIPS. Para saber mais sobre os endpoints FIPS disponíveis, consulte [Federal Information Processing Standard (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

É altamente recomendável que nunca sejam colocadas informações confidenciais ou sensíveis, como endereços de e-mail de clientes, em tags ou campos de formato livre, como um campo **Nome**. Isso inclui trabalhar com a Serviços da AWS ou com outros, usando o console, a API, a AWS CLI ou os SDKs da AWS. Quaisquer dados inseridos em tags ou em campos de texto de formato livre usados para nomes podem ser usados para logs de faturamento ou de diagnóstico. Se você fornecer um URL para um servidor externo, é fortemente recomendável que não sejam incluídas informações de credenciais no URL para validar a solicitação nesse servidor.

Como uma etapa de segurança adicional, é possível usar chave de contexto da condição global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) para limitar as solicitações somente àquelas feitas pelo Athena. Para obter mais informações, consulte [Usar chaves de contexto CalledVia para o Athena](security-iam-athena-calledvia.md).

## Proteger vários tipos de dados
<a name="security-data-protection-types-of-data"></a>

Vários tipos de dados estão envolvidos ao usar o Athena para criar bancos de dados e tabelas. Eles incluem dados de origem armazenados na origem no Amazon S3, metadados de bancos de dados e tabelas que você cria ao executar consultas ou o crawler do AWS Glue para descobrir dados, dados de resultados de consultas e histórico de consultas. Esta seção discute cada tipo de dado e fornece orientação sobre a proteção.
+ **Dados de origem**: você armazena os dados para bancos de dados e tabelas no Amazon S3, e o Athena não os modifica. Para obter mais informações, consulte [Proteção de dados no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html) no *Guia do usuário do Amazon Simple Storage Service*. Você controla o acesso aos seus dados de origem e pode criptografá-los no Amazon S3. Você pode usar o Athena para [criar tabelas com base em conjuntos de dados criptografados no Amazon S3](creating-tables-based-on-encrypted-datasets-in-s3.md).
+ **Metadados de tabelas e bancos de dados (esquema)**: o Athena usa a tecnologia schema-on-read (esquema na leitura), o que significa que as definições de tabela são aplicadas aos dados no Amazon S3 quando o Athena executa consultas. Todos os esquemas que você definir serão automaticamente salvos, a não ser que você os exclua explicitamente. No Athena, você pode modificar os metadados do catálogo de dados usando instruções DDL. Você também pode excluir as definições de tabela e o esquema sem afetar os dados subjacentes armazenados no Amazon S3. Os metadados dos bancos de dados e das tabelas que você usa no Athena são armazenados no AWS Glue Data Catalog.

  Você pode [definir políticas de acesso granulares para bancos de dados e tabelas](fine-grained-access-to-glue-resources.md) registrados no AWS Glue Data Catalog usando o AWS Identity and Access Management (IAM). Você também pode [criptografar metadados no AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html). Se você criptografar os metadados, use [permissões para metadados criptografados](encryption.md#glue-encryption) para o acesso.
+ **Resultados e histórico de consultas, incluindo consultas salvas**: os resultados das consultas são armazenados em um local no Amazon S3 que pode ser especificado globalmente ou para cada grupo de trabalho. Se não for especificado, o Athena usará o local padrão em cada caso. Você controla o acesso aos buckets do Amazon S3 nos quais armazena os resultados das consultas e as consultas salvas. Você também pode criptografar os resultados da consulta armazenados no Amazon S3. Seus usuários devem ter as devidas permissões para acessar os locais do Amazon S3 e descriptografar os arquivos. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md) neste documento. 

  O Athena mantém o histórico de consultas por 45 dias. Você pode [visualizar o histórico de consultas](queries-viewing-history.md) usando as APIs do Athena, o console e a AWS CLI. Para armazenar as consultas para mais de 45 dias, salve-as. Para proteger o acesso às consultas salvas, [use os grupos de trabalho](workgroups-manage-queries-control-costs.md) no Athena, restringindo o acesso às consultas salvas somente para os usuários autorizados a visualizá-las.

**Topics**
+ [

## Proteger vários tipos de dados
](#security-data-protection-types-of-data)
+ [

# Criptografia em repouso
](encryption.md)
+ [

# Criptografia em trânsito
](encryption-in-transit.md)
+ [

# Gerenciamento de chaves
](key-management.md)
+ [

# Privacidade do tráfego entre redes
](internetwork-traffic-privacy.md)

# Criptografia em repouso
<a name="encryption"></a>

Você pode executar consultas no Amazon Athena em dados criptografados no Amazon S3 na mesma região e em um número limitado de regiões. Você também pode criptografar os resultados da consulta no Amazon S3 e os dados no Catálogo de dados do AWS Glue.

Você pode criptografar os seguintes ativos no Athena:
+ Os resultados de todas as consultas no Amazon S3, que o Athena armazena em um local conhecido como local de resultados do Amazon S3. Você pode criptografar os resultados das consultas armazenados no Amazon S3 sem considerar se o conjunto de dados subjacente está ou não criptografado no Amazon S3. Para mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).
+ Os dados no catálogo de dados do AWS Glue. Para mais informações, consulte [Permissões para metadados criptografados no catálogo de dados do AWS Glue](#glue-encryption).

**nota**  
Quando você usa o Athena para ler uma tabela criptografada, o Athena usa as opções de criptografia especificadas para os dados da tabela, não a opção de criptografia para os resultados da consulta. Se métodos ou chaves de criptografia diferentes forem configurados para resultados da consulta e dados da tabela, o Athena lê os dados da tabela sem usar a opção de criptografia e a chave usada para criptografar ou descriptografar os resultados da consulta.  
No entanto, se você usar o Athena para inserir dados em uma tabela que tenha dados criptografados, o Athena usa a configuração de criptografia especificada para os resultados da consulta para criptografar os dados inseridos. Por exemplo, se você especificar a criptografia `CSE_KMS` para os resultados da consulta, o Athena usa o mesmo ID de chave do AWS KMS que você usou para a criptografia dos resultados da consulta para criptografar os dados da tabela inseridos com o `CSE_KMS`.

**Topics**
+ [

## Opções de criptografia permitidas do Amazon S3
](#encryption-options-S3-and-Athena)
+ [

## Permissões para dados criptografados no Amazon S3
](#permissions-for-encrypting-and-decrypting-data)
+ [

## Permissões para metadados criptografados no catálogo de dados do AWS Glue
](#glue-encryption)
+ [

# Migração do método de criptografia CSE-KMS para o método SSE-KMS
](migrating-csekms-ssekms.md)
+ [

# Criptografar os resultados de consultas do Athena armazenados no Amazon S3
](encrypting-query-results-stored-in-s3.md)
+ [

# Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3
](creating-tables-based-on-encrypted-datasets-in-s3.md)

## Opções de criptografia permitidas do Amazon S3
<a name="encryption-options-S3-and-Athena"></a>

O Athena permite as opções de criptografia a seguir para conjuntos de dados e resultados de consulta no Amazon S3.


| Tipo de criptografia | Descrição | Suporte entre regiões | 
| --- | --- | --- | 
| [SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) | Server Side Encryption (SSE – Criptografia do lado do servidor) com uma chave gerenciada pelo Amazon S3. | Sim | 
| [SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) (recomendação) | Criptografia do lado do servidor (SSE) com uma chave do AWS Key Management Service gerenciada pelo cliente.  | Sim | 
| [CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) |  Client-Side Encryption (CSE – Criptografia do lado do cliente) com uma chave gerenciada pelo cliente AWS KMS. No Athena, essa opção requer que você use uma instrução `CREATE TABLE` com a cláusula `TBLPROPERTIES` que especifica `'has_encrypted_data'='true'` ou `'encryption_option'='CSE_KMS'` com `'kms_key'='kms_key_arn'`. Para obter mais informações, consulte [Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3](creating-tables-based-on-encrypted-datasets-in-s3.md).  | Não | 

Para obter mais informações sobre a criptografia do AWS KMS com o Amazon S3, consulte [O que é o AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) e [Como o Amazon Simple Storage Service (Amazon S3) usa o AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html) no *Guia do desenvolvedor do AWS Key Management Service*. Para obter mais informações sobre como usar o SSE-KMS ou o CSE-KMS com o Athena, consulte [Launch: Amazon Athena adds support for querying encrypted data](https://aws.amazon.com/blogs/aws/launch-amazon-athena-adds-support-for-querying-encrypted-data/) (Lançamento: o Amazon Athena adiciona suporte à consulta de dados criptografados) no *blog sobre big data da AWS*.

### Recomendações de criptografia
<a name="encryption-recommendation"></a>

Ao criptografar e descriptografar os dados das tabelas e os resultados das consultas com chaves do KMS gerenciadas pelo cliente, recomendamos o uso da criptografia SSE-KMS, em vez dos métodos de criptografia SSE-S3 ou CSE-KMS. A criptografia SSE-KMS proporciona um equilíbrio entre controle, simplicidade e performance, tornando-a o método mais recomendado ao usar chaves do KMS gerenciadas para criptografia de dados.

**Benefícios da criptografia SSE-KMS comparada ao método SSE-S3**
+ A criptografia SSE-KMS permite que você especifique e gerencie suas próprias chaves, proporcionando maior controle. É possível definir políticas de chave, gerenciar os ciclos de vida das chaves e monitorar o uso delas.

**Benefícios da criptografia SSE-KMS comparada ao método CSE-KMS**
+ A criptografia SSE-KMS dispensa a necessidade de infraestrutura adicional para criptografar e descriptografar dados, diferente do método CSE-KMS, que requer a manutenção constante de um cliente de criptografia do S3.
+ O método CSE-KMS pode apresentar questões de compatibilidade entre clientes de criptografia do S3 mais novos e mais antigos devido aos algoritmos de criptografia em constante evolução. Em oposição, isso é um problema que a criptografia SSE-KMS resolve.
+ A criptografia SSE-KMS realiza menos chamadas de API ao serviço KMS para a recuperação de chaves durante os processos de criptografia e descriptografia, proporcionando uma performance superior em comparação ao método CSE-KMS.

### Opções não compatíveis
<a name="encryption-unsupported-options"></a>

As seguintes opções de criptografia não são compatíveis:
+ SSE com chaves fornecidas pelo cliente (SSE-C).
+ Criptografia do lado do cliente usando uma chave mestra do lado do cliente.
+ Chaves assimétricas.

Para comparar as opções de criptografia do Amazon S3, consulte [Proteção de dados usando criptografia](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html) no *Guia do usuário do Amazon Simple Storage Service*.

### Ferramentas para criptografia do lado do cliente
<a name="encryption-client-side-tools"></a>

 Para criptografia do lado do cliente, observe que há duas ferramentas disponíveis: 
+ [Cliente de criptografia do Amazon S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3EncryptionClient.html): criptografa os dados somente para o Amazon S3 e é compatível com o Athena.
+ [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html): o SDK pode ser usado para criptografar os dados em qualquer lugar na AWS, mas não é permitido diretamente no Athena.

Essas ferramentas não são compatíveis, e os dados que foram criptografados com uma ferramenta não podem ser descriptografados pela outra. O Athena apenas é compatível diretamente com o Cliente de criptografia do Amazon S3. Se você usar o SDK para criptografar seus dados, poderá executar consultas do Athena, mas os dados serão retornados como texto criptografado. 

Para usar o Athena para consultar dados que foram criptografados com o AWS Encryption SDK, você deve baixar e descriptografar seus dados e, depois, criptografá-los novamente usando o Cliente de criptografia do Amazon S3.

## Permissões para dados criptografados no Amazon S3
<a name="permissions-for-encrypting-and-decrypting-data"></a>

Dependendo do tipo de criptografia que você usa no Amazon S3, pode ser necessário adicionar permissões, também conhecidas como ações “Permitir”, às políticas usadas no Athena:
+ **SSE-S3**: se você usar o SSE-S3 para criptografia, os usuários do Athena não exigirão permissões adicionais nas políticas. Basta ter as devidas permissões do Amazon S3 para o local do Amazon S3 apropriado e para as ações do Athena. Para obter mais informações sobre as políticas que concedem permissões adequadas do Athena e do Amazon S3, consulte [AWSPoliticas gerenciadas pela para o Amazon Athena](security-iam-awsmanpol.md) e [Controlar o acesso ao Amazon S3 do Athena](s3-permissions.md).
+ **AWS KMS**: se você usa o AWS KMS para criptografia, os usuários do Athena devem receber permissão para executar determinadas ações do AWS KMS, além das permissões do Athena e do Amazon S3. Você permite essas ações editando a política de chaves das chaves gerenciadas pelo cliente que são usadas para criptografar os dados no Amazon S3. Para adicionar usuários de chaves às políticas do AWS KMS apropriadas, você pode usar o console do AWS KMS em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms). Para obter informações sobre como adicionar um usuário a uma política de chave do AWS KMS, consulte [Allows key users to use the customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users) no *Guia do desenvolvedor do AWS Key Management Service*.
**nota**  
Os administradores de políticas de chaves avançadas podem ajustar as políticas de chaves. `kms:Decrypt` é a ação mínima permitida para que um usuário do Athena trabalhe com um conjunto de dados criptografados. Para trabalhar com resultados da consulta criptografados, as ações permitidas mínimas são `kms:GenerateDataKey` e `kms:Decrypt`.

  Ao usar o Athena para consultar conjuntos de dados no Amazon S3 com um grande número de objetos criptografados com o AWS KMS, o AWS KMS pode realizar um controle de utilização dos resultados das consultas. Isso é mais provável quando há um grande número de objetos pequenos. O Athena rejeita solicitações de nova tentativa, mas um erro de controle de utilização ainda pode ocorrer. Se estiver trabalhando com vários objetos criptografados e enfrentar esse problema, uma opção é habilitar chaves de bucket do Amazon S3 para reduzir o número de chamadas ao KMS. Para obter mais informações, consulte [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html) no *Guia do usuário do Amazon Simple Storage Service*. Outra opção é aumentar suas cotas de serviço para o AWS KMS. Para obter mais informações, consulte [Cotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second) no *Guia do desenvolvedor do AWS Key Management Service*.

Para obter informações sobre solução de problemas de permissões ao usar o Amazon S3 com o Athena, consulte a seção [Permissões](troubleshooting-athena.md#troubleshooting-athena-permissions) do tópico [Solucionar problemas no Athena](troubleshooting-athena.md).

## Permissões para metadados criptografados no catálogo de dados do AWS Glue
<a name="glue-encryption"></a>

Se você [criptografar metadados no AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html), deverá adicionar as ações `"kms:GenerateDataKey"`, `"kms:Decrypt"` e `"kms:Encrypt"` às políticas que usa para acessar o Athena. Para mais informações, consulte [Configurar o acesso do Athena aos metadados criptografados no AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md).

# Migração do método de criptografia CSE-KMS para o método SSE-KMS
<a name="migrating-csekms-ssekms"></a>

É possível especificar a criptografia CSE-KMS de duas maneiras: durante a configuração de criptografia dos resultados da consulta do grupo de trabalho e nas configurações do lado do cliente. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md). Durante o processo de migração, é importante auditar os fluxos de trabalho existentes que realizam a leitura e a gravação de dados da criptografia CSE-KMS, identificar os grupos de trabalho em que a criptografia CSE-KMS está configurada e localizar as instâncias em que a criptografia CSE-KMS é definida por meio de parâmetros do lado do cliente.

## Atualização das configurações de criptografia dos resultados das consultas do grupo de trabalho
<a name="migrating-updating-workgroup-query-results-encryption"></a>

------
#### [ Console ]

**Para atualizar as configurações de criptografia no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), selecione o botão do grupo de trabalho que você deseja editar. 

1. Selecione **Ações**, **Editar**.

1. Abra **Configuração do resultado da consulta** e escolha **Criptografar resultados da consulta**.

1. Na seção **Tipo de criptografia**, escolha a opção de criptografia **SSE\$1KMS**.

1. Insira sua chave do KMS em **Escolha outra chave do AWS KMS (avançada)**.

1. Escolha **Salvar alterações**. O grupo de trabalho atualizado aparece na lista na página **Workgroups** (Grupos de trabalho).

------
#### [ CLI ]

Execute o comando apresentado a seguir para atualizar a configuração de criptografia dos resultados das consultas para a criptografia SSE-KMS no seu grupo de trabalho.

```
aws athena update-work-group \
    --work-group "my-workgroup" \
    --configuration-updates '{
        "ResultConfigurationUpdates": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_KMS",
                "KmsKey": "<my-kms-key>"
            }
        }
    }'
```

------

## Atualização das configurações de criptografia dos resultados de consultas do lado do cliente
<a name="migrating-updating-clientside-query-results-encryption"></a>

------
#### [ Console ]

Para atualizar suas configurações do lado do cliente para a criptografia dos resultados das consultas de CSE-KMS para SSE-KMS, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).

------
#### [ CLI ]

É possível especificar a configuração de criptografia dos resultados das consultas nas configurações do lado do cliente somente por meio do comando `start-query-execution`. Caso você execute este comando da CLI e substitua a configuração de criptografia dos resultados das consultas especificada no seu grupo de trabalho com a criptografia CSE-KMS, modifique o comando para usar `SSE_KMS` para criptografar os resultados das consultas, conforme mostrado abaixo.

```
aws athena start-query-execution \
    --query-string "SELECT * FROM <my-table>;" \
    --query-execution-context "Database=<my-database>,Catalog=<my-catalog>" \
    --result-configuration '{
        "EncryptionConfiguration": {
            "EncryptionOption": "SSE_KMS",
            "KmsKey": "<my-kms-key>"
        }
    }' \
    --work-group "<my-workgroup>"
```

------

**nota**  
Após a atualização das configurações do grupo de trabalho ou do lado do cliente, todos os novos dados inseridos por meio de consultas de gravação serão criptografados com SSE-KMS em vez de CSE-KMS. Isso ocorre porque as configurações de criptografia dos resultados das consultas também se aplicam aos novos dados inseridos nas tabelas. Além disso, os resultados das consultas, os metadados e os arquivos de manifesto do Athena são criptografados com SSE-KMS.
O Athena ainda consegue realizar a leitura de tabelas com a propriedade de tabela `has_encrypted_data`, mesmo quando existe uma combinação de objetos criptografados com CSE-KMS e SSE-S3/SSE-KMS.

# Conversão dos dados da tabela criptografados com CSE-KMS para SSE-KMS
<a name="convert-csekms-table-ssekms"></a>

No momento, caso seus fluxos de trabalho usem CSE-KMS para a criptografia de dados em tabelas, faça a transição para a criptografia SSE-KMS seguindo as etapas apresentadas abaixo.

## Pré-requisito
<a name="convert-csekms-table-ssekms-preq"></a>

Caso você ainda esteja gravando dados com um grupo de trabalho CSE-KMS ou com configurações do lado do cliente, siga as etapas apresentadas em [Migração do método de criptografia CSE-KMS para o método SSE-KMS](migrating-csekms-ssekms.md) para realizar a atualização para SSE-KMS. Isso impede que novos dados criptografados com CSE-KMS sejam adicionados por qualquer outro fluxo de trabalho que realize gravação nas tabelas durante o processo de migração.

## Migrações de dados
<a name="convert-csekms-table-ssekms-migrat"></a>

1. Confirme se a propriedade `has_encrypted_data` da tabela está definida como `true`. Essa propriedade indica que a tabela pode conter dados criptografados com CSE-KMS. Porém, vale ressaltar que essa propriedade pode estar presente mesmo em tabelas sem dados efetivamente criptografados com CSE-KMS.

------
#### [ Console ]

   1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Escolha **Iniciar editor de consultas**.

   1. No lado esquerdo do editor, em **Banco de dados**, selecione o banco de dados que você deseja consultar.

   1. No editor de consultas, execute a consulta apresentada a seguir para verificar o valor definido para a propriedade `has_encrypted_data table`.

      ```
      SHOW TBLPROPERTIES <table_name>('has_encrypted_data');
      ```

------
#### [ CLI ]

   Inicie uma consulta no Athena que retorne o valor da propriedade `has_encrypted_data` na tabela, como demonstrado no exemplo a seguir.

   ```
   aws athena start-query-execution \
       --query-string "SHOW TBLPROPERTIES <table-name>('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

   Recupere os resultados da consulta para verificar o valor da propriedade `has_encrypted_data` da tabela para a tabela, conforme demonstrado no exemplo a seguir.

   ```
   aws athena get-query-results --query-execution-id <query-execution-id-from-previous-step>
   ```

------

1. Para cada objeto na tabela que esteja criptografado com CSE-KMS:

   1. Faça o download do objeto do S3 usando o cliente de criptografia do S3 e realize a descriptografia. A seguir, apresentamos um exemplo com o AWS SDK para Java V2.

      **Importações**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.services.s3.model.GetObjectRequest;
      import software.amazon.awssdk.services.s3.model.GetObjectResponse;
      import software.amazon.encryption.s3.S3EncryptionClient;
      import software.amazon.encryption.s3.materials.Keyring;
      import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
      ```

      Código

      ```
      final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder()
              .enableLegacyWrappingAlgorithms(true)
              .build();
      final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder()
              .enableLegacyUnauthenticatedModes(true)
              .keyring(kmsDiscoveryKeyRing)
              .build();
      
      GetObjectRequest getObjectRequest = GetObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .build();
      
      ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest);
      ```

   1. Faça o upload do objeto para o S3 com o mesmo nome e protegido por criptografia SSE-KMS. A seguir, apresentamos um exemplo com o AWS SDK para Java V2.

      **Importações**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.core.sync.RequestBody;
      import software.amazon.awssdk.services.s3.S3Client;
      import software.amazon.awssdk.services.s3.model.PutObjectRequest;
      import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
      ```

      **Código**

      ```
      final S3Client s3Client = S3Client.builder()
              .build();
                  
      PutObjectRequest putObjectRequest = PutObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .serverSideEncryption(ServerSideEncryption.AWS_KMS)
              .ssekmsKeyId("<my-kms-key>")
              .build();
      
      s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
      ```

## Após a migração
<a name="convert-csekms-table-ssekms-post-migrat"></a>

Após realizar novamente a criptografia com êxito em todos os arquivos com criptografia CSE-KMS na tabela, realize as etapas apresentadas a seguir. 

1. Remova a propriedade `has_encrypted_data` da tabela.

------
#### [ Console ]

   1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Escolha **Iniciar editor de consultas**.

   1. No lado esquerdo do editor, em **Banco de dados**, selecione o banco de dados que você deseja consultar.

   1. No editor de consultas, execute a consulta apresentada a seguir para sua tabela.

      ```
      ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data')
      ```

------
#### [ CLI ]

   Execute o comando apresentado a seguir para remover a propriedade `has_encrypted_data` da sua tabela.

   ```
   aws athena start-query-execution \
       --query-string "ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

------

1. Atualize seus fluxos de trabalho para usar um cliente básico do S3 em vez de um cliente de criptografia do S3 e, em seguida, especifique a criptografia SSE-KMS para gravações de dados. 

# Criptografar os resultados de consultas do Athena armazenados no Amazon S3
<a name="encrypting-query-results-stored-in-s3"></a>

Você pode configurar a criptografia de resultados de consultas usando o console do Athena ou o JDBC ou ODBC. Grupos de trabalhos permitem que você reforce a criptografia dos resultados de consultas.

**nota**  
Quando você criptografa os resultados de uma consulta, o Athena criptografa todos os objetos gravados pela consulta. Isso inclui os resultados de instruções como `INSERT INTO`, `UPDATE` e as consultas de dados no formato do Iceberg ou em outros formatos.

No console, você pode definir a configuração para criptografia dos resultados das consultas de duas formas:
+ **Configurações do lado do cliente**: quando você usa **Settings** (Configurações) no console ou as operações de API para indicar que deseja criptografar os resultados das consultas, esse procedimento é conhecido como “usar as configurações do lado do cliente”. As configurações no lado do cliente incluem o local dos resultados da consulta e a criptografia. Se você especificá-los, elas serão usadas, a menos que sejam substituídas por configurações do grupo de trabalho. 
+ **Configurações do grupo de trabalho**: quando você [cria ou edita um grupo de trabalho](creating-workgroups.md) e seleciona o campo **Override client-side settings** (Substituir configurações do lado do cliente), todas as consultas executadas nesse grupo de trabalho usam as configurações de local de resultados da consulta do grupo. Para obter mais informações, consulte [Override client-side settings (Substituir configurações no lado do cliente)](workgroups-settings-override.md). 

**Para criptografar os resultados das consultas armazenados no Amazon S3 usando o console**
**Importante**  
Se o seu grupo de trabalho estiver com o campo **Override client-side settings (Sobrepor configurações no lado do cliente)**, todas as consultas no grupo de trabalho usarão as configurações do grupo de trabalho. A configuração de criptografia e o local dos resultados das consultas especificados na guia **Configurações** no console do Athena por operações da API e pelos drivers JDBC e ODBC não são usados. Para obter mais informações, consulte [Override client-side settings (Substituir configurações no lado do cliente)](workgroups-settings-override.md).

1. No console do Athena, escolha **Settings** (Configurações).  
![\[A guia Configurações do editor de consulta do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/settings.png)

1. Escolha **Gerenciar**.

1. Em **Location of query result** (Local do resultado da consulta), insira ou escolha um caminho do Amazon S3. Esse é o local do Amazon S3 em que os resultados da consulta são armazenados.

1. Escolha **Encrypt query results**.  
![\[A opção Criptografar resultados da consulta na página Gerenciar configurações do console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/encrypt-query-results.png)

1. Para **Encryption type**, escolha **CSE-KMS**, **SSE-KMS** ou **SSE-S3**. Desses três, o **CSE-KMS** oferece o nível mais alto de criptografia e o **SSE-S3** o mais baixo.

1. Se você escolher **SSE-KMS** ou **CSE-KMS**, especifique a chave do AWS KMS.
   + Em **Escolher uma chave do AWS KMS**, se sua conta tiver acesso a uma chave gerenciada pelo cliente existente do AWS KMS, escolha o respectivo alias ou insira um ARN de chave do AWS KMS.
   +  Se sua conta não tiver acesso a uma chave gerenciada pelo cliente existente, escolha **Criar uma chave do AWS KMS** e abra o [console do AWS KMS](https://console.aws.amazon.com/kms). Para obter mais informações, consulte [Criação de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) *Guia do desenvolvedor do AWS Key Management Service*.
**nota**  
O Athena permite apenas chaves simétricas para leitura e gravação de dados.

1. Volte para o console do Athena e escolha a chave que você criou por alias ou ARN. 

1. Escolha **Salvar**.

## Criptografar os resultados de consultas do Athena quando você usa JDBC ou ODBC
<a name="encrypting-query-results-stored-in-s3-jdbc-odbc"></a>

Se você se conectar usando o driver JDBC ou ODBC, configure as opções de driver para especificar o tipo de criptografia a ser usado e o local do diretório de preparação do Amazon S3. Para configurar um driver JDBC ou ODBC para criptografar os resultados das consultas usando um dos protocolos de criptografia compatíveis com o Athena, consulte [Conectar ao Amazon Athena com drivers JDBC e ODBC](athena-bi-tools-jdbc-odbc.md).

# Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3
<a name="creating-tables-based-on-encrypted-datasets-in-s3"></a>

O Athena pode ler e gravar tabelas cujos conjuntos de dados subjacentes são criptografados com SSE-S3, SSE-KMS ou CSE-KMS. Dependendo da opção de criptografia usada para os dados da tabela e do tipo de consulta executada, é possível que você precise especificar algumas propriedades adicionais da tabela para ler e gravar dados criptografados.

## Leitura de tabelas criptografadas com SSE-S3/SSE-KMS
<a name="reading-sse-s3-sse-kms-encrypted-tables"></a>

Nenhuma propriedade de tabela adicional precisa ser especificada na criação de tabelas para ler conjuntos de dados criptografados com SSE-S3/SSE-KMS. O Amazon S3 manipula a descriptografia dos objetos SSE automaticamente.

## Leitura de tabelas criptografadas com CSE-KMS
<a name="reading-cse-kms-encrypted-tables"></a>

Há dois conjuntos diferentes de propriedades de tabela que podem ser especificados para que o Athena leia conjuntos de dados criptografados com CSE-KMS:
+ Uso das propriedades `encryption_option` e `kms_key` da tabela (recomendado)
+ Uso da propriedade `has_encrypted_data` da tabela

**Importante**  
Se você usa o Amazon EMR com o EMRFS para carregar arquivos Parquet criptografados com CSE-KMS, deve desabilitar os carregamentos multipart definindo `fs.s3n.multipart.uploads.enabled` como `false`. Se você não fizer isso, o Athena não poderá determinar o tamanho do arquivo Parquet, e um erro **HIVE\$1CANNOT\$1OPEN\$1SPLIT** será emitido. Para obter mais informações, consulte [Configure multipart upload for Amazon S3](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart) (Configurar o carregamento fracionado no Amazon S3) no *Guia de gerenciamento do Amazon EMR*.

### Uso das propriedades encryption\$1option e kms\$1key da tabela
<a name="using-encryption-option-and-kms-key-table-properties"></a>

Em uma instrução [CREATE TABLE](create-table.md), use a cláusula `TBLPROPERTIES` que especifica `encryption_option='CSE_KMS'` e `kms_key='aws_kms_key_arn'`, conforme mostrado no exemplo a seguir.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'CSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

Quando essas propriedades são configuradas:
+ O Athena pode ler objetos criptografados com CSE-KMS criados pelos clientes de criptografia V1, V2 ou V3 do Amazon S3.
+ O Athena usará a chave do AWS KMS em `kms_key` para descriptografar os dados do CSE-KMS. Se algum objeto for criptografado com outra chave do AWS KMS, a consulta falhará.
+ O Athena ainda pode ler objetos criptografados com SSE-S3 e SSE-KMS, embora não seja recomendável misturar objetos criptografados do lado do servidor e do lado do cliente.

### Uso da propriedade has\$1encrypted\$1data a tabela
<a name="using-has-encrypted-data-table-property"></a>

Em uma instrução [CREATE TABLE](create-table.md), use a cláusula `TBLPROPERTIES` que especifica `has_encrypted_data='true'`, conforme mostrado no exemplo a seguir.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'has_encrypted_data' = 'true')
```

Quando a propriedade has\$1encrypted\$1data da tabela é especificada:
+ O Athena só pode ler objetos criptografados com CSE-KMS criados pelo cliente de criptografia V1 do Amazon S3.
+ O Athena inferirá a chave do AWS KMS usada para criptografar o objeto CSE-KMS dos metadados do objeto, e depois usará essa chave para descriptografar o objeto.
+ O Athena ainda pode ler objetos criptografados com SSE-S3 e SSE-KMS, embora não seja recomendável misturar objetos criptografados do lado do servidor e do lado do cliente.

**nota**  
Quando `encryption_option` e `kms_key` são especificados junto com `has_encrypted_data`, as propriedades `encryption_option` e `kms_key` da tabela têm precedência, e `has_encrypted_data` é ignorado.

Ao usar o console do Athena para [criar uma tabela usando um formulário](data-sources-glue-manual-table.md) e especificar o local da tabela, selecione a opção **Conjunto de dados criptografado** para adicionar a propriedade `has_encrypted_data='true'` à tabela.

![\[Selecionar Encrypted data set (Conjunto de dados criptografado) no formulário “Add table” (Adicionar tabela)\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/add-table-form-encrypted-option.png)


Na lista de tabelas do console do Athena, as tabelas criptografadas com CSE-KMS com `has_encrypted_data='true'` exibem um ícone em forma de chave.

![\[Ícone de tabela criptografada\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/tables-list-encrypted-table-icon.png)


## Gravação de dados criptografados com SSE-S3/SSE-KMS/CSE-KMS
<a name="writing-sse-s3-sse-kms-cse-kms-encrypted-data"></a>

Por padrão, os arquivos de dados recém-inseridos serão criptografados usando a configuração de criptografia dos resultados da consulta especificados no grupo de trabalho do Athena. Para gravar dados de tabela com uma configuração de criptografia diferente da configuração de criptografia dos resultados da consulta, você precisará adicionar algumas propriedades adicionais da tabela.

Em uma instrução [CREATE TABLE](create-table.md), use a cláusula `TBLPROPERTIES` que especifica `encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'` e `kms_key='aws_kms_key_arn'`, conforme mostrado no exemplo a seguir.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'SSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

Todos os dados recém-inseridos serão criptografados usando a configuração de criptografia especificada pelas propriedades da tabela, em vez de usar a configuração de criptografia dos resultados da consulta no grupo de trabalho.

## Condições e limitações
<a name="considerations-and-limitations"></a>

Ao escrever e ler conjuntos de dados criptografados, considere os pontos a seguir.
+ As propriedades `has_encrypted_data`, `encryption_option` e `kms_key` da tabela só podem ser usadas com tabelas do Hive.
+ Ao criar uma tabela com dados criptografados com CSE-KMS, recomendamos que você garanta que todos os dados sejam criptografados com a mesma chave do AWS KMS.
+ Ao criar uma tabela com dados criptografados com CSE-KMS, recomendamos que você garanta que todos os dados sejam criptografados com CSE-KMS e que não haja uma mistura de objetos não criptografados com CSE-KMS e CSE-KMS.

# Criptografia em trânsito
<a name="encryption-in-transit"></a>

Além de criptografar os dados em repouso no Amazon S3, o Amazon Athena usa a criptografia Transport Layer Security (TLS) para os dados em trânsito entre o Athena e o Amazon S3, e entre o Athena e as aplicações dos clientes que o acessam.

Você deve permitir apenas conexões criptografadas por HTTPS (TLS) usando [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean) nas políticas do IAM no bucket do Amazon S3.

Os resultados de consultas que transmitem para clientes JDBC ou ODBC são criptografados usando TLS. Para obter informações sobre as versões mais recentes dos drivers JDBC e ODBC e as respectivas documentações, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

Para conectores de fonte de dados federada do Athena, a compatibilidade com criptografia em trânsito usando TLS depende do conector individual. Para obter informações, consulte a documentação dos [conectores de fonte de dados](connectors-available.md) individuais.

# Gerenciamento de chaves
<a name="key-management"></a>

O Amazon Athena é compatível com o AWS Key Management Service (AWS KMS) para criptografar conjuntos de dados no Amazon S3 e resultados das consultas do Athena. O AWS KMS usa as chaves gerenciadas pelo cliente para criptografar os objetos do Amazon S3 e aplica a [criptografia envelopada](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping). 

No AWS KMS, você pode realizar as seguintes ações:
+  [Criar chaves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 
+  [Importe seu próprio material de chave para novas chaves gerenciadas pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) 

**nota**  
O Athena permite apenas chaves simétricas para leitura e gravação de dados.

Para obter mais informações, consulte [O que é o AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) no *Guia do desenvolvedor do AWS Key Management Service* e [Como o Amazon Simple Storage Service usa o AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html). Para visualizar as chaves na sua conta que a AWS cria e gerencia para você, no painel de navegação, escolha **Chaves gerenciadas pela AWS**.

Se você fizer upload ou acessar objetos criptografados por SSE-KMS, use o Signature versão 4 da AWS para maior segurança. Para obter mais informações, consulte [Especificar a versão da assinatura na autenticação de solicitações](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAWSSDK.html#specify-signature-version) no *Guia do usuário do Amazon Simple Storage Service*.

Se suas workloads do Athena criptografam uma grande quantidade de dados, você poderá usar as chaves de bucket do Amazon S3 para reduzir custos. Para obter mais informações, consulte [Redução do custo do SSE-KMS com chaves de bucket do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html) no *Guia do usuário do Amazon Simple Storage Service*.

# Privacidade do tráfego entre redes
<a name="internetwork-traffic-privacy"></a>

O tráfego é protegido entre o Athena e as aplicações on-premises e entre o Athena e o Amazon S3. Por padrão, o tráfego entre o Athena e outros serviços, como AWS Glue e AWS Key Management Service, usa HTTPS.
+ **Para o tráfego entre o Athena e os clientes e as aplicações on-premises**, os resultados das consultas transmitidos para os clientes JDBC ou ODBC são criptografados usando Transport Layer Security (TLS).

  Você pode usar uma das opções de conectividade entre sua rede privada e a AWS: 
  + Uma conexão Site-to-Site VPN Site-to-Site VPN. Para obter mais informações, consulte [O que é o Site-to-Site VPN Site-to-Site VPN?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) no *Manual do usuário do AWS Site-to-Site VPN*.
  + Uma conexão do Direct Connect. Para obter mais informações, consulte [O que é o Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) no *Guia do usuário do Direct Connect*.
+ **Para o tráfego entre o Athena e os buckets do Amazon S3**, o Transport Layer Security (TLS) criptografa os objetos em trânsito entre o Athena e o Amazon S3, e entre o Athena e as aplicações dos clientes que o acessam. Você deve permitir somente conexões por HTTPS (TLS) usando [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean) nas políticas do IAM de bucket do Amazon S3. Embora, no momento, o Athena use o endpoint público para acessar dados nos buckets do Amazon S3, isso não significa que os dados sejam transmitidos pela Internet pública. Todo o tráfego entre o Athena e o Amazon S3 é roteado pelo AWS e é criptografado com TLS.
+ **Programas de conformidade**: o Amazon Athena está em conformidade com vários programas de conformidade da AWS, incluindo SOC, PCI, FedRAMP e outros. Para obter mais informações, consulte [Serviços da AWS no escopo por programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/). 

# Gerenciamento de identidade e acesso no Athena
<a name="security-iam-athena"></a>

O Amazon Athena usa as políticas do [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) para restringir o acesso às operações do Athena. Para ver a lista completa de permissões do Athena, consulte [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) na *Referência de autorização do serviço*.

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

Veja abaixo as permissões necessárias para executar as consultas do Athena:
+ Locais do Amazon S3 onde os dados subjacentes para consulta estão armazenados. Para obter mais informações, consulte [Gerenciamento de identidade e acesso no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Os metadados e recursos armazenados no AWS Glue Data Catalog, como bancos de dados e tabelas, incluindo ações adicionais para metadados criptografados. Para obter mais informações, consulte [Configurar permissões do IAM para o AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) e [Configurar a criptografia no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/set-up-encryption.html) no *Guia do desenvolvedor do AWS Glue*.
+ Ações de API do Athena. Para obter uma lista das ações de API no Athena, consulte [Ações](https://docs.aws.amazon.com/athena/latest/APIReference/API_Operations.html) na *Referência de API do Amazon Athena*.

Os tópicos a seguir apresentam mais informações sobre permissões para áreas específicas do Athena.

**Topics**
+ [Políticas gerenciadas pela AWS](security-iam-awsmanpol.md)
+ [

# Perímetro de dados
](data-perimeters.md)
+ [Acesso por meio de conexões JDBC e ODBC](policy-actions.md)
+ [

# Controlar o acesso ao Amazon S3 do Athena
](s3-permissions.md)
+ [Acesso entre contas aos buckets do S3](cross-account-permissions.md)
+ [Acesso a bancos de dados e tabelas no AWS Glue](fine-grained-access-to-glue-resources.md)
+ [Acesso aos catálogos de dados do AWS Glue entre contas](security-iam-cross-account-glue-catalog-access.md)
+ [Acesso a metadados criptografados no catálogo de dados](access-encrypted-data-glue-data-catalog.md)
+ [Acesso a grupos de trabalho e etiquetas](workgroups-access.md)
+ [

# Usar políticas do IAM para controlar o acesso de grupo de trabalho
](workgroups-iam-policy.md)
+ [Grupos de trabalho habilitados para o Centro de Identidade do IAM](workgroups-identity-center.md)
+ [Configurar criptografia mínima](workgroups-minimum-encryption.md)
+ [

# Configurar o acesso a instruções preparadas
](security-iam-athena-prepared-statements.md)
+ [Usar chaves de contexto CalledVia](security-iam-athena-calledvia.md)
+ [

# Permitir a um metastore do Hive externo acesso a um conector de dados do Athena
](hive-metastore-iam-access.md)
+ [

# Permitir acesso da função do Lambda aos metastores externos do Hive
](hive-metastore-iam-access-lambda.md)
+ [

# Permissões necessárias para criar o conector e o catálogo do Athena
](athena-catalog-access.md)
+ [Permitir acesso à consulta federada do Athena](federated-query-iam-access.md)
+ [Permitir acesso a UDFs](udf-iam-access.md)
+ [

# Permitir acesso a ML com o Athena
](machine-learning-iam-access.md)
+ [

# Habilitar o acesso federado à API do Athena
](access-federation-saml.md)

# AWSPoliticas gerenciadas pela para o Amazon Athena
<a name="security-iam-awsmanpol"></a>

Uma política gerenciada pela AWS é uma política autônoma criada e administrada pela AWS. As políticas gerenciadas pela AWS são criadas para fornecer permissões a vários casos de uso comuns e permitir a atribuição de permissões a usuários, grupos e perfis.

Lembre-se de que as políticas gerenciadas pela AWS podem não conceder permissões de privilégio mínimo para casos de uso específicos, por estarem disponíveis para uso por todos os clientes da AWS. Recomendamos que você reduza ainda mais as permissões definindo as [ políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies) que são específicas para seus casos de uso.

Não é possível alterar as permissões definidas em políticas gerenciadas pela AWS. Se a AWS atualiza as permissões definidas em um política gerenciada por AWS, a atualização afeta todas as identidades de entidades principais (usuários, grupos e perfis) às quais a política estiver vinculada. É provável que a AWS atualize uma política gerenciada por AWS quando um novo AWS service (Serviço da AWS) for lançado, ou novas operações de API forem disponibilizadas para os serviços existentes.

Para saber mais, consulte [AWSPolíticas gerenciadas pela ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) no *Guia do usuário do IAM*.

## Considerações ao usar políticas gerenciadas com o Athena
<a name="managed-policies-considerations"></a>

As políticas gerenciadas são fáceis de usar e são atualizadas automaticamente com as ações necessárias à medida que o serviço evolui. Ao usar políticas gerenciadas com o Athena, lembre-se do seguinte:
+ Para permitir ou negar ações de serviço do Amazon Athena para você mesmo ou outros usuários usando o AWS Identity and Access Management (IAM), anexe as políticas baseadas em identidade aos principais, como usuários ou grupos. 
+ Cada política baseada em identidade consiste em instruções que definem as ações permitidas ou negadas. Para obter mais informações e instruções detalhadas sobre como anexar uma política a um usuário, consulte [Anexar políticas gerenciadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console) no *Guia do usuário do IAM*. Para obter uma lista de ações, consulte a [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/).
+  As políticas *gerenciadas pelo cliente* e baseadas em identidade *em linha* permitem especificar ações mais detalhadas do Athena em uma política para adaptar o acesso. Recomendamos usar a política `AmazonAthenaFullAccess` como um ponto de partida e permitir ou negar ações específicas listadas na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obter mais informações sobre políticas em linha, consulte [Políticas gerenciadas e em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html) no *Guia do usuário do IAM*.
+ Se você também tiver entidades principais que se conectam usando JDBC, deverá fornecer as credenciais do driver JDBC para seu aplicativo. Para obter mais informações, consulte [Controlar o acesso por conexões JDBC e ODBC](policy-actions.md).
+ Se você criptografou o Catálogo de dados do AWS Glue, deve especificar outras ações nas políticas do IAM baseadas em identidade do Athena. Para obter mais informações, consulte [Configurar o acesso do Athena aos metadados criptografados no AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md).
+ Se você criar e usar grupos de trabalho, suas políticas deverão incluir o acesso relevante às ações do grupo de trabalho. Para obter informações detalhadas, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md) e [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md). 

## AWSPolítica gerenciada pela : AmazonAthenaFullAccess
<a name="amazonathenafullaccess-managed-policy"></a>

A política gerenciada `AmazonAthenaFullAccess` concede acesso completo ao Athena.

Para fornecer o acesso, adicione as permissões aos seus usuários, grupos ou perfis:
+ Usuários e grupos no Centro de Identidade do AWS IAM:

  Crie um conjunto de permissões. Siga as instruções em [Criação de um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) no *Guia do usuário do Centro de Identidade do AWS IAM*.
+ Usuários gerenciados no IAM com provedor de identidades:

  Crie um perfil para a federação de identidades. Siga as instruções em [Criando um perfil para um provedor de identidades de terceiros (federação)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) no *Guia do Usuário do IAM*.
+ Usuários do IAM:
  + Crie um perfil que seu usuário possa assumir. Siga as instruções em [Criação de um perfil para um usuário do IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) no *Guia do usuário do IAM*.
  + (Não recomendado) Vincule uma política diretamente a um usuário ou adicione um usuário a um grupo de usuários. Siga as instruções em [Adição de permissões a um usuário (console)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) no *Guia do usuário do IAM*.

### Agrupamentos de permissões
<a name="amazonathenafullaccess-managed-policy-groupings"></a>

A política `AmazonAthenaFullAccess` é agrupada nos seguintes conjuntos de permissões.
+ **`athena`** – concede aos principais acesso aos recursos do Athena.
+ **`glue`**: permite que as entidades principais acessem catálogos, bancos de dados, tabelas e partições do AWS Glue. Isso é necessário para que a entidade principal possa usar os AWS Glue Data Catalogs com o Athena.
+ **`s3`** – permite que o principal grave e leia os resultados da consulta do Amazon S3, leia exemplos de dados do Athena disponíveis publicamente que residem no Amazon S3 e liste os buckets. Isso é necessário para que o principal possa usar o Athena para trabalhar com o Amazon S3.
+ **`sns`** – permite que os principais listem os tópicos do Amazon SNS e obtenham os atributos dos tópicos. Isso permite que os principais usem os tópicos do Amazon SNS com o Athena para fins de monitoramento e alerta.
+ **`cloudwatch`** – permite que os principais criem, leiam e excluam alarmes do CloudWatch. Para obter mais informações, consulte [Usar o CloudWatch e o EventBridge para monitorar as consultas e controlar os custos](workgroups-control-limits.md).
+ **`lakeformation`** – permite que os principais solicitem credenciais temporárias para acessar dados em um local de data lake registrado no Lake Formation. Para obter mais informações, consulte [Underlying data access control](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html) (Controle de acesso a dados subjacentes) no *Guia do desenvolvedor do AWS Lake Formation*.
+ **`datazone`**: permite que as entidades principais listem projetos, domínios e ambientes do Amazon DataZone. Para obter informações sobre como usar o DataZone no Athena, consulte [Usar o Amazon DataZone no Athena](datazone-using.md).
+ **`pricing`** – Fornece acesso total ao Gerenciamento de Faturamento e Custos da AWS. Para obter mais informações, consulte [GetProducts](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_pricing_GetProducts.html) na *Referência de APIs do Gerenciamento de Faturamento e Custos da AWS*.

Para visualizar as permissões dessa política, consulte [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) na AWS Managed Policy Reference.

**nota**  
Você deve permitir explicitamente o acesso aos buckets do Amazon S3 de propriedade do serviço para armazenar consultas de exemplo e conjuntos de dados de amostra. Para obter mais informações, consulte [Perímetro de dados](data-perimeters.md).

## AWSPolítica gerenciada : AWSQuicksightAthenaAccess
<a name="awsquicksightathenaaccess-managed-policy"></a>

O `AWSQuicksightAthenaAccess` concede acesso às ações que o Quick exige para integração com o Athena. É possível anexar a política `AWSQuicksightAthenaAccess` às suas identidades do IAM. Anexe essa política somente as entidades principais que usam o Quick com o Athena. Essa política inclui algumas ações do Athena que estão defasadas e não foram incluídas na API pública atual, ou que são usadas apenas com os drivers JDBC e ODBC.

### Agrupamentos de permissões
<a name="awsquicksightathenaaccess-managed-policy-groupings"></a>

A política `AWSQuicksightAthenaAccess` é agrupada nos seguintes conjuntos de permissões.
+ **`athena`** – permite que a entidade principal execute consultas em recursos do Athena.
+ **`glue`**: permite que as entidades principais acessem catálogos, bancos de dados, tabelas e partições do AWS Glue. Isso é necessário para que a entidade principal possa usar os AWS Glue Data Catalogs com o Athena.
+ **`s3`** – permite que o principal grave e leia os resultados das consultas no Amazon S3.
+ **`lakeformation`** – permite que os principais solicitem credenciais temporárias para acessar dados em um local de data lake registrado no Lake Formation. Para obter mais informações, consulte [Underlying data access control](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html) (Controle de acesso a dados subjacentes) no *Guia do desenvolvedor do AWS Lake Formation*.

Para visualizar as permissões dessa política, consulte [AWSQuicksightAthenaAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSQuicksightAthenaAccess.html) na AWS Managed Policy Reference.

## Atualizações do Athena para políticas gerenciadas pela AWS
<a name="managed-policies-updates"></a>

Visualize detalhes sobre as atualizações nas políticas gerenciadas pela AWS para o Athena desde que esse serviço começou a monitorar essas alterações.


| Alteração | Descrição | Data | 
| --- | --- | --- | 
| [AWSQuicksightAthenaAccess](#awsquicksightathenaaccess-managed-policy): atualizações em políticas existentes | As permissões glue:GetCatalog e glue:GetCatalogs foram adicionadas para permitir que os usuários do Athena acessem os catálogos do SageMaker AI Lakehouse. | 2 de janeiro de 2025 | 
| [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente | As permissões glue:GetCatalog e glue:GetCatalogs foram adicionadas para permitir que os usuários do Athena acessem os catálogos do SageMaker AI Lakehouse. | 2 de janeiro de 2025 | 
| [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente |  Permite que o Athena use a API documentada publicamente AWS Glue `GetCatalogImportStatus` para recuperar o status de importação do catálogo.  | 18 de junho de 2024 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente  |  As permissões `datazone:ListDomains`, `datazone:ListProjects` e `datazone:ListAccountEnvironments` foram adicionadas para possibilitar que os usuários do Athena trabalhem com domínios, projetos e ambientes do Amazon DataZone. Para obter mais informações, consulte [Usar o Amazon DataZone no Athena](datazone-using.md).  | 3 de janeiro de 2024 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente  |  As permissões `glue:StartColumnStatisticsTaskRun`, `glue:GetColumnStatisticsTaskRun` e `glue:GetColumnStatisticsTaskRuns` foram adicionadas para fornecer ao Athena o direito de chamar o AWS Glue para recuperar as estatísticas do atributo otimizador baseado em custos. Para obter mais informações, consulte [Usar o otimizador baseado em custos](cost-based-optimizer.md).  | 3 de janeiro de 2024 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente  |  O Athena adicionou `pricing:GetProducts` para fornecer acesso ao Gerenciamento de Faturamento e Custos da AWS. Para obter mais informações, consulte [GetProducts](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_pricing_GetProducts.html) na *Referência de APIs do Gerenciamento de Faturamento e Custos da AWS*.  | 25 de janeiro de 2023 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy): atualização da política existente  |  O Athena adicionou `cloudwatch:GetMetricData` para recuperar valores de métricas do CloudWatch. Para obter mais informações, consulte [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) na *Referência de APIs do Amazon CloudWatch*.  | 14 de novembro de 2022 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) e [AWSQuicksightAthenaAccess](#awsquicksightathenaaccess-managed-policy): atualizações às políticas existentes  |  O Athena adicionou `s3:PutBucketPublicAccessBlock` para habilitar o bloqueio do acesso público aos buckets criados pelo Athena.  | 7 de julho de 2021 | 
|  O Athena começou a monitorar as alterações  |  O Athena começou a monitorar as alterações em suas políticas gerenciadas pela AWS.  | 7 de julho de 2021 | 

# Perímetro de dados
<a name="data-perimeters"></a>

Um[ perímetro de dados](https://aws.amazon.com/identity/data-perimeters-on-aws/) é um conjunto de barreiras de proteção de permissões em seu ambiente da AWS que ajudam a garantir que somente suas identidades confiáveis acessem recursos confiáveis das redes esperadas. 

O Amazon Athena usa buckets do Amazon S3 de propriedade do serviço para armazenar exemplos de consultas e conjuntos de dados de amostra. Se você estiver usando perímetros de dados para controlar o acesso em seu ambiente, talvez seja necessário permitir explicitamente o acesso a esses recursos de propriedade do serviço para usar os atributos correspondentes do Athena. 

 A tabela a seguir lista o ARN do bucket do Amazon S3 que o Athena precisa acessar, as permissões necessárias, a identidade usada pelo Athena e os recursos que dependem do bucket do S3. Para permitir o acesso, substitua a `<region>` no ARN do bucket por sua Região da AWS atual e na lista de permissões desse bucket com base nos controles de acesso do Amazon S3. 


**Perímetros de dados que o Athena usa**  

| Atributo ARN | Permissões obrigatórias | Identidade usada para acesso | Cenários de acesso | 
| --- | --- | --- | --- | 
|  arn:aws:s3:::athena-examples-<region>  | s3:GetObjects3:ListBucket | A entidade principal do IAM acessando Athena. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/data-perimeters.html)  | 

# Controlar o acesso por conexões JDBC e ODBC
<a name="policy-actions"></a>

Para acessar os recursos e Serviços da AWS, como o Athena e os buckets do Amazon S3, insira as credenciais do driver JDBC ou ODBC na sua aplicação. Se estiver usando o driver JDBC ou ODBC, verifique se a política de permissões do IAM inclui todas as ações listadas em [AWSPolítica gerenciada : AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy).

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

## Métodos de autenticação
<a name="security-jdbc-odbc-access-authentication"></a>

Os drivers Athena JDBC e ODBC são compatíveis com a autenticação baseada em SAML 2.0, incluindo os seguintes provedores de identidade:
+ Active Directory Federation Services (AD FS)
+ Azure Active Directory (AD)
+ Okta 
+ PingFederate

Para obter mais informações, consulte os guias de instalação e configuração dos respectivos drivers, que podem ser baixados em formato PDF nas páginas dos drivers [JDBC](connect-with-jdbc.md) e [ODBC](connect-with-odbc.md). Para obter informações adicionais relacionadas, consulte o seguinte:
+ [Habilitar o acesso federado à API do Athena](access-federation-saml.md)
+ [Usar o Lake Formation e os drivers JDBC e ODBC para acesso federado ao Athena](security-athena-lake-formation-jdbc.md)
+  [Configurar Single Sign-On com uso de ODBC, SAML 2.0 e o provedor de identidade Okta](okta-saml-sso.md)

Para obter informações sobre as versões mais recentes dos drivers JDBC e ODBC e as respectivas documentações, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

# Controlar o acesso ao Amazon S3 do Athena
<a name="s3-permissions"></a>

Você pode conceder acesso aos locais do Amazon S3 usando políticas baseadas em identidade, políticas de recursos de bucket, políticas de ponto de acesso ou qualquer combinação das opções acima. Quando os atores interagem com o Athena, suas permissões passam pelo Athena para determinar o que o Athena poderá acessar. Isso significa que os usuários devem ter permissões para acessar os buckets do Amazon S3 com a finalidade de consultá-los com o Athena.

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

Observe que as solicitações para o Amazon S3 vêm de um endereço IPv4 privado do Athena, não do IP de origem especificado em `aws:SourceIp`. Por esse motivo, você não pode usar a condição `aws:SourceIp` para negar acesso às ações do Amazon S3 em uma determinada política do IAM. Também não é possível restringir ou permitir o acesso aos recursos do Amazon S3 com base nas chaves de condição `aws:SourceVpc` ou `aws:SourceVpce`.

**nota**  
Os grupos de trabalho do Athena que usam a autenticação do Centro de Identidade do IAM requerem que as concessões de acesso do S3 sejam configuradas para o uso de identidades de propagação de identidade confiável. Para obter mais informações, consulte [S3 Access Grants and directory identities](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html) no *Guia do usuário do Amazon Simple Storage Service*.

**Topics**
+ [Políticas baseadas em identidade](#s3-permissions-identity-based-policies)
+ [Políticas de recursos do bucket](#s3-permissions-bucket-resource-policies)
+ [Políticas de ponto de acesso](#s3-permissions-aliases)
+ [Chaves de contexto CalledVia](#s3-permissions-calledvia)
+ [

## Recursos adicionais
](#s3-permissions-additional-resources)

## Usar políticas baseadas em identidade para controlar o acesso aos buckets do Amazon S3
<a name="s3-permissions-identity-based-policies"></a>

As políticas baseadas em identidade são anexadas a um usuário, grupo ou função do IAM. Essas políticas permitem que você especifique o que cada identidade pode fazer (suas respectivas permissões). Você pode usar políticas baseadas em identidade para controlar o acesso a buckets do Amazon S3.

A seguinte política baseada em identidade permite o acesso `Read` e `Write` a objetos em um bucket específico do Amazon S3. Para usar esta política, substitua o *texto do espaço reservado em itálico* por seus próprios valores.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

## Usar as políticas de recursos de bucket para controlar o acesso aos buckets do Amazon S3
<a name="s3-permissions-bucket-resource-policies"></a>

Com as políticas de bucket do Amazon S3, você pode proteger o acesso a objetos em seus buckets, para que somente usuários com as permissões apropriadas possam acessá-los. Para obter orientação sobre como criar sua política do Amazon S3, consulte [Adicionar uma política de bucket usando o console do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) no *Guia do usuário do Amazon S3*.

A política de permissões de exemplo a seguir limita a capacidade de leitura dos usuários para que leiam objetos que tenham a chave e o valor da tag `environment: production`. A política de exemplo usa a chave de condição `s3:ExistingObjectTag` para especificar a chave e o valor da etiqueta.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/JohnDoe"
            },
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/environment": "production"
                }
            }
        }
    ]
}
```

------

Para obter exemplos de políticas de bucket, consulte [Exemplos de políticas de bucket do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html) no *Guia do usuário do Amazon S3*.

## Usar os pontos de acesso do Amazon S3 para ter um controle mais preciso sobre o acesso aos buckets
<a name="s3-permissions-aliases"></a>

Se você tem um conjunto de dados compartilhado em um bucket do Amazon S3, manter uma única política de bucket que gerencia o acesso para centenas de casos de uso pode ser um desafio.

Os pontos de acesso, as políticas e os aliases de bucket do Amazon S3 podem ajudar a resolver esse problema. Um bucket pode ter vários pontos de acesso, cada um com uma política que controla o acesso ao bucket de uma maneira diferente. 

Para cada ponto de acesso que você cria, o Amazon S3 gera um alias que representa esse ponto. Como o alias está no formato de nome de bucket do Amazon S3, você pode usar o alias no cláusula `LOCATION` das instruções `CREATE TABLE` no Athena. O acesso do Athena ao bucket é controlado pela política do ponto de acesso que o alias representa. 

Para obter mais informações, consulte [Especificar um local de tabela no Amazon S3](tables-location-format.md) e [Usar pontos de acesso](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html) no *Manual do usuário do Amazon S3*.

## Usar chaves de contexto CalledVia para só permitir chamadas do Athena para outro serviço
<a name="s3-permissions-calledvia"></a>

Para maior segurança, é possível usar a chave de contexto de condição global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia). A chave de condição `aws:CalledVia` contém uma lista dos serviços aos quais você permite chamar outro serviço. Por exemplo, você pode permitir apenas chamadas `InvokeFunction` para o AWS Lambda que sejam originadas no Athena, especificando o nome da entidade principal do serviço do Athena `athena.amazonaws.com` para a chave de contexto `aws:CalledVia`. Para obter mais informações, consulte [Usar chaves de contexto CalledVia para o Athena](security-iam-athena-calledvia.md).

## Recursos adicionais
<a name="s3-permissions-additional-resources"></a>

Para obter informações detalhadas e exemplos de como conceder acesso ao Amazon S3, consulte os seguintes recursos:
+ [Demonstrações de exemplo: gerenciar acesso](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html) no *Guia do usuário do Amazon S3*.
+ [Como posso conceder acesso entre contas a objetos que estão em buckets do Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/) na Central de Conhecimento da AWS.
+ [Configurar o acesso entre contas do Athena aos buckets do Amazon S3](cross-account-permissions.md).

# Configurar o acesso entre contas do Athena aos buckets do Amazon S3
<a name="cross-account-permissions"></a>

Um cenário comum do Amazon Athena é conceder acesso a usuários em uma conta diferente do proprietário do bucket de maneira que eles possam realizar as consultas. Neste caso, use uma política de bucket para conceder acesso.

**nota**  
Para obter informações sobre o acesso entre contas aos catálogos de dados do AWS Glue pelo Athena, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).

A política de bucket de exemplo a seguir, criada e aplicada ao bucket `s3://amzn-s3-demo-bucket` pelo proprietário do bucket, concede acesso a todos os usuários na conta `123456789123`, que é uma conta diferente.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "MyPolicyID",
   "Statement": [
      {
          "Sid": "MyStatementSid",
          "Effect": "Allow",
          "Principal": {
             "AWS": "arn:aws:iam::123456789123:root"
          },
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket",
             "s3:ListBucketMultipartUploads",
             "s3:ListMultipartUploadParts",
             "s3:AbortMultipartUpload"
          ],
          "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket",
             "arn:aws:s3:::amzn-s3-demo-bucket/*"
          ]
       }
    ]
 }
```

------

Para conceder acesso a um determinado usuário em uma conta, substitua a chave `Principal` por uma chave que especifique o usuário, em vez de `root`. Por exemplo, para o perfil do usuário `Dave`, use `arn:aws:iam::123456789123:user/Dave`.

## Configurar o acesso entre contas a um bucket criptografado com uma chave personalizada do AWS KMS
<a name="cross-account-permissions-kms"></a>

Se você tem um bucket do Amazon S3 criptografado com uma chave personalizada do AWS Key Management Service (AWS KMS), talvez seja necessário conceder aos usuários acesso a ele de outra conta da Amazon Web Services.

Conceder acesso a um bucket criptografado de AWS KMS na Conta A a um usuário na Conta B requer as seguintes permissões:
+ A política de bucket na Conta A deve conceder acesso ao perfil assumido pela Conta B.
+ A política de chaves do AWS KMS na Conta A deve conceder acesso ao perfil assumido pelo usuário na Conta B.
+ O perfil do AWS Identity and Access Management (IAM) assumido na Conta B deve conceder acesso ao bucket e à chave na Conta A.

Os procedimentos a seguir descrevem como conceder cada uma dessas permissões.

**Para conceder acesso ao bucket na Conta A para o usuário na Conta B**
+ Na Conta A, [revise a política de bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) e confirme se há uma instrução que permita o acesso a partir do ID da conta da Conta B.

  Por exemplo, a política de bucket a seguir permite o acesso `s3:GetObject` à conta ID `111122223333`:

------
#### [ JSON ]

****  

  ```
  {
    "Id": "ExamplePolicy1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "ExampleStmt1",
        "Action": [
          "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Principal": {
          "AWS": [
            "111122223333"
          ]
        }
      }
    ]
  }
  ```

------

**Para conceder acesso ao usuário na Conta B a partir da política de chave do AWS KMS na Conta A**

1. Na política de chaves do AWS KMS para a Conta A, conceda permissões ao perfil assumido na Conta B para as ações a seguir:
   +  `kms:Encrypt` 
   +  `kms:Decrypt` 
   +  `kms:ReEncrypt*` 
   +  `kms:GenerateDataKey*` 
   +  `kms:DescribeKey` 

   O exemplo a seguir concede acesso de chave a somente um perfil do IAM.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowUseOfTheKey",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/role_name"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Na Conta A, revise a política de chave [usando a visualização de políticas do Console de gerenciamento da AWS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view).

1. Na política de chave, verifique se a seguinte declaração lista a Conta B como principal.

   ```
   "Sid": "Allow use of the key" 
   ```

1. Se a instrução `"Sid": "Allow use of the key"` não estiver presente, execute as seguintes etapas:

   1. Alterne para exibir a política de chave [usando a exibição padrão do console](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view). 

   1.  Adicione o ID da conta B como uma conta externa com acesso à chave.

**Para conceder acesso ao bucket e à chave na Conta A do perfil do IAM assumido pela Conta B**

1. Na Conta B, abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Abra o perfil do IAM associado ao usuário na Conta B.

1. Analise a lista de políticas de permissões aplicadas ao perfil do IAM.

1. Certifique-se de aplicar uma política que conceda acesso ao bucket.

   A instrução exemplificada a seguir concede ao perfil do IAM acesso às operações `s3:GetObject` e `s3:PutObject` no bucket `amzn-s3-demo-bucket`:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt2",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. Certifique-se de que seja aplicada uma política que conceda acesso à chave.
**nota**  
Se o perfil do IAM assumido na Conta B já tiver [acesso de administrador](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html), não será necessário conceder acesso à chave usando as políticas do IAM do usuário.

   A instrução exemplificada a seguir concede ao perfil do IAM acesso para usar a chave `arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd`.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt3",
         "Action": [
           "kms:Decrypt",
           "kms:DescribeKey",
           "kms:Encrypt",
           "kms:GenerateDataKey",
           "kms:ReEncrypt*"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
       }
     ]
   }
   ```

------

## Configurar o acesso entre contas a objetos de buckets
<a name="cross-account-permissions-objects"></a>

Os objetos carregados por uma conta (Conta C) que não seja a conta proprietária do bucket (Conta A) podem exigir ACLs explícitas em nível de objeto que concedam acesso de leitura à conta de consulta (Conta B). Para evitar esse requisito, a Conta C deve assumir uma função na Conta A antes de colocar objetos no bucket da Conta A. Para obter mais informações, consulte [Como posso fornecer acesso entre contas a objetos que estão em buckets do Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/).

# Configurar o acesso a bancos de dados e tabelas no AWS Glue Data Catalog
<a name="fine-grained-access-to-glue-resources"></a>

Se você usar o AWS Glue Data Catalog com o Amazon Athena, poderá definir políticas no nível do recurso para os objetos bancos de dados e tabelas do Catálogo de dados, que são usados no Athena.

**nota**  
Este tópico aborda segurança no nível de bancos de dados e tabelas. Para obter informações sobre a configuração de segurança no nível de colunas, linhas e células, consulte [Data filtering and cell-level security in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html). 

Você define as permissões no nível do recurso nas políticas baseadas em identidade do IAM.

**Importante**  
Esta seção aborda as permissões no nível do recurso nas políticas baseadas em identidade do IAM. Elas são diferentes das políticas com base em recursos. Para obter mais informações sobre as diferenças, consulte [Políticas baseadas em identidade e em recurso](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) no *Guia do usuário do IAM*.

Consulte os seguintes tópicos para essas tarefas: 


| Para executar essa tarefa | Consulte o tópico a seguir | 
| --- | --- | 
| Criar uma política do IAM que defina o acesso aos recursos | [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no Guia do usuário do IAM. | 
| Saiba mais sobre as políticas baseadas em identidade do IAM usadas no AWS Glue | [ Políticas baseadas em identidades (políticas do IAM)](https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html) no Guia do desenvolvedor do AWS Glue.  | 

 **Nesta seção** 
+  [Limitações](#access-to-glue-resources-limitations) 
+  [Configurar o acesso do AWS Glue ao catálogo e ao banco de dados por Região da AWS](#full-access-to-default-db-per-region) 
+  [Sobre o controle de acesso para partições e versões de tabela no AWS Glue](#access-to-glue-resources-table-partitions-and-versions) 
+  [Exemplos de permissões no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies) 

## Limitações
<a name="access-to-glue-resources-limitations"></a>

Leve em conta as seguintes limitações quando usar o controle de acesso no nível de bancos de dados e tabelas para o AWS Glue Data Catalog e o Athena:
+ Os grupos de trabalho do Athena habilitados para o Centro de Identidade do IAM requerem que o Lake Formation seja configurado para usar as identidades do Centro de Identidade do IAM. Para obter mais informações, consulte [Integrating IAM Identity Center](https://docs.aws.amazon.com/lake-formation/latest/dg/identity-center-integration.html) no *Guia do desenvolvedor do AWS Lake Formation*. 
+ Você pode limitar o acesso apenas a bancos de dados e tabelas. Esses controles são aplicados no nível de tabelas. Você não pode limitar o acesso a partições individuais em uma tabela. Para obter mais informações, consulte [Sobre o controle de acesso para partições e versões de tabela no AWS Glue](#access-to-glue-resources-table-partitions-and-versions).
+ O AWS Glue Data Catalog contém os seguintes recursos: `CATALOG`, `DATABASE`, `TABLE` e `FUNCTION`. 
**nota**  
Nessa lista, os recursos em comum entre o Athena e o AWS Glue Data Catalog são `TABLE`, `DATABASE` e `CATALOG` para cada conta. `Function` é específico de AWS Glue. Para as ações de exclusão no Athena, você deve incluir permissões para as ações do AWS Glue. Consulte [Exemplos de permissões no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies).

  A hierarquia é a seguinte: `CATALOG` é um ancestral de todos os `DATABASES` em cada conta, e cada `DATABASE` é um ancestral para todas as suas `TABLES` e `FUNCTIONS`. Por exemplo, para uma tabela chamada `table_test` que pertence a um banco de dados `db` no catálogo em sua conta, seus ancestrais são `db` e catálogo na sua conta. Para o banco de dados `db`, seu ancestral é o catálogo em sua conta e seus descendentes são tabelas e funções. Para obter mais informações sobre a estrutura hierárquica de recursos, consulte [Lista de ARNs no catálogo de dados](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns) no *Guia do desenvolvedor do AWS Glue*. 
+ Para qualquer ação do Athena que não seja de exclusão em um recurso, como `CREATE DATABASE`, `CREATE TABLE`, `SHOW DATABASE`, `SHOW TABLE` ou `ALTER TABLE`, você precisa de permissões para chamar essa ação no recurso (tabela ou banco de dados) e em todos os ancestrais do recurso no Catálogo de dados. Por exemplo, para uma tabela, seus ancestrais são o banco de dados ao qual ela pertence e o catálogo da conta. Para um banco de dados, seu ancestral é o catálogo da conta. Consulte [Exemplos de permissões no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies). 
+ Para uma ação de exclusão no Athena, como `DROP DATABASE` ou `DROP TABLE`, você também precisa de permissões para chamar a ação em todos os ancestrais e descendentes do recurso no catálogo de dados. Por exemplo, para excluir um banco de dados, você precisa de permissões no banco de dados, no catálogo, que é seu ancestral, e em todas as tabelas e funções definidas pelo usuário, que são seus descendentes. Uma tabela não tem descendentes. Para executar `DROP TABLE`, você precisa de permissões para essa ação na tabela, no banco de dados ao qual ela pertence e no catálogo. Consulte [Exemplos de permissões no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies).

## Configurar o acesso do AWS Glue ao catálogo e ao banco de dados por Região da AWS
<a name="full-access-to-default-db-per-region"></a>

Para que o Athena funcione com o AWS Glue, é necessária uma política que conceda acesso ao banco de dados e ao AWS Glue Data Catalog em sua Região da AWS conta. Para criar bancos de dados, a permissão `CreateDatabase` também é necessária. No exemplo de política a seguir, substitua a Região da AWS, o ID da Conta da AWS e o nome do banco de dados por seus próprios dados.

```
{
   "Sid": "DatabasePermissions",
   "Effect": "Allow",
   "Action": [
      "glue:GetDatabase", 
      "glue:GetDatabases",
      "glue:CreateDatabase"
   ],
   "Resource": [
     "arn:aws:glue:us-east-1:123456789012:catalog",
     "arn:aws:glue:us-east-1:123456789012:database/default"
   ]
}
```

## Sobre o controle de acesso para partições e versões de tabela no AWS Glue
<a name="access-to-glue-resources-table-partitions-and-versions"></a>

No AWS Glue, tabelas podem ter partições e versões. As versões e partições de tabelas não são consideradas recursos independentes no AWS Glue. O acesso a versões e partições de tabela é garantido concedendo acesso na tabela e em recursos ancestrais da tabela. 

Para os fins de controle de acesso, as seguintes permissões de acesso se aplicam:
+ Os controles são aplicados no nível de tabelas. Você pode limitar o acesso apenas a bancos de dados e tabelas. Por exemplo, se você permitir acesso a uma tabela particionada, esse acesso se aplicará a todas as partições na tabela. Você não pode limitar o acesso a partições individuais em uma tabela. 
**Importante**  
Para executar as ações do AWS Glue em partições, são necessárias permissões para ações de partição nos níveis do catálogo, do banco de dados e da tabela. Ter acesso às partições em uma tabela não é suficiente. Por exemplo, para executar `GetPartitions` em uma tabela `myTable` no banco de dados `myDB`, você deve conceder permissões de `glue:GetPartitions` no catálogo, no banco de dados `myDB` e nos recursos de `myTable`. 
+ Os controles de acesso não são aplicados às versões de tabelas. Assim como ocorre com as partições, o acesso a versões anteriores de uma tabela é concedido por meio de acesso às APIs da versão da tabela do AWS Glue na tabela e aos ancestrais da tabela.

Para obter informações sobre permissões para as ações do AWS Glue, consulte [Permissões da API do AWS Glue: referência de ações e recursos](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html) no *Guia do desenvolvedor do AWS Glue*. 

## Exemplos de permissões no nível de bancos de dados e tabelas
<a name="examples-fine-grained-table-database-policies"></a>

A tabela a seguir lista exemplos das políticas baseadas em identidade do IAM que permitem acesso aos bancos de dados e às tabelas do Athena. Recomendamos começar com esses exemplos e, de acordo com as suas necessidades, ajustá-los para permitir ou negar ações específicas a determinados bancos de dados e tabelas.

Esses exemplos incluem acesso a bancos de dados e catálogos para que Athena e o AWS Glue possam funcionar juntos. Para várias regiões da AWS, inclua políticas similares para cada um dos catálogos e bancos de dados, sendo uma linha para cada região. 

Nesses exemplos, substitua o banco de dados `example_db` e os nomes das tabelas `test` pelos nomes dos seus próprios bancos de dados e tabelas.


| Instrução DDL | Exemplo de uma política de acesso do IAM que concede acesso ao recurso | 
| --- | --- | 
| ALTER DATABASE | Permite que você modifique as propriedades do banco de dados do example\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:UpdateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}</pre> | 
| CREATE DATABASE | Permite que você crie o banco de dados chamado example\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:CreateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}<br /></pre> | 
| CRIAR TABELA | Permite que você crie uma tabela chamada test no banco de dados do example\$1db.<pre>{<br />   "Sid": "DatabasePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:GetDatabases"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />},<br />{<br />   "Sid": "TablePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetTables",<br />      "glue:GetTable",<br />      "glue:GetPartitions",<br />      "glue:CreateTable"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",<br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br />}</pre> | 
| DROP DATABASE | Permite que você elimine o banco de dados do example\$1db incluindo todas as suas tabelas.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:DeleteDatabase",<br />      "glue:GetTables", <br />      "glue:GetTable", <br />      "glue:DeleteTable" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*", <br />     "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*"<br />   ]<br /> }</pre> | 
| DESCARTAR TABELA | Permite que você elimine uma tabela particionada chamada test no banco de dados do example\$1db. Se a tabela não tiver partições, não inclua ações de partição.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTable",<br />      "glue:DeleteTable", <br />      "glue:GetPartitions",<br />      "glue:GetPartition",<br />      "glue:DeletePartition" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br /> }</pre> | 
| MSCK REPAIR TABLE | Permite que você atualize os metadados do catálogo depois de adicionar partições compatíveis com o Hive à tabela chamada test no banco de dados example\$1db.<pre>{<br />    "Effect": "Allow",<br />    "Action": [<br />        "glue:GetDatabase",<br />        "glue:CreateDatabase",<br />        "glue:GetTable",<br />        "glue:GetPartitions",<br />        "glue:GetPartition",<br />        "glue:BatchCreatePartition"<br />    ],<br />    "Resource": [<br />      "arn:aws:glue:us-east-1:123456789012:catalog",<br />      "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />      "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />    ]<br />}</pre> | 
| SHOW DATABASES | Permite que você liste todos os bancos de dados no AWS Glue Data Catalog.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetDatabases" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/*"<br />   ]<br /> }</pre> | 
| SHOW TABLES | Permite que você liste todas as tabelas no banco de dados do example\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTables"    <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",  <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*"<br />   ]<br />}</pre> | 

# Configurar o acesso entre contas aos catálogos de dados do AWS Glue
<a name="security-iam-cross-account-glue-catalog-access"></a>

Você pode usar o recurso de catálogo do AWS Glue entre contas do Athena para registrar um catálogo do AWS Glue de outra conta sua. Depois de configurar as permissões do IAM necessárias para o AWS Glue e registrar o catálogo como um recurso [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) do Athena, você poderá usar o Athena para executar consultas entre contas. Para obter informações sobre como usar o console do Athena para registrar um catálogo de outra conta, consulte [Registrar um catálogo de dados de outra conta](data-sources-glue-cross-account.md).

Para obter mais informações sobre o acesso entre contas no AWS Glue, consulte [Concessão de acesso entre contas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) no *Guia do desenvolvedor do AWS Glue*.

## Antes de começar
<a name="security-iam-cross-account-glue-catalog-access-before-you-start"></a>

Como esse recurso usa as APIs existentes do recurso `DataCatalog` e as funcionalidades do Athena para habilitar o acesso entre contas, recomendamos ler os seguintes tópicos antes de começar:
+ [Conectar-se à fonte de dados](work-with-data-stores.md): contém tópicos sobre como usar o Athena com as fontes de catálogo de dados AWS Glue, Hive ou Lambda.
+ [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md): mostra como escrever políticas que controlam o acesso aos catálogos de dados.
+ [Usar a AWS CLI com metastores do Hive](datastores-hive-cli.md): mostra como usar a AWS CLI com metastores do Hive, mas contém casos de uso aplicáveis a outras origens de dados.

## Considerações e limitações
<a name="security-iam-cross-account-glue-catalog-access-considerations-and-limitations"></a>

No momento, o acesso entre contas ao catálogo do AWS Glue no Athena tem as seguintes limitações:
+ O recurso está disponível apenas nas Regiões da AWS compatíveis com o mecanismo Athena versão 2 ou posterior. Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md). Para fazer upgrade da versão do mecanismo para um grupo de trabalho, consulte [Alterar versões do mecanismo do Athena](engine-versions-changing.md).
+ Quando você registra o AWS Glue Data Catalog de outra conta na sua conta, cria um recurso `DataCatalog` regional vinculado aos dados da outra conta somente nessa região específica.
+ No momento, as instruções `CREATE VIEW` que incluem um catálogo do AWS Glue entre contas não são permitidas.
+ Catálogos criptografados usando chaves gerenciadas da AWS não podem ser consultados entre contas. Em vez disso, use chaves gerenciadas pelo cliente (`KMS_CMK`) para os catálogos que você deseja consultar entre contas. Para obter informações sobre as diferenças entre chaves gerenciadas pelo cliente e pela AWS, consulte [Chaves do cliente e chaves da AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt                     ) no *Guia do desenvolvedor do AWS Key Management Service*. 

## Conceitos básicos
<a name="security-iam-cross-account-glue-catalog-getting-started"></a>

No cenário abaixo, a conta do “tomador” (666666666666) deseja executar uma consulta `SELECT` que faz referência ao catálogo do AWS Glue que pertence à conta do “proprietária” (999999999999), como no seguinte exemplo:

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

No procedimento a seguir, as etapas 1a e 1b mostram como conceder à conta do tomador acesso aos recursos do AWS Glue da conta do proprietário, tanto da perspectiva do tomador quanto do proprietário. O exemplo concede acesso ao banco de dados `tpch1000` e à tabela `customer`. Altere esses nomes de exemplo de acordo com as suas necessidades.

### Etapa 1b: criar um perfil de tomador com acesso aos recursos do AWS Glue do proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-1a"></a>

Para criar um perfil de conta do tomador com uma política para acessar os recursos do AWS Glue da conta do proprietário, é possível usar o console do AWS Identity and Access Management (IAM) ou a [API do IAM](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html). O procedimento a seguir usa o console do IAM.

**Para criar um perfil de tomador e a política para acessar os recursos do AWS Glue da conta do proprietário**

1. Faça login no console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) usando a conta do tomador.

1. No painel de navegação, expanda **Gerenciamento de acesso** e escolha **Políticas**.

1. Escolha **Criar política**.

1. Em **Editor de políticas**, escolha **JSON**.

1. No editor de política, insira a seguinte política e modifique-a de acordo com os seus requisitos:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, insira um nome para a política em **Nome da política** (p. ex., **CrossGluePolicyForBorrowerRole**).

1. Escolha **Create policy**.

1. No painel de navegação, escolha **Perfis**.

1. Escolha **Criar Perfil**.

1. Na página **Selecionar entidade confiável**, escolha **Conta da AWS** e, em seguida, selecione **Avançar**.

1. Na página **Adicionar permissões**, insira na caixa de pesquisa o nome da política que você criou (p. ex., **CrossGluePolicyForBorrowerRole**).

1. Marque a caixa de seleção ao lado do nome da política e escolha **Avançar**.

1. Na página **Name, review, and create** (Nomear, revisar e criar), para **Role name** (Nome da função), digite um nome para a função (por exemplo, **CrossGlueBorrowerRole**).

1. Selecione **Criar perfil**.

### Etapa 1b: criar uma política do proprietário para permitir que o tomador tenha acesso ao AWS Glue
<a name="security-iam-cross-account-glue-catalog-access-step-1b"></a>

Para conceder acesso ao AWS Glue da conta do proprietário (999999999999) para o perfil do tomador, é possível usar o console do AWS Glue ou a operação de API [PutResourcePolicy](https://docs.aws.amazon.com/glue/latest/webapi/API_PutResourcePolicy.html) do AWS Glue. O procedimento a seguir usa o console do AWS Glue.

**Para conceder acesso ao AWS Glue para a conta do mutuário do proprietário**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) usando a conta do proprietário.

1. No painel de navegação, expanda **Data Catalog** e escolha **Configurações do catálogo**.

1. Na caixa **Permissions** (Permissões), insira a política como mostrado a seguir. Em *rolename*, insira o perfil que o tomador criou na etapa 1a (p. ex., **CrossGlueBorrowerRole**). Para aumentar o escopo da permissão, é possível usar o caractere curinga `*` para os dois tipos de recurso: banco de dados e tabela.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::666666666666:user/username",
                       "arn:aws:iam::666666666666:role/rolename"
                   ]
               },
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

Ao concluir, recomendamos usar a [API do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html) para fazer algumas chamadas de teste entre contas a fim de confirmar se as permissões estão configuradas conforme o esperado.

### Etapa 2: o mutuário registra o AWS Glue Data Catalog que pertence à conta de proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-2"></a>

O procedimento a seguir mostra como usar o console do Athena para configurar um AWS Glue Data Catalog na conta da Amazon Web Services do proprietário da fonte de dados. Para obter informações sobre como usar operações de API em vez do console para registrar o catálogo, consulte [(Opcional) Usar a API para registrar um catálogo de dados do Athena que pertence à conta do proprietário](#security-iam-cross-account-glue-catalog-access-step-2-api).

**Para registrar um AWS Glue Data Catalog pertencente a outra conta**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Expanda **Administração** e escolha **Fontes de dados**.

1. No canto superior direito do console, escolha **Create data source** (Criar fonte de dados).

1. Na página **Escolher uma fonte de dados**, em **Fontes de dados**, escolha **S3 - AWS Glue Data Catalog** e depois **Próximo**.

1. Na página **Inserir detalhes da fonte de dados**, na seção **AWS Glue Data Catalog**, para **Escolher um AWS Glue Data Catalog**, escolha **AWS Glue Data Catalog em outra conta**.

1. Em **Data source details** (Detalhes da origemdos dados), forneça as seguintes informações:
   + **Data source name** (Nome da origem dos dados): insira o nome que você deseja usar em suas consultas SQL para fazer referência ao catálogo de dados na outra conta.
   + **Description** (Descrição): insira uma descrição do catálogo de dados na outra conta (opcional).
   + **Catalog ID** (ID do catálogo): insira o ID de 12 dígitos da conta da Amazon Web Services à qual o catálogo de dados pertence. O ID da conta da Amazon Web Services é o ID do catálogo.

1. (Opcional) Expanda **Etiquetas** e adicione pares de chave-valor que você queira associar com a fonte de dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise as informações fornecidas e selecione **Create data source** (Criar fonte de dados). A página **Data source details** (Detalhes da fonte de dados) lista os bancos de dados e etiquetas do catálogo de dados que você registrou.

1. Escolha **Fontes de dados e catálogos**. O catálogo de dados que você registrou está listado na coluna **Data source name** (Nome da fonte de dados).

1. Para visualizar ou editar as informações do catálogo de dados, escolha o catálogo e selecione **Actions** (Ações), **Edit** (Editar).

1. Para excluir o novo catálogo de dados, escolha o catálogo e selecione **Actions** (Ações) **Delete** (Excluir).

### Etapa 3: O mutuário envia uma consulta
<a name="security-iam-cross-account-glue-catalog-access-step-4"></a>

O tomador envia uma consulta que faz referência ao catálogo usando a sintaxe *catálogo*.*banco de dados*.*tabela*, conforme o seguinte exemplo:

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

Em vez de usar a sintaxe totalmente qualificada, o tomador também pode especificar o catálogo contextualmente, passando o valor por [QueryExecutionContext](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionContext.html).

## (Opcional) Configurar permissões adicionais do Amazon S3
<a name="security-iam-cross-account-glue-catalog-access-additional-s3-permissions"></a>
+ Se a conta do tomador usar uma consulta do Athena para gravar novos dados em uma tabela na conta do proprietário, o proprietário não terá acesso automaticamente a esses dados no Amazon S3, mesmo que a tabela exista na conta do proprietário. Isso ocorre porque, a menos que seja configurado de outra forma, o tomador é o proprietário do objeto das informações no Amazon S3. Para permitir que o proprietário tenha acesso aos dados, defina as permissões nos objetos adequadamente em uma etapa adicional.
+ Determinadas operações DDL entre contas, como [MSCK REPAIR TABLE](msck-repair-table.md), exigem permissões do Amazon S3. Por exemplo, se a conta do tomador estiver executando uma operação `MSCK REPAIR` entre contas em uma tabela na conta do proprietário que tenha os dados em um bucket do S3 da conta do proprietário, esse bucket deverá conceder permissões ao perfil assumido pelo tomador para que a consulta ocorra com êxito.

Para informações sobre como conceder permissões de bucket, consulte [Como definir permissões de bucket de ACL?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/set-bucket-permissions.html) no *Guia do usuário do console do Amazon Simple Storage Service*.

## (Opcional) Usar um catálogo dinamicamente
<a name="security-iam-cross-account-glue-catalog-access-dynamic-catalogs"></a>

Em alguns casos, você pode querer executar testes rápidos em um catálogo do AWS Glue entre contas sem a etapa de pré-requisito de registro. Você poderá executar dinamicamente consultas entre contas sem criar o objeto de recurso `DataCatalog` se as permissões necessárias do IAM e do Amazon S3 estiverem configuradas corretamente, conforme já foi descrito neste documento.

Para referenciar claramente um catálogo sem registro, use a sintaxe no seguinte exemplo:

```
SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer
```

Use o formato “`glue:<arn>`”, em que `<arn>` é o [ARN do AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns) que você deseja usar. No exemplo, o Athena usa essa sintaxe para apontar dinamicamente para o catálogo de dados do AWS Glue da conta 999999999999 como se você tivesse criado um objeto `DataCatalog` separado para ele.

### Observações sobre o uso de catálogos dinâmicos
<a name="security-iam-cross-account-glue-catalog-access-notes-dynamic-catalogs"></a>

Ao usar catálogos dinâmicos, lembre-se dos pontos a seguir.
+ O uso de um catálogo dinâmico requer as permissões do IAM que você normalmente usa para as operações de API do Catálogo de dados do Athena. A principal diferença é que o nome do recurso Catálogo de dados segue a convenção de nomenclatura `glue:*`.
+ O ARN do catálogo deve pertencer à mesma região onde a consulta está sendo executada.
+ Ao usar um catálogo dinâmico em uma consulta DML ou visualização, coloque-o entre aspas duplas escapadas (`\"`). Ao usar um catálogo dinâmico em uma consulta DDL, coloque-o entre caracteres de aceto grave (```).

## (Opcional) Usar a API para registrar um catálogo de dados do Athena que pertence à conta do proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-2-api"></a>

Em vez de usar o console do Athena conforme descrito na Etapa 2, é possível usar operações de API para registrar o catálogo de dados pertencente à conta do proprietário.

O criador do recurso [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) do Athena deve ter as permissões necessárias para executar a operação de API [CreateDataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html) do Athena. Dependendo dos seus requisitos, o acesso às operações adicionais de API pode ser necessário. Para obter mais informações, consulte [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md).

O corpo da seguinte solicitação `CreateDataCatalog` registra um catálogo do AWS Glue para acesso entre contas:

```
# Example CreateDataCatalog request to register a cross-account Glue catalog:
{
    "Description": "Cross-account Glue catalog",
    "Name": "ownerCatalog",
    "Parameters": {"catalog-id" : "999999999999"  # Owner's account ID
    },
    "Type": "GLUE"
}
```

O código de exemplo a seguir usa um cliente Java para criar o objeto `DataCatalog`.

```
# Sample code to create the DataCatalog through Java client
CreateDataCatalogRequest request = new CreateDataCatalogRequest()
    .withName("ownerCatalog")
    .withType(DataCatalogType.GLUE)
    .withParameters(ImmutableMap.of("catalog-id", "999999999999"));

athenaClient.createDataCatalog(request);
```

Após essas etapas, o mutuário deverá ver `ownerCatalog` quando chamar a operação de API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html).

## Recursos adicionais
<a name="security-iam-cross-account-glue-catalog-access-additional-resources"></a>
+ [Registrar um catálogo de dados de outra conta](data-sources-glue-cross-account.md)
+ [Configure o acesso entre contas para um AWS Glue Data Catalog compartilhado usando o Amazon Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html) no guia *Padrões de orientação prescritiva AWS*.
+ [Consultar AWS Glue Data Catalog entre contas usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) no *AWSBlog de Big Data*
+ [Conceder acesso entre contas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) no *AWS GlueGuia do desenvolvedor* 

# Configurar o acesso do Athena aos metadados criptografados no AWS Glue Data Catalog
<a name="access-encrypted-data-glue-data-catalog"></a>

Se você usa o AWS Glue Data Catalog com o Amazon Athena, pode habilitar a criptografia no AWS Glue Data Catalog usando o console do AWS Glue ou a API. Para obter informações, consulte [Como criptografar seu Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html) no *Guia do desenvolvedor do AWS Glue*.

Se o AWS Glue Data Catalog estiver criptografado, você deverá adicionar as seguintes ações a todas as políticas que são usadas para acessar o Athena:

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

# Configurar o acesso a grupos de trabalho e tags
<a name="workgroups-access"></a>

Um grupo de trabalho é um recurso gerenciado pelo Athena. Portanto, se sua política de grupo de trabalho usar ações que tomam `workgroup` como entrada, será necessário especificar o ARN do grupo de trabalho, onde `workgroup-name` é o nome do seu grupo de trabalho, da seguinte forma:

```
"Resource": [arn:aws:athena:region:AWSAcctID:workgroup/workgroup-name]
```

Por exemplo, para um grupo de trabalho chamado `test_workgroup` na região `us-west-2` da conta da Amazon Web Services `123456789012`, especifique o grupo de trabalho como um recurso usando o seguinte ARN:

```
"Resource":["arn:aws:athena:us-east-2:123456789012:workgroup/test_workgroup"]
```

Para acessar grupos de trabalho habilitados para a propagação de identidade confiável (TIP), os usuários do Centro de Identidade do IAM devem ser atribuídos ao `IdentityCenterApplicationArn` que é retornado pela resposta da ação de API [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) do Athena.
+ Para obter uma lista de políticas de grupo, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md).
+ Para obter uma lista de políticas com base em tags para grupos de trabalho, consulte [Usar políticas de controle de acesso do IAM baseadas em tags](tags-access-control.md).
+ Para obter mais informações sobre como criar políticas do IAM para grupos de trabalho, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md).
+ Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 
+ Para obter mais informações sobre as políticas do IAM, consulte [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) no *Guia do usuário do IAM*. 

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

# Usar políticas do IAM para controlar o acesso de grupo de trabalho
<a name="workgroups-iam-policy"></a>

Para controlar o acesso a grupos de trabalho, use permissões do IAM no nível do recurso ou políticas do IAM baseadas em identidade. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

**nota**  
Para acessar grupos de trabalho habilitados para a propagação de identidade confiável, os usuários do Centro de Identidade do IAM devem ser atribuídos ao `IdentityCenterApplicationArn` que é retornado pela resposta da ação de API [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) do Athena.

O procedimento a seguir é específico ao Athena. 

Para obter informações específicas do IAM, acesse os links listados no fim desta seção. Para obter informações sobre exemplos de políticas de grupo de trabalho em JSON, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md).

**Para usar o editor visual no console do IAM para criar uma política de grupo de trabalho**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Policies (Políticas)** e **Create policy (Criar política)**.

1. Na guia **Editor visual**, selecione **Escolher um serviço**. Em seguida, escolha o Athena para adicionar à política.

1. Escolha **Select actions (Selecionar ações)** e defina as ações para adicionar à política. O editor visual mostra as ações disponíveis no Athena. Para obter mais informações, consulte [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) na *Referência de autorização do serviço*.

1. Escolha **Add actions (Adicionar ações)** para digitar uma ação específica ou use caracteres curinga (\$1) para especificar várias ações. 

   Por padrão, a política que você está criando permite as ações que você escolhe. Se você escolher uma ou mais ações compatíveis com as permissões no nível do recurso `workgroup` no Athena, o editor listará o recurso `workgroup`. 

1. Escolha **Resources (Recursos)** para especificar os grupos de trabalho específicos para sua política. Para obter exemplos de políticas de grupo de trabalho em JSON, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md).

1. Especifique o recurso `workgroup` da seguinte forma:

   ```
   arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>
   ```

1. Selecione **Review Policy (Revisar política)**, digite um **Name (Nome)** e uma **Description (Descrição)** (opcional) para a política que você está criando. Revise o resumo da política para ter certeza de que você concedeu as permissões que pretendia. 

1. Escolha **Criar política** para salvar sua nova política.

1. Anexe essa política baseada em política a um usuário, um grupo ou uma função.

Para obter mais informações, consulte os seguintes tópicos na *Referência de autorização do serviço* e no *Manual do usuário do IAM*:
+  [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) 
+  [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) 
+  [Adicionar e remover políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 
+  [Controlar o acesso aos recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources) 

Para obter exemplos de políticas de grupo de trabalho em JSON, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md).

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 

# Exemplo de políticas de grupo de trabalho
<a name="example-policies-workgroup"></a>

Esta seção inclui exemplos de políticas que você pode usar para habilitar várias ações nos grupos de trabalho. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

Um grupo de trabalho é um recurso do IAM gerenciado pelo Athena. Portanto, se sua política de grupo de trabalho usar ações que tomam `workgroup` como entrada, especifique o ARN do grupo de trabalho da seguinte forma:

```
"Resource": [arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>]
```

Onde `<workgroup-name>` é o nome do seu grupo de trabalho. Por exemplo, para o grupo de trabalho chamado `test_workgroup`, especifique-o como um recurso da seguinte forma:

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"]
```

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obter mais informações sobre as políticas do IAM, consulte [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) no *Guia do usuário do IAM*. Para obter mais informações sobre como criar políticas do IAM para grupos de trabalho, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md).
+  [Example policy for full access to all workgroups](#example1-full-access-all-wkgs) 
+  [Example policy for full access to a specified workgroup](#example2-full-access-this-wkg) 
+  [Example policy for running queries in a specified workgroup](#example3-user-access) 
+  [Example policy for running queries in the primary workgroup](#example4-run-in-primary-access) 
+  [Example policy for management operations on a specified workgroup](#example5-manage-wkgs-access) 
+  [Example policy for listing workgroups](#example6-list-all-wkgs-access) 
+  [Example policy for running and stopping queries in a specific workgroup](#example7-run-queries-access) 
+  [Example policy for working with named queries in a specific workgroup](#example8-named-queries-access) 
+  [Example policy for working with Spark notebooks](#example9-spark-workgroup) 

**Example Exemplo de política para acesso total a todos os grupos de trabalho**  
A seguinte política permite acesso total a todos os recursos do grupo de trabalho que podem existir na conta. Recomendamos que você use essa política para os usuários da sua conta que devem administrar e gerenciar grupos de trabalho para todos os outros usuários.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

**Example Exemplo de política para acesso total a um grupo de trabalho especificado**  
A seguinte política permite acesso total ao único recurso do grupo de trabalho específico, denominado `workgroupA`. Você pode usar essa política para os usuários com controle total sobre um determinado grupo de trabalho.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup",
                "athena:GetWorkGroup",
                "athena:CreateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        }
    ]
}
```

**Example Exemplo de política para execução de consultas em um grupo de trabalho especificado**  
Na política a seguir, um usuário tem permissão para executar consultas no `workgroupA` especificado e visualizá-las. O usuário não tem permissão de realizar tarefas de gerenciamento para o grupo de trabalho em si, como atualizá-las ou excluí-las. Observe que o exemplo de política não limita os usuários apenas a esse grupo de trabalho nem nega acesso a outros grupos de trabalho.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup", 
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        }
    ]
}
```

**Example Exemplo de política para execução de consultas em um grupo de trabalho principal**  
É possível modificar o exemplo anterior para permitir que um determinado usuário também execute consultas no grupo de trabalho principal.   
Recomendamos que você adicione o recurso do grupo de trabalho principal para todos os usuários configurados para executar consultas em seus grupos de trabalho designados. Adicionar esse recurso às políticas de usuário do grupo de trabalho será útil caso o grupo de trabalho designado seja excluído ou esteja desabilitado. Neste caso, eles podem continuar executando consultas no grupo de trabalho principal.
Para permitir que os usuários em sua conta executem consultas no grupo de trabalho principal, adicione uma linha que contenha o ARN do grupo de trabalho principal à seção de recursos do [Example policy for running queries in a specified workgroup](#example3-user-access), como no exemplo a seguir.  

```
arn:aws:athena:us-east-1:123456789012:workgroup/primary"
```

**Example Exemplo de política para operações de gerenciamento em um grupo de trabalho especificado**  
Na política a seguir, o usuário tem permissão de criar, excluir, obter detalhes e atualizar um grupo de trabalho `test_workgroup`.     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateWorkGroup",
                "athena:GetWorkGroup",
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example Exemplo de política para listagem de grupos de trabalho**  
A política a seguir permite que todos os usuários listem todos os grupos de trabalho:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Exemplo de política para execução e interrupção de consultas em um grupo de trabalho específico**  
Nesta política, o usuário tem a permissão de executar consultas no grupo de trabalho:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example Exemplo de política para trabalhar com consultas nomeadas em um grupo de trabalho específico**  
Na política a seguir, o usuário tem permissões para criar, excluir e obter informações sobre consultas nomeadas no grupo de trabalho especificado:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:DeleteNamedQuery"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"            ]
        }
    ]
}
```

**Example Exemplo de política para trabalhar com cadernos Spark no Athena**  
Use uma política como a apresentada a seguir para trabalhar com cadernos Spark no Athena.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCreatingWorkGroupWithDefaults",
            "Action": [
                "athena:CreateWorkGroup",
                "s3:CreateBucket",
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "s3:GetBucketLocation",
                "athena:ImportNotebook"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*",
                "arn:aws:s3:::123456789012-us-east-1-athena-results-bucket-*",
                "arn:aws:iam::123456789012:role/service-role/AWSAthenaSparkExecutionRole-*",
                "arn:aws:iam::123456789012:policy/service-role/AWSAthenaSparkRolePolicy-*"
            ]
        },
        {
            "Sid": "AllowRunningCalculations",
            "Action": [
                "athena:ListWorkGroups",
                "athena:GetWorkGroup",
                "athena:StartSession",
                "athena:CreateNotebook",
                "athena:ListNotebookMetadata",
                "athena:ListNotebookSessions",
                "athena:GetSessionStatus",
                "athena:GetSession",
                "athena:GetNotebookMetadata",
                "athena:CreatePresignedNotebookUrl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*"
        },
        {
            "Sid": "AllowListWorkGroupAndEngineVersions",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

# Usar grupos de trabalho do Athena habilitados para o IAM Identity Center
<a name="workgroups-identity-center"></a>

A [propagação de identidade confiável](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html) é um recurso do Centro de Identidade do AWS IAM que os administradores de Serviços da AWS conectados podem usar para conceder e auditar o acesso aos dados do serviço. O acesso a esses dados é baseado em atributos do usuário, como associações de grupo. A configuração da propagação de identidade confiável requer a colaboração entre os administradores de Serviços da AWS conectados e os administradores do Centro de Identidade do IAM. Para ter mais informações, consulte [Prerequisites and considerations](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html).

Com o [IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html), é possível gerenciar a segurança do login para identidades da força de trabalho, também conhecidas como usuários da força de trabalho. O Centro de Identidade do IAM oferece um local no qual é possível criar ou conectar usuários da força de trabalho e gerenciar de forma centralizada o acesso deles em todas as contas e aplicações da AWS. É possível usar permissões de várias contas para atribuir acesso a a esses usuários Contas da AWS. Você pode usar as atribuições de aplicações para atribuir aos seus usuários acesso a aplicações habilitadas para o Centro de Identidade do IAM, aplicações em nuvem e aplicações do Security Assertion Markup Language (SAML 2.0) do cliente. Para obter mais informações, consulte [Trusted identity propagation across applications](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html) no *Guia do usuário do Centro de Identidade do AWS IAM*.

O suporte do Athena SQL para propagação confiável de identidade está disponível no EMR Studio e no SageMaker Unified Studio. Cada plataforma fornece interfaces específicas para usar o TIP com o Athena. 

Ao usar o Athena SQL no EMR Studio com identidades do Centro de Identidade do IAM, você tem duas opções de grupo de trabalho:
+ **Grupos de trabalho regulares**: não são necessárias atribuições de usuário/grupo.
+ **Grupos de trabalho habilitados para o Centro de Identidade do IAM**: requer a atribuição de usuários/grupos por meio do console ou da API do Centro de Identidade do IAM.

Para ambas as opções, você pode executar consultas usando a interface Athena SQL no EMR Studio com o Centro de Identidade do IAM habilitado. 

## Considerações e limitações
<a name="workgroups-identity-center-considerations-and-limitations"></a>

Ao usar a propagação de identidade confiável com o Amazon Athena, considere os seguintes pontos:
+ Não é possível alterar o método de autenticação para o grupo de trabalho após sua criação.
  + Os grupos de trabalho do Athena SQL existentes não podem ser modificados para oferecer suporte aos grupos de trabalho habilitados para o Centro de Identidade do IAM. Os grupos de trabalho existentes do Athena SQL podem propagar a identidade para serviços downstream.
  + Os grupos de trabalho habilitados para o Centro de Identidade do IAM não podem ser modificados para oferecer suporte a permissões do IAM em nível de recurso ou a políticas do IAM baseadas em identidade.
+ Para acessar grupos de trabalho habilitados para a propagação de identidade confiável, os usuários do Centro de Identidade do IAM devem ser atribuídos ao `IdentityCenterApplicationArn` que é retornado pela resposta da ação de API [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) do Athena.
+ A Concessão de Acesso do Amazon S3 deve ser configurada para usar identidades de propagação de identidade confiável. Para obter mais informações, consulte [S3 Access Grants and corporate directory identities](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html) no *Guia do usuário do Amazon S3*.
+ Os grupos de trabalho do Athena habilitados para o Centro de Identidade do IAM requerem que o Lake Formation seja configurado para usar as identidades do Centro de Identidade do IAM. Para obter informações sobre a configuração, consulte [Integrating IAM Identity Center](https://docs.aws.amazon.com/lake-formation/latest/dg/identity-center-integration.html) no *Guia do desenvolvedor do AWS Lake Formation*.
+ Por padrão, as consultas atingem o tempo limite após 30 minutos em grupos de trabalho habilitados para o Centro de Identidade do IAM. É possível solicitar um aumento para o tempo limite da consulta, mas o tempo limite máximo em que uma consulta pode ser executada em grupos de trabalho de propagação de identidade confiável é de uma hora. 
+ As alterações de direitos de usuários ou de grupos em grupos de trabalho de propagação de identidade confiável podem demorar até uma hora para entrar em vigor.
+ As consultas em um grupo de trabalho do Athena que usa propagação de identidade confiável não podem ser executadas via console do Athena de forma direta. As consultas devem ser executadas usando a interface do Athena em um EMR Studio que tenha o Centro de Identidade do IAM habilitado. Para obter mais informações sobre como usar o Athena no EMR Studio, consulte [Use the Amazon Athena SQL editor in EMR Studio](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-athena.html) no *Guia de gerenciamento do Amazon EMR*.
+ A propagação de identidade confiável não é compatível com os recursos do Athena apresentados a seguir.
  + Chaves de contexto `aws:CalledVia` para grupos de trabalho habilitados do Centro de Identidade do IAM.
  + Grupos de trabalho do Athena para Spark.
  + Acesso federado à API do Athena.
  + Acesso federado ao Athena usando o Lake Formation e os drivers JDBC e ODBC do Athena.
+ É possível usar a propagação de identidade confiável com o Athena somente nas seguintes Regiões da AWS: 
  + `us-east-2`: Leste dos EUA (Ohio)
  + `us-east-1`: Leste dos EUA (Norte da Virgínia)
  + `us-west-1`: Oeste dos EUA (Norte da Califórnia)
  + `us-west-2`: Oeste dos EUA (Oregon)
  + `af-south-1`: África (Cidade do Cabo)
  + `ap-east-1`: Ásia-Pacífico (Hong Kong)
  + `ap-southeast-3`: Ásia-Pacífico (Jacarta)
  + `ap-south-1`: Ásia-Pacífico (Mumbai)
  + `ap-northeast-3`: Asia Pacific (Osaka)
  + `ap-northeast-2`: Ásia-Pacífico (Seul)
  + `ap-southeast-1`: Ásia-Pacífico (Singapura)
  + `ap-southeast-2`: Ásia-Pacífico (Sydney)
  + `ap-northeast-1`: Ásia-Pacífico (Tóquio)
  + `ca-central-1`: Canadá (Central)
  + `eu-central-1`: Europa (Frankfurt)
  + `eu-central-2`: Europa (Zurique)
  + `eu-west-1`: Europa (Irlanda)
  + `eu-west-2`: Europa (Londres)
  + `eu-south-1`: Europa (Milão)
  + `eu-west-3`: Europa (Paris)
  + `eu-north-1`: Europa (Estocolmo)
  + `me-south-1`: Oriente Médio (Bahrein)
  + `sa-east-1`: América do Sul (São Paulo)

## Permissões obrigatórias
<a name="workgroups-identity-center-required-permissions"></a>

O usuário do IAM do administrador que cria o grupo de trabalho habilitado para o Centro de Identidade do IAM no console do Athena deve ter as políticas apresentadas a seguir anexadas.
+ A política gerenciada `AmazonAthenaFullAccess`. Para obter detalhes, consulte [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy).
+ A seguinte política em linha que permite ações do IAM e do Centro de Identidade do IAM:

------
#### [ JSON ]

****  

  ```
  { "Version":"2012-10-17",		 	 	  "Statement": [ { "Action": [ "iam:createRole",
      "iam:CreatePolicy", "iam:AttachRolePolicy", "iam:ListRoles", "identitystore:ListUsers",
      "identitystore:ListGroups", "identitystore:CreateUser", "identitystore:CreateGroup",
      "sso:ListInstances", "sso:CreateInstance", "sso:DeleteInstance", "sso:ListTrustedTokenIssuers",
      "sso:DescribeTrustedTokenIssuer", "sso:ListApplicationAssignments",
      "sso:DescribeRegisteredRegions", "sso:GetManagedApplicationInstance",
      "sso:GetSharedSsoConfiguration", "sso:PutApplicationAssignmentConfiguration",
      "sso:CreateApplication", "sso:DeleteApplication", "sso:PutApplicationGrant",
      "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationAccessScope",
      "sso:ListDirectoryAssociations", "sso:CreateApplicationAssignment",
      "sso:DeleteApplicationAssignment", "organizations:ListDelegatedAdministrators",
      "organizations:DescribeAccount", "organizations:DescribeOrganization",
      "organizations:CreateOrganization", "sso-directory:SearchUsers", "sso-directory:SearchGroups",
      "sso-directory:CreateUser" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [
      "iam:PassRole" ], "Effect": "Allow", "Resource": [
          "arn:aws:iam::111122223333:role/service-role/AWSAthenaSQLRole-*"
      ] } ] }
  ```

------

## Criação de um grupo de trabalho do Athena habilitado para o Centro de Identidade do IAM
<a name="workgroups-identity-center-creating-an-identity-center-enabled-athena-workgroup"></a>

O procedimento apresentado a seguir mostra as etapas e as opções relacionadas à criação de um grupo de trabalho do Athena habilitado para o Centro de Identidade do IAM. Para obter uma descrição das outras opções de configuração disponíveis para grupos de trabalho do Athena, consulte [Criar um grupo de trabalho](creating-workgroups.md).

**Como criar um grupo de trabalho habilitado para o SSO no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), escolha **Create workgroup** (Criar grupo de trabalho).

1. Na página **Criar grupo de trabalho**, em **Nome do grupo de trabalho**, insira um nome para o grupo de trabalho.

1. Em **Mecanismo de análise**, use o padrão **Athena SQL**.

1. Em **Autenticação**, escolha **Centro de Identidade do IAM**.

1. Em **Perfil de serviço para acesso ao Centro de Identidade do IAM**, escolha um perfil de serviço existente ou crie um perfil novo.

   O Athena requer permissões para acessar o Centro de Identidade do IAM para você. Um perfil de serviço é necessário para que o Athena faça isso. Um perfil de serviço corresponde a um perfil do IAM gerenciado por você que autoriza um serviço da AWS a acessar outros serviços da AWS em seu nome. Para consultar catálogos federados ou executar UDF, atualize o perfil de serviço com as permissões correspondentes do Lambda. Para obter mais informações, consulte [Criação de uma função para delegar permissões a um AWS serviço](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) no *Guia do usuário do IAM*.

1. Expanda **Configuração do resultado da consulta** e, em seguida, insira ou escolha um caminho do Amazon S3 para **Localização do resultado da consulta**.

1. (Opcional) Escolha **Criptografar resultados da consulta**. Por padrão, o SSE-S3 é compatível. Para usar SSE-KMS e CSE-KMS com o local do resultado da consulta, forneça concessões ao **Perfil de serviço para o IAM Identity Center** usando a Concessão de Acesso do Amazon S3. Para obter mais informações, consulte a [Política de perfis de exemplo](#workgroups-identity-center-access-grant-location-sample-role-policy).

1. (Opcional) Escolha **Criar prefixo do S3 baseado na identidade do usuário**.

   Ao criar um grupo de trabalho habilitado para o Centro de Identidade do IAM, a opção **Habilitar concessões de acesso ao S3** é selecionada por padrão. É possível usar as concessões de acesso do Amazon S3 para controlar o acesso às localizações dos resultados das consultas do Athena (prefixos) no Amazon S3. Para obter mais informações sobre as concessões de acesso do Amazon S3, consulte [Managing access with Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html).

   Em grupos de trabalho do Athena que usam a autenticação do Centro de Identidade do IAM, é possível habilitar a criação de localizações dos resultados das consultas baseados em identidade que são controlados pelas concessões de acesso do Amazon S3. Esses prefixos do Amazon S3 baseados na identidade do usuário permitem que os usuários em um grupo de trabalho do Athena mantenham os resultados de suas consultas isolados de outros usuários no mesmo grupo de trabalho.

   Quando você habilita a opção de prefixo do usuário, o Athena anexa o ID do usuário como um prefixo de caminho do Amazon S3 à localização de saída do resultado da consulta para o grupo de trabalho (por exemplo, `s3://amzn-s3-demo-bucket/${user_id}`). Para usar esse recurso, você deve configurar concessões de acesso para permitir somente ao usuário a permissão para o local que tem o prefixo `user_id`. Para obter um exemplo da política de função de localização do Amazon S3 Access Grants que restringe o acesso aos resultados das consultas do Athena, consulte [Exemplo de política de função](#workgroups-identity-center-access-grant-location-sample-role-policy). 
**nota**  
A seleção da opção de prefixo do S3 da identidade do usuário habilita automaticamente a opção de substituição de configurações do lado do cliente para o grupo de trabalho, conforme descrito na próxima etapa. A opção de substituir configurações do lado do cliente é um requisito para o recurso de prefixo da identidade do usuário.

1. Expanda **Configurações** e, em seguida, confirme se a opção **Substituir configurações do lado do cliente** está selecionada.

   Quando você seleciona **Substituir configurações do lado do cliente**, as configurações do grupo de trabalho são aplicadas no nível do grupo de trabalho para todos os clientes do grupo de trabalho. Para obter mais informações, consulte [Override client-side settings (Substituir configurações no lado do cliente)](workgroups-settings-override.md).

1. (Opcional) Faça quaisquer outras configurações necessárias, conforme descrito em [Criar um grupo de trabalho](creating-workgroups.md).

1. Escolha **Create workgroup (Criar grupo de trabalho)**.

1. Use a seção **Grupos de trabalho** do console do Athena para atribuir usuários ou grupos do seu diretório do IAM Identity Center ao seu grupo de trabalho do Athena habilitado para o IAM Identity Center.

## Exemplo de política de função
<a name="workgroups-identity-center-access-grant-location-sample-role-policy"></a>

O exemplo a seguir mostra uma política para uma função a ser anexada a um local do Amazon S3 Access Grants que restringe o acesso aos resultados da consulta do Athena. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "s3:*"
            ],
            "Condition": {
                "ArnNotEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringNotEquals": {
                    "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Deny",
            "Resource": "*",
            "Sid": "ExplicitDenyS3"
        },
        {
            "Action": [
                "kms:*"
            ],
            "Effect": "Deny",
            "NotResource": "arn:aws:kms:us-east-1:111122223333:key/${keyid}",
            "Sid": "ExplictDenyKMS"
        },
        {
            "Action": [
                "s3:ListMultipartUploadParts",
                "s3:GetObject"
            ],
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                    "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*",
            "Sid": "ObjectLevelReadPermissions"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:AbortMultipartUpload"
            ],
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*",
            "Sid": "ObjectLevelWritePermissions"
        },
        {
            "Action": "s3:ListBucket",
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                    "aws:ResourceAccount": "111122223333"
                },
                "StringLikeIfExists": {
                    "s3:prefix": [
                        "${identitystore:UserId}",
                        "${identitystore:UserId}/*"
                    ]
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION",
            "Sid": "BucketLevelReadPermissions"
        },
        {
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/${keyid}",
            "Sid": "KMSPermissions"
        }
    ]
}
```

------

# Configurar criptografia mínima para um grupo de trabalho
<a name="workgroups-minimum-encryption"></a>

Como administrador de um grupo de trabalho do Athena SQL, você pode impor um nível mínimo de criptografia no Amazon S3 para todos os resultados de consultas do grupo de trabalho. Use esse recurso para garantir que os resultados da consulta nunca sejam armazenados em um bucket do Amazon S3 em estado não criptografado.

Quando os usuários de um grupo de trabalho com criptografia mínima ativada enviam uma consulta, eles podem definir apenas a criptografia para o nível mínimo que você configurou ou para um nível superior, se houver um disponível. O Athena criptografa os resultados da consulta no nível especificado quando o usuário executa a consulta ou no nível definido no grupo de trabalho.

Os seguintes níveis estão disponíveis:
+ **Básica**: criptografia do lado do servidor do Amazon S3 com chaves gerenciadas pelo Amazon S3 (**SSE-S3**).
+ **Intermediária**: criptografia do lado do servidor com chaves gerenciadas do KMS (**SSE-KMS**).
+ **Avançada**: criptografia do lado do cliente com chaves gerenciadas do KMS (**CSE-KMS**).

## Considerações e limitações
<a name="workgroups-minimum-encryption-considerations-and-limitations"></a>
+ O recurso de criptografia mínima não está disponível para grupos de trabalho habilitados para o Apache Spark.
+ O recurso de criptografia mínima só funciona quando o grupo de trabalho não habilita a opção **[Substituir configurações do lado do cliente](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html)**.
+ Se o grupo de trabalho estiver com a opção **Substituir configurações do lado do cliente** habilitada, a configuração de criptografia do grupo de trabalho prevalecerá, e a configuração mínima de criptografia não terá efeito.
+ Não há custos para habilitar esse recurso.

## Habilitar criptografia mínima para um grupo de trabalho
<a name="workgroups-minimum-encryption-enabling"></a>

É possível habilitar um nível mínimo de criptografia para os resultados da consulta do grupo de trabalho de SQL do Athena ao criar ou atualizar o grupo de trabalho. Para isso, você pode usar o console do Athena, a API do Athena ou a AWS CLI.

### Usar o console do Athena para habilitar criptografia mínima
<a name="workgroups-minimum-encryption-enabling-using-the-athena-console"></a>

Para começar a criar ou editar o grupo de trabalho usando o console do Athena, consulte [Criar um grupo de trabalho](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html#creating-workgroups) ou [Editar um grupo de trabalho](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html#editing-workgroups). Ao configurar o grupo de trabalho, use as etapas a seguir para ativar a criptografia mínima.

**Para configurar o nível mínimo de criptografia para resultados de consultas de grupos de trabalho**

1. Desmarque a opção **Substituir configurações do lado do cliente** ou verifique se ela não está selecionada.

1. Selecione a opção **Criptografar resultados da consulta**.

1. Em **Tipo de criptografia**, selecione o método de criptografia que deseja que o Athena use para os resultados da consulta do grupo de trabalho (**SSE\$1S3**, **SSE\$1KMS** ou **CSE\$1KMS**). Esses tipos de criptografia correspondem aos níveis de segurança básico, intermediário e avançado.

1. Para impor o método de criptografia escolhido como o nível mínimo de criptografia para todos os usuários, selecione **Definir *encryption\$1method* como criptografia mínima**.

   Quando essa opção é selecionada, uma tabela mostra a hierarquia de criptografia e os níveis de criptografia permitidos aos usuários quando o tipo de criptografia escolhido torna-se o mínimo.

1. Depois de criar o grupo de trabalho ou atualizar a configuração de grupo de trabalho, escolha **Criar grupo de trabalho** ou **Salvar alterações**.

### Usar a API do Athena ou a AWS CLI para habilitar criptografia mínima
<a name="workgroups-minimum-encryption-enabling-using-the-athena-api-or-cli"></a>

Ao usar a API [CreateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateWorkGroup.html) ou [UpdateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_UpdateWorkGroup.html) para criar ou atualizar um grupo de trabalho de SQL do Athena, defina [EnforceWorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html#athena-Type-WorkGroupConfiguration-EnforceWorkGroupConfiguration) como `false`, [EnableMinimumEncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html#athena-Type-WorkGroupConfiguration-EnableMinimumEncryptionConfiguration) como `true` e use [EncryptionOption](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html#athena-Type-EncryptionConfiguration-EncryptionOption) para especificar o tipo de criptografia.

Na AWS CLI, use o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/create-work-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/create-work-group.html) ou [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/update-work-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/update-work-group.html) com os parâmetros `--configuration` ou `--configuration-updates` e especifique as opções correspondentes às da API.

# Configurar o acesso a instruções preparadas
<a name="security-iam-athena-prepared-statements"></a>

Este tópico aborda as permissões do IAM para instruções preparadas no Amazon Athena. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

Para obter mais informações sobre instruções preparadas, consulte [Usar consultas parametrizadas](querying-with-prepared-statements.md).

As permissões do IAM a seguir são necessárias para criar, gerenciar e executar instruções preparadas.

```
athena:CreatePreparedStatement
athena:UpdatePreparedStatement
athena:GetPreparedStatement
athena:ListPreparedStatements
athena:DeletePreparedStatement
```

Use essas permissões conforme mostrado na tabela a seguir.


****  

| Para fazer isso | use estas permissões | 
| --- | --- | 
| Executar uma consulta PREPARE | athena:StartQueryExecution athena:CreatePreparedStatement | 
| Executar novamente uma consulta PREPARE para atualizar uma instrução preparada existente | athena:StartQueryExecution athena:UpdatePreparedStatement | 
| Executar uma consulta EXECUTE | athena:StartQueryExecution athena:GetPreparedStatement | 
| Executar uma consulta DEALLOCATE PREPARE | athena:StartQueryExecution athena:DeletePreparedStatement | 

## Exemplo
<a name="security-iam-athena-prepared-statements-example"></a>

O exemplo de política do IAM a seguir concede permissões para gerenciar e executar instruções preparadas em um ID de conta e grupo de trabalho especificados.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:CreatePreparedStatement",
                "athena:UpdatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:DeletePreparedStatement",
                "athena:ListPreparedStatements"
            ],
            "Resource": [
                "arn:aws:athena:*:111122223333:workgroup/<workgroup-name>"
            ]
        }
    ]
}
```

------

# Usar chaves de contexto CalledVia para o Athena
<a name="security-iam-athena-calledvia"></a>

Quando uma [entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) faz uma [solicitação](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request) à AWS, a AWS reúne as informações da solicitação em um *contexto de solicitação* que a avalia e autoriza a solicitação. É possível usar o elemento `Condition` de uma política JSON para comparar chaves no contexto da solicitação com os valores de chave especificados em sua política. As *chaves de contexto de condição global* são chaves de condição com um prefixo `aws:`.

## Sobre a chave de contexto aws:CalledVia
<a name="security-iam-athena-calledvia-the-awscalledvia-context-key"></a>

Você pode usar a chave de contexto de condição global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) para comparar os serviços na política com os serviços que fazem solicitações em nome do principal do IAM (usuário ou função). Quando uma entidade principal faz uma solicitação a um AWS service (Serviço da AWS), esse serviço pode usar as credenciais do principal para fazer solicitações subsequentes a outros serviços. A chave `aws:CalledVia` contém uma lista ordenada de cada serviço na cadeia que fez solicitações em nome do principal.

Ao especificar um nome de elemento principal de serviço para a chave de contexto `aws:CalledVia`, você pode tornar a chave de contexto específica do AWS service (Serviço da AWS). Por exemplo, você pode usar a chave de condição `aws:CalledVia` para limitar as solicitações somente àquelas feitas pelo Athena. Para usar a chave de condição `aws:CalledVia` em uma política com o Athena, especifique o nome do principal do serviço do Athena `athena.amazonaws.com`, como mostrado no exemplo a seguir.

```
 ...
    "Condition": {
        "ForAnyValue:StringEquals": { 
            "aws:CalledVia": "athena.amazonaws.com"
        }
    }
...
```

Você pode usar a chave de contexto `aws:CalledVia` para garantir que os autores da chamada só tenham acesso a um recurso (como uma função do Lambda) se o chamarem pelo Athena.

**nota**  
A chave de contexto `aws:CalledVia` não é compatível com o recurso de propagação de identidade confiável.

## Adicionar uma chave de contexto CalledVia para acesso às funções do Lambda
<a name="security-iam-athena-calledvia-example-policy-to-add-an-optional-calledvia-context-key-for-fine-grained-access-to-a-lambda-function"></a>

O Athena exige que o autor da chamada tenha as permissões `lambda:InvokeFunction` para invocar a função do Lambda associada à consulta. A Instrução a seguir especifica que o usuário só pode invocar as funções do Lambda no Athena.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:function:OneAthenaLambdaFunction",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": "athena.amazonaws.com"
                }
            }
        }
    ]
}
```

------

O exemplo a seguir mostra a adição da instrução anterior a uma política que permite a um usuário executar e ler uma consulta federada. Os principais com permissão para realizar essas ações podem executar consultas que especificam catálogos do Athena associados a uma origem dos dados federada. No entanto, o principal não pode acessar a função do Lambda associada, a menos que ela seja invocada pelo Athena.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0", 
            "Effect": "Allow",
            "Action": [ 
                "athena:GetWorkGroup", 
                "s3:PutObject", 
                "s3:GetObject", 
                "athena:StartQueryExecution", 
                "s3:AbortMultipartUpload",  
                "athena:StopQueryExecution", 
                "athena:GetQueryExecution", 
                "athena:GetQueryResults", 
                "s3:ListMultipartUploadParts" 
            ], 
            "Resource": [ 
                "arn:aws:athena:*:111122223333:workgroup/WorkGroupName",
                "arn:aws:s3:::MyQueryResultsBucket/*", 
                "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"
            ] 
        }, 
        {
            "Sid": "VisualEditor1", 
            "Effect": "Allow", 
            "Action": "athena:ListWorkGroups", 
            "Resource": "*" 
        }, 
        {
            "Sid": "VisualEditor2", 
            "Effect": "Allow", 
            "Action": 
                [ 
                "s3:ListBucket", 
                "s3:GetBucketLocation" 
                ], 
            "Resource": "arn:aws:s3:::MyLambdaSpillBucket" 
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction", 
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction"
            ], 
            "Condition": {
                "ForAnyValue:StringEquals": { 
                    "aws:CalledVia": "athena.amazonaws.com"
                }
            }
        }            
    ]
}
```

------

Para obter mais informações sobre as chaves de condição `CalledVia`, consulte [Chaves de contexto de condição global AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) no *Manual do usuário do IAM*.

# Permitir a um metastore do Hive externo acesso a um conector de dados do Athena
<a name="hive-metastore-iam-access"></a>

Os exemplos de política de permissão neste tópico demonstram as ações permitidas necessárias e os recursos para os quais são permitidas. Examine essas políticas com atenção e modifique-as de acordo com seus requisitos antes de anexar políticas de permissões semelhantes às identidades do IAM.
+  [Example Policy to Allow an IAM Principal to Query Data Using Athena Data Connector for External Hive Metastore](#hive-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create an Athena Data Connector for External Hive Metastore](#hive-creating-iam) 

**Example : permitir que uma entidade principal do IAM consulte dados usando o conector de dados do Athena para metastore externo do Hive**  
A política a seguir é anexada aos principais do IAM, além de [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy), que concede acesso completo às ações do Athena.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:GetLayerVersion",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:layer:MyAthenaLambdaLayer:*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre>"s3:GetBucketLocation",<br />"s3:GetObject",<br />"s3:ListBucket",<br />"s3:PutObject",<br />"s3:ListMultipartUploadParts",<br />"s3:AbortMultipartUpload"</pre>  |  As ações do `s3` permitem ler e gravar no recurso especificado como `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation"`, em que *MyLambdaSpillLocation* identifica o bucket de vazamento que foi definido na configuração da(s) função(ões) do Lambda invocada(s). O identificador do recurso *arn:aws:lambda:\$1:*MyAWSAcctId*:layer:*MyAthenaLambdaLayer*:\$1* é necessário somente se você usa uma camada do Lambda para criar dependências de tempo de execução personalizadas para reduzir o tamanho do artefato da função no momento da implantação. O `*` na última posição é um curinga para a versão da camada.  | 
|  <pre>"lambda:GetFunction",<br />"lambda:GetLayerVersion",<br />"lambda:InvokeFunction"</pre>  | Permite que as consultas chamem as funções do AWS Lambda especificadas no bloco Resource. Por exemplo, arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction, em que MyAthenaLambdaFunction especifica o nome da função do Lambda que será invocada. Várias funções podem ser especificadas conforme mostrado no exemplo. | 

**Example : permitir que uma entidade principal do IAM crie um conector de dados do Athena para metastore externo do Hive**  
A política a seguir é anexada aos principais do IAM, além de [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy), que concede acesso completo às ações do Athena.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:ListFunctions",
                "lambda:GetLayerVersion",
                "lambda:InvokeFunction",
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:PublishLayerVersion",
                "lambda:DeleteLayerVersion",
                "lambda:UpdateFunctionConfiguration",
                "lambda:PutFunctionConcurrency",
                "lambda:DeleteFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:111122223333: function: MyAthenaLambdaFunctionsPrefix*"
        }
    ]
}
```
 **Explicação de permissões**   
Permite que as consultas chamem as funções do AWS Lambda para as funções do AWS Lambda especificadas no bloco `Resource`. Por exemplo, `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction`, em que *MyAthenaLambdaFunction* especifica o nome da função do Lambda que será invocada. Várias funções podem ser especificadas conforme mostrado no exemplo.

# Permitir acesso da função do Lambda aos metastores externos do Hive
<a name="hive-metastore-iam-access-lambda"></a>

Para invocar uma função do Lambda em sua conta, você deve criar uma função que tenha as seguintes permissões:
+ `AWSLambdaVPCAccessExecutionRole`: uma permissão de [função de execução do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) para gerenciar interfaces de rede elásticas que conectam a função a uma VPC. Verifique se você tem um número suficiente de interfaces de rede e endereços IP disponíveis.
+ `AmazonAthenaFullAccess`: a política gerenciada [AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) concede acesso completo ao Athena.
+ Uma política do Amazon S3 para permitir que a função do Lambda grave no S3 e que o Athena leia o S3.

Por exemplo, a política a seguir define a permissão para o local de vazamento `s3:\\mybucket\spill`.

------
#### [ JSON ]

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/spill" ] } ] }
```

------

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

## Criar funções do Lambda
<a name="hive-metastore-iam-access-lambda-creating-lambda-functions"></a>

Para criar uma função do Lambda em sua conta, são necessárias as permissões de desenvolvimento de função ou a função `AWSLambdaFullAccess`. Para obter mais informações, consulte [Políticas do IAM baseadas em identidade para o AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html).

Como o Athena usa o AWS Serverless Application Repository para criar funções do Lambda, o superusuário ou administrador que cria as funções do Lambda também deve ter políticas do IAM [para permitir consultas federadas do Athena](federated-query-iam-access.md).

## Configurar permissões para operações de API de metadados e registro de catálogo
<a name="hive-metastore-iam-access-lambda-catalog-registration-and-metadata-api-operations"></a>

Para acesso de API a operações de metadados e registro de catálogo, use a [política gerenciada AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy). Se você não usar a política `AmazonAthenaFullAccess`, adicione as seguintes operações de API às políticas do Athena:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:GetDataCatalog",
                "athena:CreateDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:GetDatabase",
                "athena:ListDatabases",
                "athena:GetTableMetadata",
                "athena:ListTableMetadata"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## Chamar uma função do Lambda entre regiões
<a name="hive-metastore-iam-access-lambda-cross-region-invocation"></a>

Por padrão, o Athena invoca as funções do Lambda definidas na mesma região. Para invocar uma função do Lambda em uma Região da AWS que não é a região em que você está executando as consultas do Athena, use o ARN completo da função do Lambda. 

O exemplo a seguir mostra como um catálogo na região Europa (Frankfurt) pode especificar uma função do Lambda na região Leste dos EUA (Norte da Virgínia) para buscar dados do metastore do Hive na região Europa (Frankfurt).

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new     
```

Quando você especificar o ARN completo dessa maneira, o Athena poderá chamar a função do Lambda `external-hms-service-new` em `us-east-1` para buscar os dados do metastore do Hive de `eu-central-1`.

**nota**  
O catálogo deve estar registrado na mesma Região da AWS que você usa para executar as consultas do Athena.

## Chamar uma função do Lambda entre contas
<a name="hive-metastore-iam-access-lambda-cross-account-invocation"></a>

Às vezes, poderá ser necessário ter acesso a um metastore do Hive por meio de outra conta. Por exemplo, para executar um metastore do Hive, você poderia usar uma conta diferente da que usa para as consultas do Athena. Grupos ou equipes diferentes podem executar o metastore do Hive com contas diferentes dentro de sua VPC. Ou você pode querer acessar metadados de diferentes metastores do Hive de diferentes grupos ou equipes.

O Athena usa o [suporte do AWS Lambda ao acesso entre contas](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/) para habilitar o acesso entre contas aos metastores do Hive.

**nota**  
Observe que, normalmente, o acesso entre contas para o Athena implica no acesso entre contas para os metadados e os dados no Amazon S3.

Imagine o seguinte cenário:
+ A conta `111122223333` configura a função do Lambda `external-hms-service-new` em us-east-1 no Athena para acessar um metastore do Hive executado em um cluster do EMR.
+ A conta `111122223333` deseja permitir que a conta 444455556666 acesse os dados do metastore do Hive.

Para conceder acesso da conta `444455556666` à função do Lambda `external-hms-service-new`, a conta `111122223333` usa o comando da AWS CLI `add-permission` a seguir. O comando foi formatado para legibilidade.

```
$ aws --profile perf-test lambda add-permission
      --function-name external-hms-service-new
      --region us-east-1
      --statement-id Id-ehms-invocation2
      --action "lambda:InvokeFunction"
      --principal arn:aws:iam::444455556666:user/perf1-test
{
    "Statement": "{\"Sid\":\"Id-ehms-invocation2\",
                   \"Effect\":\"Allow\",
                   \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                   \"Action\":\"lambda:InvokeFunction\",
                   \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}"
}
```

Para verificar a permissão do Lambda, use o comando `get-policy`, como no exemplo a seguir. O comando foi formatado para legibilidade.

```
$ aws --profile perf-test lambda get-policy 
      --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new 
      --region us-east-1
{
    "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f",
    "Policy": "{\"Version\":\"2012-10-17\",		 	 	 
                \"Id\":\"default\",
                \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\",
                                \"Effect\":\"Allow\",
                                \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                                \"Action\":\"lambda:InvokeFunction\",
                                \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}"
}
```

Depois de adicionar a permissão, você poderá usar um ARN completo da função do Lambda em `us-east-1`, conforme mostrado abaixo, ao definir o catálogo `ehms`:

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new
```

Para obter informações sobre invocação entre regiões, consulte [Chamar uma função do Lambda entre regiões](#hive-metastore-iam-access-lambda-cross-region-invocation) anteriormente neste tópico.

### Conceder o acesso entre contas aos dados
<a name="hive-metastore-iam-access-lambda-granting-cross-account-access-to-data"></a>

Antes de executar consultas do Athena, você deve conceder acesso entre contas aos dados no Amazon S3. Você pode fazer isso por meio de uma das seguintes maneiras:
+ Atualize a política da lista de controle de acesso do bucket do Amazon S3 com um [ID de usuário canônico](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html).
+ Adicione o acesso entre contas à política de bucket do Amazon S3.

Por exemplo, adicione a política a seguir à política de bucket do Amazon S3 na conta `111122223333` para permitir que a conta `444455556666` leia os dados do local do Amazon S3 especificado.

------
#### [ JSON ]

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Sid": "Stmt1234567890123", "Effect":
    "Allow", "Principal": { "AWS":
        "arn:aws:iam::444455556666:user/perf1-test"
    }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*" } ]
    }
```

------

**nota**  
Talvez seja necessário conceder acesso entre contas ao Amazon S3, não apenas aos dados, mas também ao local de vazamento do Amazon S3. A função do Lambda vaza os dados excedentes para o local de vazamento quando o tamanho do objeto de resposta ultrapassa um determinado limite. Consulte o início deste tópico para obter uma política de exemplo.

No exemplo atual, após o acesso entre contas ser concedido a `444455556666,`, `444455556666` pode usar o catálogo `ehms` em sua própria `account` para consultar tabelas definidas na conta `111122223333`.

No exemplo a seguir, o perfil do SQL Workbench `perf-test-1` é para a conta `444455556666`. A consulta usa o catálogo `ehms` para acessar o metastore do Hive e os dados do Amazon S3 na conta `111122223333`.

![\[Acesso ao metastore do Hive e aos dados do Amazon S3 entre contas no SQL Workbench.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/hive-metastore-iam-access-lambda-1.png)


# Permissões necessárias para criar o conector e o catálogo do Athena
<a name="athena-catalog-access"></a>

Para invocar `CreateDataCatalog` do Athena, você deverá criar um perfil que tenha as seguintes permissões:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
  "Sid": "ECR",
  "Effect": "Allow",
  "Action": [
  "ecr:BatchGetImage",
  "ecr:GetDownloadUrlForLayer"
  ],
  "Resource": "arn:aws:ecr:*:*:repository/*"
  },
  {
  "Effect": "Allow",
  "Action": [
  "s3:GetObject",
  "glue:TagResource",
  "glue:GetConnection",
  "glue:CreateConnection",
  "glue:DeleteConnection",
  "glue:UpdateConnection",
  "serverlessrepo:CreateCloudFormationTemplate",
  "serverlessrepo:GetCloudFormationTemplate",
  "cloudformation:CreateStack",
  "cloudformation:DeleteStack",
  "cloudformation:DescribeStacks",
  "cloudformation:CreateChangeSet",
  "cloudformation:DescribeAccountLimits",
  "cloudformation:CreateStackSet",
  "cloudformation:ValidateTemplate",
  "cloudformation:CreateUploadBucket",
  "cloudformation:DescribeStackDriftDetectionStatus",
  "cloudformation:ListExports",
  "cloudformation:ListStacks",
  "cloudformation:EstimateTemplateCost",
  "cloudformation:ListImports",
  "lambda:InvokeFunction",
  "lambda:GetFunction",
  "lambda:DeleteFunction",
  "lambda:CreateFunction",
  "lambda:TagResource",
  "lambda:ListFunctions",
  "lambda:GetAccountSettings",
  "lambda:ListEventSourceMappings",
  "lambda:ListVersionsByFunction",
  "lambda:GetFunctionConfiguration",
  "lambda:PutFunctionConcurrency",
  "lambda:UpdateFunctionConfiguration",
  "lambda:UpdateFunctionCode",
  "lambda:DeleteFunctionConcurrency",
  "lambda:RemovePermission",
  "lambda:AddPermission",
  "lambda:ListTags",
  "lambda:GetAlias",
  "lambda:GetPolicy",
  "lambda:ListAliases",
  "ec2:DescribeSecurityGroups",
  "ec2:DescribeSubnets",
  "ec2:DescribeVpcs",
  "secretsmanager:ListSecrets",
  "glue:GetCatalogs"
  ],
  "Resource": "*"
  },
  {
  "Effect": "Allow",
  "Action": [
  "iam:AttachRolePolicy",
  "iam:DetachRolePolicy",
  "iam:DeleteRolePolicy",
  "iam:PutRolePolicy",
  "iam:GetRolePolicy",
  "iam:CreateRole",
  "iam:TagRole",
  "iam:DeleteRole",
  "iam:GetRole",
  "iam:PassRole",
  "iam:ListRoles",
  "iam:ListAttachedRolePolicies",
  "iam:ListRolePolicies",
  "iam:GetPolicy",
  "iam:UpdateRole"
  ],
  "Resource": [
  "arn:aws:iam::*:role/RoleName",
  "arn:aws:iam::111122223333:policy/*"
  ]
  }
  ]
  }
```

------

# Permitir acesso a consultas federadas do Athena: exemplos de política
<a name="federated-query-iam-access"></a>

Os exemplos de política de permissão neste tópico demonstram as ações permitidas necessárias e os recursos para os quais são permitidas. Examine essas políticas com atenção e modifique-as de acordo com suas necessidades antes de anexá-las às identidades do IAM.

Para obter informações sobre como anexar políticas a identidades do IAM, consulte [Adicionar e remover permissões de identidade do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) no [Guia do usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).
+  [Example policy to allow an IAM principal to run and return results using Athena Federated Query](#fed-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create a Data Source Connector](#fed-creating-iam) 

**Example : permitir que uma entidade principal do IAM execute e retorne resultados usando a consulta federada do Athena**  
A política de permissões baseadas em identidade a seguir permite ações que um usuário ou outro principal do IAM precisa para usar a consulta federada do Athena. Os principais que têm permissão para realizar essas ações podem executar consultas que especificam catálogos do Athena associados a uma origem dos dados federada.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Athena",
            "Effect": "Allow",
            "Action": [
                "athena:GetDataCatalog",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "athena:GetWorkGroup",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:111122223333:workgroup/WorkgroupName",
                "arn:aws:athena:us-east-1:111122223333:datacatalog/DataCatalogName"
            ]
        },
        {
            "Sid": "ListAthenaWorkGroups",
            "Effect": "Allow",
            "Action": "athena:ListWorkGroups",
            "Resource": "*"
        },
        {
            "Sid": "Lambda",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction"
            ]
        },
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::MyLambdaSpillBucket",
                "arn:aws:s3:::MyLambdaSpillBucket/*",
                "arn:aws:s3:::MyQueryResultsBucket",
                "arn:aws:s3:::MyQueryResultsBucket/*"
            ]
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre> "athena:GetQueryExecution", <br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StartQueryExecution",<br /> "athena:StopQueryExecution"</pre>  |  Permissões do Athena necessárias para executar consultas federadas.  | 
|  <pre> "athena:GetDataCatalog",<br /> "athena:GetQueryExecution,"<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StartQueryExecution",<br /> "athena:StopQueryExecution"</pre>  |  Permissões do Athena necessárias para executar consultas de visualizações federadas. A ação `GetDataCatalog` é necessária para exibições.  | 
|  <pre>"lambda:InvokeFunction"</pre>  | Permite que as consultas chamem as funções do AWS Lambda para as funções do AWS Lambda especificadas no bloco Resource. Por exemplo, arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction, em que MyAthenaLambdaFunction especifica o nome da função do Lambda que será invocada. Como apresentado no exemplo, é possível especificar várias funções. | 
|  <pre>"s3:AbortMultipartUpload",<br />"s3:GetBucketLocation",<br />"s3:GetObject",<br />"s3:ListBucket",<br />"s3:ListMultipartUploadParts",<br />"s3:PutObject"</pre>  |  É necessário ter as permissões `s3:ListBucket` e `s3:GetBucketLocation` para acessar o bucket de saída da consulta para entidades principais do IAM que executam `StartQueryExecution`. `s3:PutObject`, `s3:ListMultipartUploadParts` e `s3:AbortMultipartUpload` permitem gravar os resultados de consultas em todas as subpastas do bucket de resultados de consultas, conforme especificado pelo identificador de recurso `arn:aws:s3:::MyQueryResultsBucket/*`, com *MyQueryResultsBucket* indicando o bucket de resultados de consulta do Athena. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). `s3:GetObject` permite ler os resultados e o histórico de consultas para o recurso especificado como `arn:aws:s3:::MyQueryResultsBucket`, em que *MyQueryResultsBucket* é o bucket de resultados de consultas do Athena. `s3:GetObject` também permite ler o recurso especificado como `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"`, em que *MyLambdaSpillPrefix* foi especificado na configuração da(s) função(ões) do Lambda invocada(s).  | 

**Example : permitir que uma entidade principal do IAM crie um conector de origem de dados**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "iam:CreateRole",
                "lambda:GetFunctionConfiguration",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "lambda:PutFunctionConcurrency",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "lambda:ListTags",
                "iam:ListAttachedRolePolicies",
                "iam:DeleteRolePolicy",
                "lambda:DeleteFunction",
                "lambda:GetAlias",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:UpdateFunctionConfiguration",
                "iam:DeleteRole",
                "lambda:UpdateFunctionCode",
                "s3:GetObject",
                "lambda:AddPermission",
                "iam:UpdateRole",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "iam:GetRolePolicy",
                "lambda:GetPolicy"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunctionsPrefix*",
                "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*",
                "arn:aws:iam::*:role/RoleName",
                "arn:aws:iam::111122223333:policy/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateUploadBucket",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:ListExports",
                "cloudformation:ListStacks",
                "cloudformation:ListImports",
                "lambda:ListFunctions",
                "iam:ListRoles",
                "lambda:GetAccountSettings",
                "ec2:DescribeSecurityGroups",
                "cloudformation:EstimateTemplateCost",
                "ec2:DescribeVpcs",
                "lambda:ListEventSourceMappings",
                "cloudformation:DescribeAccountLimits",
                "ec2:DescribeSubnets",
                "cloudformation:CreateStackSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/aws-serverless-repository-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:111122223333:stack/serverlessrepo-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:*:transform/Serverless-*",
                "arn:aws:cloudformation:*:111122223333:stackset/aws-serverless-repository-MyCFStackPrefix*:*",
                "arn:aws:cloudformation:*:111122223333:stackset/serverlessrepo-MyCFStackPrefix*:*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "serverlessrepo:*",
            "Resource": "arn:aws:serverlessrepo:*:*:applications/*"
        },
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/*"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre>"lambda:CreateFunction",<br />"lambda:ListVersionsByFunction",<br />"lambda:GetFunctionConfiguration",<br />"lambda:PutFunctionConcurrency",<br />"lambda:ListTags",<br />"lambda:DeleteFunction",<br />"lambda:GetAlias",<br />"lambda:InvokeFunction",<br />"lambda:GetFunction",<br />"lambda:ListAliases",<br />"lambda:UpdateFunctionConfiguration",<br />"lambda:UpdateFunctionCode",<br />"lambda:AddPermission",<br />"lambda:DeleteFunctionConcurrency",<br />"lambda:RemovePermission",<br />"lambda:GetPolicy"<br />"lambda:GetAccountSettings",<br />"lambda:ListFunctions",<br />"lambda:ListEventSourceMappings",<br /></pre>  |  Permita a criação e gerenciamento de funções do Lambda listadas como recursos. No exemplo, um prefixo de nome é usado no identificador de recurso `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*`, onde `MyAthenaLambdaFunctionsPrefix` é um prefixo compartilhado usado no nome de um grupo de funções do Lambda para que não precisem ser especificadas individualmente como recursos. É possível especificar um ou mais recursos de função do Lambda.  | 
|  <pre>"s3:GetObject"</pre>  | Permite a leitura de um bucket de que o AWS Serverless Application Repository precisa conforme especificado pelo identificador de recurso arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1. Esse bucket pode ser específico para sua conta. | 
|  <pre>"cloudformation:*"</pre>  |  Permite a criação e o gerenciamento de pilhas especificadas do CloudFormation pelo recurso `MyCFStackPrefix`. Essas pilhas e conjuntos de pilhas são como o AWS Serverless Application Repository implanta conectores e UDFs.  | 
|  <pre>"serverlessrepo:*"</pre>  | Permite pesquisar, exibir, publicar e atualizar aplicativos no AWS Serverless Application Repository, especificados pelo identificador de recurso arn:aws:serverlessrepo:\$1:\$1:applications/\$1. | 
|  <pre>"ecr:BatchGetImage",<br />"ecr:GetDownloadUrlForLayer"</pre>  |  Permite que a função do Lambda criada acesse a imagem do ECR do conector da federação.  | 

# Permitir acesso a UDFs do Athena: exemplos de políticas
<a name="udf-iam-access"></a>

Os exemplos de política de permissão neste tópico demonstram as ações permitidas necessárias e os recursos para os quais são permitidas. Examine essas políticas com atenção e modifique-as de acordo com seus requisitos antes de anexar políticas de permissões semelhantes às identidades do IAM.
+  [Example Policy to Allow an IAM Principal to Run and Return Queries that Contain an Athena UDF Statement](#udf-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create an Athena UDF](#udf-creating-iam) 

**Example : permitir que uma entidade principal do IAM execute e retorne consultas com uma instrução de UDF do Athena**  
A seguinte política de permissões baseada em identidade permite ações que um usuário ou outro principal do IAM precisa para executar consultas que usam instruções de UDF do Athena.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "lambda:InvokeFunction",
                "athena:GetQueryResults",
                "s3:ListMultipartUploadParts",
                "athena:GetWorkGroup",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:athena:*:MyAWSAcctId:workgroup/MyAthenaWorkGroup",
                "arn:aws:s3:::MyQueryResultsBucket/*",
                "arn:aws:lambda:*:MyAWSAcctId:function:OneAthenaLambdaFunction",
                "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "athena:ListWorkGroups",
            "Resource": "*"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre>"athena:StartQueryExecution",<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StopQueryExecution",<br /> "athena:GetQueryExecution",<br /></pre>  |  Permissões do Athena necessárias para executar consultas no grupo de trabalho `MyAthenaWorkGroup`.  | 
|  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:AbortMultipartUpload"</pre>  |  `s3:PutObject` e `s3:AbortMultipartUpload` permitem gravar os resultados de consultas em todas as subpastas do bucket de resultados de consultas, conforme especificado pelo identificador do recurso `arn:aws:s3:::MyQueryResultsBucket/*`, em que *MyQueryResultsBucket* é o bucket de resultados de consultas do Athena. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). `s3:GetObject` permite ler os resultados e o histórico de consultas para o recurso especificado como `arn:aws:s3:::MyQueryResultsBucket`, em que *MyQueryResultsBucket* é o bucket de resultados de consultas do Athena. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). `s3:GetObject` também permite ler o recurso especificado como `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"`, em que *MyLambdaSpillPrefix* foi especificado na configuração da(s) função(ões) do Lambda invocada(s).  | 
|  <pre>"lambda:InvokeFunction"</pre>  | Permite que as consultas chamem as funções do AWS Lambda especificadas no bloco Resource. Por exemplo, arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction, em que MyAthenaLambdaFunction especifica o nome da função do Lambda que será invocada. Várias funções podem ser especificadas conforme mostrado no exemplo. | 

**Example : permitir que uma entidade principal do IAM crie uma UDF do Athena**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "iam:CreateRole",
                "lambda:GetFunctionConfiguration",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "lambda:PutFunctionConcurrency",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "lambda:ListTags",
                "iam:ListAttachedRolePolicies",
                "iam:DeleteRolePolicy",
                "lambda:DeleteFunction",
                "lambda:GetAlias",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:UpdateFunctionConfiguration",
                "iam:DeleteRole",
                "lambda:UpdateFunctionCode",
                "s3:GetObject",
                "lambda:AddPermission",
                "iam:UpdateRole",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "iam:GetRolePolicy",
                "lambda:GetPolicy"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunctionsPrefix*",
                "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*",
                "arn:aws:iam::*:role/RoleName",
                "arn:aws:iam::111122223333:policy/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateUploadBucket",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:ListExports",
                "cloudformation:ListStacks",
                "cloudformation:ListImports",
                "lambda:ListFunctions",
                "iam:ListRoles",
                "lambda:GetAccountSettings",
                "ec2:DescribeSecurityGroups",
                "cloudformation:EstimateTemplateCost",
                "ec2:DescribeVpcs",
                "lambda:ListEventSourceMappings",
                "cloudformation:DescribeAccountLimits",
                "ec2:DescribeSubnets",
                "cloudformation:CreateStackSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/aws-serverless-repository-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:111122223333:stack/serverlessrepo-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:*:transform/Serverless-*",
                "arn:aws:cloudformation:*:111122223333:stackset/aws-serverless-repository-MyCFStackPrefix*:*",
                "arn:aws:cloudformation:*:111122223333:stackset/serverlessrepo-MyCFStackPrefix*:*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "serverlessrepo:*",
            "Resource": "arn:aws:serverlessrepo:*:*:applications/*"
        },
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/*"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre>"lambda:CreateFunction",<br />"lambda:ListVersionsByFunction",<br />"lambda:GetFunctionConfiguration",<br />"lambda:PutFunctionConcurrency",<br />"lambda:ListTags",<br />"lambda:DeleteFunction",<br />"lambda:GetAlias",<br />"lambda:InvokeFunction",<br />"lambda:GetFunction",<br />"lambda:ListAliases",<br />"lambda:UpdateFunctionConfiguration",<br />"lambda:UpdateFunctionCode",<br />"lambda:AddPermission",<br />"lambda:DeleteFunctionConcurrency",<br />"lambda:RemovePermission",<br />"lambda:GetPolicy"<br />"lambda:GetAccountSettings",<br />"lambda:ListFunctions",<br />"lambda:ListEventSourceMappings",<br /></pre>  |  Permita a criação e gerenciamento de funções do Lambda listadas como recursos. No exemplo, um prefixo de nome foi usado no identificador do recurso `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*`, em que *MyAthenaLambdaFunctionsPrefix* é um prefixo compartilhado usado no nome do grupo de funções do Lambda de modo que elas não tenham de ser especificadas individualmente como recursos. É possível especificar um ou mais recursos de função do Lambda.  | 
|  <pre>"s3:GetObject"</pre>  | Permite a leitura de um bucket de que o AWS Serverless Application Repository precisa conforme especificado pelo identificador de recurso arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1. | 
|  <pre>"cloudformation:*"</pre>  |  Permite a criação e o gerenciamento de pilhas especificadas do CloudFormation pelo recurso *MyCFStackPrefix*. Essas pilhas e conjuntos de pilhas são como o AWS Serverless Application Repository implanta conectores e UDFs.  | 
|  <pre>"serverlessrepo:*"</pre>  | Permite pesquisar, exibir, publicar e atualizar aplicativos no AWS Serverless Application Repository, especificados pelo identificador de recurso arn:aws:serverlessrepo:\$1:\$1:applications/\$1. | 

# Permitir acesso a ML com o Athena
<a name="machine-learning-iam-access"></a>

Os principais do IAM que executam consultas de ML do Athena devem ter permissão para executar a ação `sagemaker:invokeEndpoint` para os endpoints do SageMaker que eles usam. Inclua uma instrução de política semelhante à seguinte em políticas de permissões baseadas em identidade anexadas a identidades de usuário. Além disso, anexe [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy), que concede acesso completo às ações do Athena, ou uma política em linha modificada que permita um subconjunto de ações.

Substitua `arn:aws:sagemaker:region:AWSAcctID:ModelEndpoint` no exemplo pelo ARN ou ARNs de endpoints do modelo a serem usados em consultas. Para obter mais informações, consulte [Actions, resources, and condition keys for SageMaker AI](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html) na *Referência de autorização do serviço*.

```
{
            "Effect": "Allow",
            "Action": [
                "sagemaker:invokeEndpoint"
            ],
            "Resource": "arn:aws:sagemaker:us-west-2:123456789012:workteam/public-crowd/default"
}
```

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

# Habilitar o acesso federado à API do Athena
<a name="access-federation-saml"></a>

Esta seção aborda o acesso federado que permite que um usuário ou aplicação cliente na sua organização chame operações de API do Amazon Athena. Nesse caso, os usuários da sua organização não têm acesso direto ao Athena. Em vez disso, você gerencia as credenciais do usuário fora da AWS no Microsoft Active Directory. O Active Directory é compatível com [SAML 2.0](https://wiki.oasis-open.org/security) (Security Assertion Markup Language 2.0).

Para autenticar usuários nesse cenário, use o driver JDBC ou ODBC com suporte a SAML.2.0 para acessar o Active Directory Federation Services (ADFS) 3.0 e permitir que uma aplicação cliente chame as operações de API do Athena.

Para obter mais informações sobre o suporte ao SAML 2.0 na AWS, consulte [Sobre a federação baseada em SAML 2.0](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) no *Guia do usuário do IAM*. 

**nota**  
O acesso federado à API do Athena é permitido para um determinado tipo de provedor de identidade (IdP), o Active Directory Federation Service (ADFS 3.0), que faz parte do Windows Server. O acesso federado não é compatível com o recurso de propagação de identidade confiável do Centro de Identidade do IAM. O acesso é estabelecido por meio das versões dos drivers JDBC ou ODBC que oferecem suporte ao SAML 2.0. Para obter informações, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

**Topics**
+ [

## Antes de começar
](#access-federation-before-you-begin)
+ [

## Entender o processo de autenticação
](#access-federation-diagram)
+ [

## Procedimento: habilitar acesso federado baseado em SAML à API do Athena
](#access-federation-procedure)

## Antes de começar
<a name="access-federation-before-you-begin"></a>

 Antes de começar, conclua os seguintes pré-requisitos: 
+ Dentro da sua organização, instale e configure o ADFS 3.0 como seu IdP.
+ Instale e configure as versões mais recentes disponíveis dos drivers JDBC ou ODBC nos clientes usados para acessar o Athena. O driver deve incluir suporte para acesso federado compatível com o SAML 2.0. Para obter informações, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

## Entender o processo de autenticação
<a name="access-federation-diagram"></a>

O diagrama a seguir ilustra o processo de autenticação do acesso federado à API do Athena.

![\[O diagrama de acesso federado à API do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/athena-saml-based-federation.png)


1. Um usuário na sua organização usa um aplicativo cliente com o driver JDBC ou ODBC para solicitar a autenticação do IdP da sua organização. O IdP é ADFS 3.0.

1. O IdP autentica o usuário no Active Directory, ou seja, o armazenamento de identidades da sua organização.

1. O IdP cria uma declaração do SAML com informações sobre o usuário e a envia para o aplicativo cliente por meio do driver JDBC ou ODBC.

1. O driver JDBC ODBC chama a operação da API AWS Security Token Service [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) e passa os seguintes parâmetros:
   + O ARN do provedor SAML
   + O ARN da função a ser assumida
   + A declaração do SAML do IdP

   Para obter mais informações, consulte [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) na *Referência de API do AWS Security Token Service*.

1. A resposta da API para o aplicativo cliente por meio do driver JDBC ou ODBC inclui credenciais de segurança temporárias.

1. A aplicação cliente usa as credenciais de segurança temporárias para chamar as operações de API do Athena, permitindo que seus usuários acessem as operações de API do Athena.

## Procedimento: habilitar acesso federado baseado em SAML à API do Athena
<a name="access-federation-procedure"></a>

Esse procedimento estabelece uma confiança entre o IdP da sua organização e sua conta da AWS para permitir acesso federado baseado em SAML à operação de API do Amazon Athena.

**Para habilitar o acesso federado à API do Athena:**

1. Em sua organização, registre a AWS como um provedor de serviços (SP) em seu IdP. Esse processo é conhecido como *confiança da parte dependente*. Para obter mais informações, consulte [Configuração do IdP SAML 2.0 com objeto de confiança de terceira parte confiável](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html) no *Guia do usuário do IAM*. Como parte dessa tarefa, execute estas etapas:

   1. Obtenha o documento de metadados do SAML de amostra deste URL: [https://signin.aws.amazon.com/static/saml-metadata.xml](https://signin.aws.amazon.com/static/saml-metadata.xml).

   1. No IdP da sua organização (ADFS), gere um arquivo XML de metadados equivalente que descreva o seu IdP como um provedor de identidade para a AWS. O arquivo de metadados deve incluir o nome do emissor, uma data de criação, uma data de expiração e chaves que a AWS usa para validar as respostas de autenticação (declarações) da sua organização. 

1. No console do IAM, crie uma entidade de provedor de identidade do SAML. Para obter mais informações, consulte [Criação de provedores de identidade SAML do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) no *Guia do usuário do IAM*. Como parte dessa etapa, realize as seguintes ações: 

   1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Faça upload do documento de metadados SAML produzido pelo IdP (ADFS) na Etapa 1 deste procedimento. 

1. No console do IAM, crie uma ou mais funções do IAM para seu IdP. Para obter mais informações, consulte [Criar uma função para um provedor de identidade de terceiros (federação)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html) no *Guia do usuário do IAM*. Como parte dessa etapa, realize as seguintes ações: 
   + Na política de permissões da função, estabeleça o que os usuários da sua organização têm permissão para fazer na AWS. 
   + Na política de confiança da função, defina como principal a entidade do provedor do SAML que você criou na Etapa 2 deste procedimento. 

   Isso estabelece uma relação de confiança entre sua organização e a AWS.

1. No IdP da sua organização (ADFS), defina declarações que mapeiam usuários ou grupos na sua organização para as funções do IAM. O mapeamento de usuários e grupos para as funções do IAM também é conhecido como *regra de declaração*. Observe que usuários e grupos diferentes na sua organização podem ser mapeados para funções do IAM distintas. 

   Para obter informações sobre como configurar o mapeamento no ADFS, consulte a publicação do blog: [Habilitação de federação na AWS usando Windows Active Directory, ADFS e SAML 2.0](https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/).

1. Instale e configure o driver JDBC ou ODBC com o suporte a SAML 2.0. Para obter informações, consulte [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

1. Especifique a string de conexão do seu aplicativo para o driver JDBC ou ODBC. Para obter informações sobre a string de conexão que sua aplicação deve usar, consulte o tópico *“Using the Active Directory Federation Services (ADFS) Credentials Provider”* no *Guia de instalação e configuração do driver JDBC*, ou um tópico similar no *Guia de instalação e configuração do driver ODBC*, disponíveis para download em PDF nos tópicos [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md) e [Conectar ao Amazon Athena com ODBC](connect-with-odbc.md).

   A seguir, veja um resumo de alto nível de como configurar a string de conexão para os drivers:

   1. Em `AwsCredentialsProviderClass configuration`, defina o `com.simba.athena.iamsupport.plugin.AdfsCredentialsProvider` para indicar que você deseja usar a autenticação baseada em SAML 2.0 por meio do IdP do ADFS. 

   1. Em `idp_host`, forneça o nome de host do servidor do IdP do ADFS.

   1. Em `idp_port`, informe o número da porta que o IdP do ADFS identifica a solicitação de declaração do SAML.

   1. Em `UID` e `PWD`, forneça as credenciais de usuário do domínio do AD. Ao usar o driver no Windows, se `UID` e `PWD` não forem fornecidos, o driver tentará obter as credenciais de usuário do usuário conectado no computador com Windows.

   1. Opcionalmente, defina `ssl_insecure` para `true`. Nesse caso, o driver não verifica a autenticidade do certificado SSL para o servidor do IdP do ADFS. Será necessário definir essa opção como `true` se o certificado SSL do IdP do ADFS não tiver sido configurado como confiável pelo driver.

   1. Para habilitar o mapeamento de um usuário ou grupo de domínio do Active Directory para uma ou mais funções do IAM (como mencionado na etapa 4 deste procedimento), em `preferred_role`, na conexão do JDBC ou do ODBC, especifique a função do IAM (ARN) a ser assumida. Especificar o `preferred_role` é opcional. Ele é útil se a função não for a primeira a ser listada na regra de declaração.

   As seguintes ações ocorrem como resultado desse procedimento:

   1. O driver JDBC ou ODBC chama a API AWS STS [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) e transmite as declarações, conforme mostrado na etapa 4 do [diagrama de arquitetura](#access-federation-diagram). 

   1. AWSA certifica-se de que a solicitação para assumir a função vem do IdP referenciado na entidade do provedor do SAML. 

   1. Se a solicitação for bem-sucedida, a operação da API [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) do AWS STS retornará um conjunto de credenciais de segurança temporárias, que a aplicação cliente usa para fazer solicitações assinadas ao Athena. 

      Sua aplicação agora tem informações sobre o usuário atual e pode acessar o Athena de forma programática. 

# Registrar em log e monitorar o Athena
<a name="security-logging-monitoring"></a>

Para detectar incidentes, receber alertas quando há incidentes e responder a eles, use estas opções com o Amazon Athena: 
+ **Monitorar o Athena com AWS CloudTrail**: o [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) oferece um registro das ações executadas por um usuário, uma função ou um AWS service (Serviço da AWS) no Athena. Ele captura as chamadas do console do Athena e as chamadas de código para as operações de API do Athena como eventos. Dessa forma, você pode determinar a solicitação feita ao Athena, o endereço IP do qual a solicitação foi feita, quem fez a solicitação, quando ela foi feita e outros detalhes. Para obter mais informações, consulte [Registrar em log as chamadas de API do Amazon Athena com o AWS CloudTrail](monitor-with-cloudtrail.md).

  Você também pode usar o Athena para consultar os arquivos de log do CloudTrail para o Athena e também para outros Serviços da AWS. Para obter mais informações, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md).
+ **Monitorar o uso do Athena com o CloudTrail e o Amazon Quick**: o [Amazon Quick](https://aws.amazon.com/quicksight/) é um serviço de business intelligence totalmente gerenciado e com tecnologia de nuvem que permite criar painéis interativos que sua organização pode acessar de qualquer dispositivo. Para obter um exemplo de solução que usa o CloudTrail e o Amazon Quick para monitorar o uso do Athena, consulte a postagem no blog AWS Big Data: [How Realtor.com monitors Amazon Athena usage with AWS CloudTrail and Quick](https://aws.amazon.com/blogs/big-data/analyzing-amazon-athena-usage-by-teams-within-a-real-estate-company/).
+ **Usar o Amazon EventBridge com o Athena**: a Amazon EventBridge oferece uma transmissão quase em tempo real dos eventos do sistema que descrevem as alterações nos recursos da AWS. O EventBridge reconhece essas alterações operacionais logo que acontecem, responde a elas e executa a ação corretiva conforme necessário, enviando mensagens para responder ao ambiente, ativando funções, fazendo alterações e capturando informações de estado. Os eventos são emitidos com base no melhor esforço. Para obter mais informações, consulte [Começar a usar o Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) no *Manual do usuário do Amazon EventBridge*.
+ **Usar grupos de trabalho para separar usuários, equipes, aplicações ou workloads, definir os limites e controlar os custos de consulta**: você pode exibir as métricas relacionadas à consulta no Amazon CloudWatch, controlar os custos de consulta com a configuração de limites para a quantidade de dados verificados, criar limites e acionar ações, como alarmes do Amazon SNS, quando esses limites são violados. Para obter mais informações, consulte [Usar grupos de trabalho para controlar o acesso a consultas e os custos](workgroups-manage-queries-control-costs.md). Use as permissões do IAM no nível do recurso para controlar o acesso a um determinado grupo de trabalho. Para obter mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md) e [Usar o CloudWatch e o EventBridge para monitorar as consultas e controlar os custos](workgroups-control-limits.md).

**Topics**
+ [

# Registrar em log as chamadas de API do Amazon Athena com o AWS CloudTrail
](monitor-with-cloudtrail.md)

# Registrar em log as chamadas de API do Amazon Athena com o AWS CloudTrail
<a name="monitor-with-cloudtrail"></a>

O Athena é integrado ao AWS CloudTrail, um serviço que fornece um registro das ações realizadas por um usuário, uma função ou um AWS service (Serviço da AWS) no Athena. 

O CloudTrail captura todas as chamadas de API para o Athena como eventos. As chamadas capturadas incluem as chamadas do console do Athena e as chamadas de código para as operações de API do Athena. Se você criar uma trilha, poderá habilitar a entrega contínua de eventos do CloudTrail para um bucket do Amazon S3, incluindo os eventos do Athena. Se você não configurar uma trilha, ainda poderá visualizar os eventos mais recentes no console do CloudTrail no **Histórico de eventos**. 

Usando as informações coletadas pelo CloudTrail, é possível determinar a solicitação feita para o Athena, o endereço IP do qual a solicitação foi feita, quem fez a solicitação, quando ela foi feita e outros detalhes. 

Para saber mais sobre o CloudTrail, consulte o [Guia do usuário do AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/).

Você pode usar o Athena para consultar arquivos de log do CloudTrail do próprio Athena e de outros Serviços da AWS. Para obter mais informações, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md), [Hive JSON SerDe](hive-json-serde.md) e a publicação no blog de big data da AWS: [Usar as instruções CTAS com o Amazon Athena para reduzir custos e melhorar a performance](https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/) (em inglês), que usa o CloudTrail para fornecer insights sobre o uso do Athena.

## Informações sobre o Athena no CloudTrail
<a name="athena-info-in-cloudtrail"></a>

O CloudTrail é habilitado em sua conta da Amazon Web Services quando ela é criada. Quando ocorre uma atividade no Athena, ela é registrada em um evento do CloudTrail com outros eventos de serviços da AWS no **Event history** (Histórico de eventos). Você pode visualizar, pesquisar e baixar os eventos recentes em sua conta da Amazon Web Services. Para saber mais, consulte [Viewing events with CloudTrail event history](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html). 

Para obter um registro contínuo dos eventos na sua conta da Amazon Web Services, incluindo os eventos do Athena, crie uma trilha. Uma *trilha* permite que o CloudTrail entregue arquivos de log a um bucket do Amazon S3. Por padrão, quando você cria uma trilha no console, ela é aplicada a todas as Regiões da AWS. A trilha loga eventos de todas as Regiões na partição da AWS e entrega os arquivos de log para o bucket do Amazon S3 especificado por você. Além disso, você pode configurar outros Serviços da AWS para analisar melhor e agir com base nos dados de eventos coletados nos logs do CloudTrail. Para obter mais informações, consulte as informações a seguir. 
+ [Visão geral da criação de uma trilha](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Serviços e integrações compatíveis com o CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [Configuração notificações do Amazon SNS para o CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [Receber arquivos de log do CloudTrail de várias regiões](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html) e [Receber arquivos de log do CloudTrail de várias contas](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

Todas as ações do Athena são registradas pelo CloudTrail e documentadas na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Por exemplo, as chamadas às ações [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) e [GetQueryResults](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) geram entradas nos arquivos de log do CloudTrail.

Cada entrada de log ou evento contém informações sobre quem gerou a solicitação. As informações de identidade ajudam a determinar: 
+ Se a solicitação foi feita com credenciais de usuário-raiz ou usuário do AWS Identity and Access Management (IAM).
+ Se a solicitação foi feita com credenciais de segurança temporárias de um perfil ou de um usuário federado.
+ Se a solicitação foi feita por outro AWS service (Serviço da AWS).

Para saber mais, consulte [Elemento userIdentity do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html).

## Entender as entradas de arquivo de log do Athena
<a name="understanding-ate-log-file-entries"></a>

Uma trilha é uma configuração que permite a entrega de eventos como arquivos de log a um bucket Amazon S3 especificado. Os arquivos de log do CloudTrail contêm uma ou mais entradas de log. Um evento representa uma única solicitação de qualquer fonte, e inclui informações sobre a ação solicitada, data e hora da ação, parâmetros da solicitação e assim por diante. Os arquivos de log do CloudTrail não são um rastreamento de pilha ordenada de chamadas de API pública, portanto, não são exibidos em uma ordem específica. 

**nota**  
Para evitar a divulgação não intencional de informações sensíveis, a entrada `queryString` nos logs `StartQueryExecution` e `CreateNamedQuery` tem um valor de `***OMITTED***`. Isso faz parte do design. Para acessar a string de consulta real, você pode usar a API [GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) do Athena e transmitir o valor de `responseElements.queryExecutionId` do log do CloudTrail. 

Os seguintes exemplos demonstram entradas de log do CloudTrail para:
+  [StartQueryExecution (bem-sucedido)](#startqueryexecution-successful) 
+  [StartQueryExecution (falha)](#startqueryexecution-failed) 
+  [CreateNamedQuery](#createnamedquery) 

### StartQueryExecution (êxito)
<a name="startqueryexecution-successful"></a>

```
{
 "eventVersion":"1.05",
 "userIdentity":{
    "type":"IAMUser",
    "principalId":"EXAMPLE_PRINCIPAL_ID",
    "arn":"arn:aws:iam::123456789012:user/johndoe",
    "accountId":"123456789012",
    "accessKeyId":"EXAMPLE_KEY_ID",
    "userName":"johndoe"
 },
 "eventTime":"2017-05-04T00:23:55Z",
 "eventSource":"athena.amazonaws.com",
 "eventName":"StartQueryExecution",
 "awsRegion":"us-east-1",
 "sourceIPAddress":"77.88.999.69",
 "userAgent":"aws-internal/3",
 "requestParameters":{
    "clientRequestToken":"16bc6e70-f972-4260-b18a-db1b623cb35c",
    "resultConfiguration":{
       "outputLocation":"s3://amzn-s3-demo-bucket/test/"
    },
    "queryString":"***OMITTED***"
 },
 "responseElements":{
    "queryExecutionId":"b621c254-74e0-48e3-9630-78ed857782f9"
 },
 "requestID":"f5039b01-305f-11e7-b146-c3fc56a7dc7a",
 "eventID":"c97cf8c8-6112-467a-8777-53bb38f83fd5",
 "eventType":"AwsApiCall",
 "recipientAccountId":"123456789012"
}
```

### StartQueryExecution (falha)
<a name="startqueryexecution-failed"></a>

```
{
 "eventVersion":"1.05",
 "userIdentity":{
  "type":"IAMUser",
  "principalId":"EXAMPLE_PRINCIPAL_ID",
  "arn":"arn:aws:iam::123456789012:user/johndoe",
  "accountId":"123456789012",
  "accessKeyId":"EXAMPLE_KEY_ID",
  "userName":"johndoe"
  },
 "eventTime":"2017-05-04T00:21:57Z",
 "eventSource":"athena.amazonaws.com",
 "eventName":"StartQueryExecution",
 "awsRegion":"us-east-1",
 "sourceIPAddress":"77.88.999.69",
 "userAgent":"aws-internal/3",
 "errorCode":"InvalidRequestException",
 "errorMessage":"Invalid result configuration. Should specify either output location or result configuration",
 "requestParameters":{
  "clientRequestToken":"ca0e965f-d6d8-4277-8257-814a57f57446",
  "queryString":"***OMITTED***"
  },
 "responseElements":null,
 "requestID":"aefbc057-305f-11e7-9f39-bbc56d5d161e",
 "eventID":"6e1fc69b-d076-477e-8dec-024ee51488c4",
 "eventType":"AwsApiCall",
 "recipientAccountId":"123456789012"
}
```

### CreateNamedQuery
<a name="createnamedquery"></a>

```
{
  "eventVersion":"1.05",
  "userIdentity":{
     "type":"IAMUser",
     "principalId":"EXAMPLE_PRINCIPAL_ID",
     "arn":"arn:aws:iam::123456789012:user/johndoe",
     "accountId":"123456789012",
     "accessKeyId":"EXAMPLE_KEY_ID",
     "userName":"johndoe"
  },
  "eventTime":"2017-05-16T22:00:58Z",
  "eventSource":"athena.amazonaws.com",
  "eventName":"CreateNamedQuery",
  "awsRegion":"us-west-2",
  "sourceIPAddress":"77.88.999.69",
  "userAgent":"aws-cli/1.11.85 Python/2.7.10 Darwin/16.6.0 botocore/1.5.48",
  "requestParameters":{
     "name":"johndoetest",
     "queryString":"***OMITTED***",
     "database":"default",
     "clientRequestToken":"fc1ad880-69ee-4df0-bb0f-1770d9a539b1"
     },
  "responseElements":{
     "namedQueryId":"cdd0fe29-4787-4263-9188-a9c8db29f2d6"
     },
  "requestID":"2487dd96-3a83-11e7-8f67-c9de5ac76512",
  "eventID":"15e3d3b5-6c3b-4c7c-bc0b-36a8dd95227b",
  "eventType":"AwsApiCall",
  "recipientAccountId":"123456789012"
},
```

# Validação de conformidade
<a name="security-compliance-validation"></a>

Auditores de terceiros avaliam a segurança e a conformidade como parte de vários programas de conformidade da AWS. Isso inclui SOC, PCI, FedRAMP e outros.

Para obter uma lista dos Serviços da AWS no escopo de programas de conformidade específicos, consulte [Serviços da AWS no escopo por programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/). Para obter informações gerais, consulte [Programas de conformidade da AWS](https://aws.amazon.com/compliance/programs/).

É possível baixar relatórios de auditoria de terceiros usando o AWS Artifact. Para obter mais informações, consulte [Baixar os relatórios no AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html).

Sua responsabilidade de conformidade durante o uso é determinada pela confidencialidade dos seus dados, pelos objetivos de conformidade da sua empresa e pelos regulamentos e leis aplicáveis. A AWS fornece os recursos a seguir para ajudar com a conformidade:
+ [Guias de início rápido de segurança e conformidade](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance): esses guias de implantação abordam as considerações de arquitetura e fornecem etapas para a implantação de ambientes de linha de base concentrados em compatibilidade e segurança na AWS.
+ [Arquitetura para segurança e conformidade com HIPAA na Amazon Web Services](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html): este whitepaper descreve como as empresas podem usar a AWS para criar aplicações em conformidade com os padrões HIPAA.
+ [Recursos de compatibilidade da AWS](https://aws.amazon.com/compliance/resources/): essa coleção de manuais e guias pode ser aplicável a seu setor e local.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html): esse AWS service (Serviço da AWS) avalia até que ponto suas configurações de recursos atendem adequadamente às práticas internas e às diretrizes e regulamentações do setor.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html): esse AWS service (Serviço da AWS) fornece uma visão abrangente do estado de sua segurança na AWS que ajuda você a conferir sua conformidade com padrões e práticas recomendadas de segurança do setor.

# Resiliência no Athena
<a name="security-resilience"></a>

A infraestrutura global da AWS se baseia em Regiões da AWS e zonas de disponibilidade. A Regiões da AWS oferece várias zonas de disponibilidade separadas e isoladas fisicamente que são conectadas com baixa latência, altas taxas de throughput e em redes altamente redundantes. Com as Zonas de Disponibilidade, é possível projetar e operar aplicações e bancos de dados que executem o failover automaticamente entre as Zonas de Disponibilidade sem interrupção. As zonas de disponibilidade são mais altamente disponíveis, tolerantes a falhas e escaláveis que uma ou várias infraestruturas de data center tradicionais. 

Para obter mais informações sobre Regiões da AWS e zonas de disponibilidade, consulte [Infraestrutura global da AWS](https://aws.amazon.com/about-aws/global-infrastructure/).

Além da infraestrutura global da AWS, oferecemos vários atributos para ajudar a oferecer suporte às suas necessidades de resiliência de dados e backup.

O Athena é sem servidor e, portanto, não há infraestrutura para configurar ou gerenciar. O Athena é altamente disponível e executa consultas usando recursos de computação em várias zonas de disponibilidade, encaminhando as consultas de forma automática e adequada se uma zona de disponibilidade específica estiver inacessível. O Athena usa o Amazon S3 como seu armazenamento de dados subjacente, o que torna os dados altamente disponíveis e duráveis. O Amazon S3 dispõe de uma infraestrutura durável para armazenar dados importantes e foi criado para oferecer durabilidade dos objetos de 99,999999999%. Seus dados são armazenados com redundância em várias instalações e diversos dispositivos em cada instalação.

# Segurança da infraestrutura no Athena
<a name="security-infrastructure"></a>

Por ser um serviço gerenciado, é protegido pela segurança da rede global da AWS. Para saber mais sobre serviços de segurança da AWS e como a AWS protege a infraestrutura, consulte [Segurança na Nuvem AWS](https://aws.amazon.com/security/). Para projetar seu ambiente da AWS usando as práticas recomendadas de segurança da infraestrutura, consulte [Proteção de Infraestrutura](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) em *Pilar de Segurança: AWS Well‐Architected Framework*.

Você usa chamadas de API publicadas pela AWS para acessar por meio da rede. Os clientes devem oferecer compatibilidade com:
+ Transport Layer Security (TLS). Exigimos TLS 1.2 e recomendamos TLS 1.3.
+ Conjuntos de criptografia com perfect forward secrecy (PFS) como DHE (Ephemeral Diffie-Hellman) ou ECDHE (Ephemeral Elliptic Curve Diffie-Hellman). A maioria dos sistemas modernos, como Java 7 e versões posteriores, comporta esses modos.

Use as políticas do IAM para restringir o acesso às operações do Athena. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Manual do usuário do IAM*.

As [políticas gerenciadas](security-iam-awsmanpol.md) do Athena são fáceis de usar e atualizadas automaticamente com as ações necessárias de acordo com o desenvolvimento do serviço. As políticas em linha e gerenciadas pelo cliente podem ser ajustadas especificando nelas ações mais granulares do Athena. Conceda o acesso adequado ao local dos dados do Amazon S3. Para obter informações detalhadas e conhecer cenários para a concessão de acesso ao Amazon S3, consulte [Demonstrações de exemplo: gerenciar o acesso](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html) no *Guia do desenvolvedor do Amazon Simple Storage Service*. Para obter mais informações e um exemplo das ações do Amazon S3 que devem ser permitidas, consulte o exemplo de política de bucket em [Acesso entre contas](cross-account-permissions.md). 

**Topics**
+ [

# Conectar-se ao Amazon Athena usando um endpoint da VPC de interface
](interface-vpc-endpoint.md)

# Conectar-se ao Amazon Athena usando um endpoint da VPC de interface
<a name="interface-vpc-endpoint"></a>

Você pode melhorar a postura de segurança da sua VPC usando um [endpoint da VPC de interface (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html) e um [endpoint da VPC do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html) em sua nuvem privada virtual (VPC). Um endpoint da VPC de interface melhora a segurança ao oferecer controle sobre quais destinos podem ser alcançados de dentro da sua VPC. Cada endpoint da VPC é representado por uma ou mais [interfaces de rede elástica](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) (ENIs) com endereços IP privados nas sub-redes da VPC.

O endpoint da VPC de interface conecta sua VPC diretamente ao Athena sem um gateway da Internet, um dispositivo NAT, uma conexão VPN ou uma conexão Direct Connect. Não é necessário que as instâncias na sua VPC tenham endereços IP públicos para se comunicarem com a API do Athena.

Para usar o Athena por meio da VPC, você deve se conectar de uma instância que esteja dentro da VPC ou conectar sua rede privada à VPC usando o Amazon Virtual Private Network (VPN) ou uma Direct Connect. Para obter informações sobre o Amazon VPN, consulte [Conexões VPN](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html) no *Guia do usuário do Amazon Virtual Private Cloud*. Para obter informações sobre o AWS Direct Connect, consulte [Creating a connection](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html) (Criação de uma conexão) no *Guia do usuário do Direct Connect*.

O Athena aceita endpoints da VPC em todas as Regiões da AWS onde o [Amazon VPC](https://docs.aws.amazon.com/general/latest/gr/rande.html#vpc_region) e o [Athena](https://docs.aws.amazon.com/general/latest/gr/rande.html#athena) estão disponíveis.

É possível criar um endpoint da VPC de interface para se conectar ao Athena usando os comandos do Console de gerenciamento da AWS ou da AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte [Creating an interface endpoint](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) (Criação de um endpoint de interface).

Depois de criar um endpoint da VPC de interface, se você habilitar nomes de host [DNS privados](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-private-dns) para o endpoint, o endpoint padrão do Athena (https://athena.*Region*.amazonaws.com) será resolvido para seu endpoint da VPC.

Se você não habilitar nomes de host DNS privados, o Amazon VPC fornecerá um nome de endpoint DNS que poderá ser usado no seguinte formato:

```
VPC_Endpoint_ID.athena.Region.vpce.amazonaws.com
```

Para mais informações, consulte [VPC endpoints de interface (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html) no *Guia do usuário da Amazon VPC*.

O Athena permite fazer chamadas para todas as [ações de API](https://docs.aws.amazon.com/athena/latest/APIReference/API_Operations.html) na sua VPC.

## Criar uma política de endpoint da VPC para o Athena
<a name="api-private-link-policy"></a>

Você pode criar uma política de endpoints da Amazon VPC para o Athena para especificar restrições como:
+ **Entidade principal**: a entidade principal que pode executar ações.
+ **Ações**: as ações que podem ser executadas.
+ **Recursos**: os recursos sobre os quais as ações podem ser realizadas.
+ **Somente identidades confiáveis**: use a condição `aws:PrincipalOrgId` para restringir o acesso somente às credenciais que fazem parte de sua organização da AWS. Isso pode ajudar a impedir o acesso de entidades principais não intencionais. 
+ **Somente recursos confiáveis**: use a condição `aws:ResourceOrgId` para impedir o acesso a recursos não intencionais. 
+ **Somente identidades e recursos confiáveis**: crie uma política combinada para um endpoint da VPC que ajude a impedir o acesso a recursos e entidades principais não intencionais. 

Para obter mais informações, consulte [Controlar acesso a serviços com endpoints da VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html) no *Guia do usuário da Amazon VPC* e no [Apêndice 2: exemplos de políticas de endpoints da VPC](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/appendix-2-vpc-endpoint-policy-examples.html) no whitepaper da AWS *Criar um perímetro de dados na AWS*.

**Example Política de endpoint da VPC**  
O exemplo a seguir permite solicitações de identidades de organizações para recursos de organizações, e permite solicitações de entidades principais de serviços da AWS.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "my-org-id",
                    "aws:ResourceOrgID": "my-org-id"
                }
            }
        },
        {
            "Sid": "AllowRequestsByAWSServicePrincipals",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                }
            }
        }
    ]
}
```

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

## Sobre os endpoints da VPC em sub-redes compartilhadas
<a name="interface-vpc-endpoint-shared-subnets"></a>

Você não pode criar, descrever, modificar ou excluir endpoints da VPC em sub-redes que são compartilhadas com você. No entanto, é possível usar os endpoints da VPC em sub-redes que são compartilhadas com você. Para obter informações sobre o compartilhamento da VPC, consulte [Compartilhar sua VPC com outras contas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html) no *Guia do usuário da Amazon VPC*.

# Análise de vulnerabilidade e configuração no Athena
<a name="security-vulnerability-management"></a>

O Athena é sem servidor, portanto, não há infraestrutura para configurar ou gerenciar. A AWS processa as tarefas básicas de segurança, como aplicação de patches a bancos de dados e sistemas operacionais (SO) convidados, configuração de firewalls e recuperação de desastres. Esses procedimentos foram revisados e certificados por terceiros certificados. Para obter mais detalhes, consulte os seguintes recursos da AWS:
+  [Modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) 
+ [Práticas recomendadas de segurança, identidade e conformidade](https://aws.amazon.com/architecture/security-identity-compliance/)

# Usar o Athena para consultar dados registrados no AWS Lake Formation
<a name="security-athena-lake-formation"></a>

O [AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) permite definir e aplicar políticas de acesso no nível do banco de dados, tabela e coluna ao usar as consultas do Athena para ler os dados armazenados no Amazon S3 ou acessados por meio de fontes de dados federadas. O Lake Formation fornece uma camada de autorização e governança dos dados armazenados no Amazon S3 ou em catálogos de dados federados. É possível usar uma hierarquia de permissões no Lake Formation para conceder ou revogar permissões de leitura de objetos do catálogo de dados, como bancos de dados, tabelas e colunas. O Lake Formation simplifica o gerenciamento de permissões e permite implementar um Fine-Grained Access Control (FGAC – Controle de acesso refinado) para seus dados.

É possível usar o Athena para consultar os dados tanto registrados quanto não registrados no Lake Formation.

As permissões do Lake Formation são aplicadas ao usar o Athena para consultar dados da fonte de locais do Amazon S3 ou catálogos de dados registrados no Lake Formation. As permissões do Lake Formation também são aplicadas ao criar bancos de dados e tabelas que apontem para os locais de dados registrados do Amazon S3 ou catálogos de dados.

As permissões do Lake Formation não se aplicam à gravação de objetos nem à consulta de dados ou metadados que não estejam registrados no Lake Formation. Para dados da fonte e metadados que não estejam registrados no Lake Formation, o acesso será determinado por políticas de permissões do IAM para ações do AWS Glue. Os locais de resultados de consulta do Athena no Amazon S3 não podem ser registrados no Lake Formation, e as políticas de permissões do IAM no Amazon S3 controlam o acesso. Além disso, as permissões do Lake Formation não se aplicam ao histórico de consultas do Athena. É possível usar grupos de trabalho do Athena para controlar o acesso ao histórico de consultas.

Para obter mais informações sobre o Lake Formation, consulte [Perguntas Frequentes do Lake Formation](https://aws.amazon.com/lake-formation/faqs/) e o [Guia do desenvolvedor do AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html).

## Aplicar as permissões do Lake Formation aos bancos de dados e tabelas existentes
<a name="lf-athena-apply-lf-permissions-to-existing-databases-and-tables"></a>

Se você for novo no Athena e usar o Lake Formation para configurar o acesso aos dados da consulta, não será necessário configurar políticas do IAM para que os usuários possam ler dados e criar metadados. É possível usar o Lake Formation para administrar permissões.

Registrar dados no Lake Formation e atualizar políticas de permissões do IAM não são requisitos. Se os dados não estiverem registrados no Lake Formation, os usuários do Athena com as devidas permissões poderão continuar consultando os dados não registrados no Lake Formation.

Se você tiver usuários existentes do Athena que consultem dados do Amazon S3 não registrados no Lake Formation, poderá atualizar as permissões do IAM para o Amazon S3 e o AWS Glue Data Catalog, se aplicável, de modo que você possa usar as permissões do Lake Formation para gerenciar o acesso dos usuários centralmente. Para obter permissão de leitura dos locais de dados do Amazon S3, é possível atualizar as políticas baseadas em recurso e em identidade para modificar as permissões do Amazon S3. Para obter acesso aos metadados, se você configurou políticas no nível do recurso para controle de acesso refinado com o AWS Glue, pode usar as permissões do Lake Formation para gerenciar o acesso. 

Para obter mais informações, consulte [Configurar o acesso a bancos de dados e tabelas no AWS Glue Data Catalog](fine-grained-access-to-glue-resources.md) e [Atualização das permissões de dados do AWS Glue para o modelo do AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html) no *Guia do desenvolvedor do AWS Lake Formation*.

**Topics**
+ [

## Aplicar as permissões do Lake Formation aos bancos de dados e tabelas existentes
](#lf-athena-apply-lf-permissions-to-existing-databases-and-tables)
+ [Como o acesso a dados funciona](lf-athena-access.md)
+ [Considerações e limitações](lf-athena-limitations.md)
+ [Acesso entre contas](lf-athena-limitations-cross-account.md)
+ [Gerenciamento de permissões de usuário](lf-athena-user-permissions.md)
+ [Usar o Lake Formation e o JDBC ou o ODBC para acesso federado](security-athena-lake-formation-jdbc.md)

# Como o Athena acessa os dados registrados no Lake Formation
<a name="lf-athena-access"></a>

O fluxo de trabalho de acesso descrito nesta seção é aplicável somente à execução de consultas do Athena em locais, catálogos de dados ou objetos de metadados do Amazon S3 registrados no Lake Formation. Para obter mais informações, consulte [Registering a data lake](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) (Registrar um data lake) no *Guia do desenvolvedor do AWS Lake Formation*. Além de registrar os dados, o administrador do Lake Formation aplica as permissões do Lake Formation que concedem ou revogam o acesso aos metadados no catálogo de dados, AWS Glue Data Catalog ou no local dos dados no Amazon S3. Para obter mais informações, consulte [Security and access control to metadata and data](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html#security-data-access-permissions) (Controle de segurança e acesso a metadados e dados) no *Guia do desenvolvedor do AWS Lake Formation*.

Cada vez que uma entidade principal do Athena (usuário, grupo ou perfil) executar uma consulta em dados registrados usando o Lake Formation, o Lake Formation verificará se a entidade principal tem as devidas permissões do Lake Formation para o banco de dados, a tabela e a fonte de dados, conforme apropriado para a consulta. Se o principal tiver acesso, o Lake Formation *venderá* credenciais temporárias para o Athena e a consulta será executada.

O seguinte diagrama mostra o funcionamento da venda de credenciais no Athena por consulta em um exemplo de consulta `SELECT` em uma tabela com um local ou catálogos de dados do Amazon S3 registrado no Lake Formation:

![\[Fluxo de trabalho de venda de credenciais para uma consulta em uma tabela do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/lake-formation-athena-security.png)


1. Um principal executa a consulta `SELECT` no Athena.

1. O Athena analisa a consulta e verifica as permissões do Lake Formation para ver se o principal recebeu acesso à tabela e às suas colunas.

1. Se o principal tiver acesso, o Athena solicitará as credenciais do Lake Formation. Se o principal *não* tiver acesso, o Athena emitirá um erro de acesso negado.

1. O Lake Formation emite as credenciais ao Athena para usar na leitura dos dados do Amazon S3 ou catálogo, junto com a lista de colunas permitidas.

1. O Athena usa as credenciais temporárias do Lake Formation para consultar os dados do Amazon S3 ou catálogo. Após a conclusão da consulta, o Athena descarta as credenciais.

# Considerações e limitações da consulta a dados registrados no Lake Formation
<a name="lf-athena-limitations"></a>

Considere as questões a seguir ao usar o Athena para consultar dados registrados no Lake Formation. Para obter informações adicionais, consulte [Problemas conhecidos do AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html) no *Guia do desenvolvedor do AWS Lake Formation*.

**Topics**
+ [Metadados de coluna visíveis para usuários sem permissões de dados para colunas em algumas circunstâncias](#lf-athena-limitations-column-metadata)
+ [Trabalhar com permissões do Lake Formation para visualizações](#lf-athena-limitations-permissions-to-views)
+ [

## Suporte ao DDL do Iceberg
](#lf-athena-limitations-iceberg-ddl-operations)
+ [

## Controle de acesso detalhado do Lake Formation e grupos de trabalho do Athena
](#lf-athena-limitations-fine-grained-access-control)
+ [Local dos resultados de consultas do Athena no Amazon S3 não registrado no Lake Formation](#lf-athena-limitations-query-results-location)
+ [Usar grupos de trabalho do Athena para limitar o acesso ao histórico de consultas](#lf-athena-limitations-use-workgroups-to-limit-access-to-query-history)
+ [O Amazon S3 com CSE-KMS registrado no Lake Formation não pode ser consultado no Athena](#lf-athena-limitations-cse-kms)
+ [Locais de dados particionados registrados no Lake Formation devem estar em subdiretórios de tabela](#lf-athena-limitations-partioned-data-locations)
+ [Consultas Create Table As Select (CTAS) exigem permissões de gravação do Amazon S3](#lf-athena-limitations-ctas-queries)
+ [

## A permissão DESCRIBE é necessária no banco de dados padrão
](#lf-athena-limitations-describe-default)

## Metadados de coluna visíveis para usuários não autorizados em algumas circunstâncias com Avro e SerDe personalizado
<a name="lf-athena-limitations-column-metadata"></a>

A autorização no nível da coluna do Lake Formation impede que os usuários acessem os dados nas colunas para as quais eles não tenham permissões do Lake Formation. No entanto, em determinadas situações, os usuários podem acessar metadados que descrevem todas as colunas na tabela, incluindo as colunas para as quais eles não têm permissões para os dados.

Isso ocorre quando os metadados da coluna são armazenados nas propriedades das tabelas usando o formato de armazenamento Apache Avro ou um serializador/desserializador (SerDe) personalizado no qual o esquema da tabela é definido nas propriedades da tabela juntamente com a definição do SerDe. Ao usar o Athena com o Lake Formation, recomendamos revisar o conteúdo das propriedades da tabela que você registrou no Lake Formation e, sempre que possível, limitar as informações armazenadas nas propriedades da tabela para impedir que metadados confidenciais fiquem visíveis aos usuários.

## Entender o Lake Formation e as visualizações
<a name="lf-athena-limitations-permissions-to-views"></a>

Para dados registrados no Lake Formation, um usuário do Athena poderá criar um `VIEW` somente se tiver permissões do Lake Formation para as tabelas, as colunas e os locais de dados de origem do Amazon S3 nos quais a `VIEW` se baseia. Depois que uma `VIEW` é criada no Athena, as permissões do Lake Formation podem ser aplicadas à `VIEW`. As permissões no nível da coluna não estão disponíveis para uma `VIEW`. Os usuários com permissões do Lake Formation para uma `VIEW`, mas sem permissões para a tabela e as colunas nas quais a visualização foi baseada, não podem usar a `VIEW` para consultar dados. No entanto, os usuários com essa combinação de permissões podem usar instruções como `DESCRIBE VIEW`, `SHOW CREATE VIEW` e `SHOW COLUMNS` para ver metadados `VIEW`. Por esse motivo, alinhe as permissões do Lake Formation a cada `VIEW` com as permissões subjacentes da tabela. Filtros de células definidos em uma tabela não se aplicam a um `VIEW` para essa tabela. Os nomes de links de recursos devem ter o mesmo nome que o recurso na conta de origem. Há limitações adicionais ao se trabalhar com visualizações em uma configuração entre contas. Para obter mais informações sobre como configurar permissões para visualizações compartilhadas entre contas, consulte [Configurar o acesso entre contas ao catálogo de dados](lf-athena-limitations-cross-account.md).

## Suporte ao DDL do Iceberg
<a name="lf-athena-limitations-iceberg-ddl-operations"></a>

Atualmente, o Athena não oferece suporte a operações de DDL em tabelas Iceberg cuja localização esteja registrada no Lake Formation. A tentativa de executar uma consulta DDL em uma dessas tabelas do Iceberg pode retornar um erro de acesso negado ao Amazon S3 ou falhar com o esgotamento do tempo limite da consulta. As operações de DDL nas tabelas do Iceberg exigem que o usuário tenha acesso direto do Amazon S3 à localização da tabela do Iceberg.

## Controle de acesso detalhado do Lake Formation e grupos de trabalho do Athena
<a name="lf-athena-limitations-fine-grained-access-control"></a>

Os usuários do mesmo grupo de trabalho do Athena podem visualizar os dados que o controle de acesso detalhado do Lake Formation configurou para serem acessíveis ao grupo de trabalho. Para obter mais informações sobre como usar o controle de acesso detalhado no Lake Formation, consulte [Gerenciar o controle de acesso detalhado usando o AWS Lake Formation](https://aws.amazon.com/blogs/big-data/manage-fine-grained-access-control-using-aws-lake-formation/) no *AWS Big Data Blog*. 

## Local dos resultados de consultas do Athena no Amazon S3 não registrado no Lake Formation
<a name="lf-athena-limitations-query-results-location"></a>

O local dos resultados de consultas do Athena no Amazon S3 não pode ser registrado no Lake Formation. As permissões do Lake Formation não limitam o acesso a esses locais. A menos que você limite o acesso, os usuários do Athena podem acessar arquivos de resultados de consulta e metadados mesmo sem permissões do Lake Formation para os dados. Para evitar isso, recomendamos que você use grupos de trabalho para especificar o local dos resultados das consultas e alinhe a associação do grupo de trabalho com as permissões do Lake Formation. Depois disso, você pode usar as políticas de permissões do IAM para limitar o acesso aos locais de resultados de consultas. Para obter mais informações sobre resultados de consultas, veja [Trabalhar com resultados de consultas e consultas recentes](querying.md).

## Usar grupos de trabalho do Athena para limitar o acesso ao histórico de consultas
<a name="lf-athena-limitations-use-workgroups-to-limit-access-to-query-history"></a>

O histórico de consultas do Athena expõe uma lista de consultas salvas e strings de consulta completas. A menos que você use grupos de trabalho para separar o acesso a históricos de consultas, os usuários do Athena que não estão autorizados a consultar os dados no Lake Formation poderão visualizar as strings de consultas executadas nesses dados, incluindo nomes de coluna, critérios de seleção e etc. Recomendamos que você use grupos de trabalho para separar históricos de consultas e alinhar a associação do grupo de trabalho do Athena com as permissões do Lake Formation para limitar o acesso. Para obter mais informações, consulte [Usar grupos de trabalho para controlar o acesso a consultas e os custos](workgroups-manage-queries-control-costs.md).

## Consultar as tabelas criptografadas CSE\$1KMS registradas no Lake Formation
<a name="lf-athena-limitations-cse-kms"></a>

Tabelas em Open Table Format (OTF), como do Apache Iceberg, que têm as seguintes características, não podem ser consultadas com o Athena:
+ As tabelas são baseadas nos locais de dados do Amazon S3 que estão registrados no Lake Formation.
+ Os objetos no Amazon S3 são criptografados usando a criptografia do lado do cliente (CSE).
+ A criptografia usa chaves do AWS KMS gerenciadas pelo cliente (`CSE_KMS`).

Para consultar tabelas não OTF criptografadas com uma chave `CSE_KMS`, adicione o bloco a seguir à política da chave AWS KMS que você usa para criptografia CSE. *<KMS\$1KEY\$1ARN>* indica o ARN da chave AWS KMS que criptografa os dados. *<IAM-ROLE-ARN>* indica o ARN do perfil do IAM que registra a localização do Amazon S3 no Lake Formation.

```
{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "*"
    },
    "Action": "kms:Decrypt",
    "Resource": "<KMS-KEY-ARN>",
    "Condition": {
        "ArnLike": {
            "aws:PrincipalArn": "<IAM-ROLE-ARN>"
        }
    }
}
```

## Locais de dados particionados registrados no Lake Formation devem estar em subdiretórios de tabela
<a name="lf-athena-limitations-partioned-data-locations"></a>

As tabelas particionadas registradas no Lake Formation devem ter dados particionados em diretórios que são subdiretórios da tabela no Amazon S3. Por exemplo, uma tabela com o local `s3://amzn-s3-demo-bucket/mytable` e as partições `s3://amzn-s3-demo-bucket/mytable/dt=2019-07-11`, `s3://amzn-s3-demo-bucket/mytable/dt=2019-07-12` etc. pode ser registrada no Lake Formation e consultada com o Athena. Por outro lado, uma tabela com o local `s3://amzn-s3-demo-bucket/mytable` e as partições localizadas em `s3://amzn-s3-demo-bucket/dt=2019-07-11`, `s3://amzn-s3-demo-bucket/dt=2019-07-12` etc. não pode ser registrada no Lake Formation. Como essas partições não são subdiretórios de `s3://amzn-s3-demo-bucket/mytable`, elas também não podem ser lidas pelo Athena.

## Consultas Create Table As Select (CTAS) exigem permissões de gravação do Amazon S3
<a name="lf-athena-limitations-ctas-queries"></a>

As Create Table As Statements (CTAS) exigem acesso de gravação ao local das tabelas do Amazon S3. Para executar consultas CTAS em dados registrados no Lake Formation, os usuários do Athena devem ter as permissões do IAM para gravar nos locais de tabela do Amazon S3 e as devidas permissões do Lake Formation para ler os locais de dados. Para obter mais informações, consulte [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md).

## A permissão DESCRIBE é necessária no banco de dados padrão
<a name="lf-athena-limitations-describe-default"></a>

A permissão `DESCRIBE` do Lake Formation é necessária no banco de dados `default` para que o Lake Formation possa visualizá-lo. O comando da AWS CLI de exemplo a seguir concede a permissão `DESCRIBE` no banco de dados `default` ao usuário `datalake_user1` na conta da AWS `111122223333`.

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Database": {"Name":"default"}}
```

Para obter mais informações, consulte [DESCRIBE](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html#perm-describe) no *Guia do desenvolvedor do AWS Lake Formation*.

# Configurar o acesso entre contas ao catálogo de dados
<a name="lf-athena-limitations-cross-account"></a>

Para acessar um catálogo de dados em outra conta, você pode usar o recurso do AWS Glue entre contas do Athena ou configurar o acesso entre contas no Lake Formation.

## Opção A: configurar o acesso entre contas ao catálogo de dados no Athena
<a name="lf-athena-limitations-cross-account-glue"></a>

Você pode usar o recurso de catálogo do AWS Glue entre contas do Athena para registrar o catálogo em sua conta. Esse recurso está disponível somente no mecanismo Athena versão 2 e posteriores e está limitado ao uso entre contas na mesma região. Para obter mais informações, consulte [Registrar um catálogo de dados de outra conta](data-sources-glue-cross-account.md).

Se o catálogo de dados a ser compartilhado tiver uma política de recursos configurada no AWS Glue, ele deverá ser atualizado para permitir acesso ao AWS Resource Access Manager e conceder permissões à conta B para usar o catálogo de dados da conta A.

Para obter mais informações, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).

## Opção B: configurar o acesso entre contas no Lake Formation
<a name="lf-athena-limitations-cross-account-glue-lf-xacct"></a>

AWS Lake FormationO permite que você use uma única conta para gerenciar um catálogo de dados central. Você pode usar esse recurso para implementar o [acesso entre contas](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-cross-account.html) a metadados do catálogo de dados e aos dados subjacentes. Por exemplo, uma conta de proprietário pode conceder à outra conta (destinatário) a permissão `SELECT` em uma tabela. 

Para que um banco de dados ou uma tabela compartilhada apareça no editor de consultas do Athena, [crie um link de recurso](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html) no Lake Formation para o banco de dados ou a tabela compartilhada. Quando a conta de destinatário no Lake Formation consulta a tabela do proprietário, o [CloudTrail](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html) adiciona o evento de acesso a dados aos logs das contas tanto de destinatário quanto de proprietário.

Para visualizações compartilhadas, lembre-se dos seguintes pontos:
+ As consultas são executadas nos links dos recursos de destino, não na visualização ou tabela de origem. Em seguida, a saída é compartilhada com a conta de destino.
+ Não basta compartilhar apenas a visualização. Todas as tabelas envolvidas na criação da visualização devem fazer parte do compartilhamento entre contas.
+ O nome do link do recurso criado nos recursos compartilhados deve corresponder ao nome do recurso na conta do proprietário. Se o nome não corresponder, será gerada uma mensagem de erro semelhante a Falha ao analisar a visualização armazenada 'awsdatacatalog.*my-lf-resource-link*.*my-lf-view*': line 3:3: O esquema *schema\$1name* não existe.

Para obter mais informações sobre o acesso entre contas no Lake Formation, consulte os seguintes recursos no *Guia do desenvolvedor do AWS Lake Formation*:

 [Acesso entre contas](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-cross-account.html) 

 [How resource links work in Lake Formation (Como os links de recursos funcionam no Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html) 

 [Cross-account CloudTrail logging (Registro em log no CloudTrail entre contas](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html) 

# Gerenciar as permissões de usuário do Lake Formation e do Athena
<a name="lf-athena-user-permissions"></a>

O Lake Formation vende credenciais para consultar armazenamentos de dados ou catálogos federados do Amazon S3 que estão registrados no Lake Formation. Se você já tiver usado políticas do IAM para permitir ou negar permissões para ler catálogos ou locais de dados no Amazon S3, poderá usar as permissões do Lake Formation. No entanto, outras permissões do IAM ainda são necessárias.

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Manual do usuário do IAM*.

As seções a seguir resumem as permissões necessárias para usar o Athena nas consultas de dados registrados no Lake Formation. Para obter mais informações, consulte [Segurança no AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/security.html) no *Guia do desenvolvedor do AWS Lake Formation*.

**Topics**
+ [

## Permissões baseadas em identidade para Lake Formation e Athena
](#lf-athena-user-permissions-identity-based)
+ [

## Permissões do Amazon S3 para locais de resultados de consultas do Athena
](#lf-athena-user-permissions-query-results-locations)
+ [

## Associações de grupos de trabalho do Athena para consultar o histórico
](#lf-athena-user-permissions-workgroup-memberships-query-history)
+ [

## Permissões do Lake Formation para dados
](#lf-athena-user-permissions-data)
+ [

## Permissões do IAM para gravar em locais do Amazon S3
](#lf-athena-user-permissions-s3-write)
+ [

## Permissões para dados criptografados, metadados e resultados de consultas do Athena
](#lf-athena-user-permissions-encrypted)
+ [

## Permissões baseadas em recursos para buckets do Amazon S3 em contas externas (opcional)
](#lf-athena-user-permissions-s3-cross-account)

## Permissões baseadas em identidade para Lake Formation e Athena
<a name="lf-athena-user-permissions-identity-based"></a>

Qualquer pessoa que usa o Athena para consultar dados registrados no Lake Formation deve ter uma política de permissões do IAM que permita a ação `lakeformation:GetDataAccess`. O [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) permite essa ação. Se você usar políticas em linha, atualize as políticas de permissões para permitir essa ação.

No Lake Formation, um *administrador de data lake* tem permissões para criar objetos de metadados, como bancos de dados e tabelas, conceder permissões do Lake Formation a outros usuários e registrar novos locais ou catálogos de dados do Amazon S3. Para registrar novos locais, são necessárias permissões para a função vinculada ao serviço no Lake Formation. Para obter mais informações, consulte [Create a data lake administrator](https://docs.aws.amazon.com/lake-formation/latest/dg/getting-started-setup.html#create-data-lake-admin) (Criar um administrador de data lake) e [Service-linked role permissions for Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/service-linked-roles.html#service-linked-role-permissions) (Permissões de função vinculada ao serviço no Lake Formation) no *Guia do desenvolvedor do AWS Lake Formation*.

Um usuário do Lake Formation pode usar o Athena para consultar bancos de dados, tabelas, colunas de tabelas e armazenamentos de dados ou catálogos subjacentes do Amazon S3 com base nas permissões do Lake Formation concedidas a ele pelos administradores de data lake. Os usuários não podem criar bancos de dados ou tabelas, nem registrar novos locais do Amazon S3 no Lake Formation. Para obter mais informações, consulte [Create a data lake user](https://docs.aws.amazon.com/lake-formation/latest/dg/cloudtrail-tut-create-lf-user.html) (Criar um usuário do data lake) no *Guia do desenvolvedor do AWS Lake Formation*.

No Athena, as políticas de permissões baseadas em identidade, incluindo aquelas para grupos de trabalho do Athena, ainda controlam o acesso às ações do Athena para usuários de contas da Amazon Web Services. Além disso, o acesso federado pode ser concedido por meio da autenticação baseada em SAML disponível nos drivers do Athena. Para obter mais informações, consulte [Usar grupos de trabalho para controlar o acesso a consultas e os custos](workgroups-manage-queries-control-costs.md), [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md) e [Habilitar o acesso federado à API do Athena](access-federation-saml.md).

Para obter mais informações, consulte [Granting Lake Formation permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html) (Conceder permissões do Lake Formation) no *Guia do desenvolvedor do AWS Lake Formation*.

## Permissões do Amazon S3 para locais de resultados de consultas do Athena
<a name="lf-athena-user-permissions-query-results-locations"></a>

O local dos resultados de consultas do Athena no Amazon S3 não pode ser registrado no Lake Formation. As permissões do Lake Formation não limitam o acesso a esses locais. A menos que você limite o acesso, os usuários do Athena podem acessar arquivos de resultados de consulta e metadados mesmo sem permissões do Lake Formation para os dados. Para evitar isso, recomendamos que você use grupos de trabalho para especificar o local dos resultados das consultas e alinhe a associação do grupo de trabalho com as permissões do Lake Formation. Depois disso, você pode usar as políticas de permissões do IAM para limitar o acesso aos locais de resultados de consultas. Para obter mais informações sobre resultados de consultas, veja [Trabalhar com resultados de consultas e consultas recentes](querying.md).

## Associações de grupos de trabalho do Athena para consultar o histórico
<a name="lf-athena-user-permissions-workgroup-memberships-query-history"></a>

O histórico de consultas do Athena expõe uma lista de consultas salvas e strings de consulta completas. A menos que você use grupos de trabalho para separar o acesso a históricos de consultas, os usuários do Athena que não estão autorizados a consultar os dados no Lake Formation poderão visualizar as strings de consultas executadas nesses dados, incluindo nomes de coluna, critérios de seleção e etc. Recomendamos que você use grupos de trabalho para separar históricos de consultas e alinhar a associação do grupo de trabalho do Athena com as permissões do Lake Formation para limitar o acesso. Para obter mais informações, consulte [Usar grupos de trabalho para controlar o acesso a consultas e os custos](workgroups-manage-queries-control-costs.md).

## Permissões do Lake Formation para dados
<a name="lf-athena-user-permissions-data"></a>

Além da permissão de linha de base para usar o Lake Formation, os usuários do Athena devem ter permissões do Lake Formation para acessar os recursos que eles consultam. Essas permissões são concedidas e gerenciadas por um administrador do Lake Formation. Para obter mais informações, consulte [Security and access control to metadata and data](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html#security-data-access-permissions) (Controle de segurança e acesso a metadados e dados) no *Guia do desenvolvedor do AWS Lake Formation*.

## Permissões do IAM para gravar em locais do Amazon S3
<a name="lf-athena-user-permissions-s3-write"></a>

As permissões do Lake Formation para o Amazon S3 não incluem a capacidade de gravar no Amazon S3. As Create Table As Statements (CTAS) exigem acesso de gravação ao local das tabelas do Amazon S3. Para executar consultas CTAS em dados registrados no Lake Formation, os usuários do Athena devem ter as permissões do IAM para gravar nos locais de tabela do Amazon S3 e as devidas permissões do Lake Formation para ler os locais de dados. Para obter mais informações, consulte [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md).

## Permissões para dados criptografados, metadados e resultados de consultas do Athena
<a name="lf-athena-user-permissions-encrypted"></a>

É possível criptografar dados da fonte subjacentes no Amazon S3 e metadados no catálogo que estejam registrados no Lake Formation. Não há alteração na maneira como o Athena processa a criptografia de resultados das consultas quando ele é usado para consultar dados registrados no Lake Formation. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).
+ **Criptografia de dados de origem**: a criptografia dos dados de origem dos locais de dados do Amazon S3 é permitida. Os usuários do Athena que consultam locais criptografados do Amazon S3 registrados no Lake Formation precisam de permissões para criptografar e descriptografar dados. Para obter mais informações sobre os requisitos, consulte [Opções de criptografia permitidas do Amazon S3](encryption.md#encryption-options-S3-and-Athena) e [Permissões para dados criptografados no Amazon S3](encryption.md#permissions-for-encrypting-and-decrypting-data). 
+ **Criptografia de metadados**: a criptografia de metadados no AWS Glue Data Catalog é compatível. Para os principais que usam o Athena, as políticas baseadas em identidade devem permitir as ações `"kms:GenerateDataKey"`, `"kms:Decrypt"` e `"kms:Encrypt"` à chave usada para criptografar os metadados. Para obter mais informações, consulte [Encrypting your Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html) (Criptografar seu catálogo de dados) no *Guia do desenvolvedor do AWS Glue* e [Configurar o acesso do Athena aos metadados criptografados no AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md).

## Permissões baseadas em recursos para buckets do Amazon S3 em contas externas (opcional)
<a name="lf-athena-user-permissions-s3-cross-account"></a>

Para consultar um local de dados do Amazon S3 em uma conta diferente, uma política do IAM baseada em recurso (política de bucket) deve permitir o acesso ao local. Para obter mais informações, consulte [Configurar o acesso entre contas do Athena aos buckets do Amazon S3](cross-account-permissions.md).

Para obter informações sobre como acessar catálogos em outra conta, consulte [Opção A: configurar o acesso entre contas ao catálogo de dados no Athena](lf-athena-limitations-cross-account.md#lf-athena-limitations-cross-account-glue).

# Usar o Lake Formation e os drivers JDBC e ODBC para acesso federado ao Athena
<a name="security-athena-lake-formation-jdbc"></a>

Os drivers Athena JDBC e ODBC permitem a federação baseada em SAML 2.0 com o Athena usando os provedores de identidade Okta e Microsoft Active Directory Federation Services (AD FS). Ao integrar o Amazon Athena com o AWS Lake Formation, você habilita a autenticação baseada em SAML no Athena com credenciais corporativas. Com o Lake Formation e o AWS Identity and Access Management (IAM), você pode manter um controle de acesso refinado no nível da coluna dos dados disponíveis para o usuário do SAML. Com os drivers Athena JDBC e ODBC, o acesso federado está disponível por ferramenta ou de modo programático.

Para usar o Athena para acessar uma origem dos dados controlada pelo Lake Formation, você precisa habilitar a federação baseada em SAML 2.0 configurando seu Identity Provider (IdP – Provedor de identidade) e as funções do AWS Identity and Access Management (IAM). Para saber detalhes das etapas, consulte [Tutorial: configurar o acesso federado ao Athena para usuários do Okta usando o Lake Formation e o JDBC](security-athena-lake-formation-jdbc-okta-tutorial.md).

## Pré-requisitos
<a name="security-athena-lake-formation-jdbc-prerequisites"></a>

Para usar o Amazon Athena e o Lake Formation para acesso federado, você deve atender aos seguintes requisitos:
+ Gerencie suas identidades corporativas usando um provedor de identidade baseado em SAML existente, como Okta ou Microsoft Active Directory Federation Services (AD FS).
+ Use o AWS Glue Data Catalog como um armazenamento de metadados.
+ Defina e gerencie as permissões no Lake Formation para acessar bancos de dados, tabelas e colunas no AWS Glue Data Catalog. Para obter mais informações, consulte o [Guia do desenvolvedor do AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/).
+ Use a versão 2.0.14 ou mais recente do [driver JDBC do Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html) ou a versão 1.1.3 ou mais recente do [driver ODBC do Athena](connect-with-odbc.md).

## Considerações e limitações
<a name="security-athena-lake-formation-jdbc-considerations-and-limitations"></a>

Ao usar o driver Athena JDBC ou ODBC e o Lake Formation para configurar o acesso federado ao Athena, tenha em mente os seguintes pontos:
+ No momento, o driver Athena JDBC e drivers ODBC são compatíveis com os provedores de identidade Okta, Microsoft Active Directory Federation Services (AD FS) e Azure AD. Embora o driver Athena JDBC tenha uma classe SAML genérica que pode ser estendida para usar outros provedores de identidade, o suporte a extensões personalizadas que permitem o uso de outros provedores de identidade (IdPs) com o Athena pode ser limitado.
+ O acesso federado usando os drivers JDBC e ODBC não é compatível com o recurso de propagação de identidade confiável do Centro de Identidade do IAM.
+ Atualmente, você não pode usar o console do Athena para configurar o suporte para uso de IdP e SAML com o Athena. Para configurar esse suporte, use o provedor de identidade de terceiro, os consoles de gerenciamento do Lake Formation e do IAM e o cliente de driver JDBC ou ODBC.
+ Você deve entender a [especificação SAML 2.0](https://www.oasis-open.org/standards#samlv2.0) e como ela funciona com seu provedor de identidade antes de configurar o provedor de identidade e o SAML para uso com o Lake Formation e o Athena.
+ Os provedores SAML e os drivers Athena JDBC e ODBC são fornecidos por terceiros, portanto, o suporte da AWS para questões relacionadas ao uso deles pode ser limitado.

**Topics**
+ [

## Pré-requisitos
](#security-athena-lake-formation-jdbc-prerequisites)
+ [

## Considerações e limitações
](#security-athena-lake-formation-jdbc-considerations-and-limitations)
+ [

# Tutorial: configurar o acesso federado ao Athena para usuários do Okta usando o Lake Formation e o JDBC
](security-athena-lake-formation-jdbc-okta-tutorial.md)

# Tutorial: configurar o acesso federado ao Athena para usuários do Okta usando o Lake Formation e o JDBC
<a name="security-athena-lake-formation-jdbc-okta-tutorial"></a>

Este tutorial mostra como configurar o Okta, o AWS Lake Formation, as permissões do AWS Identity and Access Management e o driver Athena JDBC para habilitar o uso federado baseado em SAML do Athena. O Lake Formation oferece controle de acesso refinado dos dados que estão disponíveis no Athena para o usuário baseado em SAML. Para definir essa configuração, o tutorial usa o console do desenvolvedor do Okta, os consoles do AWS IAM e do Lake Formation e a ferramenta SQL Workbench/J.
<a name="security-athena-lake-formation-jdbc-okta-tutorial-prerequisites"></a>
**Pré-requisitos**  
Este tutorial pressupõe que você tenha feito o seguinte:
+ Criado uma conta da Amazon Web Services. Para criar uma conta, acesse a [home page da Amazon Web Services](https://aws.amazon.com/).
+ [Configurado um local de resultados de consultas](query-results-specify-location.md) do Athena no Amazon S3.
+ [Registrado um local de bucket de dados do Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) no Lake Formation.
+ Definido um [banco de dados](https://docs.aws.amazon.com/glue/latest/dg/define-database.html) e [tabelas](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html) no [Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) que aponte para seus dados no Amazon S3.
  + Se você ainda não definiu uma tabela, [execute um crawler do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) ou [use o Athena para definir um banco de dados e uma ou mais tabelas](work-with-data.md) para os dados que deseja acessar.
  + Este tutorial usa uma tabela baseada no [conjunto de dados de trajetos de táxi na cidade de Nova York](https://registry.opendata.aws/nyc-tlc-trip-records-pds/) disponível no [Registry of Open Data on AWS](https://registry.opendata.aws/) (Registro aberto de dados na ). O tutorial usa o nome do banco de dados `tripdb` e o nome da tabela`nyctaxi`.

**Topics**
+ [

## Etapa 1: Criar uma conta do Okta
](#security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account)
+ [

## Etapa 2: Adicionar usuários e grupos ao Okta
](#security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication)
+ [

## Etapa 3: Configurar uma aplicação do Okta para autenticação SAML
](#security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication)
+ [

## Etapa 4: Criar um provedor de identidade SAML para AWS e uma função do IAM para acesso ao Lake Formation
](#security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role)
+ [

## Etapa 5: Adicionar a função do IAM e o provedor de identidade SAML à aplicação do Okta
](#security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider)
+ [

## Etapa 6: Conceder permissões de usuário e grupo pelo AWS Lake Formation
](#security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation)
+ [

## Etapa 7: Verificar o acesso pelo cliente Athena JDBC
](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client)
+ [

## Conclusão
](#security-athena-lake-formation-jdbc-okta-tutorial-conclusion)
+ [

## Recursos relacionados
](#security-athena-lake-formation-jdbc-okta-tutorial-related-resources)

## Etapa 1: Criar uma conta do Okta
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account"></a>

Este tutorial usa o Okta como provedor de identidade baseado em SAML. Se você ainda não tem uma conta do Okta, pode criar uma gratuitamente. Ela é necessária para que você possa criar uma aplicação do Okta para autenticação SAML.

**Para criar uma conta do Okta**

1. Para usar o Okta, navegue até a [página de cadastro de desenvolvedor do Okta](https://developer.okta.com/signup/) e crie uma conta de avaliação gratuita. O Developer Edition Service é gratuito dentro dos limites especificados pelo Okta em [developer.okta.com/pricing](https://developer.okta.com/pricing).

1. Quando você receber o e-mail de ativação, ative sua conta. 

   Um nome de domínio do Okta será atribuído a você. Salve-o para referência. Mais tarde, você usará o nome de domínio (*<okta-idp-domain>*) na string JDBC que se conecta ao Athena.

## Etapa 2: Adicionar usuários e grupos ao Okta
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication"></a>

Nesta etapa, você usa o console do Okta para executar as seguintes tarefas:
+ Criar dois usuários do Okta.
+ Criar dois grupos do Okta.
+ Adicionar um usuário a cada grupo do Okta.

**Para adicionar usuários ao Okta**

1. Depois de ativar sua conta do Okta, faça login como usuário administrativo no domínio do Okta atribuído.

1. No painel de navegação à esquerda, escolha **Directory** (Diretório) e **People** (Pessoas).

1. Escolha **Add Person** (Adicionar pessoa) para adicionar um novo usuário que acessará o Athena por meio do driver JDBC.  
![\[Escolha Add Person (Adicionar pessoa).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-3.png)

1. Na caixa de diálogo **Add Person** (Adicionar pessoa), insira as informações necessárias.
   + Insira os valores em **First name** (Nome) e **Last name** (Sobrenome). Este tutorial usa o *athena-okta-user*.
   + Insira um **Username** (Nome de usuário) e **Primary email** (E-mail principal). Este tutorial usa o *athena-okta-user@anycompany.com*.
   + Em **Password** (Senha), escolha **Set by admin** (Definir por administrador) e insira uma senha. Neste tutorial, a opção **User must change password on first login** (O usuário deve alterar a senha no primeiro login) está desmarcada, mas seus requisitos de segurança podem variar.  
![\[Adicione um usuário à aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4.png)

1. Escolha **Save and Add Another** (Salvar e adicionar outro).

1. Insira as informações do outro usuário. Este exemplo adiciona o usuário analista de negócios *athena-ba-user@anycompany.com*.  
![\[Adicione um usuário à aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4a.png)

1. Escolha **Salvar**.

No procedimento a seguir, você concede acesso a dois grupos do Okta por meio do driver Athena JDBC adicionando um grupo “Business Analysts” e um grupo “Developer”.

**Para adicionar grupos do Okta**

1. No painel de navegação do Okta, escolha **Directory** (Diretório) e **Groups** (Grupos).

1. Na página **Groups** (Grupos), escolha **Add Group** (Adicionar grupo).  
![\[Escolha Adicionar grupo.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4c.png)

1. Na caixa de diálogo **Add Group** (Adicionar grupo), insira as informações necessárias.
   + Em **Name** (Nome), insira *lf-business-analyst*.
   + Em **Group Description** (Descrição do grupo), insira *Business Analysts* (Analistas de negócios).  
![\[Adicionar um grupo do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4d.png)

1. Escolha **Adicionar grupo**.

1. Na página **Groups** (Grupos), escolha **Add Group** (Adicionar grupo) novamente. Desta vez, você insere as informações do grupo Developer.

1. Insira as informações necessárias.
   + Em **Name** (Nome), insira *lf-developer*.
   + Em **Group Description** (Descrição do grupo), insira *Developers* (Desenvolvedores).

1. Escolha **Adicionar grupo**.

Agora que você tem dois usuários e dois grupos, está pronto para adicionar um usuário a cada grupo.

**Para adicionar usuários a grupos**

1. Na página **Groups** (Grupos), escolha o grupo **lf-developer** que você acabou de criar. Adicione a esse grupo um dos usuários do Okta que você criou como desenvolvedor.  
![\[Escolha lf-developer.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4f.png)

1. Escolha **Manage People** (Gerenciar pessoas).  
![\[Escolha Manage People (Gerenciar pessoas).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4g.png)

1. Na lista **Not Members** (Não membros), escolha **athena-okta-user**.   
![\[Escolha um usuário para adicionar à lista de membros.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4h.png)

   A entrada referente ao usuário é transferida da lista **Not Members** (Não membros) à esquerda para a lista **Members** (Membros) à direita.   
![\[Usuário do Okta adicionado a um grupo do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4i.png)

1. Escolha **Salvar**.

1. Escolha **Back to Group** (Voltar ao grupo) ou **Directory** (Diretório) e selecione **Groups** (Grupos).

1. Escolha o grupo **lf-business-analyst**.

1. Escolha **Manage People** (Gerenciar pessoas).

1. Adicione o **athena-ba-user** à lista **Members** (Membros) do grupo **lf-business-analyst** e escolha **Save** (Salvar). 

1. Escolha **Back to Group** (Voltar ao grupo) ou **Directory** (Diretório) e selecione **Groups** (Grupos).

   A página **Groups** (Grupos) agora mostra cada grupo com um usuário do Okta.  
![\[Um usuário foi adicionado a cada grupono console do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4j.png)

## Etapa 3: Configurar uma aplicação do Okta para autenticação SAML
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication"></a>

Nesta etapa, você usa o console de desenvolvedor do Okta para executar as seguintes tarefas:
+ Adicionar uma aplicação do SAML para usar com a AWS.
+ Atribuir a aplicação a um usuário do Okta.
+ Atribuir a aplicação a um grupo do Okta.
+ Baixe os metadados resultantes do provedor de identidade para uso posterior com a AWS.

**Para adicionar uma aplicação para autenticação SAML**

1. No painel de navegação do Okta, escolha **Applications** (Aplicações), **Applications** (Aplicações) para configurar uma aplicação do Okta para autenticação SAML no Athena.

1. Clique em **Browse App Catalog** (Procurar no catálogo de aplicações).

1. Na caixa de pesquisa, insira **Redshift**.

1. Escolha **Amazon Web Services Redshift**. Neste tutorial, a aplicação do Okta usa a integração existente com SAML para Amazon Redshift.  
![\[Escolha Amazon Web Services Redshift.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-7.png)

1. Na página **Amazon Web Services Redshift**, escolha **Add** (Adicionar) para criar uma aplicação baseada em SAML para o Amazon Redshift.  
![\[Escolha Add (Adicionar) para criar uma aplicação baseada em SAML.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-8.png)

1. Em **Application label** (Rótulo da aplicação), insira `Athena-LakeFormation-Okta` e escolha **Done** (Concluído).  
![\[Insira um nome para a aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-9.png)

Agora que você criou uma aplicação do Okta, pode atribuí-la aos usuários e grupos criados.

**Para atribuir uma aplicação a usuários e grupos**

1. Na página **Applications** (Aplicações), escolha a aplicação **Athena-LakeFormation-Okta**.

1. Na guia **Assignments** (Atribuições), escolha **Assign** (Atribuir), **Assign to People** (Atribuir a pessoas).  
![\[Escolha Assign (Atribuir), Assign to People (Atribuir a pessoas).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-10.png)

1. Na caixa de diálogo **Assign Athena-LakeFormation-Okta to People** (Atribuir Athena-LakeFormation-Okta a pessoas), encontre o usuário **athena-okta-user** que você criou.

1. Escolha **Assign** (Atribuir) para atribuir o usuário à aplicação.  
![\[Selecione Assign (Atribuir).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-11.png)

1. Escolha **Save and Go Back** (Salvar e voltar).

1. Selecione **Concluído**.

1. Na guia **Assignments** (Atribuições) da aplicação **Athena-LakeFormation-Okta**, escolha **Assign** (Atribuir), **Assign to Groups** (Atribuir a grupos). 

1. Em **lf-business-analyst**, escolha **Assign** (Atribuir) para atribuir a aplicação **Athena-LakeFormation-Okta** ao grupo **lf-business-analyst** e escolha **Done** (Concluído).  
![\[Atribuir uma aplicação do Okta a um grupo de usuários do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12b.png)

   O grupo aparecerá na lista de grupos da aplicação.  
![\[A aplicação do Okta é atribuída ao grupo do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12c.png)

Agora você está pronto para baixar os metadados da aplicação do provedor de identidade para uso com a AWS.

**Para baixar os metadados da aplicação**

1. Escolha a guia **Sign On** (Logon) da aplicação do Okta e clique com o botão direito em **Identity Provider metadata** (Metadados do provedor de identidade).  
![\[Clique com o botão direito em Identity Provider metadata (Metadados do provedor de identidade).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-13.png)

1. Escolha **Save Link As** (Salvar link como) para salvar os metadados do provedor de identidade, que estão no formato XML, em um arquivo. Dê a ele um nome que você reconhece (por exemplo, `Athena-LakeFormation-idp-metadata.xml`).  
![\[Salvar os metadados do provedor de identidade.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-14.png)

## Etapa 4: Criar um provedor de identidade SAML para AWS e uma função do IAM para acesso ao Lake Formation
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role"></a>

Nesta etapa, use o console do AWS Identity and Access Management (IAM) para executar as seguintes tarefas:
+ Criar um provedor de identidade para AWS.
+ Criar uma função do IAM para acesso ao Lake Formation.
+ Adicionar a política gerenciada AmazonAthenaFullAccess à função.
+ Adicionar uma política para Lake Formation e AWS Glue à função.
+ Adicionar uma política para os resultados das consultas do Athena à função.

**Para criar um provedor de identidade SAML para AWS**

1. Faça login no **console** da **conta da Amazon Web Services** como **administrador da conta da Amazon Web Services** e navegue até o console do **IAM** ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)).

1. No painel de navegação, escolha **Identity providers** (Provedores de identidade) e clique em **Add provider** (Adicionar provedor).

1. Na tela **Configure provider** (Configurar provedor), insira as seguintes informações:
   + Em **Provider type** (Tipo de provedor), escolha **SAML**.
   + Em **Provider name** (Nome do provedor), insira `AthenaLakeFormationOkta`.
   + Em **Metadata document** (Documento de metadados), use a opção **Choose file** (Escolher arquivo) para carregar o arquivo XML de metadados do provedor de identidade (IdP) que você baixou.

1. Escolha **Add provider** (Adicionar provedor).

Em seguida, você cria uma função do IAM para acesso ao AWS Lake Formation. Adicione duas políticas em linha à função. Uma política concede permissões para acessar o Lake Formation e as APIs do AWS Glue. A outra política concede acesso ao Athena e ao local de resultados das consultas do Athena no Amazon S3.

**Para criar uma função do IAM para acesso ao AWS Lake Formation**

1. No painel de navegação do console do IAM, escolha **Roles** (Funções) e **Create role** (Criar função).

1. Na página **Create role** (Criar função), siga estas etapas:  
![\[Configure uma função do IAM para usar o SAML 2.0.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-20.png)

   1. Em **Select type of trusted entity** (Selecionar tipo de entidade confiável), escolha **SAML 2.0 Federation**.

   1. Em **SAML provider** (Provedor SAML), selecione **AthenaLakeFormationOkta**.

   1. Em **SAML provider** (Provedor SAML), selecione a opção **Allow programmatic and Console de gerenciamento da AWS access** (Permitir acesso programático e por console).

   1. Escolha **Próximo: Permissões**.

1. Na página **Attach Permissions policies** (Anexar políticas de permissões), em **Filter policies** (Filtrar políticas), insira **Athena**.

1. Selecione a política gerenciada **AmazonAthenaFullAccess** e escolha **Next: Tags** (Próximo: etiquetas).  
![\[Anexar a política gerenciada AmazonAthenaFullAccess à função do IAM.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-21.png)

1. Na página **Add tags (Adicionar tags)**, escolha **Next: Review(Próximo: Revisar)**.

1. Na página **Review** (Revisão), em **Role name** (Nome da função), insira um nome para a função (por exemplo, *Athena-LakeFormation-OktaRole*) e escolha **Create role** (Criar função).  
![\[Insira um nome para a função do IAM.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-22.png)

Na sequência, adicione as políticas em linha que permitem o acesso ao Lake Formation, às APIs do AWS Glue e aos resultados das consultas do Athena no Amazon S3. 

Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Manual do usuário do IAM*.

**Para adicionar uma política em linha à função para o Lake Formation e o AWS Glue**

1. Na lista de funções no console do IAM, escolha a recém-criada `Athena-LakeFormation-OktaRole`.

1. Na página **Summary** (Resumo) da função, na guia **Permissions** (Permissões), escolha **Add inline policy** (Adicionar política em linha).

1. Na página **Create policy (Criar política)**, escolha **JSON**.

1. Adicione uma política em linha, semelhante à mostrada abaixo, que concede acesso ao Lake Formation e às APIs do AWS Glue.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "lakeformation:GetDataAccess",
               "glue:GetTable",
               "glue:GetTables",
               "glue:GetDatabase",
               "glue:GetDatabases",
               "glue:CreateDatabase",
               "glue:GetUserDefinedFunction",
               "glue:GetUserDefinedFunctions"
           ],
           "Resource": "*"
       }
   }
   ```

------

1. Selecione **Revisar política**.

1. Em **Name** (Nome), insira um nome para a política (por exemplo, **LakeFormationGlueInlinePolicy**).

1. Escolha **Criar política**.

**Para adicionar uma política em linha à função para o local de resultados das consultas do Athena**

1. Na página **Summary** (Resumo) da função `Athena-LakeFormation-OktaRole`, na guia **Permissions** (Permissões), escolha **Add inline policy** (Adicionar política em linha).

1. Na página **Create policy (Criar política)**, escolha **JSON**.

1. Adicione uma política em linha, semelhante à mostrada abaixo, que permite o acesso da função ao local de resultados das consultas do Athena. Substitua os espaços reservados *<athena-query-results-bucket>* no exemplo pelo nome do seu bucket do Amazon S3.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AthenaQueryResultsPermissionsForS3",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<athena-query-results-bucket>",
                   "arn:aws:s3:::<athena-query-results-bucket>/*"
               ]
           }
       ]
   }
   ```

------

1. Selecione **Revisar política**.

1. Em **Name** (Nome), insira um nome para a política (por exemplo, **AthenaQueryResultsInlinePolicy**).

1. Escolha **Criar política**.

Na sequência, copie o ARN da função de acesso do Lake Formation e o ARN do provedor SAML criado. Eles serão necessários para você configurar a aplicação SAML do Okta na próxima seção do tutorial.

**Para copiar o ARN da função e o ARN do provedor de identidade SAML**

1. No console do IAM, na página **Summary** (Resumo) da função `Athena-LakeFormation-OktaRole`, escolha o ícone **Copy to clipboard** (Copiar para área de transferência) ao lado de **Role ARN** (ARN da função). O ARN tem o seguinte formato:

   ```
   arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```

1. Salve o ARN completo com segurança para referência futura.

1. No painel de navegação do console do IAM, escolha **Identity providers** (Provedores de identidade).

1. Escolha o provedor **AthenaLakeFormationOkta**.

1. Na página **Summary** (Resumo), escolha o ícone **Copy to clipboard** (Copiar para área de transferência) ao lado de **Provider ARN** (ARN do provedor). O Nome de região da Amazon (ARN) deve se parecer com o seguinte:

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta
   ```

1. Salve o ARN completo com segurança para referência futura.

## Etapa 5: Adicionar a função do IAM e o provedor de identidade SAML à aplicação do Okta
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider"></a>

Nesta etapa, você retorna ao console de desenvolvedor do Okta e executa as seguintes tarefas:
+ Adicionar atributos de URL do Lake Formation de usuário e de grupo à aplicação do Okta.
+ Adicionar o ARN do provedor de identidade e da função do IAM à aplicação do Okta.
+ Copiar o ID da aplicação do Okta. O ID da aplicação do Okta é necessário no perfil JDBC que se conecta ao Athena.

**Para adicionar atributos de URL do Lake Formation de usuário e de grupo à aplicação do Okta**

1. Faça login no console de desenvolvedor do Okta.

1. Escolha a guia **Applications** (Aplicações) e selecione a aplicação `Athena-LakeFormation-Okta`.

1. Escolha a guia **Sign On** (Logon) da aplicação e selecione **Edit** (Editar).  
![\[Edite a aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-24.png)

1. Escolha **Attributes (optional)** (Atributos (opcional)) para expandi-los.  
![\[Adicionar atributos de URL do Lake Formation de usuário à aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25.png)

1. Em **Attribute Statements (optional)** (Instruções do atributo (opcional)), adicione o seguinte atributo:
   + Em **Nome**, digite **https://lakeformation.amazon.com/SAML/Attributes/Username**.
   + Em **Value** (Valor), insira **user.login**

1. Em **Group Attribute Statements (optional)** (Instruções do atributo de grupo (opcional)), adicione o seguinte atributo:
   + Em **Nome**, digite **https://lakeformation.amazon.com/SAML/Attributes/Groups**.
   + Em **Name format** (Formato de nome), insira **Basic**
   + Em **Filter** (Filtro), escolha **Matches regex** (Corresponde a regex) e insira **.\$1** na caixa do filtro.  
![\[Adicionar atributos de URL do Lake Formation de grupo à aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25a.png)

1. Role para baixo até a seção **Advanced Sign-On Settings** (Configurações avançadas de logon), na qual você adiciona os ARNs do provedor de identidade e da função do IAM à aplicação do Okta.

**Para adicionar os ARNs do provedor de identidade e da função do IAM à aplicação do Okta**

1. Em **Idp ARN and Role ARN** (ARN do ldp e ARN da função), insira o ARN do provedor de identidade da AWS e o ARN da função como valores separados por vírgulas no formato *<saml-arn>*,*<role-arn>*. A string combinada deve ter a seguinte aparência:

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta,arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```  
![\[Inserir o ARN do provedor de identidade e o ARN da função do IAM na aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-26.png)

1. Escolha **Salvar**.

Em seguida, copie o ID da aplicação do Okta. Você precisará dele mais tarde para a string JDBC que se conecta ao Athena.

**Para localizar e copiar o ID da aplicação do Okta.**

1. Escolha a guia **General** (Geral) da aplicação do Okta.  
![\[Escolha a guia General (Geral) da aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-27.png)

1. Rola para baixo até a seção **App Embed Link** (Link de incorporação de aplicação).

1. Em **Embed Link** (Link de incorporação), copie e salve a parte do URL da aplicação do Okta com segurança. O ID da aplicação do Okta é a parte do URL que vem depois de `amazon_aws_redshift/`, mas antes da próxima barra. Por exemplo, se o URL incluir `amazon_aws_redshift/aaa/bbb`, o ID da aplicação será `aaa`.   
![\[Copie o ID da aplicação do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-28.png)

**nota**  
O link de incorporação não pode ser usado para fazer login diretamente no console do Athena para a exibição bancos de dados. As permissões do Lake Formation para usuários e grupos SAML são reconhecidas somente quando você utiliza o driver JDBC ou ODBC para enviar consultas ao Athena. Para exibir os bancos de dados, é possível utilizar usar a ferramenta SQL Workbench/J, que usa o driver JDBC para se conectar ao Athena. A ferramenta SQL Workbench/J é discutida em [Etapa 7: Verificar o acesso pelo cliente Athena JDBC](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client).

## Etapa 6: Conceder permissões de usuário e grupo pelo AWS Lake Formation
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation"></a>

Nesta etapa, você usa o console do Lake Formation para conceder permissões em uma tabela ao usuário e grupo do SAML. Você executa as seguintes tarefas:
+ Especificar o ARN do usuário SAML do Okta e as permissões do usuário associadas na tabela.
+ Especificar o ARN do grupo SAML do Okta e as permissões do grupo associadas na tabela.
+ Verificar as permissões que você concedeu.

**Para conceder permissões no Lake Formation para o usuário do Okta**

1. Faça login como administrador de data lake no Console de gerenciamento da AWS. 

1. Abra o console do Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. No painel de navegação, escolha **Tables** (Tabelas) e selecione a tabela à qual você deseja conceder as permissões. Este tutorial usa a tabela `nyctaxi` do banco de dados `tripdb`.  
![\[Escolha a tabela à qual deseja conceder as permissões.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-29.png)

1. Em **Actions** (Ações), escolha **Grant** (Conceder).  
![\[Escolha Grant (Conceder).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-30.png)

1. Na caixa de diálogo **Grant permissions** (Conceder permissões), insira as seguintes informações:

   1. Em **Usuários e grupos do SAML e do Amazon Quick**, insira o ARN do usuário SAML do Okta no seguinte formato:

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:user/<athena-okta-user>@<anycompany.com>       
      ```

   1. Em **Columns** (Colunas), **Choose filter type** (Escolher tipo de filtro), escolha **Include columns** (Incluir colunas) ou **Exclude columns** (Excluir colunas) conforme desejado.

   1. Use o menu suspenso **Choose one or more columns** (Escolher uma ou mais colunas) do filtro para especificar as colunas que você deseja incluir ou excluir do usuário.

   1. Em **Table permissions** (Permissões de tabela), escolha **Select** (Selecionar). Este tutorial concede apenas as permissões `SELECT`, seus requisitos podem variar.  
![\[Conceder permissões no nível da tabela e da coluna a um usuário do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31.png)

1. Escolha **Grant** (Conceder).

Agora você executa as mesmas etapas para o grupo do Okta.

**Para conceder permissões no Lake Formation ao grupo do Okta**

1. Na página **Tables** (Tabelas) do console do Lake Formation, verifique se a tabela **nyctaxi** ainda está selecionada.

1. Em **Actions** (Ações), escolha **Grant** (Conceder).

1. Na caixa de diálogo **Grant permissions** (Conceder permissões), insira as seguintes informações:

   1. Em **Usuários e grupos do SAML e do Amazon Quick**, insira o ARN do grupo SAML do Okta no seguinte formato:

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:group/lf-business-analyst
      ```

   1. Em **Columns** (Colunas), **Choose filter type** (Escolher tipo de filtro), escolha **Include columns** (Incluir colunas).

   1. Em **Choose one or more columns** (Escolher uma ou mais colunas), escolha as primeiras três colunas da tabela.

   1. Em **Table permissions** (Permissões de tabela), escolha as permissões de acesso específicas para conceder. Este tutorial concede apenas as permissões `SELECT`, seus requisitos podem variar.  
![\[Conceder permissões de tabela a um grupo do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31b.png)

1. Escolha **Grant** (Conceder).

1. Para verificar as permissões concedidas, escolha **Actions** (Ações), **View permissions** (Visualizar permissões).  
![\[Escolha View permissions (Visualizar permissões) para verificar as permissões concedidas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-32.png)

   A página **Permissões de dados** da tabela `nyctaxi` mostra as permissões do **athena-okta-user** e do grupo **lf-business-analyst**.  
![\[Visualizar as permissões concedidas ao usuário e grupo do Okta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-33.png)

## Etapa 7: Verificar o acesso pelo cliente Athena JDBC
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client"></a>

Agora você está pronto para usar um cliente JDBC para executar uma conexão de teste com o Athena como usuário SAML do Okta. 

Nesta seção, você pode executar as seguintes tarefas:
+ Preparar o cliente de teste: baixe o driver Athena JDBC, instale o SQL Workbench e adicione o driver ao Workbench. Este tutorial usa o SQL Workbench para acessar o Athena por meio da autenticação do Okta e verificar as permissões do Lake Formation.
+ No SQL Workbench:
  + Crie uma conexão para o usuário do Okta no Athena.
  + Execute as consultas de teste como o usuário do Okta no Athena.
  + Crie e teste uma conexão para o usuário “analista de negócios”.
+ No console do Okta, adicione o usuário “analista de negócios” ao grupo de desenvolvedores.
+ No console do Lake Formation, configure as permissões de tabela para o grupo de desenvolvedores.
+ No SQL Workbench, execute as consultas de teste como o usuário “analista de negócios” e verifique como a alteração nas permissões afeta os resultados.

**Para preparar o cliente de teste**

1. Baixe e extraia o driver Athena JDBC compatível com o Lake Formation (2.0.14 ou versão mais recente) em [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md).

1. Baixe e instale a ferramenta de consulta SQL gratuita [SQL Workbench/J](https://www.sql-workbench.eu/index.html), disponível na licença modificada do Apache 2.0.

1. No SQL Workbench, escolha **File** (Arquivo) e **Manage Drivers** (Gerenciar drivers).  
![\[Escolha Manage Drivers (Gerenciar drivers).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-1.png)

1. Na caixa de diálogo **Manage Drivers** (Gerenciar drivers), execute as seguintes etapas:

   1. Escolha o ícone do novo driver.

   1. Em **Name** (Nome), insira **Athena**.

   1. Em **Library** (Biblioteca), procure e escolha o arquivo `.jar` do Simba Athena JDBC que você acabou de baixar.

   1. Escolha **OK**.  
![\[Adicionar o driver Athena JDBC ao SQL Workbench.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-2.png)

Agora você está pronto para criar e testar uma conexão para o usuário do Okta no Athena.

**Para criar uma conexão para o usuário do Okta**

1. Escolha **File** (Arquivo), **Connect window** (Conectar janela).  
![\[Escolha Connect window (Conectar janela).\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-3.png)

1. Na caixa de diálogo **Connection profile** (Perfil de conexão), crie uma conexão inserindo as seguintes informações:
   + Na caixa do nome, insira **Athena\$1Okta\$1User\$1Connection**.
   + Em **Driver**, escolha o driver Simba Athena JDBC.
   + Em **URL**, realize um destes procedimentos:
     + Para usar um URL de conexão, insira uma string de conexão de linha única. O exemplo a seguir contém quebras de linha para facilitar a leitura.

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-okta-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-app-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + Para usar um URL baseado no perfil da AWS, execute as seguintes etapas:

       1. Configure um [perfil da AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) que tenha um arquivo de credenciais da AWS, como mostrado no exemplo a seguir.

          ```
          [athena_lf_dev]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-app-id
          uid=athena-okta-user@anycompany.com
          pwd=password
          ```

       1. Em **URL**, insira uma string de conexão de linha única, como mostrado no exemplo a seguir. O exemplo contém quebras de linha para facilitar a leitura.

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_dev;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

     Observe que esses exemplos são representações básicas do URL necessário para se conectar ao Athena. Para ver a lista completa dos parâmetros permitidos na URL, consulte a [documentação do JDBC](connect-with-jdbc.md).

   A imagem a seguir mostra um perfil de conexão do SQL Workbench que usa um URL de conexão.  
![\[Um perfil de conexão no SQL Workbench.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-4.png)

Agora que você estabeleceu uma conexão para o usuário do Okta, pode testá-la recuperando alguns dados.

**Para testar a conexão do usuário do Okta**

1. Escolha **Test** (Testar) e verifique se a conexão foi estabelecida.

1. Na janela **Statement** (Instrução) do SQL Workbench, execute o comando SQL `DESCRIBE` a seguir. Verifique se todas as colunas são exibidas.

   ```
   DESCRIBE "tripdb"."nyctaxi"
   ```  
![\[Todas as colunas exibidas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-5.png)

1. Na janela **Statement** (Instrução) do SQL Workbench, execute o comando SQL `SELECT` a seguir. Verifique se todas as colunas são exibidas.

   ```
   SELECT * FROM tripdb.nyctaxi LIMIT 5
   ```  
![\[Verifique se todas as colunas são exibidas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-6.png)

Na sequência, verifique se o **athena-ba-user**, como membro do grupo **lf-business-analyst**, tem acesso apenas às primeiras três colunas da tabela que você especificou anteriormente no Lake Formation.

**Para verificar o acesso do **athena-ba-user****

1. No SQL Workbench, na caixa de diálogo **Connection profile** (Perfil de conexão), crie outro perfil de conexão.
   + Para o nome do perfil de conexão, insira ** Athena\$1Okta\$1Group\$1Connection**.
   + Em **Driver**, escolha o driver Simba Athena JDBC.
   + Em **URL**, realize um destes procedimentos:
     + Para usar um URL de conexão, insira uma string de conexão de linha única. O exemplo a seguir contém quebras de linha para facilitar a leitura.

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-ba-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-application-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + Para usar um URL baseado no perfil da AWS, execute as seguintes etapas:

       1. Configure um perfil da AWS que tenha um arquivo de credenciais, como mostrado no exemplo a seguir.

          ```
          [athena_lf_ba]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-application-id
          uid=athena-ba-user@anycompany.com
          pwd=password
          ```

       1. Em **URL**, insira uma string de conexão de linha única, como mostrado a seguir. O exemplo contém quebras de linha para facilitar a leitura.

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_ba;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

1. Escolha **Test** (Testar) para confirmar se a conexão foi estabelecida.

1. Na janela **SQL Statement** (Instrução SQL), execute os mesmos comandos SQL `DESCRIBE` e `SELECT` de antes e confira os resultados.

   Como o **athena-ba-user** é membro do grupo **lf-business-analyst**, apenas as três primeiras colunas que você especificou no console do Lake Formation são retornadas.  
![\[Somente as três primeiras colunas são retornadas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-7.png)  
![\[Dados das três primeiras colunas.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-8.png)

Depois disso, retorne ao console do Okta para adicionar o `athena-ba-user` ao grupo do Okta `lf-developer`.

**Para adicionar o athena-ba-user ao grupo lf-developer**

1. Faça login no console do Okta como usuário administrativo do domínio do Okta atribuído.

1. Escolha **Directory** (Diretório) e **Groups** (Grupos).

1. Na página Groups (Grupos), escolha o grupo **lf-developer**.  
![\[Escolha o grupo lf-developer.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-9.png)

1. Escolha **Manage People** (Gerenciar pessoas).

1. Na lista **Not Members** (Não membros), escolha o **athena-ba-user** para adicionar ao **grupo lf-developer**.

1. Escolha **Salvar**.

Agora você retorna ao console do Lake Formation para configurar as permissões de tabela do grupo **lf-developer**.

**Para configurar as permissões de tabela do grupo lf-developer**

1. Faça login no console do Lake Formation como administrador do data lake.

1. No painel de navegação, selecione **Tabelas**.

1. Selecione a tabela **nyctaxi**.

1. Escolha **Actions** (Ações), **Grant** (Conceder).

1. Na caixa de diálogo **Grant Permissions** (Conceder permissões), insira as seguintes informações:
   + Em **Usuários e grupos do SAML e do Amazon Quick**, insira o ARN do grupo SAML lf-developer do Okta no seguinte formato:
   + Em **Columns** (Colunas), **Choose filter type** (Escolher tipo de filtro), escolha **Include columns** (Incluir colunas).
   + Escolha a coluna **trip\$1type**.
   + Em **Table permissions** (Permissões de tabela), escolha **SELECT**.

1. Escolha **Grant** (Conceder).

Agora você pode usar o SQL Workbench para verificar a alteração nas permissões do grupo **lf-developer**. A alteração deve ser refletida nos dados disponíveis ao **athena-ba-user**, que agora é membro do grupo **lf-developer**.

**Para verificar a alteração nas permissões do athena-ba-user**

1. Feche e reabra o programa SQL Workbench.

1. Conecte-se ao perfil do **athena-ba-user**.

1. Na janela **Statement** (Instrução), emita as mesmas instruções SQL que você executou antes:

   Desta vez, a coluna **trip\$1type** é exibida.  
![\[A quarta coluna está disponível para consulta.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-10.png)

   Como o **athena-ba-user** agora é membro dos dois grupos **lf-developer** e **lf-business-analyst**, a combinação das permissões do Lake Formation desses grupos determina as colunas que são retornadas.  
![\[A quarta coluna nos resultados dos dados.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-11.png)

## Conclusão
<a name="security-athena-lake-formation-jdbc-okta-tutorial-conclusion"></a>

Neste tutorial, você configurou a integração do Athena com o AWS Lake Formationusando o Okta como provedor SAML. Você usou o Lake Formation e o IAM para controlar os recursos disponíveis ao usuário SAML no Catálogo de dados do AWS Glue do seu data lake.

## Recursos relacionados
<a name="security-athena-lake-formation-jdbc-okta-tutorial-related-resources"></a>

Para obter informações relacionadas, consulte os recursos a seguir.
+ [Conectar ao Amazon Athena com JDBC](connect-with-jdbc.md)
+ [Habilitar o acesso federado à API do Athena](access-federation-saml.md)
+ [AWS Lake Formation Guia do desenvolvedor do](https://docs.aws.amazon.com/lake-formation/latest/dg/)
+ [Granting and revoking Data Catalog permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) (Conceder e revogar permissões de catálogo de dados) no *Guia do desenvolvedor do AWS Lake Formation*.
+ [Provedores de identidade e federação](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) no *Guia do usuário do IAM*.
+ [Criação de provedores de identidade SAML do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) no *Guia do usuário do IAM*.
+ [Habilitar a federação na AWS usando Windows Active Directory, ADFS e SAML 2.0](https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/) no *blog de segurança da AWS*.

# Gerenciamento do workload
<a name="workload-management"></a>

Você pode usar os recursos de grupo de trabalho, gerenciamento de capacidade, ajuste de performance, suporte à compactação, etiquetas e cotas de serviço do Athena para gerenciar sua workload.

**Topics**
+ [

# Usar grupos de trabalho para controlar o acesso a consultas e os custos
](workgroups-manage-queries-control-costs.md)
+ [

# Gerenciar a capacidade de processamento de consulta
](capacity-management.md)
+ [

# Otimizar a performance do Athena
](performance-tuning.md)
+ [

# Usar compactação no Athena
](compression-formats.md)
+ [

# Marcar recursos do Athena com tags
](tags.md)
+ [

# Service Quotas
](service-limits.md)

# Usar grupos de trabalho para controlar o acesso a consultas e os custos
<a name="workgroups-manage-queries-control-costs"></a>

Você pode usar os grupos de trabalho do Athena para separar as workloads, controlar o acesso das equipes, impor uma configuração, monitorar as métricas de consultas e controlar os custos.

**Separar as workloads**  
Você pode usar os grupos de trabalho para separar as workloads. Por exemplo, você pode criar dois grupos de trabalho independentes: um para aplicativos programados automatizados, como geração de relatórios, e outro para uso ad-hoc por analistas. 

**Controlar o acesso das equipes**  
Como os grupos de trabalho funcionam como recursos do IAM, você pode usar políticas baseadas em identidade no nível dos recursos para controlar quem pode acessar executar consultas em um grupo de trabalho. Para isolar as consultas de duas equipes diferentes da organização, você pode criar um grupo de trabalho separado para cada equipe. Cada grupo de trabalho tem seu próprio histórico de consultas e uma lista das consultas salvas daquele grupo, e não de todas as consultas da conta. Para obter mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md). 

**Impor uma configuração**  
Opcionalmente, você pode impor a todo o grupo de trabalho as mesmas configurações para todas as consultas nele executadas. As configurações incluem: local dos resultados das consultas no Amazon S3, proprietário previsto do bucket, criptografia e controle dos objetos gravados no bucket de resultados de consultas. Para obter mais informações, consulte [Override client-side settings (Substituir configurações no lado do cliente)](workgroups-settings-override.md).

**Monitorar métricas e eventos de consulta, e controlar custos**  
Para monitorar as métricas e os eventos de consulta, e controlar os custos de cada grupo de trabalho do Athena, você pode usar os seguintes atributos:
+ **Publicar métricas de consultas**: publique as métricas de consultas do grupo de trabalho no CloudWatch. No console do Athena, você pode visualizar as métricas de consultas para cada um dos grupos de trabalho. No CloudWatch, você pode criar painéis personalizados e definir limites e alarmes para essas métricas. Para obter mais informações, consulte [Habilitar métricas de consultas do CloudWatch no Athena](athena-cloudwatch-metrics-enable.md) e [Monitorar métricas de consultas do Athena com o CloudWatch](query-metrics-viewing.md).
+ **Monitorar métricas de uso do Athena**: veja como a sua conta usa os recursos, exibindo o uso do serviço atual por meio de gráficos e painéis do CloudWatch. Para obter mais informações, consulte . [Monitorar métricas de uso do Athena com o CloudWatch](monitoring-athena-usage-metrics.md)
+ **Monitorar eventos de consulta**: use o Amazon EventBridge para receber notificações em tempo real sobre o estado das suas consultas. Para obter mais informações, consulte [Monitorar eventos de consulta do Athena com o EventBridge](athena-events.md).
+ **Criar controles de uso de dados**: no Athena, você pode configurar controles de uso de dados por consulta e por grupo de trabalho. O Athena cancela as consultas quando elas excedem o limite especificado ou ativa um alarme do Amazon SNS quando um limite do grupo de trabalho é violado. Para obter mais informações, consulte [Configurar controles de uso de dados por consulta e por grupo de trabalho](workgroups-setting-control-limits-cloudwatch.md).
+ **Usar tags de alocação de custos**: use o console do Billing and Cost Management para marcar os grupos de trabalho com tags de alocação de custos. Os custos associados à execução de consultas no grupo de trabalho aparecem no relatório de custos e uso com a respectiva tag de alocação de custos. Para obter mais informações, consulte [Using user-defined cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html) no *AWS Billing User Guide*.
+ **Usar reservas de capacidade**: você pode criar reservas de capacidade, com a quantidade de unidades de processamento de dados especificada, e adicionar um ou mais grupos de trabalho à reserva. Para obter mais informações, consulte [Gerenciar a capacidade de processamento de consulta](capacity-management.md).

Para obter mais informações sobre o uso de grupos de trabalho do Athena para separar as workloads, controlar o acesso dos usuários e gerenciar o uso e os custos das consultas, consulte a postagem [Separate queries and managing costs using Amazon Athena workgroups](https://aws.amazon.com/blogs/big-data/separating-queries-and-managing-costs-using-amazon-athena-workgroups/) no blog de big data da AWS.

**nota**  
Os recursos do Amazon Athena agora podem ser acessados no Estúdio Unificado Amazon SageMaker (Preview), o que ajuda você a acessar os dados da sua organização e agir com base neles usando as melhores ferramentas. É possível migrar consultas salvas de um grupo de trabalho do Athena para um projeto do SageMaker Unified Studio, configurar projetos com grupos de trabalho existentes do Athena e manter as permissões necessárias por meio de atualizações de perfis do IAM. Para obter mais informações, consulte [Migrar recursos do Amazon Athena para o Estudio Unificado Amazon SageMaker (Preview)](https://github.com/aws/Unified-Studio-for-Amazon-Sagemaker/tree/main/migration/athena).

## Considerações e limitações
<a name="workgroups-considerations-limitations"></a>

Quando você usar grupos de trabalho no Athena, tenha em mente os seguintes pontos:
+ Cada conta tem um grupo de trabalho principal. Por padrão, se você ainda não criou nenhum grupo de trabalho, todas as consultas na sua conta são executadas no grupo de trabalho principal. O grupo de trabalho principal não pode ser excluído. As permissões padrão permitem que todos os usuários autenticados acessem esse grupo de trabalho. 
+ Quando você tiver acesso a um grupo de trabalho, poderá visualizar as configurações de grupo de trabalho, as métricas e os limites de controle de uso de dados. Com permissões adicionais, é possível editar as configurações e os limites de controle de uso de dados. 
+ Quando você executar consultas, elas serão executadas no grupo de trabalho atual. Você pode executar consultas no contexto de um grupo de trabalho no console por meio de operações da API, da interface de linha de comando ou de uma aplicação cliente usando o driver JDBC ou ODBC. 
+ No editor de consultas do console do Athena, você pode abrir até dez guias de consulta em cada grupo de trabalho. Quando você alterna entre os grupos de trabalho, as guias de consulta para até três grupos de trabalho permanecem abertas. 
+ Você pode criar até mil grupos de trabalho por Região da AWS na sua conta. 
+ Os grupos de trabalho podem ser desabilitados. Desabilitar um grupo de trabalho impede a execução de consultas nele até que ele seja reabilitado.
+ O Athena avisa se você tentar excluir um grupo de trabalho que contenha consultas salvas. Antes de excluir um grupo de trabalho ao qual outros usuários têm acesso, certifique-se de que eles tenham acesso a outros grupos de trabalho que possam usar para executar consultas. 

**Topics**
+ [

## Considerações e limitações
](#workgroups-considerations-limitations)
+ [

# Criar um grupo de trabalho
](creating-workgroups.md)
+ [

# Gerenciar grupos de trabalho
](workgroups-create-update-delete.md)
+ [Usar o CloudWatch e o EventBridge para monitorar as consultas](workgroups-control-limits.md)
+ [

# Usar APIs de grupos de trabalho do Athena
](workgroups-api-list.md)
+ [Solucionar problemas de grupos de trabalho](workgroups-troubleshooting.md)

# Criar um grupo de trabalho
<a name="creating-workgroups"></a>

Criar um grupo de trabalho requer permissões para ações da API `CreateWorkgroup`. Consulte [Configurar o acesso a grupos de trabalho e tags](workgroups-access.md) e [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md). Se você adicionar tags, também precisará adicionar permissões para `TagResource`. Consulte [Exemplos de política de etiquetas para grupos de trabalho](tags-access-control.md#tag-policy-examples-workgroups).

O procedimento a seguir mostra como usar o console do Athena para criar um grupo de trabalho. Para criar um grupo de trabalho usando a API do Athena, consulte [CreateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateWorkGroup.html).

**Para criar um grupo de trabalho no console do Athena**

1.  Decida quais grupos de trabalho deseja criar. Estes são alguns fatores que devem ser considerados:
   + Quem pode executar consultas em cada grupo de trabalho e de quem é a configuração do grupo de trabalho. Use as políticas do IAM para impor as permissões de grupo de trabalho. Para obter mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md).
   + O local no Amazon S3 a ser usada para os resultados das consultas do grupo de trabalho. Todos os usuários do grupo de trabalho devem ter acesso a esse local.
   + Se os resultados de consultas do grupo de trabalho devem ou não ser criptografados. Como a criptografia é definida para o grupo de trabalho (não para a consulta), você deve criar grupos de trabalho separados para resultados de consultas criptografados e não criptografados. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), escolha **Create workgroup** (Criar grupo de trabalho). 

1. Na página **Create workgroup** (Criar grupo de trabalho), preencha os campos da seguinte forma:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/creating-workgroups.html)

1. Escolha **Create workgroup (Criar grupo de trabalho)**. O grupo de trabalho aparece na lista na página **Workgroups** (Grupos de trabalho).

   No editor de consultas, o Athena exibe o grupo de trabalho atual na opção **Grupo de trabalho** no canto superior direito do console. Você pode usar essa opção para alternar grupos de trabalho. Quando você executar consultas, elas serão executadas no grupo de trabalho atual.

1. Crie políticas do IAM para seus usuários, grupos ou funções para habilitar o acesso deles aos grupos de trabalho. As políticas estabelecem a associação do grupo de trabalho e o acesso a ações em um recurso `workgroup`. Para obter mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md). Para obter exemplos de políticas em JSON, consulte [Configurar o acesso a grupos de trabalho e tags](workgroups-access.md).

1. (Opcional) Configure um nível mínimo de criptografia no Amazon S3 para todos os resultados de consultas do grupo de trabalho quando a criptografia não for imposta a todo o grupo de trabalho pela opção de substituir as configurações do lado do cliente. Use esse recurso para garantir que os resultados da consulta nunca sejam armazenados em um bucket do Amazon S3 em estado não criptografado. Para obter mais informações, consulte [Configurar criptografia mínima para um grupo de trabalho](workgroups-minimum-encryption.md).

1. (Opcional) Use o Amazon CloudWatch e o Amazon EventBridge para monitorar as consultas e controlar os custos do grupo de trabalho. Para obter mais informações, consulte [Usar o CloudWatch e o EventBridge para monitorar as consultas e controlar os custos](workgroups-control-limits.md).

1. (Opcional) Use o console do Billing and Cost Management para marcar os grupos de trabalho com tags de alocação de custos. Para obter mais informações, consulte [Using user-defined cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html) no *AWS Billing User Guide*.

1. (Opcional) Para ter capacidade de processamento dedicada para as consultas do grupo de trabalho, adicione o grupo de trabalho a uma reserva de capacidade. Você pode atribuir um ou mais grupos de trabalho a uma reserva. Para obter mais informações, consulte [Gerenciar a capacidade de processamento de consulta](capacity-management.md).

# Override client-side settings (Substituir configurações no lado do cliente)
<a name="workgroups-settings-override"></a>

Ao criar ou editar um grupo de trabalho, você pode escolher a opção **Substituir as configurações do lado do cliente**. Essa opção não é selecionada por padrão. Dependendo da sua seleção, o Athena faz o seguinte:
+ Se a opção **Substituir configurações no lado do cliente** não estiver selecionada, as configurações do grupo de trabalho não serão impostas no nível do cliente. Quando a opção de substituir as configurações do lado cliente não está selecionada para o grupo de trabalho, o Athena usa as configurações do cliente para todas as consultas executadas no grupo de trabalho, inclusive as configurações para localização dos resultados de consultas, proprietário do bucket esperado, criptografia e controle de objetos gravados no bucket de resultados de consultas. Cada usuário pode especificar as próprias configurações no menu **Configurações** no console. Se as configurações no lado do cliente não forem definidas, serão aplicadas as configurações de todo o grupo de trabalho. Se você usar a AWS CLI, ações de API ou os drivers JDBC e ODBC para executar consultas em um grupo de trabalho que não substitui as configurações do lado do cliente, suas consultas usarão as configurações especificadas em suas consultas.
+ Se a opção **Substituir configurações no lado do cliente** for selecionada, as configurações do grupo de trabalho serão impostas no nível do cliente a todos os clientes do grupo de trabalho. Quando a opção de substituir as configurações do lado cliente está selecionada para o grupo de trabalho, o Athena usa as configurações do grupo de trabalho para todas as consultas executadas no grupo de trabalho, inclusive as configurações para localização dos resultados de consultas, proprietário do bucket esperado, criptografia e controle de objetos gravados no bucket de resultados de consultas. As configurações do grupo de trabalho substituem todas as configurações do lado do cliente especificadas para uma consulta ao usar o console, as ações da API ou os drivers JDBC ou ODBC. Após as configurações do grupo de trabalho serem definidas como Substituir as configurações do lado do cliente, as configurações do lado do cliente nos drivers ou na API podem ser omitidas.

  Se você substituir as configurações no lado do cliente, da próxima vez que você ou qualquer usuário do grupo de trabalho abrir o console do Athena, o Athena notificará você de que as consultas do grupo de trabalho usam as configurações do grupo de trabalho e solicitará a confirmação dessa alteração.
**nota**  
Como a substituição das configurações do lado do cliente pode interromper a automação personalizada baseada na disponibilidade de resultados em um bucket arbitrário do Amazon S3, recomendamos que você informe a seus usuários antes de fazer a substituição.
**Importante**  
Se você usar ações de API, a AWS CLI ou os drivers JDBC e ODBC para executar consultas em um grupo de trabalho que substitui as configurações do lado do cliente, omita as configurações do lado do cliente em suas consultas ou atualize-as para corresponder às configurações do grupo de trabalho.   
Se você especificar configurações do lado do cliente nas consultas, mas executá-las em um grupo de trabalho que substitui as configurações, as consultas serão executadas, mas serão usadas as configurações do grupo de trabalho. Para obter informações sobre como visualizar as configurações de um grupo de trabalho, consulte [Visualizar os detalhes do grupo de trabalho](viewing-details-workgroups.md).

# Gerenciar grupos de trabalho
<a name="workgroups-create-update-delete"></a>

No console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home), você pode realizar as seguintes tarefas:




| Declaração | Descrição | 
| --- | --- | 
|  [Criar um grupo de trabalho](creating-workgroups.md)  |  Criar um novo grupo de trabalho.  | 
| [Visualizar os detalhes do grupo de trabalho](viewing-details-workgroups.md) | Visualize os detalhes do grupo de trabalho, como nome, descrição, limites de uso de dados, localização de resultados de consultas, proprietário esperado do bucket de resultados de consultas, criptografia e controle de objetos gravados no bucket de resultados de consultas. Você também pode verificar se esse grupo de trabalho impõe suas configurações, caso a opção Override client-side settings (Substituir configurações no lado do cliente) esteja marcada. | 
|  [Especificar um grupo de trabalho para consultas](specify-wkgroup-to-athena-in-which-to-run-queries.md)  |  Antes de executar as consultas, especifique ao Athena qual grupo de trabalho deve ser usado. Você deve ter permissões para o grupo de trabalho.   | 
|  [Alternar grupos de trabalho](switching-workgroups.md)  |  Alterne entre grupos de trabalho aos quais você tem acesso.   | 
|  [Editar um grupo de trabalho](editing-workgroups.md)  | Editar um grupo de trabalho e alterar as configurações. Você não pode alterar o nome de um grupo de trabalho, mas pode criar um novo grupo de trabalho com as mesmas configurações e um nome diferente. | 
|  [Habilitar ou desabilitar um grupo de trabalho](workgroups-enabled-disabled.md)  |  Habilite ou desabilite um grupo de trabalho. Quando um grupo de trabalho estiver desabilitado, os usuários não poderão executar consultas nem criar novas consultas com nome. Se você tiver acesso a ele, ainda pode visualizar métricas, os controles de limite de uso de dados, as configurações de grupo de trabalho, o histórico de consultas e as consultas salvas.  | 
|  [Copiar uma consulta salva entre grupos de trabalho](copy-a-query-between-workgroups.md)  | Copie uma consulta salva entre grupos de trabalho. Convém fazer isso se, por exemplo, você criou uma consulta em um grupo de trabalho de previsualização e quiser disponibilizá-la em um grupo de trabalho que não seja de previsualização. | 
|  [Excluir um grupo de trabalho](deleting-workgroups.md)  |  Exclua um grupo de trabalho. Se você excluir um grupo de trabalho, serão excluídos o histórico de consultas, as consultas salvas, as configurações do grupo de trabalho e os controles do limite de dados por consulta. Os controles do limite de dados no âmbito do grupo de trabalho permanecem no CloudWatch, e você pode excluí-los um a um. O grupo de trabalho principal não pode ser excluído.  | 
| [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md) | Use as políticas do IAM para controlar acesso dos grupos de trabalho. Para obter exemplos de políticas de grupo de trabalho, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md). | 
| [Crie um grupo de trabalho do Athena que use a autenticação do Centro de Identidade do IAM](workgroups-identity-center.md) | Para usar as identidades do Centro de Identidade do IAM com o Athena, é necessário criar um grupo de trabalho habilitado para o Centro de Identidade do IAM. Após criar o grupo de trabalho, você poderá usar o console ou a API do Centro de Identidade do IAM para atribuir usuários ou grupos do Centro de Identidade do IAM ao grupo de trabalho. | 
| [Configurar criptografia mínima para um grupo de trabalho](workgroups-minimum-encryption.md) | Imponha um nível mínimo de criptografia no Amazon S3 para todos os resultados de consultas do grupo de trabalho. Use esse atributo para garantir que os resultados de consulta nunca sejam armazenados em um bucket do Amazon S3 em estado não criptografado. | 

# Visualizar os detalhes do grupo de trabalho
<a name="viewing-details-workgroups"></a>

Para cada grupo de trabalho, você pode visualizar os detalhes. Os detalhes incluem o nome do grupo de trabalho, a descrição, se ele está habilitado ou desabilitado, e as configurações usadas para consultas executadas no grupo de trabalho, que incluem a localização dos resultados das consultas, o proprietário esperado do bucket, a criptografia e o controle de objetos gravados no bucket de resultados de consultas. Se um grupo de trabalho tiver limites de uso de dados, eles também serão exibidos.

**Para exibir os detalhes do grupo de trabalho**

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), escolha o link do grupo de trabalho que você deseja visualizar. A página **Overview Details** (Visão geral dos detalhes) do grupo de trabalho é exibida.

# Especificar um grupo de trabalho para consultas
<a name="specify-wkgroup-to-athena-in-which-to-run-queries"></a>

Para especificar um grupo de trabalho a ser usado, você deve ter permissões para ele. 

**Para especificar o grupo de trabalho a usar**

1. Suas permissões devem permitir que você execute consultas no grupo de trabalho que você pretende usar. Para obter mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md).

1.  Para especificar o grupo de trabalho, use uma destas opções: 
   + Se você estiver acessando o Athena por meio do console, defina o grupo de trabalho [alternando os grupos de trabalho](switching-workgroups.md).
   + Se você usa as operações de API do Athena, especifique o nome do grupo de trabalho na ação da API. Por exemplo, você pode definir o nome do grupo de trabalho em [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html), da seguinte forma: 

     ```
     StartQueryExecutionRequest startQueryExecutionRequest = new StartQueryExecutionRequest()
                   .withQueryString(ExampleConstants.ATHENA_SAMPLE_QUERY)
                   .withQueryExecutionContext(queryExecutionContext)
                   .withWorkGroup(WorkgroupName)
     ```
   + Se você estiver usando o driver JDBC ou ODBC, defina o nome do grupo de trabalho na string de conexão usando o parâmetro de configuração `Workgroup`. O driver passa o nome do grupo de trabalho para o Athena. Especifique o parâmetro do grupo de trabalho na string de conexão, como no exemplo a seguir: 

     ```
     jdbc:awsathena://AwsRegion=<AWSREGION>;UID=<ACCESSKEY>;
     PWD=<SECRETKEY>;S3OutputLocation=s3://amzn-s3-demo-bucket/<athena-output>-<AWSREGION>/;
     Workgroup=<WORKGROUPNAME>;
     ```

# Alternar grupos de trabalho
<a name="switching-workgroups"></a>

Você pode alternar de um grupo de trabalho para outro caso você tenha permissões para ambos.

Você pode abrir até dez guias de consulta dentro de cada grupo de trabalho. Quando alternar entre grupos de trabalho, suas guias de consulta permanecerão abertas para até três grupos de trabalho. 

**Para alternar grupos de trabalho**

1. No console do Athena, escolha a opção **Workgroup** (Grupo de trabalho) no canto superior direito para escolher um grupo de trabalho. 

1. Se a caixa de diálogo **Workgroup *workgroup-name* settings** (Configurações de nome-do-grupo-de-trabalho do grupo de trabalho) for exibida, escolha **Acknowledge** (Confirmar).

A opção **Workgroup** (Grupo de trabalho) mostra o nome do grupo de trabalho para o qual você mudou. Você já pode executar consultas nesse grupo de trabalho.

# Editar um grupo de trabalho
<a name="editing-workgroups"></a>

Como editar um grupo de trabalho requer permissões para operações da API `UpdateWorkgroup`. Consulte [Configurar o acesso a grupos de trabalho e tags](workgroups-access.md) e [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md). Se você adicionar ou editar tags, também precisará ter permissões para `TagResource`. Consulte [Exemplos de política de etiquetas para grupos de trabalho](tags-access-control.md#tag-policy-examples-workgroups).

**Para editar um grupo de trabalho no console**

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), selecione o botão do grupo de trabalho que você deseja editar. 

1. Selecione **Ações**, **Editar**.

1. Altere os campos conforme necessário. Para ver a lista de campos, consulte [Criar grupo de trabalho](creating-workgroups.md). Você pode alterar todos os campos, exceto pelo nome do grupo de trabalho. Se você precisar alterar o nome, crie outro grupo de trabalho com o novo nome e as mesmas configurações.

1. Escolha **Salvar alterações**. O grupo de trabalho atualizado aparece na lista na página **Workgroups** (Grupos de trabalho).

# Habilitar ou desabilitar um grupo de trabalho
<a name="workgroups-enabled-disabled"></a>

Se você tiver permissões para fazê-lo, pode habilitar ou desabilitar grupos de trabalho no console usando as operações de API ou com os drivers JDBC e ODBC.

**Para habilitar ou desabilitar um grupo de trabalho**

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), escolha o link do grupo de trabalho. 

1. No canto superior direito, escolha **Enable workgroup** (Habilitar grupo de trabalho) ou **Disable workgroup** (Desativar grupo de trabalho).

1. No prompt de confirmação, escolha **Enable** (Habilitar) ou **Disable** (Desabilitar). Se você desativar um grupo de trabalho, os usuários não poderão executar consultas nem criar novas consultas nomeadas. Se você habilitar um grupo de trabalho, os usuários poderão usá-lo para executar consultas.

# Copiar uma consulta salva entre grupos de trabalho
<a name="copy-a-query-between-workgroups"></a>

Atualmente, o console do Athena não tem uma opção para copiar uma consulta salva de um grupo de trabalho para outro diretamente, mas você pode executar a mesma tarefa manualmente usando o procedimento a seguir.

**Para copiar uma consulta salva entre grupos de trabalho**

1. No console do Athena, no grupo de trabalho do qual você deseja copiar a consulta, escolha a guia **Saved queries** (Consultas salvas). 

1. Escolha o link da consulta salva que você deseja copiar. O Athena abre a consulta no editor de consultas.

1. No editor de consultas, selecione o texto da consulta e pressione **Ctrl\$1C** para copiá-lo.

1. [Alterne](switching-workgroups.md) para o grupo de trabalho de destino ou [crie um grupo de trabalho](creating-workgroups.md) e alterne para ele.

1. Abra uma nova guia no editor de consultas e pressione **Ctrl\$1V** para colar o texto na nova guia.

1. No editor de consultas, escolha **Save as** (Salvar como) para salvar a consulta no grupo de trabalho de destino.

1. Na caixa de diálogo **Choose a name** (Escolher um nome), insira um nome para a consulta e uma descrição opcional.

1. Escolha **Salvar**.

# Excluir um grupo de trabalho
<a name="deleting-workgroups"></a>

Você pode excluir um grupo de trabalho se tiver permissões para fazê-lo. O grupo de trabalho principal não pode ser excluído. 

Se tiver permissões, você poderá excluir um grupo de trabalho vazio a qualquer momento. Você também pode excluir um grupo de trabalho que contém as consultas salvas. Nesse caso, antes de prosseguir para excluir um grupo de trabalho, o Athena avisa que as consultas salvas serão excluídas.

Se você excluir um grupo de trabalho enquanto estiver nele, o console vai alternar o foco para o grupo de trabalho principal. Se você tiver acesso a ele, pode executar consultas e exibir as configurações.

Se você excluir um grupo de trabalho, as configurações e os controles de limite de dados por consulta serão excluídos. Os controles de limite de dados no âmbito do grupo de trabalho permanecem no CloudWatch, e você pode excluí-los, se necessário.

**Importante**  
Antes de excluir um grupo de trabalho, verifique se os usuários também pertencem a outros grupos de trabalho onde podem continuar a executar consultas. Se as políticas do IAM dos usuários permitirem que eles executem consultas *somente* nesse grupo de trabalho e você o excluir, eles não terão mais permissões para executar as consultas. Para obter mais informações, consulte [Example policy for running queries in the primary workgroup](example-policies-workgroup.md#example4-run-in-primary-access).

**Para excluir um grupo de trabalho no console**

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), selecione o botão do grupo de trabalho que você deseja excluir.

1. Selecione **Ações**, **Excluir**.

1. No prompt de confirmação, insira **Delete workgroup** (Excluir grupo de trabalho) insira o nome do grupo de trabalho e, em seguida, escolha **Delete** (Excluir).

Para excluir um grupo de trabalho com a operação da API, use a ação `DeleteWorkGroup`.

# Usar o CloudWatch e o EventBridge para monitorar as consultas e controlar os custos
<a name="workgroups-control-limits"></a>

Os grupos de trabalho permitem que você defina os limites de controle de uso de dados por consulta ou por grupo de trabalho, configure alarmes quando esses limites são excedidos e publique métricas de consultas no CloudWatch.

Em cada grupo de trabalho, você pode:
+ Configurar os **Data usage controls (Controles de uso de dados)** por consulta e por grupo de trabalho e estabelecer ações que serão executadas se as consultas violarem os limites.
+ Visualizar e analisar as métricas de consulta e publicá-las no CloudWatch. Se você criar um grupo de trabalho no console, a configuração para publicação das métricas no CloudWatch será selecionada para você. Se você usar as operações de API, deve [habilitar a publicação de métricas](athena-cloudwatch-metrics-enable.md). Quando são publicadas, as métricas são exibidas na guia **Metrics (Métricas)** do painel **Workgroups (Grupos de trabalho)**. As métricas são desativadas por padrão para o grupo de trabalho principal. 

## Vídeo
<a name="athena-cloudwatch-metrics-video"></a>

O vídeo a seguir mostra como criar painéis personalizados e definir alarmes e acionadores com base nas métricas no CloudWatch. Você pode usar painéis pré-preenchidos diretamente do console do Athena para consumir essas métricas de consulta.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/x1V_lhkdKCg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/x1V_lhkdKCg)


**Topics**
+ [

## Vídeo
](#athena-cloudwatch-metrics-video)
+ [Habilitar métricas de consultas](athena-cloudwatch-metrics-enable.md)
+ [Monitorar métricas de consultas com o CloudWatch](query-metrics-viewing.md)
+ [Monitorar métricas de uso com o CloudWatch](monitoring-athena-usage-metrics.md)
+ [Monitorar eventos de consulta com o EventBridge](athena-events.md)
+ [Configurar controles de uso de dados](workgroups-setting-control-limits-cloudwatch.md)

# Habilitar métricas de consultas do CloudWatch no Athena
<a name="athena-cloudwatch-metrics-enable"></a>

Ao criar um grupo de trabalho no console, será selecionada por padrão a configuração para publicar as métricas de consulta no CloudWatch.

**Para habilitar ou desabilitar as métricas de consulta no console do Athena para um grupo de trabalho**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o link do grupo de trabalho que você deseja modificar.

1. Na página de detalhes do grupo de trabalho, escolha **Edit** (Editar).

1. Na seção **Configurações**, marque ou desmarque **Publicar métricas de consulta no AWS CloudWatch**.

Se você usar operações de API, a interface de linha de comando ou o aplicativo cliente com o driver JDBC para criar grupos de trabalho, de forma a habilitar a publicação de métricas de consulta, defina `PublishCloudWatchMetricsEnabled` como `true` em [WorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html). O exemplo a seguir mostra apenas a configuração das métricas e omite outra configuração:

```
"WorkGroupConfiguration": { 
      "PublishCloudWatchMetricsEnabled": "true"
     ....
     }
```

# Monitorar métricas de consultas do Athena com o CloudWatch
<a name="query-metrics-viewing"></a>

O Athena publica as métricas relacionadas à consulta no Amazon CloudWatch, quando a opção [Publish query metrics to CloudWatch](athena-cloudwatch-metrics-enable.md) (Publicar métricas de consulta no CloudWatch) está selecionada. Você pode criar painéis personalizados, definir alarmes e acionadores com base nas métricas no CloudWatch ou usar painéis pré-preenchidos diretamente no console do Athena. 

Quando você habilitar as métricas de consulta nos grupos de trabalho, elas serão exibidas na guia **Metrics** (Métricas) do painel **Workgroups** (Grupos de trabalho) para cada grupo de trabalho do console do Athena.

O Athena publica as seguintes métricas no console do CloudWatch:
+ `DPUAllocated`: o número total de DPUs (unidades de processamento de dados) provisionadas em uma reserva de capacidade para executar consultas.
+ `DPUConsumed`: o número de DPUs consumidas ativamente por consultas em um estado de `RUNNING` em um dado momento em uma reserva. Métrica emitida somente quando o grupo de trabalho está associado a uma reserva de capacidade e inclui todos os grupos de trabalho associados a uma reserva. 
+ `DPUCount`: o número máximo de DPUs consumidas pela consulta, publicado exatamente uma vez quando a consulta é concluída.
+ `EngineExecutionTime`: o número de milissegundos que a consulta levou para ser executada.
+ `ProcessedBytes`: o número de bytes verificados pelo Athena por consulta DML.
+ `QueryPlanningTime`: o número de milissegundos que o Athena levou para planejar o fluxo de processamento da consulta.
+ `QueryQueueTime`: o número de milissegundos que a consulta ficou na fila de consultas aguardando recursos.
+ `ServicePreProcessingTime`: o número de milissegundos que o Athena levou para pré-processar a consulta antes de enviá-la para o mecanismo de consulta.
+ `ServiceProcessingTime`: o número de milissegundos que o Athena levou para processar os resultados da consulta depois que o mecanismo de consulta concluiu sua execução.
+ `TotalExecutionTime`: o número de milissegundos que o Athena levou para executar uma consulta DDL ou DML. 

Para obter descrições mais completas, consulte [Lista de métricas e dimensões do CloudWatch para o Athena](#athena-cloudwatch-metrics-table) mais adiante neste documento.

Essas métricas têm as seguintes dimensões:
+ `CapacityReservation`: o nome da reserva de capacidade usada para executar a consulta, se aplicável.
+ `QueryState` – `SUCCEEDED`, `FAILED`, ou `CANCELED`
+ `QueryType` – `DML`, `DDL`, ou `UTILITY`
+ `WorkGroup`: nome do grupo de trabalho

O Athena publica a seguinte métrica no console do CloudWatch sob o namespace `AmazonAthenaForApacheSpark`:
+ `DPUCount`: a quantidade de DPUs consumidas durante a sessão para executar os cálculos.

Essa métrica tem as seguintes dimensões:
+ `SessionId`: o ID da sessão para a qual os cálculos são enviados.
+ `WorkGroup`: o nome do grupo de trabalho.

Para obter mais informações, consulte [Lista de métricas e dimensões do CloudWatch para o Athena](#athena-cloudwatch-metrics-table) posteriormente neste tópico. Para obter mais informações as métricas de uso do Athena, consulte [Monitorar métricas de uso do Athena com o CloudWatch](monitoring-athena-usage-metrics.md).

Você pode visualizar as métricas de consultas no console do Athena ou no console do CloudWatch.

## Visualizar métricas de consultas no console do Athena
<a name="query-metrics-viewing-athena-console"></a>

**Para visualizar as métricas de consultas para um grupo de trabalho no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o grupo de trabalho que você deseja na lista e escolha a guia **Metrics** (Métricas). 

   O painel de métricas é exibido.
**nota**  
Se você ativou recentemente métricas para o grupo de trabalho e/ou não houve nenhuma atividade de consulta recente, os gráficos no painel poderão ficar vazios. A atividade de consulta é recuperada do CloudWatch dependendo do intervalo especificado na próxima etapa. 

1. Na seção **Metrics** (Métricas), escolha o intervalo de métricas que o Athena deve usar para buscar as métricas de consulta do CloudWatch ou especifique um intervalo personalizado.  
![\[Especificar o intervalo de recuperação de métricas para um grupo de trabalho no console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/wg-custom-interval.png)

1. Para atualizar as métricas exibidas, escolha o ícone de atualização.  
![\[Escolha o ícone de atualização.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/wg-refresh-metrics.png)

1. Clique na seta ao lado do ícone de atualização para escolher com que frequência você deseja que a exibição de métricas seja atualizada.  
![\[Escolher um intervalo de atualização para a exibição das métricas do grupo de trabalho no console do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/wg-choose-refresh-interval.png)

## Visualizar métricas de consultas no console do CloudWatch
<a name="query-metrics-viewing-cw-console"></a>

**Para visualizar as métricas no console do Amazon CloudWatch**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, escolha **Metrics** (Métricas), **All metrics** (Todas as métricas).

1. Selecione o namespace **AWS/Athena**.

## Visualizar métricas de consultas com a AWS CLI
<a name="query-metrics-viewing-cli"></a>

**Para visualizar métricas com a AWS CLI**
+ Execute um destes procedimentos:
  + Para listar as métricas do Athena, abra um prompt de comando e use o seguinte comando:

    ```
    aws cloudwatch list-metrics --namespace "AWS/Athena"
    ```
  + Para listar todas as métricas disponíveis, use o comando a seguir:

    ```
    aws cloudwatch list-metrics"
    ```

## Lista de métricas e dimensões do CloudWatch para o Athena
<a name="athena-cloudwatch-metrics-table"></a>

Se você habilitou as métricas do CloudWatch no Athena, ele enviará as métricas a seguir ao CloudWatch por grupo de trabalho. As métricas a seguir usam o namespace `AWS/Athena`.


| Nome da métrica | Descrição | 
| --- | --- | 
| DPUAllocated |  O número total de DPUs (unidades de processamento de dados) provisionadas em uma reserva de capacidade para executar consultas.   | 
| DPUConsumed | O número de DPUs consumidas ativamente por consultas em um estado de RUNNING em um dado momento em uma reserva. Essa métrica só é emitida quando o grupo de trabalho está associado a uma reserva de capacidade e inclui todos os grupos de trabalho associados a uma reserva. Se você mover um grupo de trabalho de uma reserva para outra, a métrica incluirá dados de quando o grupo de trabalho pertencia à primeira reserva. Para obter mais informações sobre reservas de capacidade, consulte [Gerenciar a capacidade de processamento de consulta](capacity-management.md). | 
| DPUCount | O número máximo de DPUs consumidas pela consulta, publicado exatamente uma vez quando a consulta é concluída. Essa métrica só é emitida para grupos de trabalho associados a uma reserva de capacidade. | 
| EngineExecutionTime |  O número de milissegundos que a consulta levou para ser executada.  | 
| ProcessedBytes |  O número de bytes verificados pelo Athena para cada consulta DML. Para consultas que foram canceladas (pelo usuários, ou automaticamente, se atingiram o limite), isso inclui a quantidade de dados verificada antes da hora do cancelamento. Essa métrica não é relatada para consultas DDL.  | 
| QueryPlanningTime | O número de milissegundos que o Athena levou para planejar o fluxo de processamento da consulta. Isso inclui o tempo gasto recuperando partições de tabela da fonte de dados. Observe que, como o mecanismo de consulta executa o planejamento da consulta, o tempo de planejamento de consulta é um subconjunto de EngineExecutionTime. | 
| QueryQueueTime | O número de milissegundos que a consulta estava na fila de consultas aguardando recursos. Observe que, se ocorrerem erros temporários, a consulta poderá ser adicionada automaticamente de volta à fila. | 
| ServicePreProcessingTime | O número de milissegundos que o Athena levou para pré-processar a consulta antes de enviá-la para o mecanismo de consulta. | 
| ServiceProcessingTime | O número de milissegundos que o Athena levou para processar os resultados da consulta depois que o mecanismo de consulta concluiu a execução da consulta. | 
| TotalExecutionTime | O número de milissegundos que o Athena levou para executar uma consulta DDL ou DML. TotalExecutionTime inclui QueryQueueTime, QueryPlanningTime, EngineExecutionTime e ServiceProcessingTime. | 

Essas métricas do Athena têm as dimensões a seguir.


| Dimensão | Descrição | 
| --- | --- | 
| CapacityReservation |  O nome da reserva de capacidade usada para executar a consulta, se aplicável. Quando uma reserva de capacidade não é usada, essa dimensão não retorna nenhum dado.  | 
| QueryState |  O estado da consulta. Estatísticas válidas: SUCCEEDED, FAILED ou CANCELED.  | 
| QueryType |  O tipo de consulta. Estatísticas válidas: `DDL`, `DML` ou `UTILITY`. O tipo de instrução de consulta que foi executada. `DDL` indica instruções de consulta DDL (Data Definition Language). `DML` indica instruções de consulta DML (Data Manipulation Language), como `CREATE TABLE AS SELECT`. `UTILITY` indica instruções de consulta diferentes de DDL e DML, como `SHOW CREATE TABLE` ou `DESCRIBE TABLE`.  | 
| WorkGroup |  O nome do grupo de trabalho.  | 

# Monitorar métricas de uso do Athena com o CloudWatch
<a name="monitoring-athena-usage-metrics"></a>

Você pode usar as métricas de uso do CloudWatch para fornecer visibilidade de como a conta usa os recursos, exibindo o uso do serviço atual nos gráficos e painéis do CloudWatch.

Para o Athena, as métricas de disponibilidade para uso correspondem às cotas de AWS service (Serviço da AWS) para o Athena. Também é possível configurar alarmes que alertem você quando o uso se aproximar de uma cota de serviço. Para obter mais informações sobre cotas de serviço do Athena, consulte [Service Quotas](service-limits.md). Para obter mais informações sobre métricas de uso do AWS, consulte [ métricas de uso da AWS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Service-Quota-Integration.html) no *Guia do usuário do Amazon CloudWatch*.

O Athena publica as métricas a seguir no namespace `AWS/Usage`.


|  Nome da métrica  |  Descrição  | 
| --- | --- | 
|  `ResourceCount`  |  A soma de todas as consultas enfileiradas e em execução por Região da AWS por conta, separada por tipo de consulta (DML ou DDL). O máximo é a única estatística útil para essa métrica. Essa métrica é publicada periodicamente, a cada minuto. Se você não estiver executando nenhuma consulta, a métrica não reportará nada (nem mesmo 0). A métrica será publicada somente se as consultas ativas estiverem sendo executadas no momento em que a métrica é verificada.   | 

As dimensões a seguir são usadas para refinar as métricas de uso publicadas pelo Athena..


|  Dimensão  |  Descrição  | 
| --- | --- | 
|  `Service`  |  O nome do AWS service (Serviço da AWS) que contém o recurso. Para o Athena, o valor dessa dimensão é `Athena`.  | 
|  `Resource`  |  O tipo de recurso que está em execução. O valor de recurso para o uso de consulta do Athena é `ActiveQueryCount`.  | 
|  `Type`  |  O tipo de entidade que está sendo relatada. Atualmente, o único valor válido para métricas de uso do Athena é `Resource`.  | 
|  `Class`  |  A classe do recurso sob acompanhamento. Para o Athena, `Class` pode ser um `DML` ou um `DDL`.  | 

## Visualizar métricas de uso de recursos do Athena no console do CloudWatch
<a name="monitoring-athena-usage-metrics-cw-console"></a>

Você pode usar o console do CloudWatch para ver um gráfico das métricas de uso do Athena e configurar alarmes que o alertarão quando o uso se aproximar de uma cota de serviço.

**Para ver as métricas de uso dos recursos do Athena**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, escolha **Metrics** (Métricas), **All metrics** (Todas as métricas).

1. Escolha **Uso** e depois **Por recurso da AWS**.

   A lista das métricas de uso da cota de serviço é exibida.

1. Marque a caixa de seleção ao lado de **Athena** e **ActiveQueryCount**.

1. Escolha a guia **Graphed metrics (Métricas em gráfico)**.

   O gráfico acima exibe o uso atual do recurso da AWS.

Para obter informações sobre como adicionar cotas de serviço ao grafo e definir um alarme que notifique você caso o uso se aproxime da cota de serviço, consulte [Visualizar cotas de serviço e definir alarmes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Quotas-Visualize-Alarms.html) no *Guia do usuário do Amazon CloudWatch*. Para obter informações sobre como definir limites de uso por grupo de trabalho, consulte [Configurar controles de uso de dados por consulta e por grupo de trabalho](workgroups-setting-control-limits-cloudwatch.md).

# Monitorar eventos de consulta do Athena com o EventBridge
<a name="athena-events"></a>

Você pode usar o Amazon Athena com o Amazon EventBridge para receber notificações em tempo real sobre o estado das consultas. Quando uma consulta enviada muda de estado, o Athena publica um evento no EventBridge com informações sobre a transição de estado da consulta. É possível gravar regras simples para eventos do seu interesse e realizar ações automatizadas quando um evento corresponder a uma regra. Por exemplo, é possível criar uma regra que invoca uma função do AWS Lambda quando uma consulta atinge um estado terminal. Os eventos são emitidos com base no melhor esforço.

Antes de criar regras de eventos para o Athena, faça o seguinte:
+ Familiarize-se com os eventos, regras e destinos no EventBridge. Para obter mais informações, consulte [O que é o Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) Para obter mais informações sobre a configuração de regras, consulte [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html).
+ Crie os destinos para usar em suas regras de evento.

**nota**  
Atualmente, o Athena oferece um tipo de evento, a alteração de estado da consulta do Athena, mas pode adicionar outros tipos de eventos e detalhes. Caso você esteja desserializando programaticamente dados JSON do evento, certifique-se de que a aplicação esteja preparada para lidar com propriedades desconhecidas caso propriedades adicionais sejam incluídas.

## Formato de eventos do Athena
<a name="athena-events-pattern"></a>

O item a seguir é o padrão básico de um evento do Amazon Athena.

```
{
    "source":[
        "aws.athena"
    ],
    "detail-type":[
        "Athena Query State Change"
    ],
    "detail":{
        "currentState":[
            "SUCCEEDED"
        ]
    }
}
```

## Evento de alteração de estado da consulta do Athena
<a name="athena-events-athena-query-state-change"></a>

O exemplo a seguir mostra um evento de alteração de estado da consulta do Athena com o valor `currentState` de `SUCCEEDED`.

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Athena Query State Change",
    "source":"aws.athena",
    "account":"123456789012",
    "time":"2019-10-06T09:30:10Z",
    "region":"us-east-1",
    "resources":[

    ],
    "detail":{
        "versionId":"0",
        "currentState":"SUCCEEDED",
        "previousState":"RUNNING",
        "statementType":"DDL",
        "queryExecutionId":"01234567-0123-0123-0123-012345678901",
        "workgroupName":"primary",
        "sequenceNumber":"3"
    }
}
```

O exemplo a seguir mostra um evento de alteração de estado da consulta do Athena com o valor `currentState` de `FAILED`. O bloco `athenaError` aparece somente quando `currentState` corresponde a `FAILED`. Para obter informações sobre os valores de `errorCategory` e `errorType`, consulte [Catálogo de erros do Athena](error-reference.md).

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Athena Query State Change",
    "source":"aws.athena",
    "account":"123456789012",
    "time":"2019-10-06T09:30:10Z",
    "region":"us-east-1",
    "resources":[ 
    ],
    "detail":{
        "athenaError": {
            "errorCategory": 2.0, //Value depends on nature of exception
            "errorType": 1306.0, //Type depends on nature of exception
            "errorMessage": "Amazon S3 bucket not found", //Message depends on nature of exception
            "retryable":false //Retryable value depends on nature of exception
        },
        "versionId":"0",
        "currentState": "FAILED",
        "previousState": "RUNNING",
        "statementType":"DML",
        "queryExecutionId":"01234567-0123-0123-0123-012345678901",
        "workgroupName":"primary",
        "sequenceNumber":"3"
    }
}
```

### Propriedades de saída
<a name="athena-events-query-state-change-output-properties"></a>

A saída JSON inclui as seguintes propriedades.


****  

| Propriedade | Descrição | 
| --- | --- | 
| athenaError | Aparece somente quando currentState corresponde a FAILED. Contém informações sobre o erro ocorrido, incluindo a categoria do erro, o tipo de erro, a mensagem de erro e se a ação que levou ao erro pode ocorrer novamente. Os valores para cada um desses campos dependem da natureza do erro. Para obter informações sobre os valores de errorCategory e errorType, consulte [Catálogo de erros do Athena](error-reference.md). | 
| versionId | O número da versão do esquema do objeto de detalhes. | 
| currentState | O estado para o qual a consulta foi alterada no momento do evento. | 
| previousState | O estado inicial da consulta no momento do evento. | 
| statementType | O tipo de instrução da consulta executada. | 
| queryExecutionId | O identificador exclusivo da execução da consulta. | 
| workgroupName | O nome do grupo de trabalho no qual a consulta foi executada. | 
| sequenceNumber | Um número continuamente crescente que permite a eliminação de duplicação e classificação de eventos de entrada que envolvem uma única execução de consulta. Quando eventos duplicados forem publicados para a mesma transição de estado, o valor sequenceNumber será o mesmo. Quando uma consulta apresentar mais de uma transição de estado, como consultas que apresentam raro reenfileiramento, é possível usar sequenceNumber para classificar eventos com valores idênticos de currentState e previousState. | 

## Exemplo
<a name="athena-events-examples"></a>

O exemplo a seguir publica eventos em um tópico do Amazon SNS ao qual você se inscreveu. Quando o Athena é consultado, você recebe um e-mail. O exemplo pressupõe que o tópico do Amazon SNS existe e que você está inscrito nele.

**Para publicar eventos do Athena em um tópico do Amazon SNS**

1. Crie um destino para o tópico do Amazon SNS. Conceda a permissão `events.amazonaws.com` à entidade principal do serviço de eventos do EventBridge para publicar no tópico do Amazon SNS, como no exemplo a seguir.

   ```
   {
       "Effect":"Allow",
       "Principal":{
           "Service":"events.amazonaws.com"
       },
       "Action":"sns:Publish",
       "Resource":"arn:aws:sns:us-east-1:111111111111:your-sns-topic"
   }
   ```

1. Use o comando da AWS CLI `events put-rule` para criar uma regra para eventos do Athena, como no exemplo a seguir.

   ```
   aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'
   ```

1. Use o comando da AWS CLI `events put-targets` para anexar o destino do tópico do Amazon SNS à regra, conforme o exemplo a seguir.

   ```
   aws events put-targets --rule {ruleName} --targets Id=1,Arn=arn:aws:sns:us-east-1:111111111111:your-sns-topic
   ```

1. Consulte o Athena e observe o destino sendo invocado. Você receberá e-mails correspondentes do tópico do Amazon SNS.

## Usar o Notificações de Usuários da AWS com o Amazon Athena
<a name="monitoring-user-notifications"></a>

É possível usar o [Notificações de Usuários da AWS](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html) para configurar canais de entrega para receber notificações sobre eventos do Amazon Athena. Você recebe uma notificação quando um evento corresponde a uma regra especificada. É possível receber notificações para eventos por meio de diversos canais, incluindo o e-mail, o [Amazon Q Developer em aplicações de chat](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html), notificações por chat ou notificações push do [AWS Console Mobile Application](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/what-is-consolemobileapp.html). Você também pode visualizar notificações na [Central de Notificações do Console](https://console.aws.amazon.com/notifications/). O Notificações de Usuários oferece é compatível com agregação, o que pode reduzir o número de notificações que você recebe durante eventos específicos. 

Para saber mais, consulte o [https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html).

# Configurar controles de uso de dados por consulta e por grupo de trabalho
<a name="workgroups-setting-control-limits-cloudwatch"></a>

 O Athena permite a definição de dois tipos de controles de custo: limite por consulta e limite por grupo de trabalho. Para cada grupo de trabalho, você só pode definir um limite por consulta e vários limites por grupo de trabalho.
+ O **limite de controle por consulta** especifica a quantidade total de dados analisados por consulta. Se qualquer consulta que for executada no grupo de trabalho exceder o limite, ela será cancelada. Você pode criar apenas um limite de controle por consulta em um grupo de trabalho e aplicá-lo a cada consulta que for executada nele. Edite o limite se precisar alterá-lo. Para obter etapas detalhadas, consulte [Para criar um controle de uso de dados por consulta](#configure-control-limit-per-query).
+ O **limite de controle de uso de dados no âmbito do grupo de trabalho** especifica a quantidade total de dados verificados para todas as consultas que são executadas neste grupo de trabalho durante o período especificado. Você pode criar vários limites por grupo de trabalho. O limite de consulta no âmbito do grupo de trabalho permite que você defina vários limites em agregados de hora e dia nos dados analisados por consultas em execução no grupo de trabalho. 

  Se a quantidade somada de dados verificados exceder o limite, você poderá enviar uma notificação para um tópico do Amazon SNS. Para fazer isso, configure um alarme do Amazon SNS e uma ação no console do Athena para notificar um administrador quando o limite for violado. Para obter etapas detalhadas, consulte [Para criar um controle de uso de dados por grupo de trabalho](#configure-control-limit-per-workgroup). Você também pode criar um alarme e uma ação com base em qualquer métrica que o Athena publicar pelo console do CloudWatch. Por exemplo, você pode configurar um alerta para um determinado número de consultas com falha. Esse alerta pode acionar um e-mail para um administrador se o número ultrapassar um determinado limite. Se o limite for excedido, uma ação enviará uma notificação de alarme do Amazon SNS aos usuários especificados.

  Outras ações que você pode executar:
  + Invocar uma função do Lambda. Para obter mais informações, consulte [Invocar funções do Lambda usando notificações do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda-as-subscriber.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*.
  + Desabilite o grupo de trabalho para interromper a execução de outras consultas. Para obter as etapas, consulte [Habilitar ou desabilitar um grupo de trabalho](workgroups-enabled-disabled.md).

Os limites por consulta e por grupo de trabalho são independentes um do outro. Uma ação especificada será executada sempre que o limite for excedido. Se dois ou mais usuários executarem consultas ao mesmo tempo no mesmo grupo de trabalho, é possível que cada consulta não exceda nenhum dos limites especificados, mas a soma dos dados verificados exceda o limite de uso de dados por grupo de trabalho. Nesse caso, um alarme do Amazon SNS será enviado ao usuário. 

## Criar um controle de uso de dados por consulta
<a name="create-a-per-query-data-usage-control"></a><a name="configure-control-limit-per-query"></a>

**Para criar um controle de uso de dados por consulta**

O limite de controle por consulta especifica a quantidade total de dados analisados por consulta. Se qualquer consulta que for executada no grupo de trabalho exceder o limite, ela será cancelada. As consultas canceladas são cobradas de acordo com os [Preços do Amazon Athena](https://aws.amazon.com/athena/pricing/).
**nota**  
No caso de consultas canceladas ou com falha, o Athena pode já ter gravado resultados parciais no Amazon S3. Nesses casos, o Athena não excluirá os resultados parciais do prefixo do Amazon S3 em que os resultados são armazenados. Você deve remover o prefixo do Amazon S3 com os resultados parciais. O Athena usa carregamentos fracionados do Amazon S3 para gravar dados do Amazon S3. Recomendamos que você defina a política de ciclo de vida do bucket para encerrar os carregamentos fracionados nos casos em que as consultas falharem. Para obter mais informações, consulte [Interromper um multipart upload incompleto usando uma política de ciclo de vida de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) no *Guia do usuário do Amazon Simple Storage Service*. 
Em certas condições, o Athena pode repetir automaticamente as execuções de consultas. Na maioria dos casos, essas consultas podem ser concluídas com êxito e o ID da consulta é marcado como `Completed`. É possível que essas consultas tenham gravado resultados parciais durante as primeiras tentativas e que gerem uploads incompletos de várias partes.

Você pode criar apenas um limite de controle por consulta em um grupo de trabalho e aplicá-lo a cada consulta que for executada nele. Edite o limite se precisar alterá-lo. 

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o nome do grupo de trabalho na lista.

1. Na guia **Controles de execução**, escolha **Editar controles**.

1. Edite o valor de **Limite de dados verificados**.
   + Especifique um valor entre 10 MB (mínimo) e 7 EB (máximo).
   + Selecione o valor unitário na lista suspensa (por exemplo, **Kilobytes KB** ou **Exabytes EB**).
**nota**  
A ação padrão é cancelar a consulta se ela exceder o limite. Essa configuração não pode ser alterada.

1. Escolha **Salvar** para aplicar as alterações imediatamente.

## Criar ou editar um alerta de uso de dados por grupo de trabalho
<a name="create-a-per-workgroup-data-usage-alert"></a><a name="configure-control-limit-per-workgroup"></a>

**Para criar ou editar um alerta de uso de dados por grupo de trabalho**

Você pode definir vários limites de alerta quando as consultas em execução em um grupo de trabalho verificam uma quantidade especificada de dados dentro de um período específico. Os alertas são implementados usando alarmes do Amazon CloudWatch e se aplicam a todas as consultas no grupo de trabalho. Quando um limite é atingido, você pode fazer com que o Amazon SNS envie um e-mail aos usuários que você especificar. As consultas não são canceladas automaticamente quando um limite é atingido.

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o nome do grupo de trabalho na lista.

1. Selecione **Edit** (Editar) para editar as configurações do grupo de trabalho.

1. Role para baixo até **Workgroup data usage alerts - optional** (Alertas de uso de dados do grupo de trabalho - opcional) e expanda essa opção.

1. Escolha **Add alert** (Adicionar alerta).

1. Em **Data usage threshold configuration** (Configuração de limite de uso de dados), especifique os valores da maneira a seguir:
   + Em **Data threshold** (Limite de dados), especifique um número e, em seguida, selecione um valor unitário na lista suspensa.
   + Em **Time period** (Período), escolha um período na lista suspensa.
   + Em **SNS topic selection** (Seleção de tópico do SNS), escolha um tópico do Amazon SNS na lista suspensa. Se preferir, escolha **Create an SNS topic** (Criar um tópico do SNS) para acessar diretamente o [console do Amazon SNS](https://console.aws.amazon.com/sns/v2/home), crie o tópico do Amazon SNS e configure uma assinatura para ele para um dos usuários em sua conta do Athena. Para obter mais informações, consulte [Conceitos básicos do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*. 

1. Escolha **Add alert** (Adicionar alerta) se estiver criando um alerta ou **Save** (Salvar) para salvar um alerta existente.

# Usar APIs de grupos de trabalho do Athena
<a name="workgroups-api-list"></a>

Veja a seguir algumas das operações de API REST usadas para os grupos de trabalho Athena. Em todas as operações a seguir, com exceção de `ListWorkGroups`, você deve especificar um grupo de trabalho. Em outras operações, como `StartQueryExecution`, o parâmetro do grupo de trabalho é opcional e as operações não estão listadas aqui. Para obter uma lista de operações, consulte a [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/).
+  [CreateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateWorkGroup.html) 
+  [DeleteWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_DeleteWorkGroup.html) 
+  [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) 
+  [ListWorkGroups](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListWorkGroups.html) 
+  [UpdateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_UpdateWorkGroup.html) 



# Solucionar erros de grupo de trabalho
<a name="workgroups-troubleshooting"></a>

Use as dicas a seguir para solucionar problemas com grupos de trabalho.
+ Verifique as permissões para usuários individuais na sua conta. Eles devem ter acesso ao local para os resultados da consulta e ao grupo de trabalho no qual desejam executar consultas. Se eles quiserem alternar grupos de trabalho, vão precisar de permissões para ambos os grupos de trabalho. Para mais informações, consulte [Usar políticas do IAM para controlar o acesso de grupo de trabalho](workgroups-iam-policy.md).
+ Observe o contexto no console do Athena para ver em qual grupo de trabalho você vai executar as consultas. Se você usar o driver, defina o grupo de trabalho naquele de que você precisa. Para mais informações, consulte [Especificar um grupo de trabalho para consultas](specify-wkgroup-to-athena-in-which-to-run-queries.md).
+ Se você usar a API ou os drivers para executar as consultas, deverá especificar o local dos resultados das consultas usando uma destas formas: para consultas individuais, use [OutputLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html#athena-Type-ResultConfiguration-OutputLocation) (do lado do cliente). No grupo de trabalho, use [WorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html). Se o local não estiver especificado de nenhuma forma, o Athena emitirá um erro no runtime da consulta.
+ Se você substituir as configurações do lado do cliente pelas configurações do grupo de trabalho, poderá encontrar erros com o local de resultados da consulta. Por exemplo, um usuário do grupo de trabalho pode não ter permissões para o local do grupo de trabalho no Amazon S3 para armazenar os resultados das consultas. Nesse caso, adicione as permissões necessárias.
+ Os grupos de trabalho trazem mudanças no comportamento das operações da API. As chamadas para as operações de API existentes a seguir exigem que os usuários em sua conta tenham permissões baseadas em recursos no IAM para os grupos de trabalho em que são criados. Se não houver permissões para o grupo de trabalho e para as ações do grupo de trabalho, as seguintes ações da API ativarão `AccessDeniedException`: **CreateNamedQuery**, **DeleteNamedQuery**, **GetNamedQuery**, **ListNamedQueries**, **StartQueryExecution**, **StopQueryExecution**, **ListQueryExecutions**, **GetQueryExecution**, **GetQueryResults** e **GetQueryResultsStream** (essa ação de API está disponível somente para uso com o driver e não fica exposta para uso público). Para obter mais informações, consulte [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) na *Referência de autorização do serviço*.

  As chamadas para as operações de API **BatchGetQueryExecution** e **BatchGetNamedQuery** retornam informações apenas sobre as execuções de consulta nos grupos de trabalho aos quais os usuários têm acesso. Se o usuário não tiver acesso ao grupo de trabalho, essas operações da API retornarão os IDs de consulta não autorizados como parte da lista de IDs não processados. Para obter mais informações, consulte [Usar APIs de grupos de trabalho do Athena](workgroups-api-list.md).
+ Se o grupo de trabalho em que uma consulta for executada estiver configurado com um [local imposto para os resultados das consultas](workgroups-settings-override.md), não especifique um `external_location` para a consulta CTAS. O Athena emite um erro e falha com uma consulta que especifica um `external_location` nesse caso. Por exemplo, ocorrerá uma falha nesta consulta se você substituir as configurações do lado do cliente para o local dos resultados da consulta, forçando o grupo de trabalho a usar o próprio local: `CREATE TABLE <DB>.<TABLE1> WITH (format='Parquet', external_location='s3://amzn-s3-demo-bucket/test/') AS SELECT * FROM <DB>.<TABLE2> LIMIT 10;`

Você pode ver os erros a seguir. Esta tabela fornece uma lista de alguns dos erros relacionados a grupos de trabalho e sugere soluções.


**Erros do grupo de trabalho**  

| Erro | Ocorre quando... | 
| --- | --- | 
|  query state CANCELED. Bytes scanned limit was exceeded. (o estado da consulta é CANCELED. O limite de bytes verificados foi excedido.  | Uma consulta atinge um limite de dados por consulta e é cancelada. Considere reescrever a consulta para que leia menos dados ou entre em contato com o administrador da conta. | 
|  User: arn:aws:iam::123456789012:user/abc is not authorized to perform: athena:StartQueryExecution on resource: arn:aws:athena:us-east-1:123456789012:workgroup/workgroupname (O usuário: arn:aws:iam::123456789012:user/abc não está autorizado a executar: athena:StartQueryExecution no recurso: arn:aws:athena:us-east-1:123456789012:workgroup/workgroupname)  | Um usuário executa uma consulta em um grupo de trabalho, mas não tem acesso a ele. Atualize a política para ter acesso ao grupo de trabalho.  | 
|  INVALID\$1INPUT. WorkGroup <name> is disabled. (INVALID\$1INPUT. O grupo de trabalho <nome> está desabilitado.  | Um usuário executa uma consulta em um grupo de trabalho, mas o grupo de trabalho está desabilitado. Seu grupo de trabalho poderia ser desabilitado pelo administrador. É possível também que você não tenha acesso a ele. Em ambos os casos, entre em contato com um administrador que tenha acesso para modificar grupos de trabalho. | 
|  INVALID\$1INPUT. WorkGroup <name> is not found. (INVALID\$1INPUT. O grupo de trabalho <nome> não foi localizado.  | Um usuário executa uma consulta em um grupo de trabalho, mas o grupo de trabalho não existe. Isso pode acontecer se o grupo de trabalho tiver sido excluído. Alterne para outro grupo de trabalho para executar a consulta. | 
|  InvalidRequestException: ao chamar a operação StartQueryExecution: nenhum local de saída fornecido. An output location is required either through the Workgroup result configuration setting or as an API input. (InvalidRequestException: ao chamar a operação StartQueryExecution: nenhum local de saída é fornecido. Um local de saída é necessário por meio da definição de configuração de resultados do grupo de trabalho ou como uma entrada de API.  |  Um usuário executa uma consulta com a API sem especificar o local dos resultados da consulta. Você deve definir o local de saída para resultados da consulta usando uma de duas formas: para consultas individuais, usando [OutputLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html#athena-Type-ResultConfiguration-OutputLocation) (no lado do cliente), ou, no grupo de trabalho, usando [WorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html).  | 
|   The Create Table As Select query failed because it was submitted with an “external\$1location” property to an Athena Workgroup that enforces a centralized output location for all queries. Please remove the “external\$1location” property and resubmit the query. (A consulta “Create Table As Select” falhou porque foi enviada com uma propriedade “external\$1location” para um grupo de trabalho do Athena que impõe um local de saída centralizado para todas as consultas. Remova a propriedade “external\$1location” e reenvie a consulta.   | Se o grupo de trabalho em que uma consulta for executada estiver configurado com um [local imposto para os resultados da consulta](workgroups-settings-override.md) e você especificar um external\$1location para a consulta do CTAS. Neste caso, remova o external\$1location e execute a consulta. | 
| Cannot create prepared statement prepared\$1statement\$1name. The number of prepared statements in this workgroup exceeds the limit of 1000. (Não é possível criar a instrução preparada “prepare\$1statement\$1name”. O número de instruções preparadas neste grupo de trabalho excede o limite de mil 1000. | O grupo de trabalho contém mais do que o limite de mil instruções preparadas. Para resolver esse problema, use [DEALLOCATE PREPARE](sql-deallocate-prepare.md) para remover uma ou mais instruções preparadas do grupo de trabalho. Como alternativa, crie um novo grupo de trabalho. | 

# Gerenciar a capacidade de processamento de consulta
<a name="capacity-management"></a>

Você pode usar as reservas de capacidade para obter capacidade dedicada de processamento sem servidor para as consultas que você executa no Athena. Com as reservas de capacidade, você pode aproveitar os recursos de gerenciamento de workloads que ajudam a priorizar, controlar e escalar suas workloads mais importantes. Por exemplo, você pode adicionar capacidade para controlar o número de consultas que poderão ser executadas simultaneamente, escolher quais workloads poderão usar a capacidade e compartilhar a capacidade entre as workloads. A capacidade é sem servidor e totalmente gerenciada pelo Athena, sendo mantida para você pelo tempo que for necessário. A configuração é fácil, e não é necessário alterar suas consultas SQL.

Para obter capacidade de processamento para suas consultas, crie uma reserva de capacidade, especifique o número de unidades de processamento de dados (DPUs) necessárias e atribua um ou mais grupos de trabalho à reserva.

Os grupos de trabalho têm um papel importante no uso das reservas de capacidade. Os grupos de trabalho permitem organizar consultas em agrupamentos lógicos ou usar casos. Com as reservas de capacidade, atribua seletivamente a capacidade aos grupos de trabalho para controlar como as consultas de cada grupo de trabalho se comportam e como são faturadas. Para obter mais informações sobre grupos de trabalho, consulte [Usar grupos de trabalho para controlar o acesso a consultas e os custos](workgroups-manage-queries-control-costs.md).

A atribuição de grupos de trabalho às reservas de capacidade permite que você dê prioridade a essas consultas porque elas são executadas em sua capacidade reservada e não contam para sua cota de consultas DDL e DML. Por exemplo, você pode alocar capacidade para um grupo de trabalho usado para consultas urgentes de relatórios financeiros para isolá-las de consultas menos essenciais em outro grupo de trabalho. Isso proporciona uma execução de consultas previsível para workloads essenciais, permitindo que outras workloads sejam executadas de forma independente.

Você pode usar reservas de capacidade e grupos de trabalho juntos para cumprir diferentes requisitos. Estes são alguns dos cenários de exemplo:
+ **Isolar consultas importantes**: para garantir que uma workload importante tenha a capacidade necessária quando você precisar, crie uma reserva de capacidade e atribua seu grupo de trabalho à reserva. Somente as consultas do grupo de trabalho designado usam a capacidade de processamento da sua reserva. Por exemplo, para garantir a execução confiável de consultas que oferecem suporte a uma aplicação de produção, atribua o grupo de trabalho de produção dessas consultas a uma reserva de capacidade. Ao desenvolver consultas, use um grupo de trabalho separado que não esteja associado a uma reserva e mova as consultas para o grupo de produção quando estiverem prontas.
+ **Compartilhar capacidade entre workloads semelhantes**: diversas workloads podem compartilhar a capacidade de uma reserva. Isso permite que você obtenha um custo previsível para essas workloads e controle sua simultaneidade. Por exemplo, se você tiver workloads agendadas que tolerem atrasos no início da execução das consultas, é possível atribuir seus grupos de trabalho a uma única reserva. Isso libera sua cota de consultas DDL e DML para consultas interativas executadas na mesma conta, garantindo que essas consultas comecem com o mínimo de atraso.

## Noções básicas de DPUs
<a name="capacity-management-understanding-dpus"></a>

A capacidade é medida em unidades de processamento de dados (DPUs). As DPUs representam os recursos sem servidor de computação e memória usados pelo Athena para acessar e processar dados para você. Uma DPU normalmente fornece 4 vCPUs e 16 GB de memória. O número de DPUs que você mantém influencia o número de consultas que você pode executar simultaneamente. Por exemplo, uma reserva com 256 DPUs permite aproximadamente duas vezes mais consultas simultâneas do que uma reserva com 128 DPUs.

Para obter informações sobre como fazer a estimativa de seus requisitos de capacidade, consulte [Determinar requisitos de capacidade](capacity-management-requirements.md). Para obter informações de preço, consulte [Preços do Amazon Athena](https://aws.amazon.com/athena/pricing/).

## Considerações e limitações
<a name="capacity-management-considerations-limitations"></a>
+ Você pode usar reservas de capacidade e faturamento por consulta, com base nos dados verificados, ao mesmo tempo na mesma conta.
+ As consultas executadas em reservas de capacidade não contam para sua cota de consultas DDL e DML.
+ Se sua capacidade estiver ocupada atendendo outras consultas, as consultas recém-enviadas serão enfileiradas até que a capacidade esteja disponível. O tempo máximo permitido na fila é de dez horas.
+ Um grupo de trabalho pode ser atribuído a apenas uma reserva de capacidade por vez. Você pode atribuir um total de 20 grupos de trabalho a uma única reserva. Quando você atribui vários grupos de trabalho a uma reserva, a capacidade é compartilhada entre os grupos de trabalho e alocada às consultas com base na ordem de envio. Pode haver variação na ordem de execução devido à forma como o Athena aloca dinamicamente a capacidade às consultas.
+ O Athena aloca automaticamente entre 4 e 124 DPUs para consultas DML com base em sua complexidade. Cada consulta DDL consome 4 DPUs. Para obter mais informações, consulte os seguintes tópicos:
  + [Determinar requisitos de capacidade](capacity-management-requirements.md)
  + [Controlar o uso da capacidade](capacity-management-control-capacity-usage.md)
+ O número mínimo de DPUs necessário com cada reserva de capacidade é 4. Para obter informações de preço, consulte [Preços do Amazon Athena](https://aws.amazon.com/athena/pricing/).
+ É possível criar até 100 reservas de capacidade com até mil DPUs por conta e por região. Caso precise de mais de mil DPUs para seu caso de uso, entre em contato com [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com?subject=Athena Provisioned Capacity DPU Limit Request).
+ As solicitações de capacidade não são garantidas e podem levar até 30 minutos para serem concluídas. A capacidade não é transferível para outra reserva de capacidade, Conta da AWS ou Região da AWS.
+ A métrica do `DPUConsumed` CloudWatch é por grupo de trabalho, não por reserva. Assim, se você mover um grupo de trabalho de uma reserva para outra, a métrica `DPUConsumed` incluirá dados de quando o grupo de trabalho pertencia à primeira reserva. Para obter mais informações sobre o uso de métricas do CloudWatch no Athena, consulte [Monitorar métricas de consultas do Athena com o CloudWatch](query-metrics-viewing.md).
+ Para excluir um grupo de trabalho que tenha sido atribuído a uma reserva, remova antes o grupo de trabalho da reserva.
+ Grupos de trabalho configurados para usar o Apache Spark não são compatíveis.
+ As reservas de capacidade não estão disponíveis nas seguintes Regiões da AWS comerciais:
  + Israel (Tel Aviv)
  + Oriente Médio (Emirados Árabes Unidos)
  + Oriente Médio (Bahrein)
  + Ásia-Pacífico (Nova Zelândia)

**Topics**
+ [

## Noções básicas de DPUs
](#capacity-management-understanding-dpus)
+ [

## Considerações e limitações
](#capacity-management-considerations-limitations)
+ [

# Determinar requisitos de capacidade
](capacity-management-requirements.md)
+ [

# Criar reservas de capacidade
](capacity-management-creating-capacity-reservations.md)
+ [

# Controlar o uso da capacidade
](capacity-management-control-capacity-usage.md)
+ [

# Ajustar a capacidade reservada
](capacity-management-automatically-adjust-capacity.md)
+ [

# Gerenciar reservas
](capacity-management-managing-reservations.md)
+ [

# Políticas do IAM para reservas de capacidade
](capacity-reservations-iam-policy.md)
+ [

# APIs de reserva de capacidade do Athena
](capacity-management-api-list.md)

# Determinar requisitos de capacidade
<a name="capacity-management-requirements"></a>

Antes de criar uma reserva de capacidade, é possível fazer uma estimativa da capacidade necessária para atribuir a ela o número correto de DPUs. E depois que a reserva estiver em uso, convém verificar se a reserva tem capacidade insuficiente ou excessiva. Este tópico descreve as técnicas que você pode usar para fazer essas estimativas e também descreve algumas ferramentas da AWS para avaliar o uso e o custo.

**Topics**
+ [

## Estimar a capacidade necessária
](#capacity-management-requirements-estimating)
+ [

## Sinais da necessidade de mais capacidade
](#capacity-management-requirements-insufficient-capacity)
+ [

## Verificar a capacidade ociosa
](#capacity-management-requirements-idle-capacity)
+ [

## Monitoramento do consumo de DPUs
](#capacity-management-requirements-monitoring-dpu-consumption)

## Estimar a capacidade necessária
<a name="capacity-management-requirements-estimating"></a>

Ao estimar os requisitos de capacidade, é útil considerar duas perspectivas: a quantidade de capacidade que uma consulta específica pode exigir e a quantidade de capacidade que você pode precisar em geral.

### Estimar os requisitos de capacidade por consulta
<a name="capacity-management-requirements-estimating-query"></a>

Para determinar o número de DPUs que uma consulta pode exigir, é possível usar as seguintes diretrizes:
+ As consultas DDL consomem 4 DPUs.
+ As consultas DML normalmente consomem entre 4 e 124 DPUs.

O Athena determina o número de DPUs necessárias para uma consulta DML quando a consulta é enviada. O número varia conforme o tamanho dos dados, o formato de armazenamento, a estrutura da consulta e outros fatores. Geralmente, o Athena tenta selecionar o número de DPUs mais baixo e mais eficiente. Se o Athena determinar que é necessário obter mais capacidade computacional para que a consulta seja concluída com êxito, ele aumentará o número de DPUs atribuídas à consulta.

### Estimar os requisitos de capacidade específicos da workload
<a name="capacity-management-requirements-estimating-workload"></a>

Para determinar a quantidade de capacidade necessária para executar várias consultas ao mesmo tempo, considere as diretrizes gerais na tabela a seguir:


****  

| Consultas simultâneas | DPUs necessárias | 
| --- | --- | 
| 10 | 40 ou mais | 
| 20 | 96 ou mais | 
| 30 ou mais | 240 ou mais | 

O número real de DPUs necessárias depende de suas metas e padrões de análise. Por exemplo, se você quiser que as consultas comecem imediatamente sem filas, determine o pico de demanda simultânea de consultas e provisione o número de DPUs de acordo.

Você pode provisionar menos DPUs do que sua demanda de pico, mas o enfileiramento poderá ocorrer quando ocorrer o pico de demanda. Quando ocorre o enfileiramento, o Athena mantém as consultas em uma fila e as executa quando a capacidade torna-se disponível.

Se sua meta for executar consultas dentro de um orçamento fixo, você poderá usar a [Calculadora de preços da AWS](https://calculator.aws/#/addService/Athena) para determinar o número de DPUs que cabem em seu orçamento.

Por fim, lembre-se de que o tamanho dos dados, o formato de armazenamento e a forma como uma consulta é escrita influenciam as DPUs necessárias para uma consulta. Para aumentar a performance da consulta, é possível compactar ou particionar os dados ou convertê-los para formatos em colunas. Para obter mais informações, consulte [Otimizar a performance do Athena](performance-tuning.md).

## Sinais da necessidade de mais capacidade
<a name="capacity-management-requirements-insufficient-capacity"></a>

Mensagens de erro de capacidade insuficiente e enfileiramento de consultas são duas indicações de que a capacidade atribuída é inadequada.

Se as consultas falharem com uma mensagem de erro de capacidade insuficiente, o número de DPUs da reserva de capacidade provavelmente será muito baixo para a consulta. Por exemplo, se você tiver uma reserva com 24 DPUs e executar uma consulta que exija mais de 24 DPUs, a consulta falhará. Para monitorar esse erro de consulta, use os [eventos do EventBridge](athena-events.md) do Athena. Tente adicionar mais DPUs e executar a consulta novamente.

Se muitas consultas estiverem em fila, significa que a capacidade foi totalmente utilizada por outras consultas. Para reduzir o enfileiramento, realize uma destas ações:
+ Adicione DPUs à reserva para aumentar a simultaneidade de consultas.
+ Remova grupos de trabalho da reserva para liberar capacidade para outras consultas.

Para verificar se há excesso de filas de consultas, use a [métrica do CloudWatch](query-metrics-viewing.md) de tempo de fila de consultas do Athena para os grupos de trabalho na sua reserva de capacidade. Se o valor estiver acima de seu limite preferencial, você poderá adicionar DPUs à reserva de capacidade.

## Verificar a capacidade ociosa
<a name="capacity-management-requirements-idle-capacity"></a>

Para verificar a capacidade ociosa, você pode diminuir o número de DPUs na reserva ou aumentar a workload e observar os resultados.

**Para verificar a capacidade ociosa**

1. Execute um destes procedimentos:
   + Reduza o número de DPUs da reserva (reduza os recursos disponíveis)
   + Adicione grupos de trabalho à reserva (aumente a workload)

1. Use o [CloudWatch](query-metrics-viewing.md) para medir o tempo da fila de consultas.

1. Se o tempo de espera ultrapassar um nível desejável, realize uma destas ações:
   + Remova grupos de trabalho
   + Adicione DPUs à reserva de capacidade

1. Após cada alteração, verifique a performance e o tempo da fila de consultas.

1. Continue ajustando a workload ou a contagem de DPUs para atingir o equilíbrio desejado.

Caso não queira manter a capacidade fora de um período de tempo preferencial, você pode [cancelar](capacity-management-cancelling-a-capacity-reservation.md) a reserva e criar outra reserva posteriormente. Porém, mesmo que você tenha cancelado recentemente a capacidade de outra reserva, as solicitações de nova capacidade não são garantidas e as novas reservas demoram para serem criadas.

## Monitoramento do consumo de DPUs
<a name="capacity-management-requirements-monitoring-dpu-consumption"></a>

Depois que suas consultas forem executadas, você poderá visualizar as DPUs consumidas por suas consultas para ajudar a refinar suas estimativas de capacidade. O Athena fornece métricas de consumo de DPU por meio do console, de operações de API e do CloudWatch. Essas informações ajudam a identificar consultas que consomem mais ou menos recursos do que o esperado e a otimizar sua alocação de capacidade com base em dados reais. Para obter informações detalhadas sobre como visualizar e monitorar o consumo de DPUs, consulte [Monitorar o uso de DPU](capacity-management-control-capacity-usage.md#capacity-management-monitor-dpu-usage).

## Ferramentas para avaliar requisitos de capacidade e custo
<a name="capacity-management-requirements-tools"></a>

Você pode usar os serviços e recursos da AWS a seguir para medir o uso e os custos do Athena.

### métricas do CloudWatch
<a name="capacity-management-requirements-tools-cloudwatch-metrics"></a>

É possível configurar o Athena para publicar métricas relacionadas a consultas no Amazon CloudWatch no nível do grupo de trabalho. Depois que você habilitar as métricas para o grupo de trabalho, as métricas das consultas do grupo de trabalho serão exibidas no console do Athena na página de detalhes do grupo de trabalho.

Para obter informações sobre as métricas do Athena publicadas no CloudWatch e suas dimensões, consulte [Monitorar métricas de consultas do Athena com o CloudWatch](query-metrics-viewing.md).

### Métricas de uso do CloudWatch
<a name="capacity-management-requirements-tools-cloudwatch-usage-metrics"></a>

Você pode usar as métricas de uso do CloudWatch para fornecer visibilidade de como a conta usa os recursos, exibindo o uso do serviço atual nos gráficos e painéis do CloudWatch. Para o Athena, as métricas de disponibilidade para uso correspondem às [cotas de serviço](service-limits.md) da AWS para o Athena. Também é possível configurar alarmes que alertem você quando o uso se aproximar de uma cota de serviço.

Para obter mais informações, consulte [Monitorar métricas de uso do Athena com o CloudWatch](monitoring-athena-usage-metrics.md).

### Eventos do Amazon EventBridge
<a name="capacity-management-requirements-tools-eventbridge-events"></a>

Você pode usar o Amazon Athena com o Amazon EventBridge para receber notificações em tempo real sobre o estado das consultas. Quando o estado de uma consulta enviada é alterado, o Athena publica um evento no EventBridge que contém informações sobre a transição de estado da consulta. É possível gravar regras simples para eventos do seu interesse e realizar ações automatizadas quando um evento corresponder a uma regra.

Para obter mais informações, consulte os recursos a seguir.
+ [Monitorar eventos de consulta do Athena com o EventBridge](athena-events.md)
+ [O que é o Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)
+ [Eventos do Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) 

### Tags
<a name="capacity-management-requirements-tools-tags"></a>

No Athena, as reservas de capacidade são compatíveis com etiquetas. Uma etiqueta consiste em uma chave e um valor. Para rastrear seus custos no Athena, você pode usar etiquetas de alocação de custos geradas pela AWS. A AWS utiliza as etiquetas de alocação de custos para organizar os custos de recursos em seu [Relatório de Custos e Uso](https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html). Isso facilita a categorização e o controle de seus custos na AWS. Para ativar as etiquetas de alocação de custos para o Athena, use o [console do Gerenciamento de Faturamento e Custos da AWS](https://console.aws.amazon.com/billing/).

Para obter mais informações, consulte os recursos a seguir.
+ [Marcar recursos do Athena com tags](tags.md)
+ [Como ativar as etiquetas de alocação de custos geradas pela AWS](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activate-built-in-tags.html)
+ [Usar etiquetas de alocação de custos da AWS](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)

# Criar reservas de capacidade
<a name="capacity-management-creating-capacity-reservations"></a>

Para começar, crie uma reserva de capacidade com o número de DPUs necessárias e atribua um ou mais grupos de trabalho que usarão essa capacidade nas consultas. É possível ajustar sua capacidade posteriormente, conforme necessário, para fornecer uma performance mais consistente ou gerenciar melhor os custos. Para obter informações sobre como fazer a estimativa de seus requisitos de capacidade, consulte [Determinar requisitos de capacidade](capacity-management-requirements.md).

**Importante**  
As solicitações de capacidade não são garantidas e podem levar até 30 minutos para serem concluídas.

**Para criar uma reserva de capacidade**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Administração**, **Reservas de capacidade**.

1. Escolha **Criar reserva de capacidade**.

1. Na página **Criar reserva de capacidade**, em **Nome da reserva de capacidade**, insira o nome. O nome deve ser exclusivo, conter de 1 a 128 caracteres e usar apenas os seguintes caracteres: A-Z, 0-9, \$1 (sublinhado), . (ponto) e - (hífen). Não é possível alterar o nome depois de criar a reserva.

1. Em **DPU**, escolha ou insira o número de unidades de processamento de dados (DPUs) que deseja em incrementos de 4. Para obter mais informações, consulte [Noções básicas de DPUs](capacity-management.md#capacity-management-understanding-dpus).

1. (Opcional) Expanda a opção **Etiquetas** e escolha **Adicionar nova etiqueta** para adicionar um ou mais pares de chave/valor personalizados para associar ao recurso de reserva de capacidade. Para obter mais informações, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Revisar**.

1. No prompt **Confirmar criação de reserva de capacidade**, confirme o número de DPUs, a Região da AWS e outras informações. Se você aceitar, escolha **Enviar**.

   Na página de detalhes, o **Status** da reserva de capacidade é exibido como **Pendente**. Quando sua capacidade de reserva estiver disponível para executar consultas, o status será exibido como **Ativa**.

Neste ponto, você está pronto para adicionar um ou mais grupos de trabalho à reserva. Para obter as etapas, consulte [Adicionar grupos de trabalho a uma reserva](capacity-management-adding-workgroups-to-a-reservation.md).

# Controlar o uso da capacidade
<a name="capacity-management-control-capacity-usage"></a>

Você pode controlar o número de DPUs que o Athena aloca para suas consultas definindo controles de DPU máximo ou mínimo. Você pode configurá-los no nível do grupo de trabalho para estabelecer controles de linha de base para todas as consultas, ou no nível de consulta individual para um controle refinado. Isso lhe dá controle direto sobre a performance da consulta, a simultaneidade das workloads e os custos.
+ Quando você define um número máximo de DPUs, as consultas são impedidas de consumir mais capacidade do que você especifica. Isso simplifica o controle de custos e a simultaneidade das workloads. Por exemplo, se sua reserva de capacidade tiver 200 DPU, definir a DPU máxima por consulta como 8 permitirá que você execute 25 consultas simultaneamente. Se você aumentar sua reserva para 400 DPUs, poderá executar 50 consultas simultaneamente.
+ Ao definir um número mínimo de DPU, você garante que as consultas sejam executadas com o número mínimo desejado de DPUs. Isso é útil quando você sabe com antecedência o perfil típico de uso da capacidade das suas consultas.

**nota**  
Os controles de uso de DPUs se aplicam somente às consultas executadas com reservas de capacidade.

**nota**  
Para usar o mesmo número de DPUs para todas as consultas, use o mesmo valor para a DPU mínima e máxima.

## Definir controles de DPU no nível do grupo de trabalho
<a name="capacity-management-set-dpu-controls-workgroup-level"></a>

Defina controles de DPU no nível do grupo de trabalho para gerenciar os custos e controlar a performance das workloads para o grupo de trabalho que você escolher. Os controles de DPU definidos no nível do grupo de trabalho se aplicam a todas as consultas quando a opção **Substituir as configurações do lado do cliente** está habilitada.

**Para definir os controles de DPU usando o console**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Selecione um grupo de trabalho que use uma reserva de capacidade.

1. Na guia **Controles de execução**, escolha **Editar controles**.

1. Configure o seguinte:
   + Em **DPU mínimo por consulta**, insira um valor entre 4 e 124 em incrementos de 4.
   + Em **DPU máximo por consulta**, insira um valor entre 4 e 124 em incrementos de 4.

1. Escolha **Salvar**.

1. (Opcional) Selecione **Substituir as configurações do lado do cliente** para aplicar essas configurações e ignorar as configurações de DPU no nível de consulta.

**Para definir controles de DPU usando a AWS CLI**
+ Use o comando `update-work-group` para definir controles de DPU para um grupo de trabalho:

  ```
  aws athena update-work-group \
    --work-group my_workgroup \
    --configuration-updates '{
          "EngineConfiguration": {
              "Classifications": [
                  {
                      "Name": "athena-query-engine-properties",
                      "Properties": {
                          "max-dpu-count" : "24",
                          "min-dpu-count" : "12"
                          }
                      }
                  ]
          }}'
  ```

  Se você definir `EnforceWorkGroupConfiguration` como `true`, as configurações do grupo de trabalho substituirão quaisquer controles de DPU especificados no nível da consulta quando enviados via [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html). Isso garante uma alocação consistente de recursos em todas as consultas no grupo de trabalho.

## Definir controles de DPU com consultas individuais
<a name="capacity-management-set-dpu-controls-individual-queries"></a>

Defina controles de DPU no nível de consulta quando precisar de um controle refinado com consultas que tenham requisitos de recursos diferentes. Os controles de DPU no nível da consulta têm precedência sobre as configurações no nível do grupo de trabalho, a menos que o grupo de trabalho tenha a opção **Substituir as configurações do lado do cliente** habilitada.

**Para definir controles de DPU para uma consulta usando o console**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, selecione **Query editor (Editor de consultas)**.

1. Selecione um grupo de trabalho que use uma reserva de capacidade.

1. Escolha a guia **Configurações da consulta**.

1. Na seção **Controles de execução**, escolha **Editar controles**.

1. Configure o seguinte:
   + Em **DPU mínimo por consulta**, insira um valor entre 4 e 124 em incrementos de 4.
   + Em **DPU máximo por consulta**, insira um valor entre 4 e 124 em incrementos de 4.

1. Escolha **Salvar**.

**Para definir controles de DPU para uma consulta usando a AWS CLI**
+ Use o comando `start-query-execution` com o parâmetro `engine-configuration`:

  ```
  aws athena start-query-execution \
    --query-string "SELECT * FROM my_table LIMIT 10" \
    --work-group "my_workgroup" \
    --engine-configuration '{
      "Classifications": [ {
          "Name": "athena-query-engine-properties",
              "Properties": {
                  "max-dpu-count" : "32",
                  "min-dpu-count" : "8"
                  }
              }
          ]}'
  ```

A relação entre as configurações de DPU no nível da consulta e no nível do grupo de trabalho depende da configuração do seu grupo de trabalho:
+ Quando a opção **Substituir as configurações do lado do cliente** está habilitada, os controles de DPU no nível do grupo de trabalho têm precedência sobre qualquer configuração no nível da consulta. Isso garante o uso consistente dos recursos para todas as consultas no grupo de trabalho especificado.
+ Quando a opção **Substituir as configurações do lado do cliente** não está habilitada, os controles de DPU no nível da consulta têm precedência sobre as configurações no nível do grupo de trabalho. Isso oferece flexibilidade para otimizar as consultas individuais.

Se você não especificar controles de DPU em nenhum dos níveis, o Athena alocará automaticamente a capacidade com base na complexidade da consulta.

**nota**  
Para consultas DDL, o valor máximo para o mínimo de DPU é 4. Definir um mínimo mais alto para consultas DDL resulta em erro.

## Monitorar o uso de DPU
<a name="capacity-management-monitor-dpu-usage"></a>

Após as consultas serem concluídas, você pode visualizar seu uso de DPUs. O Athena fornece métricas de uso de DPU por meio do console, de operações de API e do CloudWatch.

**Para ver o consumo de DPUs no console**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, selecione **Query editor (Editor de consultas)**.

1. Depois que uma consulta for concluída, visualize seu valor de **DPU consumido** no contêiner de resultados da consulta.

1. Para ver o consumo de DPU de consultas anteriores:

   1. No painel de navegação, escolha **Consultas recentes**.

   1. Selecione o ícone de configurações para adicionar a coluna **DPUs consumidas** à tabela, caso ainda não esteja exibida.

   1. Analise o consumo de DPUs para cada consulta concluída.

1. Opcionalmente, no **Editor de consultas**, escolha a guia **Estatísticas da consulta** e revise as **DPUs consumidas**.

**Para recuperar o consumo de DPU usando a API**

1. Use as seguintes operações de API para recuperar o consumo de DPU de forma programática:
   + `GetQueryExecution`: retorna detalhes da execução de uma consulta específica
   + `BatchGetQueryExecution`: retorna detalhes da execução de várias consultas

1. Exemplo: usando a AWS CLI:

   ```
   aws athena get-query-execution \
     --query-execution-id "123e4567-e89b-12d3-a456-426614174000"
   ```

   A resposta inclui o campo `DpuCount` no objeto `Statistics`:

   ```
   {
     "QueryExecution": {
       "Statistics": {
         "DpuCount": 8
       }
     }
   }
   ```

**Para monitorar o uso de DPU com o CloudWatch**
+ O Athena publica métricas relacionadas a consultas no CloudWatch que ajudam você a monitorar a utilização da capacidade e outros dados de performance. Para saber mais, consulte [Monitorar métricas de consultas do Athena com o CloudWatch](query-metrics-viewing.md).

# Ajustar a capacidade reservada
<a name="capacity-management-automatically-adjust-capacity"></a>

Você pode ajustar automaticamente a capacidade da sua reserva em resposta à utilização das workloads usando a solução de ajuste de escala automático do Athena. Ele adiciona capacidade automaticamente quando a utilização excede o limite configurado e remove a capacidade durante períodos de baixa utilização para reduzir custos. Você pode personalizar seu comportamento definindo diferentes limites de utilização, quantidades mínimas e máximas de DPU, incrementos de escalabilidade e frequência de avaliação de utilização. Isso elimina os ajustes manuais de capacidade e ajuda você a equilibrar os requisitos de performance com a otimização de custos.

Você implanta essa solução sem servidor usando um modelo do CloudFormation. Ele cria uma máquina de estado do Step Functions que monitora as métricas de utilização e toma decisões de escalabilidade. Você pode personalizar ainda mais o modelo ou a máquina de estado para atender às suas necessidades específicas.

Para começar, use o console do Athena e escolha **Configurar o ajuste de escala automático** na página de detalhes da reserva de capacidade, que redireciona você para o CloudFormation com o modelo pré-carregado. Como alternativa, siga o procedimento abaixo.

## Pré-requisitos
<a name="capacity-management-auto-scaling-prerequisites"></a>
+ É necessária uma reserva de capacidade ativa
+ Permissões do IAM necessárias para implantar pilhas do CloudFormation e criar recursos do Step Functions

## Iniciar a pilha do CloudFormation
<a name="capacity-management-auto-scaling-launch-stack"></a>

Esse modelo automatizado do CloudFormation implanta a solução de ajuste de escala automático da reserva de capacidade do Athena. Você deve concluir as etapas aplicáveis em [Pré-requisitos](#capacity-management-auto-scaling-prerequisites) antes de iniciar a pilha.

[https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?&templateURL=https:%2F%2Fathena-downloads.s3.us-east-1.amazonaws.com%2F%2Ftemplates%2F%2Fcapacity-reservation-scaling%2F%2Fstate-machine%2F%2Fathena-capacity-reservation-scaling-template-v1.1.yaml](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?&templateURL=https:%2F%2Fathena-downloads.s3.us-east-1.amazonaws.com%2F%2Ftemplates%2F%2Fcapacity-reservation-scaling%2F%2Fstate-machine%2F%2Fathena-capacity-reservation-scaling-template-v1.1.yaml) 

**Para iniciar a solução de ajuste de escala automático**

1. Faça login no [Console de Gerenciamento da AWS](https://console.aws.amazon.com/) e selecione o botão para iniciar o modelo `AWSAccelerator-InstallerStack` do CloudFormation.

1. O modelo é iniciado na região Leste dos EUA (Norte da Virgínia) por padrão. Para iniciar a solução em outra Região da AWS, use o seletor de região na barra de navegação do console.

1. Na página **Criar pilha**, verifique se o URL do modelo está na caixa de texto **URL do Amazon S3** e escolha **Avançar**.

1. Na página **Especificar detalhes da pilha**, atribua um nome para a sua pilha de soluções.

1. Em **Parâmetros**, revise os parâmetros do modelo dessa solução e modifique-os conforme requerido. Esta solução usa os seguintes valores padrão.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/capacity-management-automatically-adjust-capacity.html)
**nota**  
Todos os valores de DPU devem ser múltiplos de 4 para atender aos requisitos de reserva de capacidade do Athena.

1. Escolha **Avançar**.

1. Na página **Configurar opções de pilha**, selecione **Avançar**.

1. Na página **Revisar e criar**, revise e confirme as configurações. Marque a caixa de seleção confirmando que o modelo poderá criar recursos do IAM.

1. Escolha **Enviar** para implantar a pilha.

   Você pode visualizar o status da pilha no console do CloudFormation, na coluna **Status**. Você receberá o status `CREATE_COMPLETE` em poucos minutos.

# Gerenciar reservas
<a name="capacity-management-managing-reservations"></a>

Visualize e gerencie suas reservas de capacidade na página **Reservas de capacidade**. Você pode realizar tarefas de gerenciamento, como adicionar ou reduzir DPUs, modificar atribuições de grupos de trabalho e etiquetar ou cancelar reservas.

**Para visualizar e gerenciar reservas de capacidade**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Administração**, **Reservas de capacidade**.

1. Na página de reserva de capacidade, é possível realizar estas tarefas:
   + Para criar uma reserva de capacidade, escolha **Criar reserva de capacidade**.
   + Use a caixa de pesquisa para filtrar reservas por nome ou número de DPUs.
   + Escolha o menu suspenso de status para filtrar por status de reserva de capacidade (por exemplo, **Ativa** ou **Cancelada**). Para obter informações sobre status de reservas, consulte [Noções básicas de status de reserva](#capacity-management-understanding-reservation-status).
   + Para visualizar os detalhes de uma reserva de capacidade, escolha o link da reserva. A página de detalhes da reserva contém opções para [editar a capacidade](capacity-management-editing-capacity-reservations.md), [adicionar grupos de trabalho](capacity-management-adding-workgroups-to-a-reservation.md), [remover grupos de trabalho](capacity-management-removing-a-workgroup-from-a-reservation.md) e [cancelar](capacity-management-cancelling-a-capacity-reservation.md) a reserva.
   + Para editar uma reserva (por exemplo, adicionar ou remover DPUs), selecione o botão da reserva e escolha **Editar**.
   + Para cancelar uma reserva, selecione o botão da reserva e escolha **Cancelar**.

## Noções básicas de status de reserva
<a name="capacity-management-understanding-reservation-status"></a>

A tabela a seguir descreve os possíveis valores de status de uma reserva de capacidade.


****  

| Status | Descrição | 
| --- | --- | 
| Pendente | O Athena está processando sua solicitação de capacidade. A capacidade não está pronta para executar consultas. | 
| Ativo | A capacidade está disponível para executar consultas. | 
| Failed | A solicitação de capacidade não foi concluída com êxito. O cumprimento das solicitações de capacidade não é garantido. As reservas com falha contam para os limites de DPU da conta. Para liberar o uso, é necessário cancelar a reserva. | 
| Atualização pendente | O Athena está processando uma alteração na reserva. Por exemplo, esse status ocorre depois que você edita a reserva para adicionar ou remover DPUs. | 
| Cancelando | O Athena está processando uma solicitação para cancelar a reserva. As consultas que ainda estiverem em execução nos grupos de trabalho que estavam usando a reserva poderão ser concluídas, mas outras consultas do grupo de trabalho usarão capacidade sob demanda (não provisionada). | 
| Cancelado |  O cancelamento da reserva de capacidade foi concluído. As reservas canceladas permanecerão no console por 45 dias. Após 45 dias, o Athena excluirá a reserva. Durante os 45 dias, não será possível reaproveitar ou reutilizar a reserva, mas você poderá consultar as etiquetas e visualizar os detalhes para referência histórica. Não é garantido que a capacidade cancelada será reservada novamente em uma data futura. A capacidade não pode ser transferida para outra reserva, Conta da AWS ou Região da AWS.   | 

## Noções básicas de DPUs ativas e DPUs de destino
<a name="capacity-management-understanding-dpu-status"></a>

Na lista de reservas de capacidade no console Athena, a reserva exibe dois valores de DPU: **DPU ativa** e **DPU de destino**.
+ **DPU ativa**: o número de DPUs que estão disponíveis na reserva para executar consultas. Por exemplo, se você solicitar 100 DPUs e a solicitação for atendida, a **DPU ativa** exibirá **100**.
+ **DPU de destino**: o número de DPUs para as quais a reserva está sendo transferida. A **DPU de destino** exibe um valor diferente da **DPU ativa** quando uma reserva está sendo criada ou há um aumento ou uma diminuição no número de DPUs pendente.

Por exemplo, depois que você enviar uma solicitação para criar uma reserva com 24 DPUs, o **Status** da reserva será **Pendente**, a **DPU ativa** será **0** e a **DPU de destino** será **24**.

Se você tiver uma reserva com 100 DPUs e editar a reserva para solicitar um aumento de 20 DPUs, o **Status** será **Atualização pendente**, a **DPU ativa** será **100** e a **DPU de destino** será **120**.

Se você tiver uma reserva com 100 DPUs e editar a reserva para solicitar uma redução de 20 DPUs, o **Status** será **Atualização pendente**, a **DPU ativa** será **100** e a **DPU de destino** será **80**.

Durante essas transições, o Athena trabalha ativamente para adquirir ou reduzir o número de DPUs com base na solicitação. Quando a **DPU ativa** torna-se igual à **DPU de destino**, o número de destino foi atingido e não há alterações pendentes.

Para recuperar esses valores de forma programática, você pode chamar a ação da API [GetCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetCapacityReservation.html). A API refere-se à **DPU ativa** e à **DPU de destino** como `AllocatedDpus` e `TargetDpus`.

**Topics**
+ [

## Noções básicas de status de reserva
](#capacity-management-understanding-reservation-status)
+ [

## Noções básicas de DPUs ativas e DPUs de destino
](#capacity-management-understanding-dpu-status)
+ [

# Editar reservas de capacidade
](capacity-management-editing-capacity-reservations.md)
+ [

# Adicionar grupos de trabalho a uma reserva
](capacity-management-adding-workgroups-to-a-reservation.md)
+ [

# Remover um grupo de trabalho de uma reserva
](capacity-management-removing-a-workgroup-from-a-reservation.md)
+ [

# Cancelar uma reserva de capacidade
](capacity-management-cancelling-a-capacity-reservation.md)
+ [

# Excluir uma reserva de capacidade
](capacity-management-deleting-a-capacity-reservation.md)

# Editar reservas de capacidade
<a name="capacity-management-editing-capacity-reservations"></a>

Após criar uma reserva de capacidade, você pode ajustar o número de DPUs e adicionar ou remover as etiquetas personalizadas.

**Para editar uma reserva de capacidade**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Administração**, **Reservas de capacidade**.

1. Na lista de reservas de capacidade, siga um destes procedimentos:
   + Selecione o botão ao lado da reserva e escolha **Editar**.
   + Escolha o link da reserva e depois **Editar**.

1. Em **DPU**, escolha ou insira o número de unidades de processamento de dados desejada. Para obter mais informações, consulte [Noções básicas de DPUs](capacity-management.md#capacity-management-understanding-dpus).
**nota**  
Você pode solicitar a adição de DPUs a uma reserva de capacidade ativa a qualquer momento.
Você pode solicitar a redução das DPUs de uma reserva de capacidade ativa quando tiver decorrido 1 minuto desde que a reserva se tornou ativa ou desde que as DPUs foram adicionadas pela última vez.
Quando você solicita a redução de DPUs, o Athena prioriza a remoção de DPUs ociosas em vez de DPUs ativas. Se as consultas estiverem consumindo DPUs marcadas para remoção, o Athena aguarda a conclusão das consultas antes de remover as DPUs. 

1. Em **Etiquetas**, selecione **Remover** para remover uma etiqueta ou escolha **Adicionar etiqueta** para adicionar uma nova etiqueta.

1. Selecione **Enviar**. A página de detalhes da reserva mostra a configuração atualizada.

# Adicionar grupos de trabalho a uma reserva
<a name="capacity-management-adding-workgroups-to-a-reservation"></a>

Depois de criar uma reserva de capacidade, é possível adicionar até 20 grupos de trabalho à reserva. Adicionar um grupo de trabalho a uma reserva informa ao Athena quais consultas deverão ser executadas na capacidade reservada. As consultas de grupos de trabalho que não estão associados a uma reserva continuam sendo executadas usando o modelo de preço padrão por terabyte (TB) verificado.

Quando uma reserva tem dois ou mais grupos de trabalho, as consultas desses grupos de trabalho podem usar a capacidade da reserva. É possível adicionar e remover grupos de trabalho a qualquer momento. Quando você adicionar ou remover grupos de trabalho, as consultas em execução não serão interrompidas.

Quando a reserva está pendente, as consultas dos grupos de trabalho que você adicionou continuam sendo executadas usando o modelo de preço padrão por terabyte (TB) verificado até que a reserva torne-se ativa.

**Para adicionar um ou mais grupos de trabalho à reserva de capacidade**

1. Na página de detalhes da reserva de capacidade, escolha **Adicionar grupos de trabalho**.

1. Na página **Adicionar grupos de trabalho**, selecione os grupos de trabalho que deseja adicionar e escolha **Adicionar grupos de trabalho**. Não é possível atribuir um grupo de trabalho a mais de uma reserva.

   A página de detalhes da reserva de capacidade lista os grupos de trabalho que você adicionou. As consultas executadas nesses grupos de trabalho usarão a capacidade que você reservou quando a reserva estiver ativa.

# Remover um grupo de trabalho de uma reserva
<a name="capacity-management-removing-a-workgroup-from-a-reservation"></a>

Caso não precise mais de capacidade dedicada para um grupo de trabalho ou se quiser mover um grupo de trabalho para sua própria reserva, poderá removê-lo a qualquer momento. A remoção de um grupo de trabalho de uma reserva é um processo simples. Depois de remover um grupo de trabalho de uma reserva, as consultas do grupo de trabalho removido usam como padrão a capacidade sob demanda e são faturadas com base nos terabytes (TB) verificados.

**Para remover um ou mais grupos de trabalho de uma reserva**

1. Na página de detalhes da reserva de capacidade, selecione os grupos de trabalho que deseja remover.

1. Escolha **Remover grupos de trabalho**. O prompt **Remover grupos de trabalho?** informa que todas as consultas ativas no momento serão concluídas antes que o grupo de trabalho seja removido da reserva.

1. Escolha **Remover**. A página de detalhes da reserva de capacidade mostra que os grupos de trabalho removidos não estão mais presentes.

# Cancelar uma reserva de capacidade
<a name="capacity-management-cancelling-a-capacity-reservation"></a>

Caso não queira mais usar uma reserva de capacidade, você pode cancelá-la. As consultas que ainda estiverem em execução nos grupos de trabalho que estavam usando a reserva poderão ser concluídas, mas outras consultas do grupo de trabalho não usarão mais a reserva.

**nota**  
Não é garantido que a capacidade cancelada será reservada novamente em uma data futura. A capacidade não pode ser transferida para outra reserva, Conta da AWS ou Região da AWS. 

**Para cancelar uma reserva de capacidade**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Administração**, **Reservas de capacidade**.

1. Na lista de reservas de capacidade, siga um destes procedimentos:
   + Selecione o botão ao lado da reserva e escolha **Cancelar**.
   + Escolha o link da reserva e escolha **Cancelar reserva de capacidade**.

1. No prompt **Cancelar reserva de capacidade?**, insira **cancel** e escolha **Cancelar reserva de capacidade**.

   O status da reserva é alterado para **Cancelando** e um banner de progresso informa que o cancelamento está em andamento.

   Quando o cancelamento for concluído, a reserva de capacidade permanecerá, mas o status será exibido como **Cancelada**. A reserva será excluída 45 dias após o cancelamento. Durante os 45 dias, não será possível reaproveitar ou reutilizar a reserva que foi cancelada, mas você poderá consultar as etiquetas e visualizá-la para referência histórica.

# Excluir uma reserva de capacidade
<a name="capacity-management-deleting-a-capacity-reservation"></a>

Se você quiser remover todas as referências a uma reserva de capacidade cancelada, poderá excluir a reserva. Uma reserva deve ser cancelada para poder ser excluída. Uma reserva excluída é imediatamente removida da conta e não pode mais ser referenciada, nem por seu ARN.

**Para excluir uma reserva de capacidade**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. Escolha **Administração**, **Reservas de capacidade**.

1. Na lista de reservas de capacidade, siga um destes procedimentos:
   + Selecione o botão ao lado da reserva e escolha **Ações**, **Excluir**.
   + Escolha o link da reserva e depois **Excluir**.

1. No prompt **Excluir reserva de capacidade?**, escolha **Excluir**.

   Um banner informa que a reserva de capacidade foi excluída com sucesso. A reserva excluída não aparece mais na lista de reservas de capacidade.

# Políticas do IAM para reservas de capacidade
<a name="capacity-reservations-iam-policy"></a>

Para controlar o acesso a reservas de capacidade, use permissões do IAM no nível do recurso ou políticas do IAM baseadas em identidade. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

O procedimento a seguir é específico ao Athena. 

Para obter informações específicas do IAM, acesse os links listados no fim desta seção. Para obter informações sobre exemplos de políticas de reservas de capacidade do JSON, consulte [Exemplo de políticas de reserva de capacidade](example-policies-capacity-reservations.md).

**Para usar o editor visual no console do IAM para criar uma política de reserva de capacidade**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação à esquerda, escolha **Policies (Políticas)** e **Create policy (Criar política)**.

1. Na guia **Editor visual**, selecione **Escolher um serviço**. Em seguida, escolha o Athena para adicionar à política.

1. Escolha **Select actions (Selecionar ações)** e defina as ações para adicionar à política. O editor visual mostra as ações disponíveis no Athena. Para obter mais informações, consulte [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) na *Referência de autorização do serviço*.

1. Escolha **adicionar ações** para digitar uma ação específica ou use caracteres curinga (\$1) para especificar várias ações. 

   Por padrão, a política que você está criando permite as ações que você escolhe. Se você escolher uma ou mais ações compatíveis com as permissões no nível do recurso `capacity-reservation` no Athena, o editor listará o recurso `capacity-reservation`. 

1. Escolha **Recursos** para especificar as reservas de capacidade específicas de sua política. Para obter exemplos de políticas de reserva de capacidade do JSON, consulte [Exemplo de políticas de reserva de capacidade](example-policies-capacity-reservations.md).

1. Especifique o recurso `capacity-reservation` da seguinte forma:

   ```
   arn:aws:athena:<region>:<user-account>:capacity-reservation/<capacity-reservation-name>
   ```

1. Selecione **Review Policy (Revisar política)**, digite um **Name (Nome)** e uma **Description (Descrição)** (opcional) para a política que você está criando. Revise o resumo da política para ter certeza de que você concedeu as permissões que pretendia. 

1. Escolha **Criar política** para salvar sua nova política.

1. Anexe essa política baseada em política a um usuário, um grupo ou uma função.

Para obter mais informações, consulte os seguintes tópicos na *Referência de autorização do serviço* e no *Manual do usuário do IAM*:
+  [Ações, recursos e chaves de condição do Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) 
+  [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) 
+  [Adicionar e remover políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 
+  [Controlar o acesso aos recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources) 

Para obter exemplos de políticas de reserva de capacidade do JSON, consulte [Exemplo de políticas de reserva de capacidade](example-policies-capacity-reservations.md).

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 

# Exemplo de políticas de reserva de capacidade
<a name="example-policies-capacity-reservations"></a>

Esta seção inclui exemplos de políticas que você pode usar para habilitar várias ações nas reservas de capacidade. Sempre que você usar as políticas do IAM, siga as práticas recomendadas do IAM. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

A reserva de capacidade é um recurso do IAM gerenciado pelo Athena. Portanto, se sua política de reserva de capacidade utiliza ações que usam `capacity-reservation` como entrada, especifique o ARN da reserva de capacidade da seguinte maneira:

```
"Resource": [arn:aws:athena:<region>:<user-account>:capacity-reservation/<capacity-reservation-name>]
```

Em que `<capacity-reservation-name>` é o nome da reserva de capacidade. Por exemplo, para uma reserva de capacidade denominada `test_capacity_reservation`, especifique-a como recurso da seguinte forma:

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:capacity-reservation/test_capacity_reservation"]
```

Para obter uma lista completa de ações do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obter mais informações sobre as políticas do IAM, consulte [Criar políticas com o editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) no *Guia do usuário do IAM*.

**Example Exemplo de política para listar reservas de capacidade**  
A política a seguir permite que todos os usuários listem todas as reservas de capacidade.    
****  

```
{ 
    "Version":"2012-10-17",		 	 	  
    "Statement": [ 
        { 
            "Effect": "Allow", 
            "Action": [ 
                "athena:ListCapacityReservations" 
            ], 
            "Resource": "*" 
        } 
    ] 
}
```

**Example Exemplo de política para operações de gerenciamento**  
A política a seguir permite que o usuário crie, cancele, obtenha detalhes e atualize a reserva de capacidade `test_capacity_reservation`. A política também permite que o usuário atribua `workgroupA` e `workgroupB` a `test_capacity_reservation`.    
****  

```
{ 
   "Version":"2012-10-17",		 	 	  
   "Statement":[ 
      { 
         "Effect": "Allow", 
         "Action": [ 
             "athena:CreateCapacityReservation", 
             "athena:GetCapacityReservation", 
             "athena:CancelCapacityReservation", 
             "athena:UpdateCapacityReservation", 
             "athena:GetCapacityAssignmentConfiguration", 
             "athena:PutCapacityAssignmentConfiguration" 
         ], 
         "Resource": [ 
             "arn:aws:athena:us-east-1:123456789012:capacity-reservation/test_capacity_reservation", 
             "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA", 
             "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupB" 
         ] 
      } 
   ] 
}
```

# APIs de reserva de capacidade do Athena
<a name="capacity-management-api-list"></a>

A lista a seguir contém links de referência para as ações de API de reserva de capacidade do Athena. Para obter estruturas de dados e outras ações de API do Athena, consulte [https://docs.aws.amazon.com/athena/latest/APIReference/](https://docs.aws.amazon.com/athena/latest/APIReference/) (Referência para APIs do Amazon Athena). 
+  [CancelCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_CancelCapacityReservation.html) 
+  [CreateCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateCapacityReservation.html) 
+  [DeleteCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_DeleteCapacityReservation.html) 
+  [GetCapacityAssignmentConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetCapacityAssignmentConfiguration.html) 
+  [GetCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetCapacityReservation.html) 
+  [ListCapacityReservations](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListCapacityReservations.html) 
+  [PutCapacityAssignmentConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_PutCapacityAssignmentConfiguration.html) 
+  [UpdateCapacityReservation](https://docs.aws.amazon.com/athena/latest/APIReference/API_UpdateCapacityReservation.html) 

# Otimizar a performance do Athena
<a name="performance-tuning"></a>

Este tópico fornece informações gerais e sugestões específicas para melhorar a performance de suas consultas do Athena e como resolver erros relacionados a limites e ao uso de recursos.

Em termos gerais, as otimizações podem ser agrupadas em categorias de serviço, consulta e estrutura de dados. As decisões tomadas no nível do serviço, sobre como você escreve suas consultas e como estrutura seus dados e tabelas, podem influenciar a performance.

**Topics**
+ [

# Otimização do uso do serviço
](performance-tuning-service-level-considerations.md)
+ [

# Otimizar consultas
](performance-tuning-query-optimization-techniques.md)
+ [

# Otimizar dados
](performance-tuning-data-optimization-techniques.md)
+ [

# Usar formatos de armazenamento colunares
](columnar-storage.md)
+ [

# Usar particionamento e bucketing
](ctas-partitioning-and-bucketing.md)
+ [

# Particionar dados
](partitions.md)
+ [

# Usar projeção de partições com o Amazon Athena
](partition-projection.md)
+ [

# Prevenir o controle de utilização do Amazon S3
](performance-tuning-s3-throttling.md)
+ [

# Recursos adicionais
](performance-tuning-additional-resources.md)

# Otimização do uso do serviço
<a name="performance-tuning-service-level-considerations"></a>

As considerações sobre o nível de serviço incluem o número de workloads que você executa por conta, as Service Quotas não apenas para o Athena, mas para todos os serviços, e o pensamento sobre como reduzir os erros de falta de recursos.

**Topics**
+ [

## Operar várias workloads na mesma conta
](#performance-tuning-service-quotas)
+ [

## Reduzir erros de "falta de recursos"
](#performance-tuning-resource-limits)

## Operar várias workloads na mesma conta
<a name="performance-tuning-service-quotas"></a>

O Athena usa cotas para limitar a simultaneidade de consultas e as taxas de solicitação de API no nível da conta. Exceder essas cotas pode gerar falhas nas consultas durante a execução ou no momento do envio. Para obter mais informações sobre essas cotas, consulte [Service Quotas](service-limits.md). 

Se você operar várias workloads na mesma conta da AWS, elas competirão pela mesma cota no nível da conta. Por exemplo, se uma workload sofrer uma explosão inesperada de consultas, outra workload em execução na mesma conta poderá ter um tempo de fila elevado ou, na pior das hipóteses, falhas no envio da consulta devido ao controle de utilização.

Recomendamos que você use o CloudWatch para monitorar a utilização do serviço por meio de gráficos e painéis. É possível também configurar alarmes do CloudWatch que emitam alertas quando a utilização se aproximar da cota de serviço para consultas simultâneas, permitindo que medidas sejam tomadas antes que os limites de cota sejam atingidos. Para obter mais informações, consulte [Monitorar métricas de uso do Athena com o CloudWatch](monitoring-athena-usage-metrics.md).

Para controlar a simultaneidade de consultas e isolar as workloads da sua conta, use reservas de capacidade. As reservas de capacidade fornecem capacidade dedicada de processamento de consultas dentro de uma única conta. A capacidade é medida em unidades de processamento de dados (DPUs) e pode ser adicionada ou removida para aumentar ou diminuir a simultaneidade de consultas, respectivamente. As reservas de capacidade permitem que você isole as workloads umas das outras dentro da conta designando capacidade a um ou mais grupos de trabalho. Para obter mais informações, consulte [Gerenciar a capacidade de processamento de consulta](capacity-management.md).

Embora você deva isolar as workloads não relacionadas em contas diferentes da AWS (como isolar o ambiente de desenvolvimento do ambiente de produção), essa abordagem não oferece uma maneira escalável de aumentar a simultaneidade de consultas. Em vez disso, use reservas de capacidade para gerenciar e escalar as necessidades de processamento de consultas dentro de uma única conta.

### Considerar as cotas em outros serviços
<a name="performance-tuning-quotas-in-other-services"></a>

Ao executar uma consulta, o Athena pode chamar outros serviços que impõem cotas. Durante a execução da consulta, o Athena pode fazer chamadas de API para o AWS Glue Data Catalog, o Amazon S3 e outros serviços da AWS, como o IAM e o AWS KMS. Se você usar [consultas federadas](federated-queries.md), o Athena também chamará o AWS Lambda. Todos esses serviços têm seus próprios limites e cotas que podem ser excedidos. Quando a execução de uma consulta encontra erros nesses serviços, ela falha e inclui o erro do serviço de origem. Os erros recuperáveis são repetidos, mas as consultas ainda poderão falhar se o problema não for resolvido a tempo. Leia atentamente as mensagens de erro para determinar se elas vêm do Athena ou de outro serviço. Alguns erros relevantes são abordados nesta seção de ajuste de desempenho.

Para obter mais informações sobre como resolver erros causados por cotas de serviço do Amazon S3, consulte [Evite ter uma quantidade muito grande de arquivos](performance-tuning-data-optimization-techniques.md#performance-tuning-avoid-having-too-many-files) mais adiante neste documento. Para obter mais informações sobre a otimização de performance do Amazon S3, consulte [Padrões de design de práticas recomendadas: otimizar a performance do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) no *Guia do usuário do Amazon S3*.

## Reduzir erros de "falta de recursos"
<a name="performance-tuning-resource-limits"></a>

O Athena executa consultas em um mecanismo de consulta distribuído. Quando você envia uma consulta, o planejador de consultas do mecanismo do Athena estima a capacidade computacional necessária para executar a consulta e prepara devidamente um cluster de nós de computação. Algumas consultas, como consultas DDL, são executadas em apenas um nó. Consultas complexas baseadas em grandes conjuntos de dados são executadas em clusters muito maiores. Os nós são uniformes e têm as mesmas configurações de memória, CPU e disco. O Athena aumenta a escala horizontalmente, não verticalmente, para processar consultas mais exigentes.

Às vezes, as demandas de uma consulta excedem os recursos disponíveis para o cluster que está executando a consulta. Quando isso acontece, a consulta falha com o erro Query exhausted resources at this scale factor.

O recurso que se esgota com mais frequência é a memória, mas em casos raros também pode ser o espaço em disco. Os erros de memória geralmente ocorrem quando o mecanismo executa uma função de junção ou janela, mas também podem ocorrer em contagens e agregações distintas.

Mesmo que a consulta falhe com um erro de “falta de recursos” uma vez, ela pode ter êxito ao ser executada novamente. A execução da consulta não é determinística. Fatores como o tempo necessário para carregar os dados e como os conjuntos de dados intermediários serão distribuídos pelos nós podem resultar em diferentes usos de recursos. Por exemplo, imagine uma consulta que une duas tabelas e tem uma grande distorção na distribuição dos valores da condição de junção. A consulta pode ter êxito na maioria das vezes, mas ocasionalmente falha quando os valores mais comuns acabam sendo processados pelo mesmo nó.

Para evitar que suas consultas excedam os recursos disponíveis, use as dicas de ajuste de performance mencionadas neste documento. Em particular, para obter dicas sobre como otimizar consultas que esgotam os recursos disponíveis, consulte [Otimizar junções](performance-tuning-query-optimization-techniques.md#performance-tuning-optimizing-joins), [Reduzir o escopo das funções da janela ou removê-las](performance-tuning-query-optimization-techniques.md#performance-tuning-optimizing-window-functions) e [Otimizar consultas com o uso de aproximações](performance-tuning-query-optimization-techniques.md#performance-tuning-optimizing-queries-by-using-approximations). 

# Otimizar consultas
<a name="performance-tuning-query-optimization-techniques"></a>

Use as técnicas de otimização de consulta descritas nesta seção para fazer com que as consultas sejam executadas mais rapidamente ou como soluções alternativas para consultas que excedam os limites de recursos no Athena.

## Otimizar junções
<a name="performance-tuning-optimizing-joins"></a>

Há muitas estratégias diferentes para executar junções em um mecanismo de consulta distribuído. Duas das mais comuns são as junções hash distribuídas e as consultas com condições de junção complexas.

### Em uma junção de hash distribuída, coloque tabelas grandes à esquerda e tabelas pequenas à direita
<a name="performance-tuning-distributed-hash-join"></a>

O tipo mais comum de junção usa uma comparação de igualdade como condição de junção. O Athena executa esse tipo de junção como uma junção hash distribuída.

Em uma junção hash distribuída, o mecanismo cria uma tabela de pesquisa (tabela hash) com base em um dos lados da junção. Esse lado é chamado de *lado da compilação*. Os registros do lado da compilação são distribuídos entre os nós. Cada nó cria uma tabela de pesquisa para o respectivo subconjunto. O outro lado da junção, denominado *lado de teste*, é então transmitido pelos nós. Os registros do lado de teste são distribuídos pelos nós da mesma forma que no lado da compilação. Isso permite que cada nó realize a junção pesquisando os registros correspondentes em sua própria tabela de pesquisa.

Quando as tabelas de pesquisa criadas do lado da compilação da junção não cabem na memória, as consultas podem falhar. Mesmo que o tamanho total do lado da compilação seja menor que a memória disponível, as consultas poderão falhar se a distribuição dos registros tiver uma distorção significativa. Em um caso extremo, todos os registros poderiam ter o mesmo valor para a condição de junção e caber na memória em um único nó. Mesmo uma consulta com menos distorção poderá falhar se um conjunto de valores for enviado ao mesmo nó e a soma dos valores ultrapassar a memória disponível. Os nós têm a capacidade de vazar registros para o disco, mas o vazamento retarda a execução da consulta e pode ser insuficiente para evitar que a consulta falhe.

O Athena tenta reordenar as junções para usar a relação maior como lado de teste e a relação menor como o lado da compilação. No entanto, por não gerenciar os dados em tabelas, o Athena tem informações limitadas e muitas vezes deve presumir que a primeira tabela é a maior e a segunda tabela é a menor.

Ao gravar junções com condições de junção baseadas em igualdade, suponha que a tabela à esquerda da palavra-chave `JOIN` seja o lado de teste e que a tabela à direita seja o lado da compilação. Verifique se a tabela direita, o lado da compilação, é a menor das tabelas. Se não for possível diminuir o lado da compilação da junção o suficiente para caber na memória, considere executar várias consultas que unam subconjuntos da tabela de compilação.

### Usar EXPLAIN para analisar consultas com junções complexas
<a name="performance-tuning-other-join-types"></a>

Consultas com condições de junção complexas (por exemplo, consultas que usam `LIKE`, `>` ou outros operadores) geralmente demandam muito computacionalmente. Na pior das hipóteses, cada registro de um lado da junção deve ser comparado a todos os registros do outro lado da junção. Como o tempo de execução aumenta com o quadrado do número de registros, as consultas correm o risco de exceder o tempo máximo de execução.

Para descobrir como o Athena executará sua consulta com antecedência, você pode usar a instrução `EXPLAIN`. Para obter mais informações, consulte [Usar EXPLAIN e EXPLAIN ANALYZE no Athena](athena-explain-statement.md) e [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md).

## Reduzir o escopo das funções da janela ou removê-las
<a name="performance-tuning-optimizing-window-functions"></a>

Por serem operações que fazem uso intensivo de recursos, as funções de janela podem fazer com que as consultas sejam executadas lentamente ou até mesmo falhem com a mensagem Query exhausted resources at this scale factor. As funções de janela mantêm todos os registros em que operam na memória para calcular o resultado. Quando a janela é muito grande, a função de janela pode ficar sem memória.

Para garantir que suas consultas sejam executadas dentro dos limites de memória disponíveis, reduza o tamanho das janelas em que suas funções de janela operam. Para fazer isso, adicione uma cláusula `PARTITIONED BY` ou restrinja o escopo das cláusulas de particionamento existentes.

### Usar de funções que não são de janela
<a name="performance-tuning-optimizing-window-functions-rewrite"></a>

Às vezes, consultas com funções de janela podem ser gravadas sem funções de janela. Por exemplo, em vez de usar `row_number` para encontrar os principais registros `N`, você pode usar `ORDER BY` e `LIMIT`. Em vez de usar `row_number` ou `rank` para desduplicar registros, você pode usar funções agregadas como [max\$1by](https://trino.io/docs/current/functions/aggregate.html#max_by), [min\$1by](https://trino.io/docs/current/functions/aggregate.html#min_by) e [arbitrary](https://trino.io/docs/current/functions/aggregate.html#arbitrary).

Por exemplo, digamos que você tenha um conjunto de dados com atualizações de um sensor. O sensor informa periodicamente o status da bateria e inclui alguns metadados, como localização. Para saber o último status da bateria de cada sensor e sua localização, você pode usar esta consulta:

```
SELECT sensor_id,
       arbitrary(location) AS location,
       max_by(battery_status, updated_at) AS battery_status
FROM sensor_readings
GROUP BY sensor_id
```

Os metadados, como a localização, são os mesmos para cada registro, então você pode usar a função `arbitrary` para escolher qualquer valor do grupo. 

Para obter o último status da bateria, você pode usar a função `max_by`. A função `max_by` escolhe o valor de uma coluna do registro em que o valor máximo de outra coluna foi encontrado. Nesse caso, ela retorna o status da bateria do registro com a hora da última atualização dentro do grupo. Essa consulta é executada mais rapidamente e usa menos memória do que uma consulta equivalente com função de janela. 

## Otimizar agregações
<a name="performance-tuning-optimizing-aggregations"></a>

Ao realizar uma agregação, o Athena distribui os registros entre os nós de processamento usando as colunas na cláusula `GROUP BY`. Para tornar a tarefa de combinar registros com grupos o mais eficiente possível, os nós tentam manter os registros na memória, mas os vazam para o disco, se necessário.

Também é uma boa ideia evitar incluir colunas redundantes nas cláusulas `GROUP BY`. Como menos colunas exigem menos memória, uma consulta que usa menos colunas para descrever um grupo é mais eficiente. As colunas numéricas também usam menos memória do que as strings. Por exemplo, ao agregar um conjunto de dados que tenha um ID numérico de categoria e um nome de categoria, use somente a coluna ID da categoria na cláusula `GROUP BY`.

Às vezes, as consultas incluem colunas na cláusula `GROUP BY` para contornar o fato de que uma coluna deve ser parte da cláusula `GROUP BY` ou ser uma expressão agregada. Se essa regra não for seguida, você poderá receber uma mensagem de erro como esta:

 EXPRESSION\$1NOT\$1AGGREGATE: line 1:8: 'category' must be an aggregate expression or appear in GROUP BY clause 

Para evitar a necessidade de adicionar colunas redundantes à cláusula `GROUP BY`, use a função [arbitrary](https://trino.io/docs/current/functions/aggregate.html#arbitrary), como no exemplo a seguir.

```
SELECT country_id,
       arbitrary(country_name) AS country_name,
       COUNT(*) AS city_count
FROM world_cities
GROUP BY country_id
```

A função `ARBITRARY` retorna um valor de arbitrary do grupo. A função é útil quando você sabe que todos os registros do grupo têm o mesmo valor para uma coluna, mas o valor não identifica o grupo.

## Otimizar as principais N consultas
<a name="performance-tuning-optimizing-top-n-queries"></a>

A cláusula `ORDER BY` retorna os resultados de uma consulta em ordem de classificação. O Athena usa a classificação distribuída para executar a operação de classificação paralelamente em vários nós.

Se você não precisar estritamente que seu resultado seja classificado, evite adicionar uma cláusula `ORDER BY`. Além disso, evite adicionar `ORDER BY` a consultas internas se não for estritamente necessário. Em muitos casos, o planejador de consultas poderá remover a classificação redundante, mas isso não é garantido. Uma exceção a essa regra é se uma consulta interna estiver realizando uma operação principal `N`, como encontrar o `N` mais recente ou os valores de `N` mais comuns.

Quando o Athena vê `ORDER BY` junto com `LIMIT`, ele entende que você está executando uma consulta principal `N` e usa as operações dedicadas adequadamente.

**nota**  
Embora o Athena muitas vezes também possa detectar funções de janela como `row_number` que usa `N` principal, recomendamos a versão mais simples que usa `ORDER BY` e `LIMIT`. Para obter mais informações, consulte [Reduzir o escopo das funções da janela ou removê-las](#performance-tuning-optimizing-window-functions).

## Incluir somente as colunas obrigatórias
<a name="performance-tuning-include-only-required-columns"></a>

Caso não precise estritamente de uma coluna, não a inclua na consulta. Quanto menos dados a consulta precisar processar, mais rápido ela será executada. Isso reduz a quantidade de memória necessária e a quantidade de dados que devem ser enviados entre os nós. Se você estiver usando um formato de arquivo colunar, reduzir o número de colunas também reduzirá a quantidade de dados lidos do Amazon S3.

O Athena não tem limite específico para o número de colunas de um resultado, mas a forma como as consultas são executadas limita o possível tamanho combinado das colunas. O tamanho combinado das colunas inclui os nomes e tipos.

Por exemplo, o seguinte erro é causado por uma relação que excede o limite de tamanho de um descritor de relação:

 GENERIC\$1INTERNAL\$1ERROR: io.airlift.bytecode.CompilationException 

Para resolver esse problema, reduza o número de colunas na consulta ou crie subconsultas e use `JOIN` para recuperar uma quantidade menor de dados. Se você tiver consultas que executam `SELECT *` na consulta mais externa, altere `*` para uma lista com somente as colunas necessárias.

## Otimizar consultas com o uso de aproximações
<a name="performance-tuning-optimizing-queries-by-using-approximations"></a>

O Athena tem suporte para [funções agregadas de aproximação](https://trino.io/docs/current/functions/aggregate.html#appro) para contar valores distintos, valores mais frequentes, percentis (incluindo medianas aproximadas) e criar histogramas. Use essas funções sempre que não for necessário obter valores exatos.

Diferentemente das operações `COUNT(DISTINCT col)`, o [approx\$1distinct](https://trino.io/docs/current/functions/aggregate.html#approx_distinct) usa muito menos memória e é executado mais rápido. Da mesma forma, usar [numeric\$1histogram](https://trino.io/docs/current/functions/aggregate.html#numeric_histogram) em vez de [histogram](https://trino.io/docs/current/functions/aggregate.html#histogram) utiliza métodos aproximados e, portanto, menos memória.

## Otimizar LIKE
<a name="performance-tuning-optimizing-like"></a>

É possível usar `LIKE` para encontrar strings correspondentes, mas com strings longas, demanda uso intensivo de computação. Na maioria dos casos, a função [regexp\$1like](https://trino.io/docs/current/functions/regexp.html#regexp_like) é uma alternativa mais rápida e também oferece mais flexibilidade.

Muitas vezes, é possível otimizar uma pesquisa ancorando a substring que você está procurando. Por exemplo, se você estiver procurando por um prefixo, é muito melhor usar “*substr*%” em vez de “*substr*%”. Ou, se você estiver usando `regexp_like`, “^*substr*”.

## Usar UNION ALL em vez de UNION
<a name="performance-tuning-use-union-all-instead-of-union"></a>

 `UNION ALL` e `UNION` são duas maneiras de combinar os resultados de duas consultas em um único resultado. `UNION ALL` concatena os registros da primeira consulta com a segunda e `UNION` faz o mesmo, mas também remove as duplicatas. `UNION` precisa processar todos os registros e encontrar as duplicatas, o que requer uso intensivo de memória e computação, mas `UNION ALL` é uma operação relativamente rápida. A menos que você precise desduplicar registros, use `UNION ALL` para obter a melhor performance.

## Usar UNLOAD para grandes conjuntos de resultados
<a name="performance-tuning-use-unload-for-large-result-sets"></a>

Quando se espera que os resultados da consulta sejam grandes (por exemplo, dezenas de milhares de linhas ou mais), use UNLOAD para exportar os resultados. Na maioria dos casos, isso é mais rápido do que executar uma consulta normal, e usar `UNLOAD` também oferece mais controle sobre a saída.

Quando a consulta acaba de ser executada, o Athena armazena o resultado como um único arquivo CSV não compactado no Amazon S3. Isso leva mais tempo que usar `UNLOAD`, não apenas porque o resultado não está compactado, mas também porque a operação não pode ser paralelizada. Por sua vez, `UNLOAD` grava os resultados diretamente dos nós de trabalho e faz uso total do paralelismo do cluster de computação. Além disso, é possível configurar `UNLOAD` para gravar os resultados em formato compactado e em outros formatos de arquivo, como JSON e Parquet.

Para obter mais informações, consulte [UNLOAD](unload.md). 

## Use CTAS ou o Glue ETL para materializar agregações usadas com frequência
<a name="performance-tuning-use-ctas-or-glue-etl-to-materialize-frequently-used-aggregations"></a>

“Materializar” uma consulta é uma forma de acelerar a performance da consulta armazenando resultados de consultas complexas pré-computados (por exemplo, agregações e junções) para reutilização em consultas subsequentes.

Se muitas de suas consultas incluírem as mesmas junções e agregações, você poderá materializar a subconsulta comum como uma nova tabela e executar consultas nessa tabela. É possível criar a nova tabela com [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md) ou com uma ferramenta ETL dedicada, como o [Glue ETL](https://aws.amazon.com/glue).

Por exemplo, digamos que você tenha um painel com widgets que exibem diferentes aspectos de um conjunto de dados de pedidos. Cada widget tem sua própria consulta, mas todas as consultas compartilham as mesmas junções e filtros. Uma tabela de pedidos é unida a uma tabela de itens de linha, e há um filtro para exibir somente os últimos três meses. Se você identificar os atributos comuns dessas consultas, poderá criar uma nova tabela que os widgets possam usar. Isso reduz a duplicação e melhora a performance. A desvantagem é que você deverá manter a nova tabela atualizada.

## Reutilizar resultados da consulta
<a name="performance-tuning-reuse-query-results"></a>

É comum que a mesma consulta seja executada várias vezes em pouco tempo. Por exemplo, isso pode ocorrer quando várias pessoas abrem o mesmo painel de dados. Ao executar uma consulta, você pode pedir para o Athena reutilizar os resultados calculados anteriormente. Especifique a idade máxima dos resultados a serem reutilizados. Se a mesma consulta for executada anteriormente dentro desse período, o Athena retornará esses resultados em vez de executar a consulta novamente. Para obter mais informações, consulte [Reutilização de resultados da consulta no Athena](reusing-query-results.md) aqui no *Guia do usuário do Amazon Athena* e [Reduce cost and improve query performance with Amazon Athena Query Result Reuse](https://aws.amazon.com/blogs/big-data/reduce-cost-and-improve-query-performance-with-amazon-athena-query-result-reuse/) no *blog de big data da AWS*.

# Otimizar dados
<a name="performance-tuning-data-optimization-techniques"></a>

A performance não depende apenas das consultas, mas também, principalmente, de como seu conjunto de dados está organizado e do formato de arquivo e da compactação que ele usa.

## Particionar dados
<a name="performance-tuning-partition-your-data"></a>

O particionamento divide a tabela em partes e mantém os dados relacionados juntos com base em propriedades como data, país ou região. As chaves de partição atuam como colunas virtuais. Você define as chaves de partição na criação da tabela e as utiliza para filtrar consultas. Quando você filtra as colunas das chaves de partição, somente os dados das partições correspondentes são lidos. Por exemplo, se o conjunto de dados estiver particionado por data e a consulta tiver um filtro que corresponda somente à última semana, somente os dados da última semana serão lidos. Para obter mais informações sobre particionamento, consulte [Particionar dados](partitions.md).

## Escolher chaves de partição que oferecerão suporte às suas consultas
<a name="performance-tuning-pick-partition-keys-that-will-support-your-queries"></a>

Como o particionamento tem um impacto significativo na performance da consulta, pense com atenção em como você particionará ao criar seu conjunto de dados e tabelas. Ter muitas chaves de partição pode resultar em conjuntos de dados fragmentados com excesso de arquivos e arquivos muito pequenos. Por outro lado, ter poucas chaves de partição ou não ter particionamento leva a consultas que examinam mais dados do que o necessário.

### Evitar otimização de consultas raras
<a name="performance-tuning-avoid-optimizing-for-rare-queries"></a>

Uma boa estratégia é otimizar as consultas mais comuns e evitar a otimização de consultas raras. Por exemplo, se as consultas analisarem períodos de dias, não particione por hora, mesmo que algumas consultas sejam filtradas até esse nível. Se seus dados tiverem uma coluna de timestamp granular, as consultas raras que filtram por hora poderão usar a coluna de timestamp. Mesmo que casos raros verifiquem um pouco mais de dados do que o necessário, reduzir a performance geral em prol de casos raros geralmente não é vantajoso.

Para reduzir a quantidade de dados que as consultas precisam verificar e, assim, melhorar a performance, use um formato de arquivo colunar e mantenha os registros ordenados. Em vez de particionar por hora, mantenha os registros classificados por carimbo de data e hora. Para consultas em janelas de tempo mais curtas, a classificação por carimbo de data e hora é quase tão eficiente quanto a partição por hora. Além disso, a classificação por carimbo de data e hora normalmente não prejudica a performance das consultas nas janelas de tempo contadas em dias. Para obter mais informações, consulte [Usar formatos de arquivo colunares](#performance-tuning-use-columnar-file-formats).

As consultas em tabelas com dezenas de milhares de partições terão melhor performance se houver predicados em todas as chaves de partição. Esse é outro motivo para criar um esquema de particionamento para as consultas mais comuns. Para obter mais informações, consulte [Consultar partições por igualdade](#performance-tuning-query-partitions-by-equality).

## Usar projeção de partições
<a name="performance-tuning-use-partition-projection"></a>

A projeção de partição é um atributo do Athena que armazena informações de partição não no AWS Glue Data Catalog, mas como regras nas propriedades da tabela no AWS Glue. Ao planejar uma consulta em uma tabela configurada com projeção de partição, o Athena lê as regras de projeção de partição da tabela. O Athena calcula as partições a serem lidas na memória com base na consulta e nas regras, em vez de procurar partições no AWS Glue Data Catalog.

Além de simplificar o gerenciamento de partições, a projeção de partições pode melhorar a performance de conjuntos de dados que têm um grande número de partições. Quando a consulta contém intervalos em vez de valores específicos para chaves de partição, a busca por partições correspondentes no catálogo demora mais quanto mais partições houver. Com a projeção de partição, o filtro pode ser computado na memória sem acessar o catálogo e pode ser muito mais rápido.

Em determinadas circunstâncias, a projeção de partições pode resultar em pior performance. Um exemplo ocorre quando uma tabela é “avulsa”. Uma tabela avulsa não tem dados para cada permutação dos valores da chave de partição descritos pela configuração da projeção da partição. Com uma tabela avulsa, o conjunto de partições calculado com base na consulta e a configuração da projeção da partição são listados no Amazon S3, mesmo quando não contêm dados.

Ao usar a projeção de partição, verifique se incluiu predicados em todas as chaves de partição. Limite o escopo dos valores possíveis para evitar listas desnecessárias do Amazon S3. Imagine uma chave de partição que contenha um intervalo de um milhão de valores e uma consulta que não tenha nenhum filtro nessa chave de partição. Para executar a consulta, o Athena deverá realizar pelo menos um milhão de operações de lista do Amazon S3. As consultas são mais rápidas quando você consulta valores específicos, independentemente de usar a projeção de partição ou armazenar informações de partição no catálogo. Para obter mais informações, consulte [Consultar partições por igualdade](#performance-tuning-query-partitions-by-equality).

Ao configurar uma tabela para projeção de partições, verifique se os intervalos especificados são razoáveis. Se a consulta não incluir um predicado em uma chave de partição, todos os valores no intervalo dessa chave serão usados. Se o conjunto de dados foi criado em uma data específica, use essa data como ponto de partida para qualquer intervalo de datas. Use `NOW` como fim de intervalos de datas. Evite intervalos numéricos que tenham um grande número de valores e considere usar o tipo [injected](partition-projection-dynamic-id-partitioning.md#partition-projection-injection) em vez disso.

Para obter mais informações sobre projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

## Usar índices de partição
<a name="performance-tuning-use-partition-indexes"></a>

Os índices de partição são um atributo do AWS Glue Data Catalog que melhoram a performance da pesquisa de partições para tabelas que têm um grande número de partições.

A lista de partições do catálogo é como uma tabela em um banco de dados relacional. A tabela contém colunas para as chaves de partição e uma coluna adicional para o local da partição. Quando você consulta uma tabela particionada, os locais das partições são pesquisados por meio da verificação dessa tabela.

Assim como nos bancos de dados relacionais, é possível aumentar a performance das consultas adicionando índices. É possível adicionar vários índices para oferecer suporte a diferentes padrões de consulta. O índice de partição do AWS Glue Data Catalog é compatível com operadores de igualdade e comparação, como `>`, `>=` e `<` combinados com o operador `AND`. Para obter mais informações, consulte [Working with partition indexes in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) no *Guia do desenvolvedor do AWS Glue* e [Improve Amazon Athena query performance using AWS Glue Data Catalog partition indexes](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/) no *blog de big data da AWS*.

## Use sempre STRING como o tipo para chaves de partição
<a name="performance-tuning-always-use-string-as-the-type-for-partition-keys"></a>

Ao consultar chaves de partição, lembre-se de que o Athena exige que as chaves de partição sejam do tipo `STRING` para inserir a filtragem de partição no AWS Glue. Se o número de partições não for pequeno, usar outros tipos poderá reduzir a performance. Se os valores da chave de partição forem semelhantes a uma data ou a um número, converta-os ao tipo apropriado em sua consulta.

## Remover partições antigas e vazias
<a name="performance-tuning-remove-old-and-empty-partitions"></a>

Se você remover dados de uma partição no Amazon S3 (por exemplo, usando o [ciclo de vida](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) do Amazon S3), também deverá remover a entrada da partição do AWS Glue Data Catalog. Durante o planejamento da consulta, toda partição correspondente à consulta é listada no Amazon S3. Se houver muitas partições vazias, a sobrecarga de listar essas partições poderá ser prejudicial.

Além disso, se houver milhares de partições, considere remover os metadados da partição de dados antigos que não são mais relevantes. Por exemplo, se as consultas nunca buscarem dados com mais de um ano, você poderá remover periodicamente os metadados das partições mais antigas. Se o número de partições aumentar para dezenas de milhares, remover partições não utilizadas pode acelerar as consultas que não incluem predicados em todas as chaves de partição. Para obter informações sobre como incluir predicados em todas as chaves de partição de suas consultas, consulte [Consultar partições por igualdade](#performance-tuning-query-partitions-by-equality).

## Consultar partições por igualdade
<a name="performance-tuning-query-partitions-by-equality"></a>

As consultas que contêm predicados de igualdade em todas as chaves de partição são executadas mais rapidamente porque os metadados da partição podem ser carregados diretamente. Evite consultas nas quais uma ou mais chaves de partição não tenham um predicado, ou o predicado seleciona uma faixa de valores. Para essas consultas, a lista de todas as partições deverá ser filtrada para encontrar valores correspondentes. Para a maioria das tabelas, a sobrecarga é mínima, mas para tabelas com dezenas de milhares de partições ou mais, a sobrecarga pode ser considerável.

Se não for possível gravar novamente suas consultas para filtrar partições por igualdade, você pode tentar a projeção de partições. Para obter mais informações, consulte [Usar projeção de partições](#performance-tuning-use-partition-projection).

## Evitar usar MSCK REPAIR TABLE para manutenção de partições
<a name="performance-tuning-avoid-using-msck-repair-table-for-partition-maintenance"></a>

Como `MSCK REPAIR TABLE` pode levar muito tempo para ser executado, apenas adiciona novas partições e não remove partições antigas, não é uma forma eficiente de gerenciar partições (consulte [Considerações e limitações](msck-repair-table.md#msck-repair-table-considerations)).

É melhor gerenciar partições manualmente usando as [APIs do AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog.html), [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) ou [crawlers do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-running.html). Se preferir, você pode usar a projeção de partições, que elimina totalmente a necessidade de gerenciar as partições. Para obter mais informações, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

## Verifique se suas consultas são compatíveis com o esquema de particionamento
<a name="performance-tuning-validate-that-your-queries-are-compatible-with-the-partitioning-scheme"></a>

É possível verificar com antecedência quais partições uma consulta examinará usando a instrução [`EXPLAIN`](athena-explain-statement.md). Prefixe sua consulta com a palavra-chave `EXPLAIN` e procure o fragmento de origem (por exemplo `Fragment 2 [SOURCE]`) para cada tabela na parte inferior da saída de `EXPLAIN`. Procure atribuições em que o lado direito esteja definido como chave de partição. A linha abaixo contém uma lista de todos os valores dessa chave de partição que serão verificados quando a consulta for executada.

Por exemplo, digamos que você tenha uma consulta em uma tabela com uma chave de partição `dt` e prefixe a consulta com `EXPLAIN`. Se os valores da consulta forem datas e um filtro selecionar um intervalo de três dias, a saída de `EXPLAIN` poderá ser mais ou menos assim:

```
dt := dt:string:PARTITION_KEY
    :: [[2023-06-11], [2023-06-12], [2023-06-13]]
```

A saída de `EXPLAIN` mostra que o planejador encontrou três valores para essa chave de partição que corresponderam à consulta. Ela também mostra quais são esses valores. Para obter mais informações sobre o uso de `EXPLAIN`, consulte [Usar EXPLAIN e EXPLAIN ANALYZE no Athena](athena-explain-statement.md) e [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md).

## Usar formatos de arquivo colunares
<a name="performance-tuning-use-columnar-file-formats"></a>

Formatos de arquivo colunar, como Parquet e ORC, foram criados para workloads de analytics distribuídas. Eles organizam os dados por coluna, não por linha. Organizar os dados em formato colunar oferece as seguintes vantagens:
+ Apenas as colunas necessárias para a consulta são carregadas
+ Reduz-se a quantidade geral de dados que precisam ser carregados
+ Os valores das colunas são armazenados juntos, de modo que os dados possam ser compactados com eficiência 
+ Os arquivos podem conter metadados que permitam que o mecanismo ignore o carregamento de dados desnecessários

Como exemplo de como podemos usar os metadados do arquivo, os metadados do arquivo podem conter informações sobre os valores mínimo e máximo em uma página de dados. Se os valores consultados não estiverem no intervalo indicado nos metadados, a página poderá ser ignorada.

Uma forma de usar esses metadados para melhorar a performance é garantir que os dados dos arquivos sejam classificados. Por exemplo, digamos que você tenha consultas que buscam registros em que a entrada `created_at` esteja em um curto espaço de tempo. Se seus dados forem classificados pela coluna `created_at`, o Athena poderá usar os valores mínimo e máximo dos metadados do arquivo para ignorar as partes desnecessárias dos arquivos de dados.

Ao usar formatos de arquivo colunar, verifique se seus arquivos não são pequenos demais. Conforme observado em [Evite ter uma quantidade muito grande de arquivos](#performance-tuning-avoid-having-too-many-files), conjuntos de dados com muitos arquivos pequenos causam problemas de performance. Isso ocorre especialmente com formatos de arquivo colunar. Em arquivos pequenos, a sobrecarga do formato de arquivo colunar supera os benefícios.

O Parquet e o ORC são organizados internamente por grupos de linhas (Parquet) e faixas (ORC). O tamanho padrão para grupos de linhas é 128 MB, e para faixas, 64 MB. Se houver muitas colunas, você poderá aumentar o grupo de linhas e o tamanho da faixa para melhorar a performance. Não é recomendável diminuir o tamanho do grupo de linhas ou da faixa para um valor inferior ao padrão.

Para converter outros formatos de dados em Parquet ou ORC, você pode usar o AWS Glue ETL ou o Athena. Para obter mais informações, consulte [Converter em formatos colunares](columnar-storage.md#convert-to-columnar).

## Compactar dados
<a name="performance-tuning-compress-data"></a>

O Athena é compatível com uma ampla variedade de formatos de compactação. Consultar dados compactados é mais rápido e mais barato, pois você paga pelo número de bytes verificados antes da descompactação.

O formato [gzip](https://www.gnu.org/software/gzip/) fornece boas taxas de compactação e oferece amplo suporte a outras ferramentas e serviços. O formato [zstd](https://facebook.github.io/zstd/) (Zstandard) é um formato de compactação mais recente com um bom equilíbrio entre performance e taxa de compactação.

Ao compactar arquivos de texto, como dados JSON e CSV, tente chegar a um equilíbrio entre o número de arquivos e o tamanho dos arquivos. A maioria dos formatos de compactação exige que o leitor leia os arquivos desde o início. Isso significa que, em geral, os arquivos de texto compactados não podem ser processados em paralelo. Arquivos grandes não compactados muitas vezes são divididos entre operadores para obter maior paralelismo durante o processamento da consulta, mas isso não é possível com a maioria dos formatos de compactação.

Conforme discutido em [Evite ter uma quantidade muito grande de arquivos](#performance-tuning-avoid-having-too-many-files), é melhor não ter uma quantidade muito grande nem muito pequena de arquivos. Como o número de arquivos é o limite de quantos operadores podem processar a consulta, essa regra se aplica principalmente a arquivos compactados.

Para obter mais informações sobre uso de compactação no Athena, consulte [Usar compactação no Athena](compression-formats.md).

## Usar bucketing para pesquisas em chaves com alta cardinalidade
<a name="performance-tuning-use-bucketing-for-lookups-on-keys-with-high-cardinality"></a>

O bucketing é uma técnica para distribuir registros em arquivos separados com base no valor de uma das colunas. Isso garante que todos os registros com o mesmo valor estejam no mesmo arquivo. O bucketing é útil quando você tem uma chave com alta cardinalidade e muitas de suas consultas buscam valores específicos da chave.

Por exemplo, digamos que você consulte um conjunto de registros de um usuário específico. Se os dados forem agrupados em bucket por ID de usuário, o Athena saberá com antecedência quais arquivos contêm registros para um ID específico e quais não. Isso permite que o Athena leia somente os arquivos que possam conter o ID, reduzindo consideravelmente a quantidade de dados lidos. Também reduz o tempo de computação que, de outra forma, seria necessário para pesquisar os dados em busca do ID específico.

### Como evitar bucketing quando as consultas frequentemente pesquisam vários valores em uma coluna
<a name="performance-tuning-disadvantages-of-bucketing"></a>

O bucketing é menos vantajoso quando as consultas frequentemente pesquisam vários valores na coluna pela qual os dados são agrupados em bucket. Quanto mais valores forem consultados, maior será a probabilidade de que seja necessário ler todos ou a maioria dos arquivos. Por exemplo, se você tiver três buckets e uma consulta procurar três valores diferentes, talvez seja necessário ler todos os arquivos. O bucketing funciona melhor quando as consultas pesquisam valores únicos.

Para obter mais informações, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md).

## Evite ter uma quantidade muito grande de arquivos
<a name="performance-tuning-avoid-having-too-many-files"></a>

Conjuntos de dados que consistem em muitos arquivos pequenos resultam em baixo desempenho geral da consulta. Ao planejar uma consulta, o Athena lista todos os locais das partições, o que leva tempo. O tratamento e a solicitação de cada arquivo também geram uma sobrecarga computacional. Portanto, é mais rápido carregar um único arquivo maior do Amazon S3 do que carregar os mesmos registros de muitos arquivos menores.

Em casos extremos, é possível encontrar limites de serviço do Amazon S3. O Amazon S3 é compatível com até 5.500 solicitações por segundo para uma única partição de índice. Inicialmente, o bucket é tratado como uma única partição de índice, mas à medida que as cargas de solicitações aumentam, ele pode ser dividido em várias partições de índice.

O Amazon S3 analisa os padrões de solicitação e as divisões com base nos prefixos de chave. Se seu conjunto de dados consistir em muitos milhares de arquivos, as solicitações provenientes do Athena poderão exceder a cota de solicitações. Mesmo com menos arquivos, a cota poderá ser excedida se forem feitas várias consultas simultâneas no mesmo conjunto de dados. Outras aplicações que acessam os mesmos arquivos podem contribuir para o número total de solicitações.

Quando o `limit` da taxa de solicitação é excedido, o Amazon S3 retorna o erro a seguir. Esse erro está incluído nas informações de status da consulta no Athena.

 SlowDown: Please reduce your request rate 

Para solucionar problemas, comece determinando se o erro foi causado por uma única consulta ou por várias consultas que leem os mesmos arquivos. No último caso, coordene a execução das consultas de modo que não sejam executadas ao mesmo tempo. Para obter isso, adicione um mecanismo de enfileiramento ou até mesmo novas tentativas em sua aplicação.

Se a execução de uma única consulta acionar o erro, tente combinar arquivos de dados ou modificar a consulta para ler menos arquivos. O melhor momento para combinar arquivos pequenos é antes de serem gravados. Para isso, considere as seguintes técnicas:
+ Altere o processo que grava arquivos para gravar arquivos maiores. Por exemplo, é possível armazenar registros em buffer por mais tempo antes de serem gravados. 
+ Coloque arquivos em um local do Amazon S3 e use uma ferramenta como o Glue ETL para combiná-los em arquivos maiores. Em seguida, mova os arquivos maiores para o local ao qual a tabela aponta. Para obter mais informações, consulte [Reading input files in larger groups](https://docs.aws.amazon.com/glue/latest/dg/grouping-input-files.html) no *Guia do desenvolvedor do AWS Glue* ou [How can I configure an AWS Glue ETL job to output larger files?](https://repost.aws/knowledge-center/glue-job-output-large-files) no *Centro de Conhecimento AWS re:Post*.
+ Reduza o número de chaves de partição. Quando há muitas chaves de partição, cada partição pode ter poucos registros, resultando em um número excessivo de arquivos pequenos. Para obter informações sobre como decidir quais partições criar, consulte [Escolher chaves de partição que oferecerão suporte às suas consultas](#performance-tuning-pick-partition-keys-that-will-support-your-queries).

## Evitar hierarquias de armazenamento adicionais além da partição
<a name="performance-tuning-avoid-additional-storage-hierarchies-beyond-the-partition"></a>

Para evitar a sobrecarga do planejamento de consultas, armazene os arquivos em uma estrutura plana em cada local da partição. Não use hierarquias de diretório adicionais.

Ao planejar uma consulta, o Athena lista todos os arquivos em todas as partições correspondentes à consulta. Embora o Amazon S3 não tenha diretórios em si, a convenção é interpretar a barra direta `/` como separador de diretório. Ao listar os locais das partições, o Athena lista recursivamente qualquer diretório que encontrar. Quando os arquivos de uma partição são organizados em hierarquia, ocorrem várias rodadas de listagens.

Quando todos os arquivos estão diretamente no local da partição, na maioria das vezes, apenas uma operação de lista precisa ser executada. Porém, várias operações de lista sequencial serão necessárias se você tiver mais de mil arquivos em uma partição porque o Amazon S3 retorna somente mil objetos por operação de lista. Ter mais de mil arquivos em uma partição também pode criar outros problemas de performance mais graves. Para obter mais informações, consulte [Evite ter uma quantidade muito grande de arquivos](#performance-tuning-avoid-having-too-many-files). 

## Use SymlinkTextInputFormat somente quando necessário
<a name="performance-tuning-use-symlinktextinputformat-only-when-necessary"></a>

Usar a técnica [https://athena.guide/articles/stitching-tables-with-symlinktextinputformat](https://athena.guide/articles/stitching-tables-with-symlinktextinputformat) pode ser uma forma de resolver situações em que os arquivos da tabela não estão bem organizados em partições. Por exemplo, links simbólicos podem ser úteis quando todos os arquivos estão no mesmo prefixo ou quando há arquivos com esquemas diferentes no mesmo local.

Porém, usar links simbólicos adiciona níveis de indireção à execução da consulta. Esses níveis de indireção afetam a performance geral. Os arquivos de links simbólicos precisam ser lidos, e os locais que eles definem devem ser listados. Isso adiciona muitas viagens de ida e volta ao Amazon S3 que as tabelas habituais do Hive não exigem. Concluindo, você deverá usar `SymlinkTextInputFormat` somente quando não houver opções melhores disponíveis, como reorganizar arquivos.

# Usar formatos de armazenamento colunares
<a name="columnar-storage"></a>

[Apache Parquet](https://parquet.apache.org) e [ORC](https://orc.apache.org/) são formatos de armazenamento colunar otimizados para recuperação rápida de dados usados em aplicações de análises da AWS.

Os formatos de armazenamento colunar têm as seguintes características que os tornam adequados para o uso com o Athena: 
+ *Compactação por coluna, com algoritmo de compactação selecionado para o tipo de dados da coluna* para economizar espaço de armazenamento no Amazon S3 e reduzir E/S e espaço no disco durante o processamento de consultas.
+ A *aplicação de predicados* em Parquet e ORC permite que as consultas do Athena busquem somente os blocos de que precisa, melhorando a performance das consultas. Quando uma consulta do Athena obtém valores de coluna específicos dos seus dados, ela usa as estatísticas dos predicados de bloco de dados, como valores máximos e mínimos, para determinar se é para ler ou ignorar o bloco. 
+ A *divisão de dados* em Parquet e ORC permite que o Athena divida a leitura de dados entre vários leitores e aumente o paralelismo durante o processamento da consulta. 

Para converter seus dados brutos existentes de outros formatos de armazenamento em Parquet ou ORC, é possível executar consultas [CREATE TABLE AS SELECT (CTAS)](ctas.md) no Athena e especificar um formato de armazenamento de dados como Parquet ou ORC, ou usar o crawler do AWS Glue.

## Escolher entre Parquet e ORC
<a name="columnar-storage-choosing"></a>

A escolha entre ORC (Optimized Row Columnar) e Parquet depende de seus requisitos específicos de uso.

O Apache Parquet fornece esquemas eficientes de compactação e codificação de dados e é ideal para executar consultas complexas e processar grandes quantidades de dados. O Parquet é otimizado para uso com o [Apache Arrow](https://arrow.apache.org/), o que pode ser vantajoso se você usar ferramentas relacionadas ao Arrow.

O ORC fornece uma maneira eficiente de armazenar dados do Hive. Os arquivos ORC geralmente são menores do que os arquivos Parquet, e os índices ORC podem agilizar as consultas. Além disso, o ORC é compatível com tipos complexos, como estruturas, mapas e listas.

Ao escolher entre Parquet e ORC, considere o seguinte:

**Desempenho da consulta**: o Parquet é compatível com uma variedade maior de tipos de consulta, por isso pode ser a melhor opção se você planeja realizar consultas complexas. 

**Tipos de dados complexos**: se você estiver usando tipos de dados complexos, o ORC pode ser a melhor opção, porque ele é compatível com uma variedade maior de tipos de dados complexos.

**Tamanho do arquivo**: se o espaço em disco for uma preocupação, o ORC geralmente resulta em arquivos menores, o que pode reduzir os custos de armazenamento.

**Compactação**: tanto o Parquet quanto o ORC oferecem boa compactação, mas o melhor formato para você pode depender do seu caso específico de uso.

**Evolução**: tanto o Parquet quanto o ORC são compatíveis com uma evolução do esquema, o que significa que você pode adicionar, remover ou modificar colunas ao longo do tempo.

Tanto o Parquet quanto o ORC são boas opções para aplicações de big data, mas considere os requisitos do seu cenário antes de escolher. Talvez você queira realizar avaliações comparativas em seus dados e consultas para ver qual formato funciona melhor para seu caso de uso.

## Converter em formatos colunares
<a name="convert-to-columnar"></a>

As opções para converter facilmente dados de origem, como JSON ou CSV, em um formato colunar, incluem o uso de consultas [CREATE TABLE AS](ctas.md) ou a execução de trabalhos no AWS Glue.
+ Você pode usar consultas (CTAS) `CREATE TABLE AS` para converter dados em Parquet ou ORC em uma única etapa. Para ver um exemplo, consulte [Exemplo: gravar resultados da consulta em um formato diferente](https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html#ctas-example-format) na página [Exemplos de consultas CTAS](ctas-examples.md).
+ Para obter informações sobre como usar o Athena para ETL para transformar dados de CSV em Parquet, consulte [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md).
+ Para obter informações sobre como executar um trabalho do AWS Glue para transformar dados CSV em Parquet, consulte a seção “Transformar dados CSV em formato Parquet” na publicação [Construir a fundação de um data lake com o AWS Glue e o Amazon S3](https://aws.amazon.com/blogs/big-data/build-a-data-lake-foundation-with-aws-glue-and-amazon-s3/) no blog sobre big data da AWS. O AWS Glue oferece suporte à mesma técnica para converter dados CSV em ORC ou dados JSON em Parquet ou ORC.

# Usar particionamento e bucketing
<a name="ctas-partitioning-and-bucketing"></a>

O particionamento e o bucketing são duas formas de reduzir a quantidade de dados que o Athena deve verificar quando você executa uma consulta. O particionamento e o bucketing são complementares e podem ser usados em conjunto. Reduzir a quantidade de dados verificados gera uma performance melhor a um custo menor. Para obter diretrizes gerais sobre a performance das consultas do Athena, consulte [As dez melhores dicas de ajuste de performance para o Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**Topics**
+ [

# O que é particionamento?
](ctas-partitioning-and-bucketing-what-is-partitioning.md)
+ [

# O que é bucketing?
](ctas-partitioning-and-bucketing-what-is-bucketing.md)
+ [

# Recursos adicionais
](ctas-partitioning-and-bucketing-additional-resources.md)

# O que é particionamento?
<a name="ctas-partitioning-and-bucketing-what-is-partitioning"></a>

Particionamento significa organizar dados em diretórios (ou “prefixos”) no Amazon S3 com base em uma propriedade específica dos dados. Essas propriedades são chamadas chaves de partição. Uma chave de partição comum é a data ou alguma outra unidade de tempo, como ano ou mês. Porém, um conjunto de dados pode ser particionado por mais de uma chave. Por exemplo, dados sobre vendas de produtos podem ser divididos por data, categoria do produto e mercado.

## Decidir como particionar
<a name="ctas-partitioning-and-bucketing-deciding-how-to-partition"></a>

Bons candidatos para chaves de partição são as propriedades que sempre ou quase sempre são usadas em consultas e têm baixa cardinalidade. Há um equilíbrio entre ter partições em excesso e não ter partições suficientes. Com partições em excesso, o aumento do número de arquivos cria sobrecarga. Também há sobrecarga na filtragem das partições em si. Com poucas partições, as consultas geralmente precisam verificar mais dados.

## Criar uma tabela particionada
<a name="ctas-partitioning-and-bucketing-creating-a-partitioned-table"></a>

Quando um conjunto de dados é particionado, é possível criar uma tabela particionada no Athena. Uma tabela particionada é uma tabela que contém chaves de partição. Ao usar `CREATE TABLE`, você adiciona partições à tabela. Quando você usa `CREATE TABLE AS`, as partições criadas no Amazon S3 são adicionadas automaticamente à tabela.

Em uma instrução `CREATE TABLE`, você especifica as chaves de partição na cláusula `PARTITIONED BY (column_name data_type)`. Em uma instrução `CREATE TABLE AS`, você especifica as chaves de partição em uma cláusula `WITH (partitioned_by = ARRAY['partition_key'])` ou `WITH (partitioning = ARRAY['partition_key'])` para tabelas Iceberg. Por questões de performance, as chaves de partição devem ser sempre do tipo `STRING`. Para obter mais informações, consulte [Usar string como o tipo de dados para chaves de partição](data-types-timestamps.md#data-types-timestamps-partition-key-types).

Para obter mais detalhes de sintaxe de `CREATE TABLE` e `CREATE TABLE AS`, consulte [CREATE TABLE](create-table.md) e [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties).

## Consultar tabelas particionadas
<a name="ctas-partitioning-and-bucketing-querying-partitioned-tables"></a>

Quando você consulta uma tabela particionada, o Athena usa os predicados da consulta para filtrar a lista de partições. Em seguida, ele utiliza os locais das partições correspondentes para processar os arquivos encontrados. O Athena pode reduzir com eficiência a quantidade de dados verificados simplesmente não lendo dados nas partições que não correspondam aos predicados da consulta.

### Exemplos
<a name="ctas-partitioning-and-bucketing-partitioned-table-example-queries"></a>

Suponha que você tenha uma tabela particionada por `sales_date` e `product_category` e queira saber a receita total de uma semana em uma categoria específica. Inclua predicados nas colunas`sales_date` e `product_category` para garantir que o Athena verificará somente a quantidade mínima de dados, como no exemplo a seguir.

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND product_category = 'Toys'
```

Suponha que você tenha um conjunto de dados que seja particionado por data, mas também tenha um carimbo de data e hora refinado.

Com as tabelas Iceberg, é possível declarar que uma chave de partição tem uma relação com uma coluna, mas com as tabelas Hive, o mecanismo de consulta não tem conhecimento das relações entre colunas e chaves de partição. Por esse motivo, é necessário incluir um predicado na coluna e na chave de partição da consulta para garantir que a consulta não verifique mais dados do que o necessário.

Por exemplo, suponha que a tabela `sales` no exemplo anterior também tenha uma coluna `sold_at` do tipo de dados `TIMESTAMP`. Se você quiser somente a receita de um intervalo de tempo específico, escreva a consulta da seguinte forma:

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date = '2023-02-28' 
AND sold_at BETWEEN TIMESTAMP '2023-02-28 10:00:00' AND TIMESTAMP '2023-02-28 12:00:00' 
AND product_category = 'Toys'
```

Para obter mais informações sobre a diferença entre consultar tabelas Hive e Iceberg, consulte [Como gravar consultas em campos de timestamp que também são particionados por tempo](data-types-timestamps.md#data-types-timestamps-how-to-write-queries-for-timestamp-fields-that-are-also-time-partitioned).

# O que é bucketing?
<a name="ctas-partitioning-and-bucketing-what-is-bucketing"></a>

Bucketing é uma forma de organizar os registros de um conjunto de dados em categorias chamadas buckets.

Esse significado de bucket e bucketing é diferente dos buckets do Amazon S3 e não devem ser confundidos. No bucketing de dados, os registros que têm o mesmo valor para uma propriedade vão para o mesmo bucket. Os registros são distribuídos da forma mais uniforme possível entre os buckets, de modo que cada bucket tenha aproximadamente a mesma quantidade de dados.

Na prática, os buckets são arquivos, e uma função de hash determina o bucket em que um registro entrará. Um conjunto de dados em bucket terá um ou mais arquivos por bucket por partição. O bucket ao qual um arquivo pertence está codificado no nome do arquivo.

## Benefícios do bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-benefits"></a>

O bucketing é útil quando um conjunto de dados é classificado em bucket por determinada propriedade, e convém recuperar registros nos quais essa propriedade tenha determinado valor. Como os dados estão em buckets, o Athena pode usar o valor para determinar quais arquivos examinar. Por exemplo, suponha que um conjunto de dados esteja em buckets `customer_id` e você queira localizar todos os registros de um cliente específico. O Athena determina o bucket que contém os registros e lê somente os arquivos desse bucket.

Bons candidatos para bucketing ocorrem quando há colunas que têm alta cardinalidade (ou seja, com muitos valores distintos), estão uniformemente distribuídas e que você frequentemente consulta buscando valores específicos.

**nota**  
O Athena não é compatível com o uso de `INSERT INTO` para adicionar novos registros a tabelas em bucket.

## Tipos de dados compatíveis com a filtragem em colunas em bucket
<a name="ctas-partitioning-and-bucketing-data-types-supported-for-filtering-on-bucketed-columns"></a>

É possível adicionar filtros em colunas classificadas por buckets com determinados tipos de dados. O Athena permite essa filtragem nas colunas em bucket com os seguintes tipos de dados:
+ BOOLEAN
+ BYTE
+ DATE
+ DOUBLE
+ FLOAT
+ INT
+ LONG
+ SHORT
+ STRING
+ VARCHAR

## Compatível com Hive e Spark
<a name="ctas-partitioning-and-bucketing-hive-and-spark-support"></a>

O mecanismo Athena versão 2 é compatível com conjuntos de dados em buckets usando o algoritmo de bucket do Hive, e o mecanismo Athena versão 3 também é compatível com o algoritmo de bucketing do Apache Spark. O bucketing Hive é o padrão. Se seu conjunto de dados for classificado em buckets usando o algoritmo Spark, use a cláusula `TBLPROPERTIES` para definir o valor da propriedade `bucketing_format` como `spark`.

**nota**  
O Athena tem um limite de 100 partições em uma consulta `CREATE TABLE AS SELECT` ([CTAS](ctas.md)). Da mesma forma, é possível adicionar apenas, no máximo, 100 partições a uma tabela de destino com uma instrução [INSERT INTO](insert-into.md).  
Se exceder essa limitação, você poderá receber a mensagem de erro HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (Limite excedido de 100 gravadores abertos para partições/buckets). Para contornar essa limitação, é possível usar uma instrução CTAS e uma série de instruções `INSERT INTO` que criam ou inserem até 100 partições cada. Para obter mais informações, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

## Exemplo de CREATE TABLE para bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-example"></a>

Para criar uma tabela para um conjunto de dados em buckets existente, use a cláusula `CLUSTERED BY (column)` seguida da cláusula `INTO N BUCKETS`. A cláusula `INTO N BUCKETS` especifica o número de buckets nos quais os dados são classificados.

No exemplo de `CREATE TABLE` a seguir, o conjunto de dados `sales` é classificado por `customer_id` em oito buckets usando o algoritmo Spark. A instrução `CREATE TABLE` usa as cláusulas`CLUSTERED BY` e `TBLPROPERTIES` para definir as propriedades adequadamente.

```
CREATE EXTERNAL TABLE sales (...) 
... 
CLUSTERED BY (`customer_id`) INTO 8 BUCKETS 
... 
TBLPROPERTIES ( 
  'bucketing_format' = 'spark' 
)
```

## Exemplo de CREATE TABLE AS (CTAS) para bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-as-example"></a>

Para especificar o bucketing com `CREATE TABLE AS`, use os parâmetros `bucketed_by` e `bucket_count`, como no exemplo a seguir.

```
CREATE TABLE sales 
WITH ( 
  ... 
  bucketed_by = ARRAY['customer_id'], 
  bucket_count = 8 
) 
AS SELECT ...
```

## Exemplo de consulta de bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-query-example"></a>

O exemplo de consulta a seguir pesquisa os nomes dos produtos que um cliente específico comprou ao longo de uma semana.

```
SELECT DISTINCT product_name 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND customer_id = 'c123'
```

Se essa tabela for particionada por `sales_date` e classificada em buckets por `customer_id`, o Athena poderá calcular o bucket em que os registros do cliente estão. No máximo, o Athena lê um arquivo por partição.

# Recursos adicionais
<a name="ctas-partitioning-and-bucketing-additional-resources"></a>
+ Para obter um exemplo de `CREATE TABLE AS` que cria tabelas em bucket e particionadas, consulte [Exemplo: criar tabelas em bucket e particionadas](https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html#ctas-example-bucketed).
+ Para obter informações sobre a implementação de buckets em data lakes do AWS, incluindo o uso de uma declaração CTAS do Athena, AWS Glue para o Apache Spark e buckets para tabelas do Apache Iceberg, consulte a postagem do blog do AWS Big Data: [Optimize data layout by bucketing with Amazon Athena and AWS Glue to accelerate downstream queries](https://aws.amazon.com/blogs/big-data/optimize-data-layout-by-bucketing-with-amazon-athena-and-aws-glue-to-accelerate-downstream-queries/). 

# Particionar dados
<a name="partitions"></a>

Ao particionar os dados, você pode restringir a quantidade que cada consulta verifica, o que melhora a performance e reduz o custo. Você pode dividir seus dados em partições usando qualquer chave. Uma prática comum é particionar os dados com base no tempo, normalmente acarretando um esquema de particionamento em vários níveis. Por exemplo, um cliente que tenha dados vindos a cada hora pode optar por particionar por ano, mês, data e hora. Outro cliente, que tem dados oriundos de muitas origens diferentes, mas carregados apenas uma vez por dia, poderia particionar por um identificador de origem dos dados e data.

O Athena pode usar partições no estilo do Apache Hive, cujos caminhos de dados contêm pares de valor-chave conectados por sinais de igual (por exemplo, `country=us/...` ou `year=2021/month=01/day=26/...`). Assim, os caminhos incluem os nomes das chaves de partição e os valores que cada caminho representa. Para carregar novas partições Hive em uma tabela particionada, você pode usar o [MSCK REPAIR TABLE](msck-repair-table.md), que funciona apenas com partições no estilo Hive.

O Athena também pode usar esquemas de particionamento em estilo não Hive. Por exemplo, os logs do CloudTrail e os fluxos de entrega do Firehose usam componentes de caminho separados para componentes de data, como `data/2021/01/26/us/6fc7845e.json`. Para essas partições que não seguem o estilo do Hive, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para adicionar as partições manualmente.

## Considerações e limitações
<a name="partitions-considerations-limitations"></a>

Ao usar o particionamento, lembre-se dos seguintes pontos:
+ Se você consultar uma tabela particionada e especificar a partição na cláusula `WHERE`, o Athena verificará somente os dados dessa partição.
+ Se você executar consultas em buckets do Amazon S3 com um grande número de objetos, e os dados não estiverem particionados, essas consultas poderão afetar os limites de taxa de solicitações `GET` no Amazon S3 e gerar exceções no Amazon S3. Para evitar erros, particione seus dados. Considere também ajustar suas taxas de solicitações do Amazon S3. Para obter mais informações, consulte [Padrões de design de melhores práticas: otimizar a performance do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/request-rate-perf-considerations.html).
+ Os locais das partições que serão usados com o Athena devem aplicar o protocolo do `s3` (por exemplo, `s3://amzn-s3-demo-bucket/folder/`). No Athena, os locais que usam outros protocolos (por exemplo, `s3a://amzn-s3-demo-bucket/folder/`) resultam em falhas nas consultas `MSCK REPAIR TABLE` quando elas são executadas nas tabelas que os contêm. 
+ Verifique se o caminho do Amazon S3 está em letras minúsculas, em vez de maiúsculas e minúsculas concatenadas (por exemplo, `userid` em vez de `userId`). Se o caminho do S3 estiver em maiúsculas e minúsculas concatenadas, o `MSCK REPAIR TABLE` não adicionará as partições ao AWS Glue Data Catalog. Para obter mais informações, consulte [MSCK REPAIR TABLE](msck-repair-table.md).
+ Como `MSCK REPAIR TABLE` verifica uma pasta e as subpastas para encontrar um esquema de partição correspondente, mantenha os dados das tabelas separadas em hierarquias de pastas separadas. Por exemplo, suponha que você tenha dados na tabela 1 em `s3://amzn-s3-demo-bucket1` e dados na tabela 2 em `s3://amzn-s3-demo-bucket1/table-2-data`. Se ambas as tabelas forem particionadas por string, `MSCK REPAIR TABLE` adicionará as partições da tabela 2 à tabela 1. Para evitar isso, use estruturas de pastas separadas, como `s3://amzn-s3-demo-bucket1` e `s3://amzn-s3-demo-bucket2`. Observe que esse comportamento é consistente com o Amazon EMR e o Apache Hive.
+ Se estiver usando o AWS Glue Data Catalog com o Athena, consulte [Endpoints e cotas do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html) para obter informações sobre cotas de serviço em partições por conta e por tabela. 
  + Embora o Athena ofereça suporte a consulta a tabelas do AWS Glue com 10 milhões de partições, o Athena não pode ler mais de 1 milhão de partições em uma única varredura. Nesses cenários, a indexação de partições pode ser benéfica. Para obter mais informações, consulte o artigo do Blog de Big Data da AWS, [Melhorar a performance das consultas do Amazon Athena usando índices de partição do AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/).
+ Para solicitar um aumento de cota de partições, se estiver usando o AWS Glue Data Catalog, acesse o [console do Service Quotas para o AWS Glue](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/glue/quotas).

## Criar e carregar uma tabela com dados particionados
<a name="partitions-creating-loading"></a>

Para criar uma tabela que use partições, use a cláusula `PARTITIONED BY` na sua instrução [CREATE TABLE](create-table.md). A cláusula `PARTITIONED BY` define as chaves usadas para particionar dados, como no exemplo a seguir. A cláusula `LOCATION` especifica o local raiz dos dados particionados.

```
CREATE EXTERNAL TABLE users (
first string,
last string,
username string
)
PARTITIONED BY (id string)
STORED AS parquet
LOCATION 's3://amzn-s3-demo-bucket'
```

Depois de criar a tabela, carregue os dados nas partições para consulta. Para partições no estilo do Hive, você executa [MSCK REPAIR TABLE](msck-repair-table.md). Para partições que não seguem o estilo do Hive, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para adicionar as partições manualmente.

## Preparar dados em estilo Hive e não Hive para consulta
<a name="partitions-preparing-data"></a>

As seções a seguir mostram como preparar dados de estilo do Hive e de estilo não Hive para consulta no Athena.

### Cenário 1: dados armazenados no Amazon S3 no formato Hive
<a name="scenario-1-data-already-partitioned-and-stored-on-s3-in-hive-format"></a>

Nesse cenário, as partições são armazenadas em pastas separadas no Amazon S3. Por exemplo, aqui está a listagem parcial para exemplos de impressões de anúncio exibidas pelo [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/ls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/ls.html), que lista os objetos do S3 sob um prefixo especificado:

```
aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/

    PRE dt=2009-04-12-13-00/
    PRE dt=2009-04-12-13-05/
    PRE dt=2009-04-12-13-10/
    PRE dt=2009-04-12-13-15/
    PRE dt=2009-04-12-13-20/
    PRE dt=2009-04-12-14-00/
    PRE dt=2009-04-12-14-05/
    PRE dt=2009-04-12-14-10/
    PRE dt=2009-04-12-14-15/
    PRE dt=2009-04-12-14-20/
    PRE dt=2009-04-12-15-00/
    PRE dt=2009-04-12-15-05/
```

Aqui, os logs são armazenados com o nome da coluna (dt) definido igual a incrementos de data, hora e minuto. Quando especifica o local da pasta pai, o esquema e o nome da coluna particionada em uma DDL, o Athena pode consultar os dados nessas subpastas.

#### Criar a tabela
<a name="creating-a-table"></a>

Para gerar uma tabela com esses dados, crie uma partição com “dt”, como na seguinte instrução DDL do Athena:

```
CREATE EXTERNAL TABLE impressions (
    requestBeginTime string,
    adId string,
    impressionId string,
    referrer string,
    userAgent string,
    userCookie string,
    ip string,
    number string,
    processId string,
    browserCookie string,
    requestEndTime string,
    timers struct<modelLookup:string, requestTime:string>,
    threadId string,
    hostname string,
    sessionId string)
PARTITIONED BY (dt string)
ROW FORMAT  serde 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://elasticmapreduce/samples/hive-ads/tables/impressions/' ;
```

Esta tabela usa o serializador/desserializador JSON nativo do Hive para ler os dados JSON armazenados no Amazon S3. Para obter mais informações sobre os formatos compatíveis, consulte [Escolha de um SerDe para seus dados](supported-serdes.md).

#### Executar MSCK REPAIR TABLE
<a name="run-msck-repair-table"></a>

Depois de executar a consulta `CREATE TABLE`, execute o comando `MSCK REPAIR TABLE` no editor de consultas do Athena para carregar as partições, como no exemplo a seguir.

```
MSCK REPAIR TABLE impressions
```

Depois de executar esse comando, os dados estarão prontos para consulta.

#### Consultar os dados
<a name="query-the-data"></a>

Consulte os dados da tabela de impressões usando a coluna de partição. Veja um exemplo abaixo:

```
SELECT dt,impressionid FROM impressions WHERE dt<'2009-04-12-14-00' and dt>='2009-04-12-13-00' ORDER BY dt DESC LIMIT 100
```

Esta consulta deve mostrar dados semelhantes aos seguintes:

```
2009-04-12-13-20    ap3HcVKAWfXtgIPu6WpuUfAfL0DQEc
2009-04-12-13-20    17uchtodoS9kdeQP1x0XThKl5IuRsV
2009-04-12-13-20    JOUf1SCtRwviGw8sVcghqE5h0nkgtp
2009-04-12-13-20    NQ2XP0J0dvVbCXJ0pb4XvqJ5A4QxxH
2009-04-12-13-20    fFAItiBMsgqro9kRdIwbeX60SROaxr
2009-04-12-13-20    V4og4R9W6G3QjHHwF7gI1cSqig5D1G
2009-04-12-13-20    hPEPtBwk45msmwWTxPVVo1kVu4v11b
2009-04-12-13-20    v0SkfxegheD90gp31UCr6FplnKpx6i
2009-04-12-13-20    1iD9odVgOIi4QWkwHMcOhmwTkWDKfj
2009-04-12-13-20    b31tJiIA25CK8eDHQrHnbcknfSndUk
```

### Cenário 2: Os dados não são particionados no formato Hive
<a name="scenario-2-data-is-not-partitioned"></a>

No exemplo a seguir, o comando `aws s3 ls` mostra os logs [ELB](elasticloadbalancer-classic-logs.md) armazenados no Amazon S3. Observe como o layout de dados não usa pares `key=value` e, portanto, não está no formato Hive. (A opção `--recursive` para o comando `aws s3 ls` especifica que todos os arquivos ou objetos no diretório ou prefixo especificado serão listados.)

```
aws s3 ls s3://athena-examples-myregion/elb/plaintext/ --recursive

2016-11-23 17:54:46   11789573 elb/plaintext/2015/01/01/part-r-00000-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    8776899 elb/plaintext/2015/01/01/part-r-00001-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    9309800 elb/plaintext/2015/01/01/part-r-00002-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    9412570 elb/plaintext/2015/01/01/part-r-00003-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47   10725938 elb/plaintext/2015/01/01/part-r-00004-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    9439710 elb/plaintext/2015/01/01/part-r-00005-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47          0 elb/plaintext/2015/01/01_$folder$
2016-11-23 17:54:47    9012723 elb/plaintext/2015/01/02/part-r-00006-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    7571816 elb/plaintext/2015/01/02/part-r-00007-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    9673393 elb/plaintext/2015/01/02/part-r-00008-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   11979218 elb/plaintext/2015/01/02/part-r-00009-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48    9546833 elb/plaintext/2015/01/02/part-r-00010-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   10960865 elb/plaintext/2015/01/02/part-r-00011-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48          0 elb/plaintext/2015/01/02_$folder$
2016-11-23 17:54:48   11360522 elb/plaintext/2015/01/03/part-r-00012-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   11211291 elb/plaintext/2015/01/03/part-r-00013-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48    8633768 elb/plaintext/2015/01/03/part-r-00014-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49   11891626 elb/plaintext/2015/01/03/part-r-00015-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49    9173813 elb/plaintext/2015/01/03/part-r-00016-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49   11899582 elb/plaintext/2015/01/03/part-r-00017-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49          0 elb/plaintext/2015/01/03_$folder$
2016-11-23 17:54:50    8612843 elb/plaintext/2015/01/04/part-r-00018-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50   10731284 elb/plaintext/2015/01/04/part-r-00019-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    9984735 elb/plaintext/2015/01/04/part-r-00020-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    9290089 elb/plaintext/2015/01/04/part-r-00021-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    7896339 elb/plaintext/2015/01/04/part-r-00022-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8321364 elb/plaintext/2015/01/04/part-r-00023-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51          0 elb/plaintext/2015/01/04_$folder$
2016-11-23 17:54:51    7641062 elb/plaintext/2015/01/05/part-r-00024-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51   10253377 elb/plaintext/2015/01/05/part-r-00025-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8502765 elb/plaintext/2015/01/05/part-r-00026-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51   11518464 elb/plaintext/2015/01/05/part-r-00027-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    7945189 elb/plaintext/2015/01/05/part-r-00028-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    7864475 elb/plaintext/2015/01/05/part-r-00029-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51          0 elb/plaintext/2015/01/05_$folder$
2016-11-23 17:54:51   11342140 elb/plaintext/2015/01/06/part-r-00030-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8063755 elb/plaintext/2015/01/06/part-r-00031-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9387508 elb/plaintext/2015/01/06/part-r-00032-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9732343 elb/plaintext/2015/01/06/part-r-00033-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52   11510326 elb/plaintext/2015/01/06/part-r-00034-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9148117 elb/plaintext/2015/01/06/part-r-00035-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52          0 elb/plaintext/2015/01/06_$folder$
2016-11-23 17:54:52    8402024 elb/plaintext/2015/01/07/part-r-00036-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    8282860 elb/plaintext/2015/01/07/part-r-00037-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52   11575283 elb/plaintext/2015/01/07/part-r-00038-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53    8149059 elb/plaintext/2015/01/07/part-r-00039-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53   10037269 elb/plaintext/2015/01/07/part-r-00040-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53   10019678 elb/plaintext/2015/01/07/part-r-00041-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53          0 elb/plaintext/2015/01/07_$folder$
2016-11-23 17:54:53          0 elb/plaintext/2015/01_$folder$
2016-11-23 17:54:53          0 elb/plaintext/2015_$folder$
```

#### Executar ALTER TABLE ADD PARTITION
<a name="run-alter-table-add-partition"></a>

Como os dados não estão no formato Hive, você não pode usar o comando `MSCK REPAIR TABLE` para adicionar as partições à tabela depois de criá-la. Em vez disso, você pode usar o comando [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para adicionar cada partição manualmente. Por exemplo, para carregar os dados em s3://athena-examples-*myregion*/elb/plaintext/2015/01/01/, execute a consulta a seguir. Observe que não é necessária uma coluna de partição separada para cada pasta do Amazon S3 e que o valor da chave da partição pode ser diferente da chave do Amazon S3.

```
ALTER TABLE elb_logs_raw_native_part ADD PARTITION (dt='2015-01-01') location 's3://athena-examples-us-west-1/elb/plaintext/2015/01/01/'
```

Se já existir uma partição, você receberá o erro de que a partição já existe. Para evitar esse erro, você pode usar a cláusula `IF NOT EXISTS`. Para obter mais informações, consulte [ALTER TABLE ADD PARTITION](alter-table-add-partition.md). Para remover uma partição, use [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md). 

## Considerar a projeção de partições
<a name="partitions-partition-projection"></a>

Para evitar a necessidade de gerenciar partições, é possível usar a projeção de partições. A projeção de partição é uma opção para tabelas altamente particionadas cuja estrutura é conhecida antecipadamente. Na projeção de partições, os valores e os locais das partições são calculados a partir das propriedades da tabela que foi configurada, não da leitura de um repositório de metadados. Como os cálculos na memória são mais rápidos do que a pesquisa remota, o uso da projeção de partição pode reduzir significativamente os tempos de execução da consulta. 

Para obter mais informações, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).

## Recursos adicionais
<a name="partitions-additional-resources"></a>
+ Para obter informações sobre opções de particionamento para dados do Firehose, consulte [Exemplo do Amazon Data Firehose](partition-projection-kinesis-firehose-example.md).
+ Também é possível automatizar partições usando o [driver JDBC](connect-with-jdbc.md). 
+ É possível usar CTAS e INSERT INTO para particionar um conjunto de dados. Para obter mais informações, consulte [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md).

# Usar projeção de partições com o Amazon Athena
<a name="partition-projection"></a>

É possível usar a projeção de partições no Athena para acelerar o processamento de consultas de tabelas altamente particionadas e automatizar o gerenciamento de partições.

Na projeção de partições, o Athena calcula valores e localizações de partições usando as propriedades da tabela que você configura diretamente em sua tabela no AWS Glue. As propriedades da tabela permitem que o Athena “projete”, ou determine, as informações de partição necessárias em vez de fazer mais uma pesquisa de metadados demorada no AWS Glue Data Catalog. Como as operações na memória costumam ser mais rápidas do que as operações remotas, a projeção de partições pode reduzir o runtime de consultas em tabelas altamente particionadas. Dependendo das características específicas da consulta e dos dados subjacentes, a projeção de partições pode reduzir significativamente o runtime para consultas restritas na recuperação de metadados de partição.

## Noções básicas de remoção de partições versus a projeção de partições
<a name="partition-projection-pruning-vs-projection"></a>

A redução de partição coleta metadados e os “reduz” para apenas as partições que se aplicam à sua consulta. Geralmente, isso acelera as consultas. O Athena usa a redução de partição em todas as tabelas com colunas de partição, inclusive aquelas configuradas para projeção de partições.

Normalmente, ao processar consultas, o Athena faz uma chamada `GetPartitions` para o AWS Glue Data Catalog antes de reduzir a partição. Se uma tabela tiver um grande número de partições, o uso de `GetPartitions` poderá prejudicar a performance. Para que isso não aconteça, você pode usar a projeção de partições. A projeção de partições permite que o Athena evite chamar `GetPartitions` porque a configuração de projeção de partições fornece ao Athena todas as informações necessárias para criar as partições propriamente ditas.

## Usar projeção de partições
<a name="partition-projection-using"></a>

Para usar a projeção de partições, especifique os intervalos de valores de partição e os tipos de projeção para cada coluna de partição nas propriedades da tabela no AWS Glue Data Catalog ou no [metastore do Hive externo](connect-to-data-source-hive.md). Essas propriedades personalizadas na tabela permitem que o Athena saiba quais padrões de partição esperar ao executar uma consulta na tabela. Durante a execução da consulta, o Athena usa essas informações para projetar os valores de partição, em vez de recuperá-los do AWS Glue Data Catalog ou do metastore do Hive externo. Esse comportamento reduz o tempo de execução da consulta e também automatiza o gerenciamento de partições, pois acaba com a necessidade de criar manualmente partições no Athena, no AWS Glue ou no metastore do Hive externo.

**Importante**  
Habilitar a projeção de partições em uma tabela faz com que o Athena ignore os metadados de partição registrados na tabela no AWS Glue Data Catalog ou no metastore do Hive.

## Alguns casos de uso
<a name="partition-projection-use-cases"></a>

Os cenários em que a projeção de partições é útil incluem o seguinte:
+ As consultas em uma tabela altamente particionada não são concluídas com a rapidez desejada.
+ Você adiciona partições regularmente a tabelas à medida que novas partições de data ou hora são criadas em seus dados. Com a projeção de partições, você configura intervalos de datas relativos que podem ser usados à medida que novos dados chegam. 
+ Você tem dados altamente particionados no Amazon S3. Os dados não são práticos para modelar no AWS Glue Data Catalog ou no metastore do Hive, e suas consultas leem apenas pequenas partes deles.

### Estruturas de partições projetáveis
<a name="partition-projection-known-data-structures"></a>

A projeção de partições é mais facilmente configurada quando as partições seguem um padrão previsível como, mas não limitado ao seguinte:
+ **Inteiros**: qualquer sequência contínua de inteiros, como `[1, 2, 3, 4, ..., 1000]` ou `[0500, 0550, 0600, ..., 2500]`.
+ **Datas**: qualquer sequência contínua de datas ou datas e horas, como `[20200101, 20200102, ..., 20201231]` ou `[1-1-2020 00:00:00, 1-1-2020 01:00:00, ..., 12-31-2020 23:00:00]`.
+ **Valores enumerados**: um conjunto finito de valores enumerados, como códigos de aeroporto ou Regiões da AWS.
+ **Logs de AWS service (Serviço da AWS)**: normalmente, os logs de AWS service (Serviço da AWS) têm uma estrutura conhecida com um esquema de partição que você pode especificar no AWS Glue e que, portanto, o Athena pode usar na projeção de partições.

### Como personalizar o modelo de caminho de partição
<a name="partition-projection-custom-s3-storage-locations"></a>

Por padrão, o Athena cria locais de partição usando o formulário `s3://amzn-s3-demo-bucket/<table-root>/partition-col-1=<partition-col-1-val>/partition-col-2=<partition-col-2-val>/`. No entanto, se os dados estão organizados de forma diferente, o Athena oferece um mecanismo para personalizar esse modelo de caminho. Para obter as etapas, consulte [Como especificar locais de armazenamento personalizados do S3](partition-projection-setting-up.md#partition-projection-specifying-custom-s3-storage-locations).

## Considerações e limitações
<a name="partition-projection-considerations-and-limitations"></a>

As seguintes considerações se aplicam:
+ A projeção de partições elimina a necessidade de especificar partições manualmente no AWS Glue ou em um metastore do Hive externo.
+ Quando você habilita a projeção de partições em uma tabela, o Athena ignora todos os metadados de partição no AWS Glue Data Catalog ou no metastore do Hive externo referentes a essa tabela.
+ Se uma partição projetada não existir no Amazon S3, o Athena ainda a projetará. O Athena não gera um erro, mas também não retorna dados. No entanto, se muitas partições estiverem vazias, a performance poderá ser mais lenta em comparação com as partições tradicionais do AWS Glue. Se mais da metade das partições projetadas estiver vazia, é recomendado usar partições tradicionais.
+ As consultas de valores que excedem os limites de intervalo definidos para a projeção de partição não retornam erro. Em vez disso, a consulta é executada, mas não retorna nenhuma linha. Por exemplo, se você tem dados relacionados a um cronograma que começa em 2020 e está definidos como `'projection.timestamp.range'='2020/01/01,NOW'`, uma consulta como `SELECT * FROM table-name WHERE timestamp = '2019/02/02'` será concluída com êxito, mas não retornará nenhuma linha.
+ A projeção de partições somente pode ser usada quando a tabela é consultada pelo Athena. Se a mesma tabela for lida por meio de outro serviço, como o Amazon Redshift Spectrum, o Athena for Spark ou o Amazon EMR, os metadados de partição padrão serão usados.
+ Como a projeção de partições é um recurso somente DML, `SHOW PARTITIONS` não lista as partições projetadas pelo Athena, mas que não estão registradas no catálogo do AWS Glue ou no metastore do Hive externo. 
+ O Athena não usa as propriedades de tabela de visualizações como configuração para a projeção de partições. Para contornar essa limitação, configure e habilite a projeção de partições nas propriedades das tabelas mencionadas nas visualizações.

## Vídeo
<a name="partition-projection-video"></a>

O vídeo a seguir mostra como usar a projeção de partições para melhorar a performance das suas consultas no Athena.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/iUD5pPpcyZk/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/iUD5pPpcyZk)


**Topics**
+ [

## Noções básicas de remoção de partições versus a projeção de partições
](#partition-projection-pruning-vs-projection)
+ [

## Usar projeção de partições
](#partition-projection-using)
+ [

## Alguns casos de uso
](#partition-projection-use-cases)
+ [

## Considerações e limitações
](#partition-projection-considerations-and-limitations)
+ [

## Vídeo
](#partition-projection-video)
+ [

# Configurar a projeção de partições
](partition-projection-setting-up.md)
+ [

# Tipos compatíveis para projeção de partições
](partition-projection-supported-types.md)
+ [

# Usar particionamento de ID dinâmico
](partition-projection-dynamic-id-partitioning.md)
+ [

# Exemplo do Amazon Data Firehose
](partition-projection-kinesis-firehose-example.md)

# Configurar a projeção de partições
<a name="partition-projection-setting-up"></a>

A configuração da projeção de partições nas propriedades de uma tabela é um processo de duas etapas:

1. Especifique os intervalos de dados e os padrões relevantes para cada coluna de partição ou use um modelo personalizado.

1. Habilite a projeção de partições para a tabela.

**nota**  
Antes de adicionar propriedades de projeção de partição para uma tabela existente, a coluna de partição para a qual você está configurando as propriedades de projeção de partição já deve existir no esquema da tabela. Caso a coluna de partição ainda não exista, você deverá adicionar manualmente uma coluna de partição à tabela existente. O AWS Glue não executa esta etapa para você de forma automática. 

Esta seção mostra como definir as propriedades de tabela para o AWS Glue. Para defini-las, você pode usar o console do AWS Glue, as consultas [CREATE TABLE](create-table.md) do Athena ou as operações de [AWS Glue API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html). O procedimento a seguir mostra como definir as propriedades no console do AWS Glue.

**Para configurar e habilitar a projeção de partições usando o console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha a guia **Tabelas**.

   Na guia **Tabelas**, você pode editar tabelas existentes ou escolher **Adicionar tabelas** para criar novas tabelas. Para obter informações sobre como adicionar tabelas manualmente ou com um crawler, consulte [Trabalhar com tabelas no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) no *Guia do desenvolvedor do AWS Glue*.

1. Na lista de tabelas, escolha o link para a tabela que você deseja editar.  
![\[No console do AWS Glue, escolha uma tabela para editar.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/partition-projection-1.png)

1. Selecione **Actions** (Ações), **Edit** (Editar).

1. Na página **Edit table** (Editar tabela), na seção **Table properties** (Propriedades da tabela), para cada coluna particionada, adicione o seguinte par de chave-valor:

   1. Em **Chave**, adicione `projection.columnName.type`.

   1. Em **Valor**, adicione um dos tipos compatíveis: `enum`, `integer`, `date` ou `injected`. Para obter mais informações, consulte [Tipos compatíveis para projeção de partições](partition-projection-supported-types.md).

1. Seguindo as orientações em [Tipos compatíveis para projeção de partições](partition-projection-supported-types.md), adicione outros pares de chave-valor de acordo com seus requisitos de configuração.

   O exemplo de configuração de tabela a seguir configura a coluna ‭`year`‬ para projeção de partições, restringindo os valores que podem ser retornados a um intervalo de 2010 a 2016.  
![\[Configuração da projeção de partições para uma coluna de partição nas propriedades de tabela do console do AWS Glue.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/partition-projection-3.png)

1. Adicione um par de chave-valor para habilitar a projeção de partições. Em **Chave**, insira `projection.enabled` e, em **Valor**, insira `true`.
**nota**  
Você pode desativar a projeção de partições nessa tabela a qualquer momento definindo `projection.enabled` como `false`.

1. Quando terminar, escolha **Salvar**.

1. No editor de consultas do Athena, faça uma consulta de teste nas colunas de tabela que você configurou.

   A consulta de exemplo a seguir usa `SELECT DISTINCT` para retornar os valores exclusivos da coluna `year`. O banco de dados contém dados de 1987 a 2016, mas a propriedade ‭`projection.year.range` restringe os valores retornados para os anos 2010 a 2016.  
![\[Consultando uma coluna que usa projeção de partições.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/partition-projection-5.png)
**nota**  
Se você definir `projection.enabled` como `true`, mas não conseguir configurar uma ou mais colunas de partição, receberá uma mensagem de erro como a seguinte:  
`HIVE_METASTORE_ERROR: Table database_name.table_name is configured for partition projection, but the following partition columns are missing projection configuration: [column_name] (table database_name.table_name)`.

## Como especificar locais de armazenamento personalizados do S3
<a name="partition-projection-specifying-custom-s3-storage-locations"></a>

Ao editar as propriedades de tabela no AWS Glue, você também pode especificar um modelo de caminho do Amazon S3 personalizado para as partições projetadas. Um modelo personalizado permite que o Athena mapeie corretamente os valores de partição para os locais de arquivo personalizados do Amazon S3 que não seguem o padrão `.../column=value/...`. 

O uso de um modelo personalizado é opcional. No entanto, se você usar um modelo personalizado, o modelo deverá conter um espaço reservado para cada coluna de partição. Os locais baseados em modelo devem terminar com uma barra para que os arquivos de dados particionados sejam armazenados em uma “pasta” por partição.

**Como especificar um modelo de local de partição personalizado**

1. Seguindo as etapas para [configurar e habilitar a projeção de partições usando o console do AWS Glue](#partition-projection-setting-up-procedure), adicione outro par de chave-valor que especifique um modelo personalizado da seguinte forma:

   1. Em **Chave**, digite `storage.location.template`.

   1. Em **Valor**, especifique um local que inclua um espaço reservado para cada coluna de partição. Termine cada espaço reservado (e o próprio caminho do S3) com uma barra única.

      Os valores de modelo de exemplo a seguir assumem uma tabela com colunas de partição `a`, `b` e `c`.

      ```
      s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/      
      ```

      ```
      s3://amzn-s3-demo-bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/      
      ```

      Para a mesma tabela, o valor de modelo de exemplo a seguir é inválido porque não contém nenhum espaço reservado para a coluna `c`.

      ```
      s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/         
      ```

1. Escolha **Aplicar**.

# Tipos compatíveis para projeção de partições
<a name="partition-projection-supported-types"></a>

Uma tabela pode ter qualquer combinação dos tipos `enum`, `integer`, `date,` ou `injected` de coluna de partição.

## Tipo enum
<a name="partition-projection-enum-type"></a>

Use o tipo `enum` para colunas de partição cujos valores são membros de um conjunto enumerado (por exemplo, códigos de aeroporto ou Regiões da AWS).

Defina as propriedades da partição na tabela da seguinte forma:


****  

| Nome da propriedade | Exemplos de valores | Descrição | 
| --- | --- | --- | 
| projection.columnName.type |  `enum`  | Obrigatório. O tipo de projeção a ser usado para a coluna columnName. O valor deve ser enum (sem diferenciar maiúsculas e minúsculas) para sinalizar o uso do tipo de enumeração. Espaços em branco iniciais e finais são permitidos. | 
| projection.columnName.values |  `A,B,C,D,E,F,G,Unknown`  | Obrigatório. Uma lista separada por vírgulas de valores de partição enumerados para a coluna columnName. Qualquer espaço em branco é considerado parte de um valor de enumeração. | 

**nota**  
Como prática recomendada, limite o uso de projeções de partições com base em `enum` a no máximo algumas dúzias. Embora não haja um limite específico para projeções `enum`, o tamanho total dos metadados da sua tabela não pode exceder o limite do AWS Glue de cerca de 1 MB quando compactado com gzip. Esse limite é compartilhado entre as partes principais da tabela, como nomes de colunas, local, formato de armazenamento etc. Se você usar mais de algumas dúzias de IDs exclusivos em sua projeção `enum`, considere uma abordagem alternativa, como criar buckets de um número menor de valores exclusivos em um campo substituto. Ao compensar a cardinalidade, você pode controlar o número de valores exclusivos no campo `enum`. 

## Tipo integer
<a name="partition-projection-integer-type"></a>

Use o tipo integer para colunas de partição cujos valores possíveis são interpretáveis como inteiros dentro de um intervalo definido. As colunas integer projetadas estão atualmente limitadas ao intervalo de um Java assinado longo (-263 a 263-1, ambos incluídos).


****  

| Nome da propriedade | Exemplos de valores | Descrição | 
| --- | --- | --- | 
| projection.columnName.type |  `integer`  | Obrigatório. O tipo de projeção a ser usado para a coluna columnName. O valor deve ser integer (sem diferenciar maiúsculas e minúsculas) para sinalizar o uso do tipo de inteiro. Espaços em branco iniciais e finais são permitidos. | 
| projection.columnName.range |  `0,10` `-1,8675309` `0001,9999`  | Obrigatório. Uma lista separada por vírgulas de dois elementos que fornece os valores de intervalo mínimo e máximo a serem retornados por consultas na coluna columnName. Observe que os valores devem ser separados por uma vírgula, não por um hífen. Esses valores são inclusivos, podem ser negativos e podem ter zeros à esquerda. Espaços em branco iniciais e finais são permitidos. | 
| projection.columnName.interval |  `1` `5`  | Opcional. Um inteiro positivo que especifica o intervalo entre valores de partição sucessivos para a coluna columnName. Por exemplo, um valor range de “1,3" com um valor interval de “1" produz os valores 1, 2 e 3. O mesmo valor range com um valor interval de “2" produz os valores 1 e 3, ignorando 2. Espaços em branco iniciais e finais são permitidos. O padrão é 1. | 
| projection.columnName.digits |  `1` `5`  | Opcional. Um inteiro positivo que especifica o número de dígitos a serem incluídos na representação final do valor da partição para a coluna columnName. Por exemplo, um valor range de “1,3" que tem um valor digits de “1" produz os valores 1, 2 e 3. O mesmo valor range com um valor digits de “2" produz os valores 01, 02 e 03. Espaços em branco iniciais e finais são permitidos. O padrão é nenhum número estático de dígitos e nenhum zero à esquerda. | 

## Tipo date
<a name="partition-projection-date-type"></a>

Use o tipo date para colunas de partição cujos valores são interpretáveis como datas (com horas opcionais) dentro de um intervalo definido.

**Importante**  
As colunas date projetadas são geradas no Horário Universal Coordenado (UTC) no tempo de execução da consulta.


****  

| Nome da propriedade | Exemplos de valores | Descrição | 
| --- | --- | --- | 
| projection.columnName.type |  `date`  | Obrigatório. O tipo de projeção a ser usado para a coluna columnName. O valor deve ser date (sem diferenciar maiúsculas e minúsculas) para sinalizar o uso do tipo de data. Espaços em branco iniciais e finais são permitidos. | 
| projection.columnName.range |  `201701,201812` `01-01-2010,12-31-2018` `NOW-3YEARS,NOW` `201801,NOW+1MONTH`  |  Obrigatório. Uma lista separada por vírgulas de dois elementos que fornece os valores `range` mínimo e máximo para a coluna *columnName*. Esses valores são inclusivos e podem usar qualquer formato compatível com os tipos de data `java.time.*` em Java. Os valores mínimo e máximo devem usar o mesmo formato. O formato especificado na propriedade `.format` deve ser o formato usado para esses valores. Essa coluna também pode conter strings de data relativas, formatadas neste padrão de expressão regular: `\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?\|MONTHS?\|WEEKS?\|DAYS?\|HOURS?\|MINUTES?\|SECONDS?)\s*)?` Espaços em branco são permitidos. No entanto, em literais de data, eles são considerados parte das strings de data em si.  | 
| projection.columnName.format |  `yyyyMM` `dd-MM-yyyy` `dd-MM-yyyy-HH-mm-ss`  | Obrigatório. Uma string de formato de data baseada no formato de data Java [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html). Pode ser qualquer tipo Java.time.\$1 compatível. | 
| projection.columnName.interval |  `1` `5`  |  Um inteiro positivo que especifica o intervalo entre valores de partição sucessivos para a coluna *columnName*. Por exemplo, um valor `range` de `2017-01,2018-12` com um valor `interval` de `1` e um valor `interval.unit` de `MONTHS` produz os valores 2017-01, 2017-02, 2017-03 e assim por diante. O mesmo valor `range` com um valor `interval` de `2` e um valor `interval.unit` de `MONTHS` produz os valores 2017-01, 2017-03, 2017-05 e assim por diante. Espaços em branco iniciais e finais são permitidos. Quando as datas fornecidas são com precisão de um dia ou um mês, o `interval` é opcional e o padrão é 1 dia ou 1 mês, respectivamente. Caso contrário, o `interval` será obrigatório.  | 
| projection.columnName.interval.unit |  `YEARS` `MONTHS` `WEEKS` `DAYS` `HOURS` `MINUTES` `SECONDS` `MILLIS`  |  Uma palavra de unidade de tempo que representa a forma serializada de uma [ChronoUnit](https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html). Os valores possíveis são `YEARS`, `MONTHS`, `WEEKS`, `DAYS`, `HOURS`, `MINUTES`, `SECONDS` ou `MILLIS`. Esses valores diferenciam maiúsculas de minúsculas. Quando as datas fornecidas são com precisão de um dia ou um mês, o `interval.unit` é opcional e o padrão é 1 dia ou 1 mês, respectivamente. Caso contrário, `interval.unit` será obrigatório.  | 

**Example - Particionamento por mês**  
O exemplo de configuração da tabela a seguir particiona os dados por mês, de 2015 até o presente.  

```
'projection.month.type'='date', 
'projection.month.format'='yyyy-MM', 
'projection.month.interval'='1', 
'projection.month.interval.unit'='MONTHS', 
'projection.month.range'='2015-01,NOW', 
...
```

## Tipo injected
<a name="partition-projection-injected-type"></a>

Use o tipo injetado para colunas de partição com valores possíveis que não podem ser gerados processualmente dentro de algum intervalo lógico, mas que são fornecidos na cláusula `WHERE` de uma consulta como um único valor.

É importante ter em mente os seguintes pontos:
+ Consultas em colunas injetadas falharão se uma expressão de filtro não for fornecida para cada coluna injetada.
+ Consultas com vários valores para uma expressão de filtro em uma coluna injetada só terão êxito se os valores forem disjuntos.
+ Somente colunas do tipo `string` são permitidas.
+ Quando você usa a cláusula `WHERE IN` com uma coluna de partição injetada, há um limite de 1.000 valores que podem ser especificados na lista `IN`. Para consultar um conjunto de dados com mais de 1.000 partições para uma coluna injetada, divida a consulta em várias consultas menores, cada uma com até 1.000 valores na cláusula `WHERE IN`, e, em seguida, agregue os resultados.


****  

| Nome da propriedade | Valor | Descrição | 
| --- | --- | --- | 
| projection.columnName.type |  `injected`  | Obrigatório. O tipo de projeção a ser usado para a coluna columnName. Somente o tipo string é permitido. O valor especificado deve ser injected (sem diferenciação de maiúsculas e minúsculas). Espaços em branco iniciais e finais são permitidos. | 

Para obter mais informações, consulte [Quando usar o tipo de projeção `injected`](partition-projection-dynamic-id-partitioning.md#partition-projection-injection).

# Usar particionamento de ID dinâmico
<a name="partition-projection-dynamic-id-partitioning"></a>

Quando os dados são particionados por uma propriedade com alta cardinalidade ou quando os valores não podem ser conhecidos antecipadamente, é possível usar o tipo de projeção `injected`. Exemplos dessas propriedades são os nomes de usuário e os IDs de dispositivos ou de produtos. Quando você usa o tipo de projeção `injected` para configurar uma chave de partição, o Athena usa valores da própria consulta para calcular o conjunto de partições que serão lidas.

Para que o Athena possa executar uma consulta em uma tabela que tem uma chave de partição configurada com o tipo de projeção `injected`, o seguinte deve ser verdadeiro:
+ A consulta deve incluir, no mínimo, um valor para a chave de partição.
+ Os valores devem ser literais ou expressões que possam ser avaliadas sem a necessidade de leitura de dados.

Se algum desses critérios não for atendido, a consulta falhará e apresentará o seguinte erro:

CONSTRAINT\$1VIOLATION: para a coluna de partição projetada injetada *column\$1name*, a cláusula WHERE deve conter somente condições de igualdade estática e pelo menos uma dessas condições deve estar presente.

## Quando usar o tipo de projeção `injected`
<a name="partition-projection-injection"></a>

Imagine que você tem um conjunto de dados que consiste em eventos de dispositivos de IoT, os quais são particionados nos IDs dos dispositivos. Esse conjunto de dados tem as seguintes características:
+ Os IDs dos dispositivos são gerados de forma aleatória.
+ Novos dispositivos são provisionados com frequência.
+ Atualmente, existem centenas de milhares de dispositivos e, no futuro, haverá milhões.

Esse conjunto de dados é complexo de gerenciar usando metastores tradicionais. É difícil manter as partições sincronizadas entre o armazenamento de dados e o metastore, e a filtragem de partições pode ser lenta durante o planejamento da consulta. Entretanto, se você configurar uma tabela para usar a projeção de partição e usar o tipo de projeção `injected`, obterá duas vantagens: não precisará gerenciar partições no metastore e as consultas não precisarão procurar metadados de partições.

O exemplo `CREATE TABLE`, apresentado a seguir, cria uma tabela para o conjunto de dados de eventos do dispositivo que acabamos de descrever. A tabela usa o tipo de projeção “injected”.

```
CREATE EXTERNAL TABLE device_events (
  event_time TIMESTAMP,
  data STRING,
  battery_level INT
)
PARTITIONED BY (
  device_id STRING
)
LOCATION "s3://amzn-s3-demo-bucket/prefix/"
TBLPROPERTIES (
  "projection.enabled" = "true",
  "projection.device_id.type" = "injected",
  "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${device_id}"
)
```

O exemplo de consulta apresentado a seguir pesquisa o número de eventos recebidos de três dispositivos específicos ao longo de 12 horas.

```
SELECT device_id, COUNT(*) AS events
FROM device_events
WHERE device_id IN (
  '4a770164-0392-4a41-8565-40ed8cec737e',
  'f71d12cf-f01f-4877-875d-128c23cbde17',
  '763421d8-b005-47c3-ba32-cc747ab32f9a'
)
AND event_time BETWEEN TIMESTAMP '2023-11-01 20:00' AND TIMESTAMP '2023-11-02 08:00'
GROUP BY device_id
```

Quando você executa essa consulta, o Athena visualiza os três valores para a chave de partição `device_id` e os usa para calcular os locais das partições. O Athena usa os valores com a propriedade `storage.location.template` para gerar os seguintes locais:
+ `s3://amzn-s3-demo-bucket/prefix/4a770164-0392-4a41-8565-40ed8cec737e`
+ `s3://amzn-s3-demo-bucket/prefix/f71d12cf-f01f-4877-875d-128c23cbde17`
+ `s3://amzn-s3-demo-bucket/prefix/763421d8-b005-47c3-ba32-cc747ab32f9a`

Se você omitir a propriedade `storage.location.template` da configuração da projeção de partição, o Athena usará o particionamento no estilo Hive para projetar os locais de partições com base no valor em `LOCATION` (por exemplo, `s3://amzn-s3-demo-bucket/prefix/device_id=4a770164-0392-4a41-8565-40ed8cec737e`).

# Exemplo do Amazon Data Firehose
<a name="partition-projection-kinesis-firehose-example"></a>

Quando você usa o Firehose para entregar dados ao Amazon S3, a configuração padrão grava objetos com chaves semelhantes ao seguinte exemplo:

```
s3://amzn-s3-demo-bucket/prefix/yyyy/MM/dd/HH/file.extension
```

Para criar uma tabela do Athena que encontre as partições automaticamente no momento da consulta, em vez de precisar adicioná-las ao AWS Glue Data Catalog à medida que novos dados chegam, você pode usar a projeção de partições.

O exemplo de `CREATE TABLE` a seguir usa a configuração padrão do Firehose.

```
CREATE EXTERNAL TABLE my_ingested_data (
 ...
)
...
PARTITIONED BY (
 datehour STRING
)
LOCATION "s3://amzn-s3-demo-bucket/prefix/"
TBLPROPERTIES (
 "projection.enabled" = "true",
 "projection.datehour.type" = "date",
 "projection.datehour.format" = "yyyy/MM/dd/HH",
 "projection.datehour.range" = "2021/01/01/00,NOW",
 "projection.datehour.interval" = "1",
 "projection.datehour.interval.unit" = "HOURS",
 "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${datehour}/"
)
```

A cláusula `TBLPROPERTIES` na instrução `CREATE TABLE` diz ao Athena o seguinte:
+ Usar projeção de partições ao consultar a tabela
+ A chave de partição `datehour` é do tipo `date` (que inclui um horário opcional)
+ Como as datas são formatadas
+ O intervalo dos períodos de datas. Observe que os valores devem ser separados por uma vírgula, não por um hífen.
+ Onde encontrar os dados no Amazon S3.

Quando você consulta a tabela, o Athena calcula os valores para `datehour` e usa o modelo de local de armazenamento para gerar uma lista de locais de partição.

**Topics**
+ [

# Como usar o tipo `date`.
](partition-projection-kinesis-firehose-example-using-the-date-type.md)
+ [

# Como escolher chaves de partição
](partition-projection-kinesis-firehose-example-choosing-partition-keys.md)
+ [

# Como usar prefixos personalizados e particionamento dinâmico
](partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning.md)

# Como usar o tipo `date`.
<a name="partition-projection-kinesis-firehose-example-using-the-date-type"></a>

Quando você usa o tipo `date` para a chave de partição projetada, deve especificar um intervalo. Como não há dados para datas antes da criação do fluxo de entrega do Firehose, você pode usar a data de criação como o início. E como você não tem dados para datas no futuro, pode usar o token especial `NOW` como fim.

No exemplo `CREATE TABLE`, a data de início é especificada como 1º de janeiro de 2021 à meia-noite UTC.

**nota**  
Configure um intervalo que corresponda o mais exatamente possível aos seus dados para que o Athena procure apenas partições existentes.

Quando uma consulta é executada na tabela de amostra, o Athena usa as condições na chave de partição `datehour` em combinação com o intervalo para gerar valores. Considere a seguinte consulta:

```
SELECT *
FROM my_ingested_data
WHERE datehour >= '2020/12/15/00'
AND datehour < '2021/02/03/15'
```

A primeira condição na consulta `SELECT` usa uma data antes do início do intervalo de datas especificado pela instrução `CREATE TABLE`. Como a configuração de projeção de partições não especifica nenhuma partição para datas antes de 1º de janeiro de 2021, o Athena procura dados somente nos locais a seguir e ignora as datas anteriores na consulta.

```
s3://amzn-s3-demo-bucket/prefix/2021/01/01/00/
s3://amzn-s3-demo-bucket/prefix/2021/01/01/01/
s3://amzn-s3-demo-bucket/prefix/2021/01/01/02/
...
s3://amzn-s3-demo-bucket/prefix/2021/02/03/12/
s3://amzn-s3-demo-bucket/prefix/2021/02/03/13/
s3://amzn-s3-demo-bucket/prefix/2021/02/03/14/
```

Da mesma forma, se a consulta fosse executada em uma data e hora antes de 3 de fevereiro de 2021 às 15:00, a última partição refletiria a data e a hora atuais, não a data e a hora na condição da consulta.

Se você quiser consultar os dados mais recentes, pode aproveitar o fato de que Athena não gera datas futuras e especificar apenas uma `datehour` de início, como no exemplo a seguir.

```
SELECT *
FROM my_ingested_data
WHERE datehour >= '2021/11/09/00'
```

# Como escolher chaves de partição
<a name="partition-projection-kinesis-firehose-example-choosing-partition-keys"></a>

Você pode especificar como a projeção de partições mapeia os locais de partição para chaves de partição. No exemplo da seção anterior para `CREATE TABLE`, a data e o horário foram combinados em uma chave de partição chamada “datehour”, mas outros esquemas são possíveis. Por exemplo, você também pode configurar uma tabela com chaves de partição separadas por ano, mês, dia e hora. 

No entanto, dividir datas em ano, mês e dia significa que o tipo de projeção de partição `date` não pode ser usado. Uma alternativa é separar a data do horário para ainda aproveitar o tipo de projeção da partição `date`, mas facilitar a leitura das consultas que especificam intervalos de horas.

Com isso em mente, o exemplo `CREATE TABLE` a seguir separa a data da hora. Como `date` é uma palavra reservada em SQL, o exemplo usa `day` como nome da chave de partição que representa a data.

```
CREATE EXTERNAL TABLE my_ingested_data2 (
 ...
)
...
PARTITIONED BY (
 day STRING,
 hour INT
)
LOCATION "s3://amzn-s3-demo-bucket/prefix/"
TBLPROPERTIES (
 "projection.enabled" = "true",
 "projection.day.type" = "date",
 "projection.day.format" = "yyyy/MM/dd",
 "projection.day.range" = "2021/01/01,NOW",
 "projection.day.interval" = "1",
 "projection.day.interval.unit" = "DAYS",
 "projection.hour.type" = "integer",
 "projection.hour.range" = "0,23",
 "projection.hour.digits" = "2",
 "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${day}/${hour}/"
)
```

No exemplo de instrução `CREATE TABLE`, a hora é uma chave de partição separada, configurada como um inteiro. A configuração para a chave de partição de hora especifica o intervalo de 0 a 23 e que a hora deverá ser formatada com dois dígitos quando o Athena gerar os locais de partições.

Uma consulta para a tabela `my_ingested_data2` poderia ser semelhante a esta:

```
SELECT *
FROM my_ingested_data2
WHERE day = '2021/11/09'
AND hour > 3
```

## Noções básicas de chave de partição e tipos de dados de projeção de partições
<a name="partition-projection-kinesis-firehose-example-partition-key-types-and-partition-projection-types"></a>

Observe que a chave `datehour` no primeiro exemplo de `CREATE TABLE` é configurada como `date` na configuração de projeção de partições, mas o tipo de chave de partição é `string`. O mesmo vale para `day` no segundo exemplo. Os tipos na configuração de projeção de partições apenas dizem ao Athena como formatar os valores quando ele gera os locais de partição. Os tipos especificados não alteram o tipo da chave de partição. Em consultas, `datehour` e `day` são do tipo `string`.

Quando uma consulta inclui uma condição como `day = '2021/11/09'`, o Athena analisa a sequência do lado direito da expressão usando o formato de data especificado na configuração de projeção de partições. Depois que o Athena verifica se a data está dentro do intervalo configurado, ele usa o formato de data novamente para inserir a data como uma sequência no modelo de local de armazenamento.

Da mesma forma, para uma condição de consulta como `day > '2021/11/09'`, o Athena analisa o lado direito e gera uma lista de todas as datas correspondentes dentro do intervalo configurado. Em seguida, ele usa o formato de data para inserir cada data no modelo de local de armazenamento para criar a lista de locais de partição.

Escrever a mesma condição que `day > '2021-11-09'` ou `day > DATE '2021-11-09'` não funciona. No primeiro caso, o formato de data não corresponde (observe os hifens em vez de barras) e, no segundo caso, os tipos de dados não correspondem.

# Como usar prefixos personalizados e particionamento dinâmico
<a name="partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning"></a>

É possível configurar o Firehose com [prefixos personalizados](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) e [particionamento dinâmico](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html). Usando esses recursos, você pode configurar as chaves do Amazon S3 e configurar esquemas de particionamento que suportem melhor seu caso de uso. Você também pode usar a projeção de partições com esses esquemas de particionamento e configurá-los de acordo.

Por exemplo, você pode usar o recurso de prefixo personalizado para obter chaves do Amazon S3 com datas em formato ISO em vez do esquema padrão de `yyyy/MM/dd/HH`.

Você também pode combinar prefixos personalizados com particionamento dinâmico para extrair uma propriedade como `customer_id` das mensagens do Firehose, como no exemplo a seguir.

```
prefix/!{timestamp:yyyy}-!{timestamp:MM}-!{timestamp:dd}/!{partitionKeyFromQuery:customer_id}/
```

Com esse prefixo do Amazon S3, o fluxo de entrega do Firehose gravaria objetos em chaves como `s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension`. Para uma propriedade como `customer_id`, na qual os valores podem não ser conhecidos com antecedência, você pode usar o tipo de projeção de partições `injected` e usar uma instrução `CREATE TABLE` como a seguinte:

```
CREATE EXTERNAL TABLE my_ingested_data3 (
 ...
)
...
PARTITIONED BY (
 day STRING,
 customer_id STRING
)
LOCATION "s3://amzn-s3-demo-bucket/prefix/"
TBLPROPERTIES (
 "projection.enabled" = "true",
 "projection.day.type" = "date",
 "projection.day.format" = "yyyy-MM-dd",
 "projection.day.range" = "2021-01-01,NOW",
 "projection.day.interval" = "1",
 "projection.day.interval.unit" = "DAYS",
 "projection.customer_id.type" = "injected",
 "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${day}/${customer_id}/"
)
```

Quando você consulta uma tabela que tem uma chave de partição do tipo `injected`, sua consulta deve incluir um valor para essa chave de partição. Uma consulta para a tabela `my_ingested_data3` poderia ser semelhante a esta:

```
SELECT *
FROM my_ingested_data3
WHERE day BETWEEN '2021-11-01' AND '2021-11-30'
AND customer_id = 'customer-1234'
```

## Usar o tipo DATE para a chave de partição do dia
<a name="partition-projection-kinesis-firehose-example-iso-formatted-dates"></a>

Como os valores para chave de partição `day` são em formato ISO, você também pode usar o tipo `DATE`, em vez de `STRING`, para a chave de partição de dia, como no exemplo a seguir:

```
PARTITIONED BY (day DATE, customer_id STRING)
```

Quando você consulta, essa estratégia permite que você use funções de data na chave de partição sem análise ou conversão, como no exemplo a seguir:

```
SELECT *
FROM my_ingested_data3
WHERE day > CURRENT_DATE - INTERVAL '7' DAY
AND customer_id = 'customer-1234'
```

**nota**  
A especificação de uma chave de partição do tipo `DATE` pressupõe que você usou o atributo [custom prefix](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) para criar chaves do Amazon S3 que tenham datas no formato ISO. Caso esteja usando o formato padrão de `yyyy/MM/dd/HH` do Firehose, você deverá especificar a chave de partição com o tipo `string`, mesmo que a propriedade da tabela correspondente seja do tipo `date`, como no seguinte exemplo:  

```
PARTITIONED BY ( 
  `mydate` string)
TBLPROPERTIES (
  'projection.enabled'='true', 
   ...
  'projection.mydate.type'='date',
  'storage.location.template'='s3://amzn-s3-demo-bucket/prefix/${mydate}')
```

# Prevenir o controle de utilização do Amazon S3
<a name="performance-tuning-s3-throttling"></a>

O controle de utilização é o processo de limitar sua taxa de uso de um serviço, uma aplicação ou um sistema. Na AWS, você pode usar o controle de utilização para evitar o uso excessivo do serviço Amazon S3 e aumentar a disponibilidade e a capacidade de resposta do Amazon S3 para todos os usuários. Porém, como o controle de utilização limita a taxa de transferências de dados de entrada e saída do Amazon S3, é importante tentar evitar que suas interações sejam limitadas.

Conforme apontado no capítulo de [ajuste de performance](performance-tuning.md), as otimizações podem depender de suas decisões de nível de serviço, de como você estrutura suas tabelas e dados e de como você escreve suas consultas.

**Topics**
+ [

# Reduzir o controle de utilização no nível de serviço
](performance-tuning-s3-throttling-reduce-throttling-at-the-service-level.md)
+ [

# Otimizar suas tabelas
](performance-tuning-s3-throttling-optimizing-your-tables.md)
+ [

# Otimizar suas consultas
](performance-tuning-s3-throttling-optimizing-queries.md)

# Reduzir o controle de utilização no nível de serviço
<a name="performance-tuning-s3-throttling-reduce-throttling-at-the-service-level"></a>

Para evitar o controle de utilização do Amazon S3 no nível do serviço, é possível monitorar o uso e ajustar as [cotas de serviço](https://docs.aws.amazon.com/general/latest/gr/s3.html#limits_s3) ou usar certas técnicas, como particionamento. Estas são algumas das condições que podem levar ao controle de utilização:
+ **Exceder os limites de solicitação de API da conta**: o Amazon S3 tem limites de solicitação de API padrão baseados no tipo e no uso da conta. Se você exceder o número máximo de solicitações por segundo para um único prefixo, as solicitações poderão ser limitadas para evitar a sobrecarga do serviço Amazon S3.
+ **Particionamento de dados insuficiente**: se você não particionar os dados corretamente e transferir uma grande quantidade de dados, o Amazon S3 poderá limitar as solicitações. Para obter mais informações sobre particionamento, consulte a seção [Usar particionamento](performance-tuning-s3-throttling-optimizing-your-tables.md#performance-tuning-s3-throttling-use-partitioning) deste documento.
+ **Grande quantidade de objetos pequenos**: se possível, evite uma grande quantidade de arquivos pequenos. O Amazon S3 tem um limite de [5500 solicitações GET](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) por segundo por prefixo particionado, e suas consultas do Athena compartilham esse mesmo limite. Se você verificar milhões de objetos pequenos em uma única consulta, provavelmente o Amazon S3 limitará a consulta.

Para evitar verificação em excesso, você pode usar o recurso ETL do AWS Glue para compactar periodicamente os arquivos ou particionar a tabela e adicionar filtros de chave de partição. Para obter mais informações, consulte os recursos a seguir.
+ [Como posso configurar um trabalho de ETL do AWS Glue para gerar arquivos maiores?](https://aws.amazon.com/premiumsupport/knowledge-center/glue-job-output-large-files/) (*AWS Central de conhecimento da*)
+ [Ler arquivos de entrada em grupos maiores](https://docs.aws.amazon.com/glue/latest/dg/grouping-input-files.html) (*Guia do desenvolvedor do AWS Glue*)

# Otimizar suas tabelas
<a name="performance-tuning-s3-throttling-optimizing-your-tables"></a>

Caso você encontre problemas de controle de utilização, é importante estruturar os dados. Embora o Amazon S3 consiga lidar com grandes quantidades de dados, às vezes o controle de utilização ocorre devido à forma como os dados são estruturados.

As seções a seguir oferecem algumas sugestões sobre como estruturar dados no Amazon S3 para evitar problemas de controle de utilização.

## Usar particionamento
<a name="performance-tuning-s3-throttling-use-partitioning"></a>

É possível usar o particionamento para reduzir o controle de utilização limitando a quantidade de dados que precisam ser acessados a qualquer momento. Ao particionar dados em colunas específicas, você pode distribuir as solicitações de maneira uniforme entre vários objetos e reduzir o número de solicitações para um único objeto. Reduzir a quantidade de dados que devem ser verificados melhora a performance da consulta e reduz os custos.

Ao criar uma tabela, você pode definir partições que atuam como colunas virtuais. Para criar uma tabela com partições em uma instrução `CREATE TABLE`, use a cláusula `PARTITIONED BY (column_name data_type)` para definir as chaves para particionar dados.

Para restringir as partições verificadas por uma consulta, é possível especificá-las como predicados em uma cláusula `WHERE` da consulta. Portanto, colunas usadas como filtros com frequência são boas candidatas para particionamento. Uma prática comum é particionar os dados com base na hora, o que pode acarretar um esquema de particionamento em vários níveis.

O particionamento também tem um custo. Quando você aumenta o número de partições na tabela, o tempo necessário para recuperar e processar os metadados da partição também aumenta. Assim, o particionamento excessivo pode remover os benefícios obtidos ao particionar de forma mais criteriosa. Se os dados estiverem muito distorcidos para um valor de partição e a maioria das consultas usar esse valor, você poderá incorrer em aumento de sobrecarga.

Para obter mais informações sobre particionamento no Athena, consulte [O que é particionamento?](ctas-partitioning-and-bucketing-what-is-partitioning.md).

## Classificar dados em bucket
<a name="performance-tuning-s3-throttling-bucket-your-data"></a>

Outra forma de particionar dados é classificá-los em buckets dentro de uma única partição. Com o bucketing, você especifica uma ou mais colunas que contêm linhas que deseja agrupar. Em seguida, você coloca essas linhas em vários buckets. Dessa forma, você consulta somente o bucket que deve ser lido, reduzindo o número de linhas de dados que devem ser verificados.

Ao selecionar uma coluna que será usada para bucketing, selecione a coluna que tenha alta cardinalidade (ou seja, que tenha muitos valores distintos), esteja uniformemente distribuída e seja usada com frequência para filtrar os dados. Um exemplo de uma boa coluna a ser usada para bucketing é uma chave primária, como uma coluna de ID.

Para obter mais informações sobre bucketing no Athena, consulte [O que é bucketing?](ctas-partitioning-and-bucketing-what-is-bucketing.md)

## Usar índices de partição do AWS Glue
<a name="performance-tuning-s3-throttling-use-aws-glue-partition-indexes"></a>

Você pode usar índices de partição do AWS Glue para organizar dados em uma tabela com base nos valores de uma ou mais partições. Os índices de partição do AWS Glue podem reduzir o número de transferências de dados, a quantidade de processamento de dados e o tempo de processamento das consultas.

Um índice de partição do AWS Glue é um arquivo de metadados que contém informações sobre as partições da tabela, inclusive as chaves da partição e seus valores. O índice da partição é armazenado em um bucket do Amazon S3 e atualizado automaticamente pelo AWS Glue à medida que novas partições são adicionadas à tabela.

Quando há um índice de partição do AWS Glue presente, as consultas tentam buscar um subconjunto das partições em vez de carregar todas as partições na tabela. As consultas são executadas somente no subconjunto de dados relevante para a consulta.

Ao criar uma tabela no AWS Glue, é possível criar um índice de partição em qualquer combinação de chaves de partição definidas na tabela. Depois de criar um ou mais índices de partição em uma tabela, é necessário adicionar uma propriedade à tabela que habilite a filtragem de partições. Em seguida, você pode consultar a tabela no Athena.

Para obter informações sobre como criar índices de partição no AWS Glue, consulte [Trabalhar com índices de partição no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) no *Guia do desenvolvedor do AWS Glue*. Para obter informações sobre como adicionar uma propriedade de tabela para habilitar a filtragem de partições, consulte [Otimizar consultas com indexação e filtragem de partições do AWS Glue](glue-best-practices-partition-index.md).

## Usar compactação de dados e divisão de arquivos
<a name="performance-tuning-s3-throttling-use-data-compression-and-file-splitting"></a>

A compactação de dados pode acelerar consideravelmente as consultas se os arquivos estiverem no tamanho ideal ou se puderem ser divididos em grupos lógicos. Geralmente, taxas de compactação mais altas necessitam de mais ciclos de CPU para compactar e descompactar os dados. Para o Athena, recomendamos usar o Apache Parquet ou o Apache ORC, que compactam dados por padrão. Para obter mais informações sobre compactação de dados no Athena, consulte [Usar compactação no Athena](compression-formats.md).

A divisão de arquivos aumenta o paralelismo ao permitir que o Athena distribua a tarefa de ler um único arquivo entre vários leitores. Se um único arquivo não foi divisível, somente um único leitor poderá ler o arquivo enquanto outros leitores estiverem ociosos. O Apache Parquet e o Apache ORC também são compatíveis com arquivos divisíveis.

## Use armazenamentos de dados em colunas otimizados
<a name="performance-tuning-s3-throttling-use-optimized-columnar-data-stores"></a>

A performance da consulta do Athena melhorará consideravelmente se você converter os dados para um formato em colunas. Ao gerar arquivos em colunas, uma técnica de otimização a ser considerada é ordenar os dados com base na chave de partição.

O Apache Parquet e o Apache ORC são armazenamentos de dados em colunas de código aberto bastante usados. Para obter informações sobre como converter a fonte de dados existente do Amazon S3 para um desses formatos, consulte [Converter em formatos colunares](columnar-storage.md#convert-to-columnar).

### Usar um tamanho de bloco do Parquet ou tamanho de faixa ORC maior
<a name="performance-tuning-s3-throttling-use-a-larger-parquet-block-size-or-orc-stripe-size"></a>

O Parquet e o ORC têm parâmetros de armazenamento de dados que podem ser ajustados para otimização. No Parquet, é possível otimizar o tamanho do bloco. No ORC, é possível otimizar o tamanho da faixa. Quanto maior o bloco ou a faixa, mais linhas você poderá armazenar em cada um deles. Por padrão, o tamanho do bloco Parquet é 128 MB, e o tamanho da faixa ORC é 64 MB.

Se uma faixa ORC for menor que 8 MB (o valor padrão de `hive.orc.max_buffer_size`), o Athena lerá toda a faixa ORC. É a compensação que o Athena faz entre a seletividade da coluna e as operações de entrada e saída por segundo para faixas menores.

Se houver tabelas com um número muito grande de colunas, um tamanho pequeno de bloco ou de faixa pode fazer com que sejam verificados mais dados do que o necessário. Nesses casos, um tamanho maior de bloco pode ser mais eficiente.

### Usar ORC para tipos complexos
<a name="performance-tuning-s3-throttling-use-orc-for-complex-types"></a>

Atualmente, ao consultar colunas armazenadas em Parquet que tenham tipos de dados complexos (por exemplo, `array`, `map` ou `struct`), o Athena lê a linha de dados inteira em vez de somente as colunas especificadas seletivamente. Este é um problema conhecido do Athena. Como solução alternativa, considere usar o ORC.

### Escolher um algoritmo de compactação
<a name="performance-tuning-s3-throttling-choose-a-compression-algorithm"></a>

Outro parâmetro que pode ser configurado é o algoritmo de compactação nos blocos de dados. Para obter informações sobre os algoritmos de compactação compatíveis com Parquet e ORC no Athena, consulte [Suporte a compactação no Athena](https://docs.aws.amazon.com/athena/latest/ug/compression-formats.html).

Para obter mais informações sobre a otimização de formatos de armazenamento em colunas no Athena, consulte a seção “Otimizar a geração de armazenamento de dados em colunas” na publicação do AWS Big Data Blog [As dez melhores dicas de ajuste de performance para o Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

## Usar tabelas Iceberg
<a name="performance-tuning-s3-throttling-use-iceberg-tables"></a>

Apache Iceberg é um formato de tabela aberta para conjuntos de dados analíticos muito grandes, criado para otimizar o uso do Amazon S3. Você pode usar as tabelas Iceberg para ajudar a reduzir o controle de utilização no Amazon S3.

As tabelas Iceberg oferecem as seguintes vantagens:
+ É possível dividir as tabelas Iceberg em partições de uma ou mais colunas. Isso otimiza o acesso aos dados e reduz a quantidade de dados que deverão ser verificados por meio de consultas.
+ Como o modo de armazenamento de objetos do Iceberg otimiza as tabelas Iceberg para funcionar com o Amazon S3, ele pode processar grandes volumes de dados e workloads de consultas pesadas.
+ As tabelas Iceberg no modo de armazenamento de objetos são escaláveis, tolerantes a falhas e duráveis, o que pode ajudar a reduzir o controle de utilização.
+ Com o suporte à transação ACID, vários usuários podem adicionar e excluir objetos do Amazon S3 de forma atômica.

Para obter mais informações sobre o Apache Iceberg, consulte [Apache Iceberg](https://iceberg.apache.org/). Para obter mais informações sobre como usar tabelas Apache Iceberg no Athena, consulte [Usar tabelas Iceberg](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html).

# Otimizar suas consultas
<a name="performance-tuning-s3-throttling-optimizing-queries"></a>

Use as sugestões desta seção para otimizar as consultas SQL no Athena.

## Usar LIMIT com a cláusula ORDER BY
<a name="performance-tuning-s3-throttling-use-limit-with-the-order-by-clause"></a>

A cláusula `ORDER BY` retorna dados em uma ordem classificada. Isso exige que o Athena envie todas as linhas de dados para um único nó de processamento e classifique as linhas. Esse tipo de consulta pode ser executado por muito tempo ou pode até falhar.

Para aumentar a eficiência das consultas, observe os valores *N* superiores ou inferiores e use também uma cláusula `LIMIT`. Isso reduz significativamente o custo de classificação, inserindo tanto a classificação como a limitação em nós de processamento individuais, e não em um único operador.

## Otimizar cláusulas JOIN
<a name="performance-tuning-s3-throttling-optimize-join-clauses"></a>

Quando você une duas tabelas, o Athena distribui a tabela à direita para os nós de processamento e transmite a tabela à esquerda para realizar a junção.

Por isso, especifique a tabela maior no lado esquerdo da junção e a tabela menor no lado direito da junção. Assim, o Athena usa menos memória e executa a consulta com menor latência.

Observe também os seguintes pontos:
+ Ao usar vários comandos `JOIN`, especifique as tabelas da maior para a menor.
+ Evite junções cruzadas, a menos que sejam exigidas pela consulta.

## Otimizar cláusulas GROUP BY
<a name="performance-tuning-s3-throttling-optimize-group-by-clauses"></a>

O operador `GROUP BY` distribui as linhas com base nas colunas `GROUP BY` para os nós de processamento. Essas colunas são referenciadas na memória, e os valores são comparados à medida que as linhas são ingeridas. Os valores são agregados quando a coluna `GROUP BY` coincide. Considerando a forma como o processo funciona, é aconselhável ordenar as colunas da maior cardinalidade para a menor.

## Usar números em vez de strings
<a name="performance-tuning-s3-throttling-use-numbers-instead-of-strings"></a>

Como os números exigem menos memória e são mais rápidos de processar em comparação com as strings, use números em vez de strings quando possível.

## Limitar o número de colunas
<a name="performance-tuning-s3-throttling-limit-the-number-of-columns"></a>

Para reduzir a quantidade total de memória necessária para armazenar os dados, limite o número de colunas especificado na instrução `SELECT`.

## Usar expressões regulares em vez de LIKE
<a name="performance-tuning-s3-throttling-use-regular-expressions-instead-of-like"></a>

Consultas que incluem cláusulas como `LIKE '%string%'` em strings grandes podem fazer uso muito intensivo de computação. Ao filtrar por vários valores em uma coluna de string, use a função [regexp\$1like()](https://trino.io/docs/current/functions/regexp.html#regexp_like) e uma expressão regular. Isso é útil especialmente ao comparar uma longa lista de valores.

## Usar a cláusula LIMIT
<a name="performance-tuning-s3-throttling-use-the-limit-clause"></a>

Em vez de selecionar todas as colunas ao executar uma consulta, use a cláusula `LIMIT` para retornar somente as colunas necessárias. Essa ação reduz o tamanho do conjunto de dados que é processado pelo pipeline de execução da consulta. As cláusulas `LIMIT` são mais úteis ao consultar tabelas que têm um grande número de colunas baseadas em strings. As cláusulas `LIMIT` também são úteis ao executar várias junções ou agregações em qualquer consulta.

# Recursos adicionais
<a name="performance-tuning-additional-resources"></a>

Para obter mais informações sobre ajuste de performance no Athena, acesse estes recursos:
+ Publicação no Blog de Big Data da AWS: [As 10 melhores dicas de ajuste de performance do Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).
+ Publicação no Blog de Big Data da AWS: [Executa consultas 3 vezes mais rápido e com até 70% de economia de custos no mecanismo mais recente do Amazon Athena](https://aws.amazon.com/blogs/big-data/run-queries-3x-faster-with-up-to-70-cost-savings-on-the-latest-amazon-athena-engine/) no *Blog de Big Data da AWS*.
+ Publicação no Blog de Big Data da AWS: [Aprimorar consultas federadas com a redução de predicados no Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/).
+ Guia do usuário do Amazon Simple Storage Service: [Práticas recomendadas de padrões de design: otimização da performance do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html).
+ Outras [publicações do Athena no Blog de Big Data da AWS](https://aws.amazon.com/blogs/big-data/tag/amazon-athena/) 
+ Faça uma pergunta no [AWS re:Post](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena) usando a tag **Amazon Athena**
+ Consulte os [tópicos do Athena na Central de Conhecimento da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/#Amazon_Athena)
+ Entre em contato com AWS Support (no Console de gerenciamento da AWS, clique em **Support** (Suporte), **Support Center** (Central de Suporte))

# Usar compactação no Athena
<a name="compression-formats"></a>

O Athena suporta uma variedade de formatos de compactação para leitura e gravação de dados, incluindo a leitura de uma tabela que usa vários formatos de compactação. Por exemplo, o Athena pode ler com sucesso os dados de uma tabela que usa o formato de arquivo Parquet quando alguns arquivos Parquet são compactados com o Snappy e outros arquivos Parquet são compactados com o GZIP. O mesmo princípio se aplica aos formatos de armazenamento ORC, arquivo de texto e JSON.

## Formatos de compactação com suporte
<a name="compression-support-formats"></a>

O Athena aceita os seguintes formatos de compactação:
+ **BZIP2**: formato que usa o algoritmo de Burrows-Wheeler.
+ **DEFLATE**: algoritmo de compactação de dados baseado em codificação [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) e [Huffman](https://en.wikipedia.org/wiki/Huffman_coding). [Deflate](https://en.wikipedia.org/wiki/Deflate) só é relevante para o formato de arquivo Avro.
+ **GZIP**: algoritmo de compactação baseado em Deflate. Para tabelas do Hive no mecanismo do Athena versões 2 e 3, e tabelas do Iceberg no mecanismo do Athena versão 2, o GZIP é o formato de compactação de gravação padrão para arquivos nos formatos de armazenamento de arquivos Parquet e de texto. Arquivos no formato `tar.gz` não são suportados.
+ **LZ4**: este membro da família Lempel-Ziv 77 (LZ7) também se concentra na velocidade de compactação e descompactação, não na compactação máxima dos dados. O LZ4 tem os seguintes formatos de enquadramento:
  + **LZ4 Raw/Unframed**: uma implementação sem quadros padrão do formato de compactação de blocos LZ4. Para obter mais informações, consulte [LZ4 Block Format Description](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md) (Descrição do formato de bloco LZ4) no GitHub.
  + **LZ4 framed**: a implementação de enquadramento usual do LZ4. Para obter mais informações, consulte [LZ4 Frame Format Description](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md) (Descrição do formato de quadro LZ4) no GitHub.
  + **LZ4 Hadoop-compatible**: a implementação do Apache Hadoop do LZ4. Esta implementação envolve a compactação LZ4 com a classe [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java).
+ **LZO**: formato que usa o algoritmo Lempel-Ziv-Oberhumer, que se concentra na alta velocidade de compactação e descompactação, não na compactação máxima dos dados. O LZO tem duas implementações:
  + **Standard LZO**: para obter mais informações, consulte o [resumo](http://www.oberhumer.com/opensource/lzo/#abstract) do LZO no site da Oberhumer.
  + **LZO Hadoop-compatible**: esta implementação envolve o algoritmo LZO com a classe [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java).
+ **SNAPPY**: algoritmo de compactação que faz parte da família Lempel-Ziv 77 (LZ7). O Snappy se concentra na alta velocidade de compactação e descompactação, não na compactação máxima do dados.
+ **ZLIB**: com base no Deflate, ZLIB é o formato de compactação de gravação padrão para arquivos no formato de armazenamento de dados ORC. Para obter mais informações, consulte a página [zib](https://github.com/madler/zlib) no GitHub.
+  **ZSTD**: o [algoritmo de compactação de dados Zstandard](http://facebook.github.io/zstd/) é um algoritmo de compactação rápida que fornece altas taxas de compactação. A biblioteca Zstandard (ZSTD) é fornecida como software de código aberto usando uma licença BSD. O ZSTD é a compactação padrão para tabelas do Iceberg. O Athena usa o nível 3 de compactação ZSTD por padrão quando grava dados compactados como ZSTD. Para obter mais informações sobre o uso de níveis de compactação ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).

**nota**  
O Athena não é compatível com gravação de arquivos compactados Parquet nos formatos LZ4 ou LZO. Ainda há compatibilidade com leituras para esses formatos de compactação.

## Especificar formatos de compactação
<a name="compression-support-specifying-compression-formats"></a>

Ao escrever instruções CREATE TABLE ou CTAS, você pode especificar propriedades de compactação que especifiquem o tipo de compactação a ser usado quando o Athena gravar nessas tabelas.
+ Para CTAS, consulte [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties). Para obter exemplos, consulte [Exemplos de consultas CTAS](ctas-examples.md).
+ Para CREATE TABLE, consulte [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) para obter uma lista de propriedades da tabela de compactação.

## Especificar nenhuma compactação
<a name="compression-support-specifying-no-compression"></a>

As instruções CREATE TABLE são compatíveis com a gravação de arquivos descompactados. Para gravar arquivos descompactados, use a seguinte sintaxe: 
+ CREATE TABLE (arquivo de texto ou JSON): Em `TBLPROPERTIES`, especifique `write.compression = NONE`.
+ CREATE TABLE (Parquet): em `TBLPROPERTIES`, especifique `parquet.compression = UNCOMPRESSED`.
+ CREATE TABLE (ORC): em `TBLPROPERTIES`, especifique `orc.compress = NONE`.

## Observações e recursos
<a name="compression-support-notes-and-resources"></a>
+ Atualmente, extensões de arquivos em letras maiúsculas, como `.GZ` ou `.BZIP2`, não são reconhecidas pelo Athena. Evite usar conjuntos de dados com extensões de arquivos em letras maiúsculas ou altere essas extensões para letras minúsculas.
+ Para dados em CSV, TSV e JSON, o Athena determina o tipo de compactação com base na extensão do arquivo. Se nenhuma extensão de arquivo estiver presente, o Athena tratará os dados como texto simples sem compactação. Se os dados estiverem compactados, certifique-se de que o nome do arquivo inclua a extensão de compactação, como `gz`.
+ O formato de arquivo ZIP não é compatível.
+ Para consultar os logs do Amazon Data Firehose usando o Athena, os formatos compatíveis incluem a compactação GZIP ou os arquivos ORC com compactação SNAPPY.
+ Para obter mais informações sobre como usar a compactação, consulte a seção 3 (“Compress and split files” [Compactar e dividir arquivos]) da publicação do blog da AWS sobre big data: [Top 10 performance tuning tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (As dez melhores dicas de ajuste de performance do Amazon Athena).

**Topics**
+ [

## Especificar formatos de compactação
](#compression-support-specifying-compression-formats)
+ [

## Especificar nenhuma compactação
](#compression-support-specifying-no-compression)
+ [

## Observações e recursos
](#compression-support-notes-and-resources)
+ [Compactação de tabelas do Hive](compression-support-hive.md)
+ [Compactação de tabelas do Iceberg](compression-support-iceberg.md)
+ [Níveis de compactação ZSTD](compression-support-zstd-levels.md)

# Usar a compactação de tabelas do Hive
<a name="compression-support-hive"></a>

As opções de compactação de tabelas do Hive no Athena variam de acordo com a versão do mecanismo e o formato do arquivo.

## Suporte à compactação do Hive na versão 3 do mecanismo do Athena
<a name="compression-support-hive-v3"></a>

A tabela a seguir resume o suporte a formatos de compactação na versão 3 do mecanismo no Athena para formatos de arquivo de armazenamento no Apache Hive. O formato de arquivo de texto inclui TSV, CSV, JSON e SerDes personalizado para texto. “Sim” ou “Não” em uma célula se aplicam igualmente às operações de leitura e gravação, exceto quando indicado. Para as finalidades desta tabela, CREATE TABLE, CTAS e INSERT INTO serão consideradas operações de gravação. Para obter mais informações sobre o uso de níveis de compressão ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | Ion | ORC | Parquet | Arquivo de texto | 
| --- | --- | --- | --- | --- | --- | 
| BZIP2 | Sim | Sim | Não | Não | Sim | 
| DEFLATE | Sim | Não | Não | Não | Não | 
| GZIP | Não | Sim | Não | Sim | Sim | 
| LZ4 | Não | Sim | Sim |  Gravação: não Leitura: sim  | Sim | 
| LZO | Não |  Gravação: não Leitura: sim  | Não |  Gravação: não Leitura: sim  |  Gravação: não Leitura: sim  | 
| SNAPPY | Sim | Sim | Sim | Sim | Sim | 
| ZLIB | Não | Não | Sim | Não | Não | 
| ZSTD | Sim | Sim | Sim | Sim | Sim | 
| NONE | Sim | Sim | Sim | Sim | Sim | 

# Usar compactação de tabelas do Iceberg
<a name="compression-support-iceberg"></a>

As opções de compactação das tabelas do Iceberg no Athena variam de acordo com a versão do mecanismo e o formato do arquivo.

## Suporte à compactação do Iceberg na versão 3 do mecanismo do Athena
<a name="compression-support-iceberg-v3"></a>

A tabela a seguir resume o suporte a formatos de compactação na versão 3 do mecanismo no Athena para formatos de arquivo de armazenamento no Apache Iceberg. “Sim” ou “Não” em uma célula se aplicam igualmente às operações de leitura e gravação, exceto quando indicado. Para as finalidades desta tabela, CREATE TABLE, CTAS e INSERT INTO serão consideradas operações de gravação. O formato de armazenamento padrão para o Iceberg no mecanismo do Athena versão 3 é Parquet. O formato de compactação padrão para o Iceberg no mecanismo do Athena versão 3 é ZSTD. Para obter mais informações sobre o uso de níveis de compressão ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | ORC | Parquet (padrão) | 
| --- | --- | --- | --- | 
| BZIP2 | Não | Não | Não | 
| GZIP | Sim | Não | Sim | 
| LZ4 | Não | Sim | Não | 
| SNAPPY | Sim | Sim | Sim | 
| ZLIB | Não | Sim | Não | 
| ZSTD | Sim | Sim | Sim (padrão) | 
| NONE | Sim (especificar None ou Deflate) | Sim | Sim (especificar None ou Uncompressed) | 

# Usar níveis de compactação ZSTD
<a name="compression-support-zstd-levels"></a>

O [algoritmo de compactação de dados em tempo real Zstandard](http://facebook.github.io/zstd/) é um algoritmo de compactação rápida que fornece altas taxas de compactação. A biblioteca Zstandard (ZSTD) é um software de código aberto e usa uma licença BSD. O Athena oferece suporte a leitura e a gravação de dados nos formatos ORC, Parquet e arquivo de texto compactados como ZSTD.

Você pode usar os níveis de compactação ZSTD para ajustar a taxa e a velocidade de compactação de acordo com suas necessidades. A biblioteca ZSTD é compatível com níveis de compactação de 1 a 22. O Athena usa o nível 3 de compactação ZSTD por padrão.

Os níveis de compactação oferecem compensações granulares entre a velocidade e a quantidade de compactação alcançadas. Níveis de compactação mais baixos oferecem maior velocidade, mas tamanhos de arquivo maiores. Por exemplo, você pode usar o nível 1 se a velocidade for mais importante e o nível 22 se o tamanho for mais importante. O nível 3 é adequado para muitos casos de uso e é o padrão. Use níveis maiores que 19 com cuidado, pois eles exigem mais memória. A biblioteca ZSTD também oferece níveis de compactação negativos que ampliam a faixa de velocidade e taxas de compactação. Para obter mais informações, consulte [Zstandard Compression RFC](https://datatracker.ietf.org/doc/html/rfc8478).

A abundância de níveis de compactação oferece oportunidades substanciais para ajustes finos. No entanto, certifique-se de medir seus dados e considerar as desvantagens ao decidir sobre um nível de compactação. Recomendamos usar o nível padrão de 3 ou um nível na faixa de 6 a 9 para uma compensação razoável entre a velocidade de compactação e o tamanho dos dados compactados. Reserve níveis 20 ou mais para casos em que o tamanho é mais importante e a velocidade de compactação não é uma preocupação.

## Considerações e limitações
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

Ao usar o nível de compactação ZSTD no Athena, acesse os seguintes pontos.
+ A propriedade `compression_level` da ZSTD tem suporte apenas no mecanismo Athena versão 3.
+ A propriedade `compression_level` da ZSTD é compatível com as instruções `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` (CTAS) e `UNLOAD`.
+ A propriedade `compression_level` é opcional.
+ A propriedade `compression_level` tem suporte apenas para compactação ZSTD.
+ Os níveis de compactação possíveis são de 1 a 22.
+ O nível de compactação padrão é 3.

Para obter informações sobre suporte à compactação do Apache Hive ZSTD no Athena, consulte [Usar a compactação de tabelas do Hive](compression-support-hive.md). Para obter informações sobre suporte à compactação do Apache Iceberg ZSTD no Athena, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md).

## Especificar níveis de compactação ZSTD
<a name="compression-support-zstd-levels-specifying"></a>

Para especificar o nível de compactação ZSTD para as instruções `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` e `UNLOAD`, use a propriedade `compression_level`. Para especificar a compactação ZSTD em si, você deve usar a propriedade de compactação individual que a sintaxe da instrução usa.

### ALTER TABLE SET TBLPROPERTIES
<a name="compression-support-zstd-levels-alter-table"></a>

Na cláusula `SET TBLPROPERTIES` da instrução [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md), especifique a compactação ZSTD usando `'write.compression' = ' ZSTD'` ou `'parquet.compression' = 'ZSTD'`. Em seguida, use a propriedade `compression_level` para especificar um valor de 1 a 22 (por exemplo, '`compression_level' = '5'`). Se você não especificar uma propriedade de nível de compactação, o padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-alter-table-example"></a>

O exemplo a seguir modifica a tabela `existing_table` para usar o formato de arquivo Parquet com compactação ZSTD nível 4. Observe que na cláusula `TBLPROPERTIES`, o valor do nível de compactação deve ser inserido como uma string em vez de um número inteiro e, portanto, deve ser inserido entre aspas simples ou duplas.

```
ALTER TABLE existing_table 
SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = '4')
```

### CRIAR TABELA
<a name="compression-support-zstd-levels-create-table"></a>

Na cláusula `TBLPROPERTIES` da instrução [CREATE TABLE](create-table.md), especifique '`write.compression' = 'ZSTD'` ou `'parquet.compression' = 'ZSTD'`, e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como string.. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-create-table-example"></a>

O exemplo a seguir cria uma tabela no formato de arquivo Parquet usando compactação ZSTD nível 4. 

```
CREATE EXTERNAL TABLE new_table ( 
  `col0` string COMMENT '', 
  `col1` string COMMENT '' 
) 
STORED AS PARQUET 
LOCATION 's3://amzn-s3-demo-bucket/' 
TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = '4')
```

### CREATE TABLE AS (CTAS)
<a name="compression-support-zstd-levels-ctas"></a>

Na cláusula `WITH` da instrução [CREATE TABLE AS](create-table-as.md), especifique `write_compression = 'ZSTD'` ou `parquet_compression = 'ZSTD'`, e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como um inteiro. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-ctas-example"></a>

O exemplo de CTAS a seguir especifica o Parquet como formato de arquivo usando compactação ZSTD nível 4. Observe que, na cláusula `WITH`, o valor do nível de compactação deve ser especificado como um número inteiro, não como uma string.

```
CREATE TABLE new_table  
WITH ( format = 'PARQUET', write_compression = 'ZSTD', compression_level = 4)  
AS SELECT * FROM old_table
```

### UNLOAD
<a name="compression-support-zstd-levels-unload"></a>

Na cláusula `WITH` da instrução [UNLOAD](unload.md), especifique `compression = 'ZSTD'` e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como um inteiro. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-unload-example"></a>

O exemplo a seguir descarrega os resultados da consulta no local especificado usando o formato de arquivo Parquet, a compactação ZSTD e o nível 4 de compactação ZSTD.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/' 
WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
```

# Marcar recursos do Athena com tags
<a name="tags"></a>

Uma tag consiste em uma chave e um valor, ambos definidos por você. Ao marcar um recurso do Athena, você atribui metadados personalizados a ele. Você pode usar etiquetas para categorizar seus recursos da AWS de diferentes formas, como por finalidade, proprietário ou ambiente. No Athena, recursos como grupos de trabalho, catálogos de dados e reservas de capacidade são recursos etiquetáveis. Por exemplo, você pode criar um conjunto de tags para grupos de trabalho na sua conta que ajuda a rastrear os proprietários do grupo de trabalho ou identificar grupos de trabalho por finalidade. Se você também habilitar as tags como tags de alocação de custos no console do Billing and Cost Management, os custos associados à execução de consultas aparecerão em seu Relatório de custos e uso com essa tag de alocação de custos. Recomendamos usar as [práticas recomendadas de marcação com tags](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html) da AWS para criar um conjunto consistente de tags que atenda às necessidades da sua organização.

Você pode trabalhar com etiquetas usando o console do Athena ou as operações de API. 

**Topics**
+ [

## Conceitos Básicos de Tags
](#tag-basics)
+ [

## Restrições de tags
](#tag-restrictions)
+ [

# Trabalhar com tags para grupos de trabalho
](tags-console.md)
+ [

# Usar API e operações de tag da AWS CLI
](tags-operations.md)
+ [

# Usar políticas de controle de acesso do IAM baseadas em tags
](tags-access-control.md)

## Conceitos Básicos de Tags
<a name="tag-basics"></a>

Uma etiqueta é um rótulo atribuído a um recurso do Athena. Cada tag consiste de uma chave e um valor opcional, que podem ser definidos.

As etiquetas permitem categorizar seus recursos da AWS de maneiras diferentes. Por exemplo, você pode definir um conjunto de tags para os grupos de trabalho da sua conta que ajudem a rastrear o proprietário ou a finalidade de cada grupo de trabalho.

É possível adicionar etiquetas ao criar um grupo de trabalho ou catálogo de dados do Athena ou adicionar, editar ou remover etiquetas dele. Você pode editar uma tag no console. Se você usar as operações da API para editar uma tag, remova a tag antiga e adicione uma nova. Caso exclua um recurso, todas as respectivas tags também serão excluídas.

O Athena não atribui etiquetas automaticamente aos recursos. É possível editar chaves de tags e valores, e é possível remover as tags de um recurso a qualquer momento. É possível definir o valor de uma tag a uma string vazia, mas não pode configurar o valor de um tag como nula. Não adicione chaves de tag duplicadas ao mesmo recurso. Se você fizer isso, o Athena emitirá uma mensagem de erro. Se você usar a ação **TagResource** para marcar um recurso usando uma chave de tag existente, o novo valor da tag substituirá o valor antigo.

No IAM, é possível controlar quais usuários na sua conta da Amazon Web Services têm permissão para criar, editar, remover ou listar etiquetas. Para obter mais informações, consulte [Usar políticas de controle de acesso do IAM baseadas em tags](tags-access-control.md).

Para obter uma lista completa de ações de etiqueta do Amazon Athena, consulte os nomes das ações de API na [Referência de API do Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/).

Você pode usar tags para faturamento. Para obter mais informações, consulte [Usar etiquetas para faturamento](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html) no *Guia do usuário do Gerenciamento de Faturamento e Custos da AWS*.

Para obter mais informações, consulte [Restrições de tags](#tag-restrictions).

## Restrições de tags
<a name="tag-restrictions"></a>

As tags têm as seguintes restrições:
+ No Athena, você pode marcar grupos de trabalho, catálogos de dados e reservas de capacidade. Você não pode marcar consultas com tags.
+ O número máximo de tags por recurso é 50. Para permanecer no limite, revise e exclua tags não utilizadas.
+ Em todos os recursos, cada chave de tag deve ser exclusiva e possuir apenas um valor. Não adicione chaves de tag duplicadas ao mesmo tempo ao mesmo recurso. Se você fizer isso, o Athena emitirá uma mensagem de erro. Se você marcar um grupo de trabalho usando uma chave de tag existente em uma ação `TagResource` separada, o novo valor da tag substituirá o valor antigo.
+ O comprimento da chave da tag é de 1-128 caracteres Unicode em UTF-8.
+ O comprimento do valor da tag é de 0-256 caracteres Unicode em UTF-8.

  Marcar operações, como adicionar, editar, remover ou listar tags, exigem que você especifique um ARN para o recurso do grupo de trabalho.
+ O Athena permite usar letras, números, espaços representados em UTF-8 e os seguintes caracteres: \$1 - = . \$1 : / @.
+ As chaves e os valores de tags diferenciam maiúsculas de minúsculas.
+ O prefixo `"aws:"` nas chaves de tag é reservado para uso da AWS. Você não pode editar nem excluir chaves de tag com esse prefixo. As tags com esse prefixo não contam contra o limite de tags por recurso.
+ As etiquetas atribuídas estão disponíveis somente para a sua conta da Amazon Web Services.

# Trabalhar com tags para grupos de trabalho
<a name="tags-console"></a>

Usando o console do Athena, você pode ver quais etiquetas estão em uso por cada grupo de trabalho na sua conta. Você só pode visualizar as tags por grupo de trabalho. Você também pode usar o console do Athena para aplicar, editar ou remover as etiquetas de um grupo de trabalho por vez.

Você pode pesquisar grupos de trabalho usando as tags criadas.

**Topics**
+ [

## Exibir tags para grupos de trabalho individuais
](#tags-display)
+ [

## Adicionar e excluir tags em um grupo de trabalho individual
](#tags-add-delete)

## Exibir tags para grupos de trabalho individuais
<a name="tags-display"></a>

**Para exibir as etiquetas de um grupo de trabalho individual no console do Athena**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No menu de navegação, escolha **Workgroups** (Grupos de trabalho) e escolha o grupo de trabalho desejado.

1. Execute um destes procedimentos:
   + Escolha a guia **Tags**. Se a lista de etiquetas for longa, use a caixa de pesquisa.
   + Escolha **Edit** (Editar) e, em seguida, role para baixo até a seção **Tags** (Etiquetas).

## Adicionar e excluir tags em um grupo de trabalho individual
<a name="tags-add-delete"></a>

Você pode gerenciar as tags de um único grupo de trabalho diretamente pela guia **Workgroups (Grupos de trabalho)**.

**nota**  
Se você deseja que os usuários adicionem etiquetas ao criarem um grupo de trabalho no console ou especifiquem etiquetas quando usarem a ação **CreateWorkGroup**, conceda a eles permissões do IAM para as ações **TagResource** e **CreateWorkGroup**.

**Para adicionar uma etiqueta ao criar um novo grupo de trabalho**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No menu de navegação, escolha **Workgroups** (Grupos de trabalho).

1. Escolha **Create workgroup** (Criar grupo de trabalho) e preencha os valores, conforme necessário. Para saber detalhes das etapas, consulte [Criar um grupo de trabalho](creating-workgroups.md).

1. Na seção **Tags** (Etiquetas), adicione uma ou mais etiquetas especificando chaves e valores. Não adicione chaves de tag duplicadas ao mesmo tempo ao mesmo grupo de trabalho. Se você fizer isso, o Athena emitirá uma mensagem de erro. Para obter mais informações, consulte [Restrições de tags](tags.md#tag-restrictions).

1. Ao concluir, escolha **Create workgroup** (Criar grupo de trabalho).

**Para adicionar ou editar uma tag a um grupo de trabalho existente**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o grupo de trabalho que você deseja modificar.

1. Execute um destes procedimentos:
   + Escolha a guia **Tags** e escolha **Gerenciar tags**. 
   + Escolha **Edit** (Editar) e, em seguida, role para baixo até a seção **Tags** (Etiquetas).

1. Especifique uma chave e um valor para cada etiqueta. Para obter mais informações, consulte [Restrições de tags](tags.md#tag-restrictions).

1. Escolha **Salvar**.

**Para excluir uma tag de um grupo de trabalho individual**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. No painel de navegação, escolha **Global networks** (Redes globais).

1. Escolha o grupo de trabalho que você deseja modificar.

1. Execute um destes procedimentos:
   + Escolha a guia **Tags** e escolha **Gerenciar tags**. 
   + Escolha **Edit** (Editar) e, em seguida, role para baixo até a seção **Tags** (Etiquetas).

1. Na lista de etiquetas, escolha **Remove** (Remover) para a etiqueta que você quer excluir e, em seguida, escolha **Save** (Salvar).

# Usar API e operações de tag da AWS CLI
<a name="tags-operations"></a>

Use as seguintes operações de tag para adicionar, remover ou listar tags em um recurso.


****  

| solicitações de | CLI | Descrição da ação | 
| --- | --- | --- | 
| TagResource | tag-resource | Adicione ou substitua uma ou mais tags no recurso que tem o ARN especificado. | 
| UntagResource | untag-resource | Exclua uma ou mais tags do recurso que tem o ARN especificado. | 
| ListTagsForResource | list‑tags‑for‑resource | Liste uma ou mais tags para o recurso que tem o ARN especificado. | 

**Adicionar tags ao criar um recurso**  
Para adicionar tags ao criar um grupo de trabalho ou catálogo de dados, use o parâmetro `tags` com as operações `CreateWorkGroup` ou `CreateDataCatalog` da API ou com os comandos AWS CLI ou `create-work-group` da `create-data-catalog`.

## Gerenciar tags por meio de ações da API
<a name="tags-operations-examples-java"></a>

Os exemplos a seguir mostram como usar ações da API de tags para gerenciar tags em grupos de trabalho e catálogos de dados. Os exemplos estão na linguagem de programação Java.

### Exemplo: TagResource
<a name="tags-operations-examples-java-tag-resource"></a>

O exemplo a seguir adiciona duas tags ao grupo de trabalho `workgroupA`:

```
List<Tag> tags = new ArrayList<>();
tags.add(new Tag().withKey("tagKey1").withValue("tagValue1"));
tags.add(new Tag().withKey("tagKey2").withValue("tagValue2"));

TagResourceRequest request = new TagResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA")
    .withTags(tags);

client.tagResource(request);
```

O exemplo a seguir adiciona duas tags ao catálogo de dados `datacatalogA`:

```
List<Tag> tags = new ArrayList<>();
tags.add(new Tag().withKey("tagKey1").withValue("tagValue1"));
tags.add(new Tag().withKey("tagKey2").withValue("tagValue2"));

TagResourceRequest request = new TagResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA")
    .withTags(tags);

client.tagResource(request);
```

**nota**  
Não adicione chaves de tag duplicadas ao mesmo recurso. Se você fizer isso, o Athena emitirá uma mensagem de erro. Se você marcar um grupo de trabalho usando uma chave de tag existente em uma ação `TagResource` separada, o novo valor da tag substituirá o valor antigo.

### Exemplo: UntagResource
<a name="tags-operations-examples-java-untag-resource"></a>

O exemplo a seguir remove `tagKey2` do grupo de trabalho `workgroupA`:

```
List<String> tagKeys = new ArrayList<>();
tagKeys.add("tagKey2");

UntagResourceRequest request = new UntagResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA")
    .withTagKeys(tagKeys);

client.untagResource(request);
```

O exemplo a seguir remove `tagKey2` do catálogo de dados `datacatalogA`:

```
List<String> tagKeys = new ArrayList<>();
tagKeys.add("tagKey2");

UntagResourceRequest request = new UntagResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA")
    .withTagKeys(tagKeys);

client.untagResource(request);
```

### Exemplo: ListTagsForResource
<a name="tags-operations-examples-java-list-tags-for-resource"></a>

O exemplo a seguir lista as tags do grupo de trabalho `workgroupA`:

```
ListTagsForResourceRequest request = new ListTagsForResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA");

ListTagsForResourceResult result = client.listTagsForResource(request);

List<Tag> resultTags = result.getTags();
```

O exemplo a seguir lista as tags do catálogo de dados `datacatalogA`:

```
ListTagsForResourceRequest request = new ListTagsForResourceRequest()
    .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA");

ListTagsForResourceResult result = client.listTagsForResource(request);

List<Tag> resultTags = result.getTags();
```

## Gerenciar tags usando a AWS CLI
<a name="tags-operations-examples-cli"></a>

Os exemplos a seguir mostram como usar a AWS CLI para criar e gerenciar tags em catálogos de dados.

### Adicionar tags a um recurso: tag-resource
<a name="tags-operations-examples-cli-tag-resource"></a>

O comando `tag-resource` adiciona uma ou mais tags a um recurso especificado.

**Sintaxe**  
`aws athena tag-resource --resource-arn arn:aws:athena:region:account_id:datacatalog/catalog_name --tags Key=string,Value=string Key=string,Value=string`

O parâmetro `--resource-arn` especifica o recurso ao qual as tags são adicionadas. O parâmetro `--tags` especifica uma lista de pares de chave-valor separados por espaço a serem adicionados como tags ao recurso. 

**Example**  
O exemplo a seguir adiciona tags ao catálogo de dados `mydatacatalog`.  

```
aws athena tag-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog --tags Key=Color,Value=Orange Key=Time,Value=Now
```
Para mostrar o resultado, use o comando `list-tags-for-resource`.   
Para obter informações sobre como adicionar etiquetas ao usar o comando `create-data-catalog`, consulte [Registrar um catálogo: create-data-catalog](datastores-hive-cli.md#datastores-hive-cli-registering-a-catalog).

### Listar tags de um recurso: list-tags-for-resource
<a name="tags-operations-examples-cli-list-tags-for-resource"></a>

O comando `list-tags-for-resource` lista as tags do recurso especificado.

**Sintaxe**  
`aws athena list-tags-for-resource --resource-arn arn:aws:athena:region:account_id:datacatalog/catalog_name`

O parâmetro `--resource-arn` especifica o recurso para o qual as tags são listadas. 

O exemplo a seguir lista as tags do catálogo de dados `mydatacatalog`.

```
aws athena list-tags-for-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog
```

O resultado de exemplo a seguir está em formato JSON.

```
{
    "Tags": [
        {
            "Key": "Time",
            "Value": "Now"
        },
        {
            "Key": "Color",
            "Value": "Orange"
        }
    ]
}
```

### Remover tags de um recurso: untag-resource
<a name="tags-operations-examples-cli-untag-resource"></a>

O comando `untag-resource` remove as chaves de tag especificadas e seus valores associados do recurso especificado.

**Sintaxe**  
`aws athena untag-resource --resource-arn arn:aws:athena:region:account_id:datacatalog/catalog_name --tag-keys key_name [key_name ...]` 

O parâmetro `--resource-arn` especifica o recurso do qual as tags são removidas. O parâmetro `--tag-keys` usa uma lista separada por espaços de nomes de chave. Para cada nome de chave especificado, o comando `untag-resource` remove a chave e seu valor.

O exemplo a seguir remove as chaves `Color` e `Time` e seus valores do recurso de catálogo `mydatacatalog`.

```
aws athena untag-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog --tag-keys Color Time
```

# Usar políticas de controle de acesso do IAM baseadas em tags
<a name="tags-access-control"></a>

As etiquetas permitem que você escreva uma política do IAM que inclua o bloco `Condition` para controlar o acesso a um recurso com base em suas etiquetas. Esta seção inclui exemplos de políticas de tags para recursos de grupos de trabalho e catálogos de dados.

## Exemplos de política de etiquetas para grupos de trabalho
<a name="tag-policy-examples-workgroups"></a>

### Exemplo: política básica de aplicação de tags
<a name="tag-policy-examples-workgroups-basic"></a>

A seguinte política do IAM permite que você execute consultas e interaja com as etiquetas do grupo de trabalho chamado `workgroupA`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
        }
    ]
}
```

------

### Exemplo: bloco de política que nega ações em um grupo de trabalho com base em par de chave e valor de tag
<a name="tag-policy-examples-workgroups-basic"></a>

As tags associadas a um recurso, como um grupo de trabalho, são chamadas de tags de recurso. As tags de recursos permitem escrever blocos de política, como os seguintes, que negam as ações listadas em qualquer grupo de trabalho marcado com um par de chave-valor como `stack`, `production`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "athena:GetWorkGroup",
                "athena:UpdateWorkGroup",
                "athena:DeleteWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stack": "production"
                }
            }
        }
    ]
}
```

------

### Exemplo: bloco de política que restringe solicitações de ação de alteração de tag a tags específicas
<a name="tag-policy-examples-workgroups-restricted-specific"></a>

As tags que são passadas como parâmetros para operações que alteram tags (por exemplo, `TagResource`, `UntagResource` ou `CreateWorkGroup` com tags) são chamadas de tags de solicitação. O seguinte exemplo de bloco de política permite a operação `CreateWorkGroup` apenas se uma das tags passadas tiver a chave `costcenter` e o valor `1`, `2` ou `3`.

**nota**  
Se você deseja permitir que um perfil do IAM especifique as etiquetas como parte de uma operação `CreateWorkGroup`, certifique-se de conceder ao perfil as permissões para as ações `TagResource` e `CreateWorkGroup`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateWorkGroup",
                "athena:TagResource"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/costcenter": [
                        "1",
                        "2",
                        "3"
                    ]
                }
            }
        }
    ]
}
```

------

## Exemplos de políticas de etiquetas para catálogos de dados
<a name="tag-policy-examples-data-catalogs"></a>

### Exemplo: política básica de aplicação de tags
<a name="tag-policy-examples-data-catalogs-basic"></a>

A seguinte política do IAM permite interagir com as etiquetas do catálogo de dados chamado `datacatalogA`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:GetDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
        }
    ]
}
```

------

### Exemplo: bloco de política que nega ações em um grupo de trabalho com base em um par de chave e valor de tag
<a name="tag-policy-examples-data-catalogs-deny-actions"></a>

Você pode usar tags de recursos para gravar blocos de política que negam ações específicas em catálogos de dados marcados com pares de chave-valor de tag específicos. O exemplo a seguir nega ações em catálogos de dados que têm o par de chave-valor da tag `stack`, `production`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:GetDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:GetDatabase",
                "athena:ListDatabases",
                "athena:GetTableMetadata",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:datacatalog/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stack": "production"
                }
            }
        }
    ]
}
```

------

### Exemplo: bloco de política que restringe solicitações de ação de alteração de tag a tags específicas
<a name="tag-policy-examples-data-catalogs-action-specific-tags"></a>

As tags que são passadas como parâmetros para operações que alteram tags (por exemplo, `TagResource`, `UntagResource` ou `CreateDataCatalog` com tags) são chamadas de tags de solicitação. O seguinte exemplo de bloco de política permite a operação `CreateDataCatalog` apenas se uma das tags passadas tiver a chave `costcenter` e o valor `1`, `2` ou `3`.

**nota**  
Se você deseja permitir que um perfil do IAM especifique as etiquetas como parte de uma operação `CreateDataCatalog`, certifique-se de conceder ao perfil as permissões para as ações `TagResource` e `CreateDataCatalog`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:TagResource"
            ],
            "Resource": "arn:aws:athena:us-east-1:123456789012:datacatalog/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/costcenter": [
                        "1",
                        "2",
                        "3"
                    ]
                }
            }
        }
    ]
}
```

------

# Service Quotas
<a name="service-limits"></a>

**nota**  
O console do Service Quotas inclui informações sobre as cotas do Amazon Athena. Você também pode usar o console do Service Quotas para [solicitar aumentos de cotas](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/athena/quotas) para aquelas que são ajustáveis. Para obter as limitações de esquema relacionadas ao AWS Glue, consulte a página [Endpoints e cotas do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html). Para obter informações gerais sobre cotas de serviço da AWS, consulte [Cotas de serviço da AWS](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) na *Referência geral da AWS*.

## Consultas
<a name="service-limits-queries"></a>

Sua conta tem as seguintes cotas relacionadas a consultas para o Amazon Athena. Para obter detalhes, consulte a página [Endpoints e cotas do Amazon Athena](https://docs.aws.amazon.com/general/latest/gr/athena.html#amazon-athena-limits) da Referência geral da AWS.
+ **Active DDL queries** (Consultas DDL ativas): o número de consultas DDL ativas. As consultas DDL incluem consultas `CREATE TABLE` e `ALTER TABLE ADD PARTITION`. 
+ **DDL query timeout** (Tempo limite de consulta DDL): a quantidade máxima de tempo em minutos que uma consulta DDL pode ser executada antes de ser cancelada.
+ **Active DML queries** (Consultas DML ativas): o número de consultas DML ativas. As consultas DML incluem consultas `SELECT`, `CREATE TABLE AS` (CTAS) e `INSERT INTO`. As cotas específicas variam de acordo com a região da AWS.
+ **DML query timeout** (Tempo limite de consulta DML): a quantidade máxima de tempo em minutos que uma consulta DML pode ser executada antes de ser cancelada. É possível solicitar um aumento desse tempo limite para até 240 minutos.

Para solicitar aumentos de cotas, você pode usar o console do [Service Quotas para o Athena](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/athena/quotas).

O Athena processa as consultas atribuindo recursos com base na carga geral do serviço e no número de solicitações recebidas. Suas consultas podem ser temporariamente enfileiradas antes da execução. Os processos assíncronos retiram as consultas das filas e as executam nos recursos físicos assim que eles se tornam disponíveis e conforme permitido na configuração da sua conta.

As cotas para consultas em DML ativas e para consultas em DDL ativas incluem tanto as consultas em execução quanto as enfileiradas. Por exemplo, caso a cota para consultas em DML ativas seja 25 e o número total de consultas em execução e enfileiradas chegue a 26, a consulta de número 26 retornará um erro TooManyRequestsException. 

**nota**  
Se você deseja controlar a concorrência diretamente para as consultas que você executa no Athena, pode usar reservas de capacidade. Para obter mais informações, consulte [Gerenciar a capacidade de processamento de consulta](capacity-management.md).

### Comprimento da string de consulta
<a name="service-limits-query-string-length"></a>

O comprimento máximo permitido da string da consulta é de 262.144 bytes, pois as strings são codificadas em UTF-8. Esta não é uma cota ajustável. No entanto, você pode resolver esse problema dividindo as consultas grandes em várias consultas menores. Para obter mais informações, consulte [Como posso aumentar o tamanho máximo da string de consulta no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-query-string-length/) (em inglês) na Central de Conhecimento da AWS.

## Grupos de trabalho
<a name="service-limits-workgroups"></a>

Ao usar os grupos de trabalho do Athena, lembre-se dos seguintes pontos:
+ As cotas do serviço do Athena são compartilhadas com todos os grupos de trabalho em uma conta.
+ O número máximo de grupos de trabalho que podem ser criados por região em uma conta é 1000.
+ O número máximo de instruções preparadas em um grupo de trabalho é mil.
+ O número máximo de tags por grupo de trabalho é 50. Para obter mais informações, consulte [Restrições de tags](tags.md#tag-restrictions). 

## Bancos de dados, tabelas e partições
<a name="service-limits-glue"></a>

O Athena usa o AWS Glue Data Catalog. Consulte [Endpoints e cotas do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html) para conhecer as cotas de serviço referentes a tabelas, bancos de dados e partições (por exemplo, o número máximo de bancos de dados ou de tabelas por conta). Observe que, embora o Athena ofereça suporte a consulta a tabelas do AWS Glue com 10 milhões de partições, ele não pode ler mais de 1 milhão de partições em uma única varredura.

## Buckets do Amazon S3
<a name="service-limits-buckets"></a>

Ao trabalhar com buckets do Amazon S3, lembre-se dos seguintes pontos:
+ O Amazon S3 tem uma cota de serviço padrão de 10 mil buckets por conta.
+ O Athena requer um bucket separado para registrar os resultados.
+ É possível solicitar um aumento de cota de até um milhão de buckets do Amazon S3 por conta da AWS. 

## Cotas de chamada de API por conta
<a name="service-limits-api-calls"></a>

As cotas padrão para as APIs do Athena se aplicam ao número de chamadas realizadas por conta, e não por consulta. Para obter uma lista completa das cotas padrão, consulte a tabela [Service quotas](https://docs.aws.amazon.com/general/latest/gr/athena.html#amazon-athena-limits) no guia de Referência geral da AWS.

Se você usar qualquer uma dessas APIs e exceder a cota padrão de número de chamadas por segundo ou a capacidade de expansão da sua conta, a API do Athena emitirá um erro semelhante ao seguinte: “ClientError: Ocorreu um erro (ThrottlingException) ao chamar a operação da *<nome\$1da\$1API>*: taxa excedida.” Reduza o número de chamadas por segundo ou a capacidade de intermitência da API para essa conta. 

É possível alterar a cota do Athena para as chamadas de API por conta no [console de Service Quotas do Athena](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/athena/quotas). 

# Versionamento do mecanismo do Athena
<a name="engine-versions"></a>

Esporadicamente, o Athena lança uma nova versão do mecanismo para oferecer melhor performance, funcionalidade e correções de código. Quando uma nona versão está disponível, o Athena notifica você no console do Athena e no seu [AWS Health Dashboard](https://aws.amazon.com/premiumsupport/technology/personal-health-dashboard/). O AWS Health Dashboard notifica você sobre os eventos que podem afetar seus serviços ou sua conta da AWS. Para obter mais informações sobre o AWS Health Dashboard, consulte [Conceitos básicos do AWS Health Dashboard](https://docs.aws.amazon.com/health/latest/ug/getting-started-phd.html).

O versionamento do mecanismo é configurado por [grupo de trabalho](workgroups-manage-queries-control-costs.md). É possível usar grupos de trabalho para controlar qual o mecanismo de consultas usado por suas consultas e se o Athena fará ou não upgrade automático dos grupos de trabalho. O mecanismo de consulta que está em uso aparece no editor de consultas, na página de detalhes do grupo de trabalho e fica disponível por meio das APIs do Athena.
+ Por padrão, os grupos de trabalho são configurados para atualização automática. Quando um grupo de trabalho estiver configurado para fazer upgrade automático, ele fará upgrade do Athena, a menos que encontre incompatibilidades.
+ Se você configurar um grupo de trabalho para usar uma determinada versão, o Athena não alterará a versão do grupo de trabalho. 

Em ambos os casos, o Athena atualizará seus grupos de trabalho quando uma versão não estiver mais disponível. O Athena notificará no [AWS Health Dashboard](https://aws.amazon.com/premiumsupport/technology/personal-health-dashboard/) sobre quando uma versão do mecanismo deixará de ser oferecida. O Health Dashboard notifica você sobre os eventos que podem afetar seus serviços ou sua conta da AWS. Para obter mais informações sobre o AWS Health Dashboard, consulte [Conceitos básicos do AWS Health Dashboard](https://docs.aws.amazon.com/health/latest/ug/getting-started-phd.html).

Quando você começar a usar uma nova versão do mecanismo, um pequeno subconjunto de consultas pode ser interrompido devido a incompatibilidades. As mudanças disruptivas são anunciadas no lançamento de uma nova versão do Athena. Você deve usar os grupos de trabalho para testar as consultas antes do upgrade, criando um grupo de trabalho de teste que use o novo mecanismo ou fazendo um upgrade de teste de um grupo de trabalho existente. Para ter mais informações, consulte [Testar consultas antes da atualização da versão do mecanismo](engine-versions-changing.md#engine-versions-testing).

**Topics**
+ [

# Alterar versões do mecanismo do Athena
](engine-versions-changing.md)
+ [

# Mecanismo Athena versão 3
](engine-versions-reference-0003.md)

# Alterar versões do mecanismo do Athena
<a name="engine-versions-changing"></a>

Esporadicamente, o Athena lança uma nova versão do mecanismo para oferecer melhor performance, funcionalidade e correções de código. Quando uma nona versão está disponível, o Athena notifica você no console. Você pode deixar que o Athena decida quando fazer upgrade ou especificar manualmente uma versão do mecanismo do Athena por grupo de trabalho.

## Localizar a versão do mecanismo de um grupo de trabalho
<a name="engine-versions-changing-finding-the-query-engine-version-for-a-workgroup"></a>

Você pode usar a página **Workgroups** (Grupos de trabalho) para localizar a versão atual do mecanismo de qualquer grupo de trabalho.

**Para localizar a versão atual do mecanismo de qualquer grupo de trabalho**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups**, encontre o grupo de trabalho desejado. A coluna **Query engine version** (Versão do mecanismo de consulta) do grupo de trabalho exibe a versão do mecanismo de consulta.

## Usar o console do Athena para alterar a versão do mecanismo
<a name="engine-versions-changing-changing-the-engine-version"></a>

Quando uma nova versão do mecanismo está disponível, você pode deixar que o Athena decida quando fazer upgrade do grupo de trabalho ou especificar manualmente a versão do mecanismo do Athena que o grupo de trabalho usa. Se apenas uma versão estiver disponível no momento, não é possível especificar manualmente uma versão diferente.

**nota**  
Para alterar a versão do mecanismo de um grupo de trabalho, você deve ter permissão para executar a ação `athena:ListEngineVersions` no grupo de trabalho. Para ver exemplos de política do IAM, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md). 

**Para deixar que o Athena decida quando fazer upgrade do grupo de trabalho**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. No painel de navegação do console, escolha **Workgroups** (Grupos de trabalho).

1. Na lista de grupos de trabalho, escolha link para o grupo de trabalho que deseja configurar.

1. Escolha **Editar**.

1. Na seção **Query engine version** (Versão do mecanismo de consulta), para **Update query engine** (Atualizar mecanismo de consulta), escolha **Automatic** (Automático) para permitir que o Athena escolha quando fazer o upgrade de seu grupo de trabalho. Essa é a configuração padrão.

1. Escolha **Salvar alterações**.

   Na lista de grupos de trabalho, o **Query engine update status** (Status de atualização do mecanismo de consulta) para o grupo de trabalho indica **Automatic** (Automático).

**Para escolher manualmente a versão de um mecanismo**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. No painel de navegação do console, escolha **Workgroups** (Grupos de trabalho).

1. Na lista de grupos de trabalho, escolha link para o grupo de trabalho que deseja configurar.

1. Escolha **Editar**.

1. Na seção **Query engine version** (Versão do mecanismo de consulta), em **Update query engine** (Atualizar mecanismo de consulta), escolha **Manual** para escolher manualmente uma versão do mecanismo).

1. Use a opção **Query engine version** (Versão do mecanismo de consulta) para escolher a versão do mecanismo que você deseja que o grupo de trabalho use. Se uma versão de mecanismo diferente não estiver disponível, uma versão de mecanismo diferente não poderá ser especificada.

1. Escolha **Salvar alterações**.

   Na lista de grupos de trabalho, o **Query engine update status** (Status de atualização do mecanismo de consulta) para o grupo de trabalho indica **Manual** (Manual).

## Usar o AWS CLI para alterar a versão do mecanismo
<a name="engine-versions-changing-changing-the-engine-version-cli"></a>

Para alterar a versão do mecanismo usando a AWS CLI, use a sintaxe no seguinte exemplo.

```
aws athena update-work-group --work-group workgroup-name --configuration-updates EngineVersion={SelectedEngineVersion='Athena engine version 3'}
```

## Especificar a versão do mecanismo ao criar um grupo de trabalho
<a name="engine-versions-changing-specifying-the-engine-version-when-you-create-a-workgroup"></a>

Ao criar um grupo de trabalho, você pode especificar a versão do mecanismo que ele usará ou deixar que o Athena decida quando fazer upgrade do grupo de trabalho. Se uma nova versão do mecanismo estiver disponível, uma prática recomendada é criar um grupo de trabalho para testar o novo mecanismo antes de fazer upgrade dos outros grupos de trabalho. Para especificar a versão do mecanismo de um grupo de trabalho, você deve ter a permissão `athena:ListEngineVersions` no grupo de trabalho. Para ver exemplos de política do IAM, consulte [Exemplo de políticas de grupo de trabalho](example-policies-workgroup.md).

**Especificar a versão do mecanismo quando você cria um grupo de trabalho**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.

1. No painel de navegação do console, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), escolha **Create workgroup** (Criar grupo de trabalho).

1. Na página **Create workgroup** (Criar grupo de trabalho), na seção **Query engine version** (Versão do mecanismo de consulta), execute um destes procedimentos:
   + Escolha **Automatic** (Automático) para permitir que o Athena escolha quando fazer upgrade de seu grupo de trabalho. Essa é a configuração padrão.
   + Selecione **Manual** para escolher manualmente uma versão de mecanismo diferente, se houver uma disponível.

1. Digite as informações nos outros campos conforme necessário. Para obter informações sobre os outros campos, consulte [Criar um grupo de trabalho](creating-workgroups.md).

1. Escolha **Create workgroup (Criar grupo de trabalho)**.

## Testar consultas antes da atualização da versão do mecanismo
<a name="engine-versions-testing"></a>

Quando o upgrade de um grupo de trabalho é feito para uma nova versão do mecanismo, algumas das suas consultas podem ser interrompidas devido a incompatibilidades. Para garantir que o upgrade da versão do mecanismo seja feito sem problemas, você pode testar as consultas com antecedência.

**Para testar as consultas antes do upgrade de uma versão do mecanismo**

1. Verifique a versão do mecanismo do grupo de trabalho que você está usando. A versão do mecanismo que você está usando aparece na página **Workgroups** (Grupos de trabalho) na coluna **Query engine version** (Versão do mecanismo de consulta) do grupo de trabalho. Para obter mais informações, consulte [Localizar a versão do mecanismo de um grupo de trabalho](#engine-versions-changing-finding-the-query-engine-version-for-a-workgroup).

1. Crie um grupo de trabalho de teste que usa a nova versão do mecanismo. Para obter mais informações, consulte [Especificar a versão do mecanismo ao criar um grupo de trabalho](#engine-versions-changing-specifying-the-engine-version-when-you-create-a-workgroup).

1. Use o novo grupo de trabalho para executar as consultas que você deseja testar.

1. Se uma consulta falhar, verifique se há alterações inválidas no novo mecanismo que possam estar afetando a consulta. Algumas alterações podem exigir que você atualize a sintaxe das suas consultas.

1. Se a falha persistir, entre em contato com AWS Support para obter ajuda. No Console de gerenciamento da AWS, escolha **Suporte**, **Central de Suporte** ou faça uma pergunta em [AWS re:Post](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena) usando a etiqueta **Amazon Athena**.

## Solucionar problemas de consultas que falham após a atualização da versão do mecanismo
<a name="engine-versions-troubleshooting"></a>

Se uma consulta falhar após o upgrade de uma versão do mecanismo, verifique se há alterações inválidas, inclusive que possam afetar a sintaxe das consultas.

Se a falha persistir, entre em contato com AWS Support para obter ajuda. No Console de gerenciamento da AWS, escolha **Suporte**, **Central de Suporte** ou faça uma pergunta em [AWS re:Post](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena) usando a etiqueta **Amazon Athena**.

# Mecanismo Athena versão 3
<a name="engine-versions-reference-0003"></a>

Para a versão 3 do mecanismo, o Athena também está disponibilizando uma abordagem de integração contínua para o gerenciamento de software de código aberto que melhora a simultaneidade com os projetos [Trino](https://trino.io/) e [Presto](https://prestodb.io/), para que você tenha acesso mais rápido às melhorias da comunidade, integradas e ajustadas no mecanismo do Athena.

Este lançamento do mecanismo do Athena versão 3 oferece suporte a todos os recursos das versões anteriores do mecanismo. Este documento destaca as principais diferenças entre as versões anteriores do mecanismo e o mecanismo do Athena versão 3. Para obter mais informações, consulte o *Blog de Big Data da AWS* com o artigo [Upgrade to Athena engine version 3 to increase query performance and access more analytics features](https://aws.amazon.com/blogs/big-data/upgrade-to-athena-engine-version-3-to-increase-query-performance-and-access-more-analytics-features/).
+ [Conceitos básicos](#engine-versions-reference-0003-getting-started)
+ [Melhorias e novos recursos](#engine-versions-reference-0003-improvements-and-new-features)
  + [Recursos adicionados](#engine-versions-reference-0003-added-features)
  + [Funções adicionadas](#engine-versions-reference-0003-added-functions)
  + [Melhorias de performance](#engine-versions-reference-0003-performance-improvements)
  + [Melhorias na confiabilidade](#engine-versions-reference-0003-reliability-enhancements)
  + [Melhorias na sintaxe da consulta](#engine-versions-reference-0003-query-syntax-enhancements)
  + [Melhorias no formato e no tipo de dados](#engine-versions-reference-0003-data-format-and-data-type-enhancements)
+ [Alterações que podem causar interrupções](#engine-versions-reference-0003-breaking-changes)
  + [Mudanças na sintaxe de consulta](#engine-versions-reference-0003-syntax-changes)
  + [Alterações no processamento de dados](#engine-versions-reference-0003-data-processing-changes)
  + [Alterações de timestamp](#engine-versions-reference-0003-timestamp-changes)
+ [Limitações](#engine-versions-reference-0003-known-limitations)

## Conceitos básicos
<a name="engine-versions-reference-0003-getting-started"></a>

Para começar, crie um novo grupo de trabalho do Athena que use o mecanismo Athena versão 3 ou configure um grupo de trabalho existente para usar a versão 3. 

Para obter mais informações, consulte [Alterar versões do mecanismo do Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-changing.html).

## Melhorias e novos recursos
<a name="engine-versions-reference-0003-improvements-and-new-features"></a>

Os recursos e atualizações listados incluem melhorias do próprio Athena e da funcionalidade incorporada do Trino de código aberto. Para obter uma lista completa de operadores e funções de consulta SQL, consulte a [documentação do Trino](https://trino.io/docs/current/functions.html).

### Recursos adicionados
<a name="engine-versions-reference-0003-added-features"></a>

#### Compatibilidade com o algoritmo de bucketing do Apache Spark
<a name="engine-versions-reference-0003-spark-bucketing-support"></a>

O Athena pode ler buckets gerados pelo algoritmo de hash do Spark. Para especificar que os dados foram originalmente gravados pelo algoritmo de hash do Spark, insira `('bucketing_format'='spark')` na cláusula `TBLPROPERTIES` da sua declaração `CREATE TABLE`. Se essa propriedade não for especificada, o algoritmo de hash do Hive será usado.

```
CREATE EXTERNAL TABLE `spark_bucket_table`(
  `id` int, 
  `name` string
  )
CLUSTERED BY (`name`) 
INTO 8 BUCKETS
STORED AS PARQUET
LOCATION 
  's3://amzn-s3-demo-bucket/to/bucketed/table/'
TBLPROPERTIES ('bucketing_format'='spark')
```

### Funções adicionadas
<a name="engine-versions-reference-0003-added-functions"></a>

As funções nesta seção são novas no mecanismo Athena versão 3.

#### Funções agregadas
<a name="engine-versions-reference-0003-aggregate-functions"></a>

**listagg(x, separator)**: retorna os valores de entrada concatenados, separados pela string separadora.

```
SELECT listagg(value, ',') WITHIN GROUP (ORDER BY value) csv_value 
FROM (VALUES 'a', 'c', 'b') t(value);
```

#### Funções de array
<a name="engine-versions-reference-0003-array-functions"></a>

**contains\$1sequence(x, seq)**: retorna verdadeiro se a matriz x contiver toda a matriz seq como um subconjunto sequencial (todos os valores na mesma ordem consecutiva).

```
SELECT contains_sequence(ARRAY [1,2,3,4,5,6], ARRAY[1,2]);
```

#### Funções binárias
<a name="engine-versions-reference-0003-binary-functions"></a>

**murmur3(binary)**: calcula o hash MurmurHash3 de 128 bits do binário.

```
SELECT murmur3(from_base64('aaaaaa'));
```

#### Funções de conversão
<a name="engine-versions-reference-0003-conversion-functions"></a>

**format\$1number(number)**: retorna uma string formatada usando um símbolo de unidade.

```
SELECT format_number(123456); -- '123K'
```

```
SELECT format_number(1000000); -- '1M'
```

#### Perfis de data e hora
<a name="engine-versions-reference-0003-date-and-time-functions"></a>

**timezone\$1hour(timestamp)**: retorna a hora da compensação do fuso horário do timestamp.

```
SELECT EXTRACT(TIMEZONE_HOUR FROM TIMESTAMP '2020-05-10 12:34:56 +08:35');
```

**timezone\$1minute(timestamp)**: retorna o minuto da compensação do fuso horário do timestamp.

```
SELECT EXTRACT(TIMEZONE_MINUTE FROM TIMESTAMP '2020-05-10 12:34:56 +08:35');
```

#### Funções geoespaciais
<a name="engine-versions-reference-0003-geospatial-functions"></a>

**to\$1encoded\$1polyline(Geometry)**: codifica uma cadeia de linha ou multiponto em uma polilinha.

```
SELECT to_encoded_polyline(ST_GeometryFromText(
   'LINESTRING (-120.2 38.5, -120.95 40.7, -126.453 43.252)'));
```

**from\$1encoded\$1polyline(varchar)**: decodifica uma polilinha em uma string de linha.

```
SELECT ST_AsText(from_encoded_polyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));         
```

**to\$1geojson\$1geometry(SphericalGeography)**: retorna a geografia esférica especificada no formato GeoJSON.

```
SELECT to_geojson_geometry(to_spherical_geography(ST_GeometryFromText(
   'LINESTRING (0 0, 1 2, 3 4)')));
```

**from\$1geojson\$1geometry(varchar)**: retorna o objeto do tipo geografia esférica da representação GeoJSON, removendo chave/valores que não sejam geométricos. `Feature` e `FeatureCollection` não são compatíveis.

```
SELECT from_geojson_geometry(to_geojson_geometry(to_spherical_geography(ST_GeometryFromText(
   'LINESTRING (0 0, 1 2, 3 4)'))));
```

**geometry\$1nearest\$1points(Geometry, Geometry)**: retorna os pontos em cada geometria que estão mais próximos uns dos outros. Se a geometria especificada estiver vazia, retornará NULL. Caso contrário, retornará uma linha de dois objetos `Point` que têm a distância mínima de quaisquer dois pontos nas geometrias. O primeiro ponto é do primeiro argumento Geometry (Geometria), o segundo do segundo argumento Geometry (Geometria). Se houver vários pares com a mesma distância mínima, um par será escolhido arbitrariamente.

```
SELECT geometry_nearest_points(ST_GeometryFromText(
   'LINESTRING (50 100, 50 200)'), ST_GeometryFromText(
   'LINESTRING (10 10, 20 20)'));
```

#### Funções de definição de resumo
<a name="engine-versions-reference-0003-set-digest-functions"></a>

**make\$1set\$1digest(x)**: compõe todos os valores de entrada de x em um setdigest.

```
SELECT make_set_digest(value) FROM (VALUES 1, 2, 3) T(value);
```

#### Funções de string
<a name="engine-versions-reference-0003-string-functions"></a>

**soundex(char)**: retorna uma string contendo a representação fonética de char.

```
SELECT name 
FROM nation 
WHERE SOUNDEX(name) = SOUNDEX('CHYNA'); -- CHINA
```

**concat\$1ws(string0, string1, ..., stringN)**: retorna a concatenação de `string1, string2, ..., stringN` usando `string0` como separador. Se `string0` for null, o valor retornado será nulo. Todos os valores nulos fornecidos nos argumentos após o separador são ignorados.

```
SELECT concat_ws(',', 'def', 'pqr', 'mno');
```

#### Funções de janela
<a name="engine-versions-reference-0003-window-functions"></a>

**GROUPS**: adiciona compatibilidade com frames de janela com base em grupos.

```
SELECT array_agg(a) OVER(
   ORDER BY a ASC NULLS FIRST GROUPS BETWEEN 1 PRECEDING AND 2 FOLLOWING) 
FROM (VALUES 3, 3, 3, 2, 2, 1, null, null) T(a);
```

### Melhorias de performance
<a name="engine-versions-reference-0003-performance-improvements"></a>

As melhorias na performance do mecanismo Athena versão 3 incluem os seguintes exemplos.
+ **Recuperação mais rápida de metadados de tabelas do AWS Glue**: as consultas que envolvem diversas tabelas terão um tempo de planejamento de consulta reduzido.
+ **Filtragem dinâmica para RIGHT JOIN**: agora, a filtragem dinâmica está habilitada para uniões direitas que têm condições de união de igualdade, como no exemplo a seguir.

  ```
  SELECT * 
  FROM lineitem RIGHT JOIN tpch.tiny.supplier 
  ON lineitem.suppkey = supplier.suppkey 
  WHERE supplier.name = 'abc';
  ```
+ **Instruções elaboradas abrangentes**: aumento do tamanho padrão do cabeçalho de solicitação/resposta HTTP para 2 MB visando permitir instruções elaboradas abrangentes.
+ **approx\$1percentile ()** - A `approx_percentile` função agora usa `tdigest` em vez de `qdigest` para recuperar valores quantis aproximados das distribuições. Isto resulta em um desempenho superior e em um menor uso de memória. Observe que, como resultado dessa alteração, a função retorna resultados diferentes do que fazia nas versões anteriores do mecanismo. Para obter mais informações, consulte [A função approx\$1percentile retorna resultados diferentes.](#engine-versions-reference-0003-approx-percentile-function).

### Melhorias na confiabilidade
<a name="engine-versions-reference-0003-reliability-enhancements"></a>

O uso geral da memória do mecanismo e o rastreamento no mecanismo Athena versão 3 passaram por aprimoramento. Consultas grandes estão menos suscetíveis a falhas causadas por falhas em nós.

### Melhorias na sintaxe da consulta
<a name="engine-versions-reference-0003-query-syntax-enhancements"></a>

**INTERSECT ALL**: adição de compatibilidade com `INTERSECT ALL`.

```
SELECT * FROM (VALUES 1, 2, 3, 4) INTERSECT ALL SELECT * FROM (VALUES 3, 4);
```

**EXCEPT ALL**: adição de compatibilidade com `EXCEPT ALL`.

```
SELECT * FROM (VALUES 1, 2, 3, 4) EXCEPT ALL SELECT * FROM (VALUES 3, 4);
```

**RANGE PRECEDING**: adição de compatibilidade com `RANGE PRECEDING` em funções de janela.

```
SELECT sum(x) over (order by x range 1 preceding) 
FROM (values (1), (1), (2), (2)) t(x);
```

**MATCH\$1RECOGNIZE**: adição de compatibilidade com correspondência de padrões de linha, como no exemplo a seguir.

```
SELECT m.id AS row_id, m.match, m.val, m.label 
FROM (VALUES(1, 90),(2, 80),(3, 70),(4, 70)) t(id, value) 
MATCH_RECOGNIZE ( 
        ORDER BY id 
        MEASURES match_number() AS match, 
        RUNNING LAST(value) AS val, 
        classifier() AS label 
        ALL ROWS PER MATCH 
        AFTER MATCH SKIP PAST LAST ROW 
        PATTERN (() | A) DEFINE A AS true 
) AS m;
```

### Melhorias no formato e no tipo de dados
<a name="engine-versions-reference-0003-data-format-and-data-type-enhancements"></a>

O mecanismo Athena versão 3 recebeu os seguintes aprimoramentos de formato e tipo de dados.
+ **LZ4 e ZSTD**: adição de compatibilidade com leitura de dados compactados de LZ4 e ZSTD em Parquet. Adição de compatibilidade com gravação de dados ORC compactados em ZSTD.
+ **Tabelas baseadas em links simbólicos**: adição de compatibilidade com a criação de tabelas baseadas em links simbólicos em arquivos Avro. Veja a seguir um exemplo.

  ```
  CREATE TABLE test_avro_symlink  
  ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'  
  ... 
  INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
  ```
+ **SphericalGeography**: o tipo SphericalGeography fornece suporte nativo para características espaciais representadas em coordenadas geográficas (às vezes chamadas de coordenadas geodésicas, lat/lon ou lon/lat). As coordenadas geográficas são coordenadas esféricas expressas em unidades angulares (graus).

  A função `to_spherical_geography` retorna coordenadas geográficas (esféricas) de coordenadas geométricas (planares), como no exemplo a seguir.

  ```
  SELECT to_spherical_geography(ST_GeometryFromText(
     'LINESTRING (-40.2 28.9, -40.2 31.9, -37.2 31.9)'));
  ```

## Alterações que podem causar interrupções
<a name="engine-versions-reference-0003-breaking-changes"></a>

Quando você migrar das versões anteriores do mecanismo para o mecanismo do Athena versão 3, algumas alterações poderão afetar o esquema da tabela, a sintaxe ou o uso do tipo de dados. Esta seção lista as mensagens de erro associadas e fornece sugestões de soluções alternativas.

### Mudanças na sintaxe de consulta
<a name="engine-versions-reference-0003-syntax-changes"></a>

#### IGNORE NULLS não pode ser usado com funções de janela sem valor
<a name="engine-versions-reference-0003-remove-ignore-nulls-for-bool_or"></a>

**Mensagem de erro**: não é possível especificar a cláusula de tratamento nula para a função `bool_or`.

**Causa**: o `IGNORE NULLS` agora pode ser usado somente com as [funções de valor](https://trino.io/docs/current/functions/window.html#value-functions) `first_value`, `last_value`, `nth_value`, `lead` e`lag`. Essa alteração foi feita para estar em conformidade com a especificação ANSI SQL.

**Solução sugerida**: Remover o `IGNORE NULLS` de funções de janela sem valor em cadeias de caracteres de consulta.

#### A função CONCAT deve ter dois ou mais argumentos
<a name="engine-versions-reference-0003-concat-str-minimum-two-args"></a>

**Mensagem de erro**: INVALID\$1FUNCTION\$1ARGUMENT: There must be two or more concatenation arguments (INVALID\$1FUNCTION\$1ARGUMENT: deve haver dois ou mais argumentos de concatenação).

**Causa**: anteriormente, a função de string `CONCAT` aceitava somente um argumento. Na versão 3 do mecanismo do Athena, a função `CONCAT` requer, no mínimo, dois argumentos.

**Solução sugerida**: altere as ocorrências de `CONCAT(str)` para `CONCAT(str, '')`.

No mecanismo Athena versão 3, as funções não podem ter mais de 127 argumentos. Para obter mais informações, consulte [Excesso de argumentos para chamada de função](troubleshooting-athena.md#troubleshooting-athena-too-many-arguments).

#### A função approx\$1percentile retorna resultados diferentes.
<a name="engine-versions-reference-0003-approx-percentile-function"></a>

A função `approx_percentile` retorna resultados diferentes no mecanismo do Athena versão 3 em comparação com as versões anteriores do mecanismo.

**Mensagem de erro**: nenhum

**Causa**: A função `approx_percentile` está sujeita a alterações de versão.

**Importante**  
Como as saídas da função `approx_percentile` são aproximações e as aproximações estão sujeitas a alterações de uma versão para outra, você não deve confiar na função para aplicações críticas `approx_percentile`.

**Solução sugerida**: para aproximar o comportamento das versões anteriores do mecanismo de `approx_percentile`, é possível usar um conjunto diferente de funções no mecanismo do Athena versão 3. Por exemplo, suponha que você tenha a seguinte consulta nas versões anteriores do mecanismo:

```
SELECT approx_percentile(somecol, 2E-1)
```

Para obter aproximadamente a mesma saída na versão 3 do motor Athena, você pode experimentar `qdigest_agg` as funções `value_at_quantile` e, como no exemplo a seguir. Observe que, mesmo com esta solução alternativa, o mesmo comportamento não é garantido.

```
SELECT value_at_quantile(qdigest_agg(somecol, 1), 2E-1)
```

#### A função geoespacial não é compatível com entrada varibinária
<a name="engine-versions-reference-0003-geo-spatial-function-does-not-support-varbinary-input"></a>

**Mensagem de erro**: FUNCTION\$1NOT\$1FOUND for st\$1XXX (FUNCTION\$1NOT\$1FOUND para st\$1XXX).

**Causa**: algumas funções geoespaciais não são mais compatíveis com o tipo de entrada `VARBINARY` legado ou as assinaturas de funções relacionadas ao texto.

**Solução sugerida**: use funções geoespaciais para converter os tipos de entrada em tipos compatíveis. Os tipos de entrada compatíveis são indicados na mensagem de erro.

#### Em cláusulas GROUP BY, as colunas aninhadas devem ter aspas duplas
<a name="engine-versions-reference-0003-group-by-nested-columns-require-double-quotes"></a>

**Mensagem de erro**:  “*column\$1name*” “*nested\$1column*” deve ser uma expressão agregada ou aparecer na cláusula GROUP BY

**Causa**: o mecanismo Athena versão 3 exige que os nomes das colunas aninhadas nas cláusulas `GROUP BY` tenham aspas duplas. Por exemplo, a consulta a seguir produz o erro porque, na cláusula `GROUP BY`, `user.name` não está entre aspas duplas.

```
SELECT "user"."name" FROM dataset 
GROUP BY user.name
```

**Solução sugerida**: coloque aspas duplas ao redor dos nomes das colunas aninhadas nas cláusulas `GROUP BY`, como no exemplo a seguir.

```
SELECT "user"."name" FROM dataset 
GROUP BY "user"."name"
```

#### Erro de FilterNode inesperado ao usar OPTIMIZE em uma tabela Iceberg
<a name="engine-versions-reference-0003-iceberg-optimize-where-clause-filters"></a>

**Mensagem de erro**: FilterNode inesperado encontrado no plano; provavelmente o conector não conseguiu lidar com a expressão WHERE fornecida.

**Causa**: a instrução `OPTIMIZE` que foi executada na tabela Iceberg usou uma cláusula `WHERE` que incluía uma coluna sem partição em sua expressão de filtro.

**Solução sugerida**: a instrução `OPTIMIZE` suporta a filtragem somente por partições. Ao executar `OPTIMIZE` em tabelas particionadas, inclua somente colunas de partição na cláusula `WHERE`. Se você executar `OPTIMIZE` em uma tabela não particionada, não especifique uma cláusula `WHERE`.

#### Ordem dos argumentos na função Log()
<a name="engine-versions-reference-0003-log-function"></a>

Na versão 3 do mecanismo do Athena, a ordem dos argumentos da função `log()` foi alterada para `log(base, value)` em conformidade com os padrões SQL.

#### A função Minute() não é compatível com intervalos de ano a mês
<a name="engine-versions-reference-0003-minute-function"></a>

**Mensagem de erro**: Unexpected parameters (interval year to month) for function minute. (Parâmetros inesperados [intervalo de ano a mês] para a função “minute” [minutos]). Expected: minute(timestamp with time zone) , minute(time with time zone) , minute(timestamp) , minute(time) , minute(interval day to second).

**Causa**: no mecanismo Athena versão 3, as verificações estão mais precisas para `EXTRACT` de acordo com a especificação ANSI SQL.

**Solução sugerida**: atualize as consultas para garantir que os tipos correspondam às assinaturas de função sugeridas.

#### Expressões ORDER BY devem aparecer na lista SELECT
<a name="engine-versions-reference-0003-order-by-expressions-must-appear-in-select-list"></a>

**Mensagem de erro**: For SELECT DISTINCT, ORDER BY expressions must appear in SELECT list (Para SELECT DISTINCT, expressões ORDER BY devem aparecer na lista SELECT).

**Causa**: o alias de tabela incorreto é usado em uma cláusula `SELECT`.

**Solução sugerida**: verifique se todas as colunas na expressão `ORDER BY` têm referências adequadas na cláusula `SELECT DISTINCT`.

#### Falha na consulta ao comparar várias colunas retornadas de uma subconsulta
<a name="engine-versions-reference-0003-subquery-failure-multiple-columns"></a>

**Exemplo de mensagem de erro**: a expressão do valor e o resultado da subconsulta devem ser do mesmo tipo: row(varchar, varchar) vs. row(row(varchar, varchar))

**Causa**: devido a uma atualização de sintaxe no mecanismo Athena versão 3, esse erro ocorre quando uma consulta tenta comparar vários valores retornados de uma subconsulta, e a instrução `SELECT` da subconsulta coloca a lista de colunas entre parênteses, como no exemplo a seguir. 

```
SELECT *
FROM table1
WHERE (t1_col1, t1_col2)
IN (SELECT (t2_col1, t2_col2) FROM table2)
```

**Solução**: no mecanismo Athena versão 3, remova os parênteses ao redor da lista de colunas na instrução `SELECT` da subconsulta, como no exemplo de consulta atualizado a seguir.

```
SELECT *
FROM table1
WHERE (t1_col1, t1_col2)
IN (SELECT t2_col1, t2_col2 FROM table2)
```

#### SKIP é uma palavra reservada para consultas DML
<a name="engine-versions-reference-0003-skip-is-a-reserved-word-for-dml"></a>

Agora a palavra `SKIP` é reservada para consultas DML, como `SELECT`. Para usar `SKIP` como identificador em uma consulta DML, coloque-a entre aspas duplas.

Para obter mais informações sobre as palavras reservadas no Athena, consulte [Escapar palavras-chave reservadas em consultas](reserved-words.md).

#### Cláusulas SYSTEM\$1TIME e SYSTEM\$1VERSION estão obsoletas para passagem de tempo
<a name="engine-versions-reference-0003-time-travel-syntax"></a>

**Mensagem de erro**: mismatched input ‘SYSTEM\$1TIME’ (entrada “SYSTEM\$1TIME” incompatível). Expecting: ‘TIMESTAMP’, ‘VERSION’ (Esperado: “TIMESTAMP”, “VERSION'

**Causa**: nas versões anteriores do mecanismo, as tabelas do Iceberg usavam as cláusulas `FOR SYSTEM_TIME AS OF` e `FOR SYSTEM_VERSION AS OF` como timestamp e viagem no tempo da versão. A versão 3 do mecanismo do Athena usa as cláusulas `FOR TIMESTAMP AS OF` e `FOR VERSION AS OF`. 

**Solução sugerida**: atualize a consulta SQL para usar as cláusulas `TIMESTAMP AS OF` e `VERSION AS OF` para operações de passagem de tempo, como nos exemplos a seguir.

Passagem de tempo por data e hora:

```
SELECT * FROM TABLE FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)
```

 Passagem de tempo por versão:

```
SELECT * FROM TABLE FOR VERSION AS OF 949530903748831860
```

#### Excesso de argumentos para um construtor de matrizes
<a name="engine-versions-reference-0003-array-max-elements"></a>

**Mensagem de erro**: TOO\$1MANY\$1ARGUMENTS: excesso de argumentos para o construtor de matrizes.

**Causa**: o número máximo de elementos em um construtor de matrizes agora está definido como 254.

**Solução sugerida**: divida os elementos em várias matrizes com até 254 elementos cada e use a função `CONCAT` para concatenar as matrizes, como no exemplo a seguir.

```
CONCAT(
ARRAY[x1,x2,x3...x254],
ARRAY[y1,y2,y3...y254],
...
)
```

#### Identificador delimitado com comprimento zero não permitido
<a name="engine-versions-reference-0003-zero-length-delimited-identifier"></a>

**Mensagem de erro**: Zero-length delimited identifier not allowed (Identificadores delimitados por comprimento zero não são permitidos).

**Causa**: uma consulta usou uma string vazia como alias de coluna.

**Solução sugerida**: atualize a consulta para usar um alias que não esteja vazio para a coluna.

### Alterações no processamento de dados
<a name="engine-versions-reference-0003-data-processing-changes"></a>

#### Validação de bucket
<a name="engine-versions-reference-0003-bucket-validation"></a>

**Mensagem de erro**: HIVE\$1INVALID\$1BUCKET\$1FILES: a tabela do Hive está corrompida..

**Causa**: a tabela pode ter sido corrompida. O mecanismo Athena versão 3 permite validação adicional de tabelas em buckets para assegurar que as consultas estejam corretas e evitar falhas inesperadas no runtime.

**Solução sugerida**: recrie a tabela usando o mecanismo Athena versão 3.

#### Agora a conversão de um struct para JSON retorna nomes de campos
<a name="engine-versions-reference-0003-cast-struct-to-json"></a>

Agora, ao converter um `struct` para JSON em uma consulta `SELECT` no mecanismo do Athena versão 3, a conversão retorna os nomes dos campos e os valores (por exemplo, "`useragent":null` em vez de apenas os valores (por exemplo, `null`).

#### Alteração da imposição de segurança em nível de coluna da tabela do Iceberg
<a name="engine-versions-reference-0003-iceberg-column-security"></a>

**Mensagem de erro**: Access Denied: Cannot select from columns (Acesso negado: não é possível realizar a seleção entre as colunas).

**Causa**: a tabela do Iceberg foi criada exteriormente ao Athena e usa uma versão do [SDK do Apache Iceberg](https://iceberg.apache.org/releases/) anterior à versão 0.13.0. Como as versões anteriores do SDK não preenchem as colunas no AWS Glue, o Lake Formation não é capaz de determinar as colunas autorizadas para o acesso.

**Solução sugerida**: realize uma atualização usando a instrução [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) do Athena ou use o SDK mais recente do Iceberg para corrigir a tabela e atualizar as informações da coluna no AWS Glue.

#### Agora, os nulos nos tipos de dados List (Lista) são propagados para UDFs
<a name="engine-versions-reference-0003-nulls-in-list-datatypes-for-udfs"></a>

**Mensagem de erro**: Null Pointer Exception.

**Causa**: esse problema pode afetar você se você usar o conector UDF e tiver implementado uma função Lambda definida pelo usuário.

As versões anteriores do mecanismo filtravam os nulos nos tipos de dados List que eram passados para uma função definida pelo usuário. No mecanismo Athena versão 3, agora os nulos são preservados e transmitidos para a UDF. Isso pode causar uma exceção de ponteiro nulo se a UDF tentar desfazer a referência ao elemento nulo sem verificação.

Por exemplo, se você tiver os dados `[null, 1, null, 2, 3, 4]` em uma fonte de dados de origem como o DynamoDB, o seguinte será transmitido para a função Lambda definida pelo usuário:

**Mecanismo Athena versão 3**: `[null, 1, null, 2, 3, 4]`

**Solução sugerida**: certifique-se de que sua função do Lambda definida pelo usuário trate os elementos nulos nos tipos de dados de lista.

#### Subsequências de matrizes de caracteres não contêm mais espaços preenchidos
<a name="engine-versions-reference-0003-substring-no-padded-spaces"></a>

**Mensagem de erro**: nenhuma mensagem de erro é gerada, mas a string retornada não contém mais os espaços preenchidos. Por exemplo, agora `substr(char[20],1,100)` retorna uma string com comprimento 20 em vez de 100.

**Solução sugerida**: nenhuma ação é necessária.

#### Coerção de tipo de coluna decimal não compatível
<a name="engine-versions-reference-0003-unsupported-column-type"></a>

**Mensagens de erro**: HIVE\$1CURSOR\$1ERROR: Failed to read Parquet file: s3://amzn-s3-demo-bucket/*caminho*/*nome\$1Arquivo*.parquet ou Unsupported column type (varchar) for Parquet column ([*nome\$1coluna*]

**Causa**: o mecanismo Athena versão 2 teve sucesso algumas vezes (mas falhou frequentemente) ao tentar conversões de tipo de dados de `varchar` para decimal. Como a versão 3 do mecanismo Athena tem validação de tipo, que verifica se o tipo é compatível antes de tentar ler o valor, essas tentativas de coerção agora sempre falham.

**Solução sugerida**: para o mecanismo do Athena versão 3, modifique o esquema no AWS Glue para usar um tipo de dado numérico em vez de `varchar` para colunas decimais em arquivos do Parquet. Ou recrawle os dados e garanta que o novo tipo de dados da coluna seja do tipo decimal, ou recrie manualmente a tabela no Athena e use a sintaxe `decimal(precision, scale)` para especificar um tipo de dados [decimal](data-types.md#data-types-decimal) para a coluna.

#### Valores NaN de ponto flutuante ou precisão dupla não podem mais ser convertidos para bigint
<a name="engine-versions-reference-0003-no-nan-to-bigint"></a>

**Mensagem de erro**: INVALID\$1CAST\$1ARGUMENT: Cannot cast real/double NaN to bigint

**Causa**: na versão 3 do mecanismo do Athena, `NaN` não pode mais ser convertido para 0 como `bigint`.

**Solução sugerida**: certifique-se de que os valores `NaN` não estejam presentes nas colunas `float` e `double` ao converter para `bigint`.

#### alteração do tipo de retorno da função uuid()
<a name="engine-versions-reference-0003-uuid-function-return-type-change"></a>

O problema a seguir afeta tanto as tabelas como as visualizações.

**Mensagem de erro**: Unsupported Hive type: uuid

**Causa**: nas versões anteriores do mecanismo, a função `uuid()` retornava uma string, mas no mecanismo do Athena versão 3, ela retorna um pseudo UUID gerado aleatoriamente (tipo 4). Como o tipo de dados da coluna UUID não é compatível com o Athena, a função `uuid()` não pode mais ser usada diretamente em consultas CTAS para gerar colunas UUID no mecanismo Athena versão 3.

Por exemplo, a seguinte instrução `CREATE TABLE` é concluída com êxito nas versões anteriores do mecanismo, mas retorna NOT\$1SUPPORTED: Tipo de hive sem suporte: uuid no mecanismo do Athena versão 3:

```
CREATE TABLE uuid_table AS 
   SELECT uuid() AS myuuid
```

Da mesma forma, a seguinte instrução `CREATE VIEW` é concluída com êxito no mecanismo do Athena versão 2, mas retorna Tipo de coluna inválido para myuuid de coluna: Tipo de hive sem suporte: uuid no mecanismo do Athena versão 3:

```
CREATE VIEW uuid_view AS 
   SELECT uuid() AS myuuid
```

Quando uma visualização criada dessa forma em uma versão anterior do mecanismo é consultada no mecanismo do Athena versão 3, um erro como este ocorre:

VIEW\$1IS\$1STALE: linha 1:15: a exibição 'awsdatacatalog.mydatabase.uuid\$1view' está esmaecida ou em estado inválido: a coluna [myuuid] do tipo uuid projetada da exibição da consulta na posição 0 não pode ser forçada na coluna [myuuid] do tipo varchar armazenada na definição da exibição

**Solução sugerida**: ao criar ou visualizar a tabela, use a função `cast()` para converter a saída de `uuid()` para `varchar`, como no seguinte exemplo:

```
CREATE TABLE uuid_table AS
   SELECT CAST(uuid() AS VARCHAR) AS myuuid
```

```
CREATE VIEW uuid_view AS
   SELECT CAST(uuid() AS VARCHAR) AS myuuid
```

#### Problemas de coerção de CHAR e VARCHAR
<a name="engine-versions-reference-0003-char-varchar-coercion-issues"></a>

Use as soluções alternativas desta seção caso encontre problemas de coerção de `varchar` e `char` no mecanismo do Athena versão 3. Se não conseguir usar essas soluções alternativas, entre em contato com o Suporte.

##### Falha na função CONCAT com entradas CHAR e VARCHAR mistas
<a name="engine-versions-reference-0003-concat-function-failure"></a>

**Problema**: a consulta a seguir tem êxito no mecanismo do Athena versão 2.

```
SELECT concat(CAST('abc' AS VARCHAR(20)), '12', CAST('a' AS CHAR(1)))
```

Porém, no mecanismo do Athena versão 3, a mesma consulta falha com o seguinte:

**Mensagem de erro**: FUNCTION\$1NOT\$1FOUND: line 1:8: Unexpected parameters (varchar(20), varchar(2), char(1)) for function concat. Esperado: concat(char(x), char(y)), concat(array(E), E) E, concat(E, array(E)) E, concat(array(E)) E, concat(varchar), concat(varbinary)

**Solução sugerida**: ao usar a função `concat`, converta para `char` ou `varchar`, mas não para uma mistura de ambas.

##### Falha de concatenação de \$1\$1 do SQL com entradas CHAR e VARCHAR
<a name="engine-versions-reference-0003-double-pipe-char-varchar-failure"></a>

No mecanismo do Athena versão 3, o operador de concatenação de barras verticais duplas `||` requer `varchar` como entradas. As entradas não podem ser uma combinação de tipos `varchar` e `char`.

**Mensagem de erro**: TYPE\$1NOT\$1FOUND: line 1:26: Unknown type: char(65537) 

**Causa**: uma consulta que usa `||` para concatenar um `char` e um `varchar` pode produzir o erro, como no exemplo a seguir.

```
SELECT CAST('a' AS CHAR) || CAST('b' AS VARCHAR)
```

**Solução sugerida**: concatene `varchar` com `varchar`, como no exemplo a seguir.

```
SELECT CAST('a' AS VARCHAR) || CAST('b' AS VARCHAR) 
```

##### Falha na consulta CHAR e VARCHAR UNION
<a name="engine-versions-reference-0003-char-varchar-union-query-failure"></a>

**Mensagem de erro**: NOT\$1SUPPORTED: Unsupported Hive type: char(65536). Tipos de CHAR compatíveis: CHAR (<;=255) 

**Causa**: uma consulta que tenta combinar `char` e `varchar`, como no seguinte exemplo:

```
CREATE TABLE t1 (c1) AS SELECT CAST('a' as CHAR) as c1 UNION ALL SELECT CAST('b' AS VARCHAR) AS c1 
```

**Solução sugerida**: na consulta de exemplo, converta `'a'` para `varchar` em vez de `char`. 

##### Espaços vazios indesejados após a coerção de CHAR ou VARCHAR
<a name="engine-versions-reference-0003-empty-spaces-added-after-coercion"></a>

Na versão 3 do mecanismo Athena, quando os dados `char(X)` e `varchar` são forçados para um único tipo formando uma matriz ou coluna única, `char(65535)` é o tipo de destino, e cada campo contém muitos espaços indesejados à direita.

**Causa**: o mecanismo Athena versão 3 força `varchar` e `char(X)` para `char(65535)` e preenche os dados com espaços à direita.

**Solução sugerida**: converta cada campo explicitamente para `varchar`.

### Alterações de timestamp
<a name="engine-versions-reference-0003-timestamp-changes"></a>

#### O estouro do timestamp gera um erro
<a name="engine-versions-reference-0003-date-timestamp-overflow"></a>

**Mensagem de erro**: Millis overflow: XXX (Estouro de milissegundos: XXX)

**Causa**: como as datas ISO 8601 não foram verificadas quanto ao estouro nas versões anteriores do mecanismo, algumas datas produziram um timestamp negativo. O mecanismo Athena versão 3 verifica esse estouro e gera uma exceção.

**Solução sugerida**: certifique-se de que o timestamp esteja dentro do intervalo.

#### Não há compatibilidade com fusos horários políticos com TIME
<a name="engine-versions-reference-0003-political-time-zones"></a>

**Mensagem de erro**: INVALID LITERAL

**Causa**: consultas como `SELECT TIME '13:21:32.424 America/Los_Angeles'`.

**Solução sugerida**: evite usar fusos horários políticos com `TIME`.

#### Divergência de precisão nas colunas Timestamp causa erro de serialização
<a name="engine-versions-reference-0003-timestamp-precision-serialization-error"></a>

**Mensagem de erro**: SERIALIZATION\$1ERROR: Could not serialize column ‘*COLUMNZ*’ of type ‘timestamp(3)’ at position *X*:*Y* (SERIALIZATION\$1ERROR: não foi possível serializar a coluna “COLUMNZ” do tipo “timestamp(3)” na posição X:Y).

*COLUMNZ* é o nome de saída da coluna que causa o problema. Os números *X*:*Y* indicam a posição da coluna na saída.

**Causa**: o mecanismo Athena versão 3 verifica se a precisão dos registros de data e hora nos dados é igual à precisão especificada para o tipo de dados da coluna na especificação da tabela. No momento, essa precisão é sempre 3. Se os dados tiverem uma precisão maior do que isso, as consultas falharão com o erro observado.

**Solução sugerida**: verifique seus dados para garantir que os timestamps tenham a precisão de milissegundos.

#### Precisão incorreta do timestamp nas consultas UNLOAD e CTAS para tabelas Iceberg
<a name="engine-versions-reference-0003-timestamp-precision-unload-ctas-iceberg"></a>

**Mensagem de erro**: precisão incorreta do timestamp para timestamp(6); a precisão configurada é MILLISECONDS

**Causa**: o mecanismo Athena versão 3 verifica se a precisão dos registros de data e hora nos dados é igual à precisão especificada para o tipo de dados da coluna na especificação da tabela. No momento, essa precisão é sempre 3. Se os dados tiverem uma precisão maior do que isso (por exemplo, microssegundos em vez de milissegundos), as consultas poderão falhar com o erro observado.

**Solução**: para resolver esse problema, primeiro `CAST` a precisão do timestamp para 6, como no exemplo de CTAS a seguir, que cria uma tabela Iceberg. Observe que a precisão deve ser especificada como 6 em vez de 3 para evitar o erro Timestamp precision (3) not supported for Iceberg.

```
CREATE TABLE my_iceberg_ctas
WITH (table_type = 'ICEBERG', location = 's3://amzn-s3-demo-bucket/table_ctas/',
format = 'PARQUET')
AS SELECT id, CAST(dt AS timestamp(6)) AS "dt"
FROM my_iceberg
```

Então, como o Athena não é compatível com o timestamp 6, converta o valor novamente para timestamp (por exemplo, em uma exibição). O exemplo a seguir cria uma visualização da tabela `my_iceberg_ctas`.

```
CREATE OR REPLACE VIEW my_iceberg_ctas_view AS
SELECT cast(dt AS timestamp) AS dt
FROM my_iceberg_ctas
```

#### Ler o tipo Long como Timestamp ou vice-versa em arquivos ORC agora causa um erro de arquivo ORC malformado.
<a name="engine-versions-reference-0003-orc-no-implicit-long-to-timestamp-coercion"></a>

**Mensagem de erro**: Error opening Hive split ‘FILE (SPLIT POSITION)’ Malformed ORC file. (Erro ao abrir o arquivo ORC malformado da divisão Hive ‘FILE (SPLIT POSITION)’). Cannot read SQL type timestamp from ORC stream .long\$1type of type LONG

**Causa**: agora, o mecanismo Athena versão 3 rejeita a coerção implícita do tipo de dados `Long` para `Timestamp` ou de `Timestamp` para `Long`. Anteriormente, os valores `Long` eram convertidos implicitamente em timestamp como se fossem milissegundos de época.

**Solução sugerida**: use a função `from_unixtime` para converter explicitamente a coluna ou use a função `from_unixtime` para criar uma coluna adicional para consultas futuras.

#### Não há compatibilidade com tempo e intervalo de ano a mês
<a name="engine-versions-reference-0003-time-and-interval-year-to-month"></a>

**Mensagem de erro**: TYPE MISMATCH

**Causa**: o mecanismo Athena versão 3 não é compatível com tempo e intervalo de ano a mês (p. ex., `SELECT TIME '01:00' + INTERVAL '3' MONTH`).

#### Estouro de timestamp para o formato Parquet int96
<a name="engine-versions-reference-0003-timestamp-overflow-for-int96-parquet-format"></a>

**Mensagem de erro**: Invalid timeOfDayNanos (timeOfDayNanos inválido).

**Causa**: um estouro de timestamp para o formato Parquet `int96`.

**Solução sugerida**: identifique os arquivos específicos que apresentam o problema. Em seguida, gere o arquivo de dados novamente com uma biblioteca Parquet atualizada e conhecida ou use o Athena CTAS. Se o problema persistir, entre em contato com o suporte do Athena e nos informe como os arquivos de dados são gerados.

#### Espaço necessário entre os valores de data e hora ao converter de string para timestamp
<a name="engine-versions-reference-0003-timestamp-cast-space"></a>

**Mensagem de erro**: INVALID\$1CAST\$1ARGUMENT: o valor não pode ser convertido para timestamp.

**Causa**: o mecanismo Athena versão 3 não aceita mais um hífen como separador válido entre valores de data e hora na string de entrada para `cast`. Por exemplo, a seguinte consulta não funciona no mecanismo do Athena versão 3:

```
SELECT CAST('2021-06-06-23:38:46' AS timestamp) AS this_time
```

**Solução sugerida**: no mecanismo Athena versão 3, substitua o hífen entre a data e a hora por um espaço, como no exemplo a seguir.

```
SELECT CAST('2021-06-06 23:38:46' AS timestamp) AS this_time
```

#### alteração do valor de retorno do timestamp to\$1iso8601()
<a name="engine-versions-reference-0003-to-iso8601-function"></a>

**Mensagem de erro**: nenhuma

**Causa**: nas versões anteriores do mecanismo, a função `to_iso8601` retorna um timestamp com fuso horário, mesmo que o valor passado para a função não inclua o fuso horário. No mecanismo Athena versão 3, a função `to_iso8601` retorna um timestamp com fuso horário somente quando o argumento passado inclui o fuso horário.

Por exemplo, a consulta a seguir passa a data atual para a função `to_iso8601` duas vezes: primeiro como timestamp com fuso horário e depois como um timestamp.

```
SELECT TO_ISO8601(CAST(CURRENT_DATE AS TIMESTAMP WITH TIME ZONE)), TO_ISO8601(CAST(CURRENT_DATE AS TIMESTAMP))
```

A saída a seguir mostra o resultado da consulta no mecanismo do Athena versão 3.

Em versões anteriores do mecanismo:


****  

| \$1 | \$1col0 | \$1col1 | 
| --- | --- | --- | 
| 1 |  `2023-02-24T00:00:00.000Z `  |  `2023-02-24T00:00:00.000Z`  | 

Mecanismo Athena versão 3:


****  

| \$1 | \$1col0 | \$1col1 | 
| --- | --- | --- | 
| 1 |  `2023-02-24T00:00:00.000Z`  |  `2023-02-24T00:00:00.000`  | 

**Solução sugerida**: para replicar o comportamento anterior, você pode passar o valor do timestamp para a função `with_timezone` antes de passá-lo para `to_iso8601`, como no exemplo a seguir: 

```
SELECT to_iso8601(with_timezone(TIMESTAMP '2023-01-01 00:00:00.000', 'UTC'))
```

Resultado


****  

| \$1 | \$1col0 | 
| --- | --- | 
| 1 |  2023-01-01T00:00:00.000Z  | 

#### o primeiro parâmetro at\$1timezone() deve especificar uma data
<a name="engine-versions-reference-at-timezone-function"></a>

**Problema**: no mecanismo Athena versão 3, a função `at_timezone` não pode ter um valor `time_with_timezone` como o primeiro parâmetro.

**Causa**: sem informações de data, não é possível determinar se o valor passado está no horário de verão ou no horário padrão. Por exemplo, `at_timezone('12:00:00 UTC', 'America/Los_Angeles')` é ambíguo, pois não há como determinar se o valor passado está no Horário de Verão do Pacífico (PDT) ou no Horário Padrão do Pacífico (PST).

## Limitações
<a name="engine-versions-reference-0003-known-limitations"></a>

O mecanismo Athena versão 3 tem as seguintes limitações.
+ **Performance de consulta**: muitas consultas são executadas mais rapidamente no mecanismo Athena versão 3, mas alguns planos de consulta podem ser diferentes em relação às versões anteriores do mecanismo. Como resultado, algumas consultas podem diferir em latência ou custo.
+ **Conectores Trino e Presto**: não há compatibilidade com conectores [Trino](https://trino.io/docs/current/connector.html) nem [Presto](https://prestodb.io/docs/current/connector.html). Use a consulta federada do Amazon Athena para conectar origens de dados. Para obter mais informações, consulte [Usar a consulta federada do Amazon Athena](federated-queries.md).
+ **Execução tolerante a falhas:** não há compatibilidade com a [execução tolerante a falhas](https://trino.io/docs/current/admin/fault-tolerant-execution.html) do Trino (Trino Tardigrade).
+ **Limite de parâmetros de função**: as funções não podem ter mais de 127 parâmetros. Para obter mais informações, consulte [Excesso de argumentos para chamada de função](troubleshooting-athena.md#troubleshooting-athena-too-many-arguments).

Os limites a seguir foram introduzidos no mecanismo do Athena versão 2 para garantir que as consultas não falhem devido a limitações de recursos. Esses limites não são configuráveis pelos usuários.
+ **Número de elementos do resultado**: o número de elementos do resultado `n` é restrito a no máximo 10.000 para as seguintes funções: `min(col, n)`, `max(col, n)`, `min_by(col1, col2, n)` e `max_by(col1, col2, n)`.
+ **GROUPING SETS**: o número máximo de fatias em um conjunto de agrupamento é 2.048.
+ **Comprimento máximo de linha de arquivo de texto**: o comprimento máximo de linha padrão para arquivos de texto é de 200 MB.
+ **Tamanho máximo do resultado da função de sequência**: o tamanho máximo do resultado de uma função de sequência é 50.000 entradas. Por exemplo, `SELECT sequence(0,45000,1)` é bem-sucedido, mas `SELECT sequence(0,55000,1)` falha com a mensagem de erro: The result of the sequence function must not have more than 50000 entries (O resultado da função de sequência não deve ter mais de 50.000 entradas). Esse limite se aplica a todos os tipos de entrada das funções de sequência, incluindo timestamps.

# Referência do SQL para o Athena
<a name="ddl-sql-reference"></a>

O Amazon Athena oferece um subconjunto de instruções, funções, operadores e tipos de dados em Data Definition Language (DDL – Linguagem de definição de dados) e Data Manipulation Language (DML – Linguagem de manipulação de dados). Com algumas exceções, a DDL do Athena é baseada na [DDL do HiveQL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL) e a DML do Athena é baseada no [Trino](https://trino.io/docs/current/language.html). Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md).

**Topics**
+ [Tipos de dados no Athena](data-types.md)
+ [

# Consultas, funções e operadores em DML
](dml-queries-functions-operators.md)
+ [

# Instruções DDL
](ddl-reference.md)
+ [Considerações e limitações](other-notable-limitations.md)

# Tipos de dados no Amazon Athena
<a name="data-types"></a>

Ao executar `CREATE TABLE`, você especifica os nomes de coluna e o tipo de dados que cada coluna pode conter. As tabelas que você cria são armazenadas no AWS Glue Data Catalog. 

Para facilitar a interoperabilidade com outros mecanismos de consulta, o Athena usa nomes de tipos de dados do [Apache Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types) para instruções DDL, como `CREATE TABLE`. Para consultas DML como `SELECT`, `CTAS` e `INSERT INTO`, o Athena usa nomes de tipo de dados [Trino](https://trino.io/docs/current/language/types.html). A tabela a seguir mostra os tipos de dados compatíveis com o Athena. Quando os tipos DDL e DML forem diferentes em termos de nome, disponibilidade ou sintaxe, eles serão apresentados em colunas separadas.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/data-types.html)

**Topics**
+ [

# Exemplos de tipo de dados
](data-types-examples.md)
+ [

# Considerações sobre tipos de dados
](data-types-considerations.md)
+ [

# Trabalhar com dados de timestamp
](data-types-timestamps.md)

# Exemplos de tipo de dados
<a name="data-types-examples"></a>

A tabela a seguir apresenta exemplos de literais para tipos de dados DML.


****  

| Tipo de dados | Exemplos | 
| --- | --- | 
| BOOLEAN |  `true` `false `  | 
| TINYINT |  `TINYINT '123'`  | 
| SMALLINT |  `SMALLINT '123'`  | 
| INT, INTEGER |  `123456790`  | 
| BIGINT |  `BIGINT '1234567890'` `2147483648`  | 
| REAL |  `'123456.78'`  | 
| DOUBLE |  `1.234`  | 
| DECIMAL(precisão, escala) |  `DECIMAL '123.456'`  | 
| CHAR, CHAR(comprimento) |  `CHAR 'hello world'`, `CHAR 'hello ''world''!'`  | 
| VARCHAR, VARCHAR(comprimento) |  `VARCHAR 'hello world'`, `VARCHAR 'hello ''world''!'`  | 
| VARBINARY |  `X'00 01 02'`  | 
| TIME, TIME(precisão) |  `TIME '10:11:12'`, `TIME '10:11:12.345'`  | 
| TIME WITH TIME ZONE |  `TIME '10:11:12.345 -06:00'`  | 
| DATE |  `DATE '2024-03-25'`  | 
|  TIMESTAMP, TIMESTAMP WITHOUT TIME ZONE, TIMESTAMP(*precisão*), TIMESTAMP(*precisão*) WITHOUT TIME ZONE   |  `TIMESTAMP '2024-03-25 11:12:13'`, `TIMESTAMP '2024-03-25 11:12:13.456'`  | 
| TIMESTAMP WITH TIME ZONE, TIMESTAMP(precisão) WITH TIME ZONE |  `TIMESTAMP '2024-03-25 11:12:13.456 Europe/Berlin'`  | 
| INTERVALO ENTRE UM ANO E UM MÊS |  `INTERVAL '3' MONTH`  | 
| INTERVALO ENTRE UM DIA E UM SEGUNDO |  `INTERVAL '2' DAY`  | 
| ARRAY[tipo\$1elemento] |  `ARRAY['one', 'two', 'three']`  | 
| MAP(tipo\$1chave, tipo\$1valor) |  `MAP(ARRAY['one', 'two', 'three'], ARRAY[1, 2, 3])` Observe que os mapas são criados com base em uma matriz de chaves e uma matriz de valores. O exemplo a seguir cria uma tabela que mapeia strings para números inteiros. <pre>CREATE TABLE map_table(col1 map<string, integer>) LOCATION '...';<br />INSERT INTO map_table values(MAP(ARRAY['foo', 'bar'], ARRAY[1, 2]));</pre>  | 
| ROW(nome\$1campo\$11:tipo\$1campo\$11, nome\$1campo\$12:tipo\$1campo\$12, …) |  `ROW('one', 'two', 'three')` Observe que as linhas criadas dessa forma não têm nomes de colunas. Para adicionar nomes de colunas, você pode usar `CAST`, como no exemplo a seguir: <pre>CAST(ROW(1, 2, 3) AS ROW(one INT, two INT, three INT))</pre>  | 
| JSON |  `JSON '{"one":1, "two": 2, "three": 3}'`  | 
| UUID |  `UUID '12345678-90ab-cdef-1234-567890abcdef'`  | 
| IPADDRESS |  `IPADDRESS '10.0.0.1'` `IPADDRESS '2001:db8::1'`  | 

# Considerações sobre tipos de dados
<a name="data-types-considerations"></a>

## Limites de tamanho
<a name="data-types-considerations-size"></a>

Para tipos de dados que não especificam um limite de tamanho, lembre-se de que há um limite prático de 32 MB para todos os dados em uma única linha. Para obter mais informações, consulte [Row or column size limitation](other-notable-limitations.md#sql-limitations-rowsize) em [Considerações e limitações das consultas SQL no Amazon Athena](other-notable-limitations.md).

## CHAR e VARCHAR
<a name="data-types-considerations-char"></a>

Um valor `CHAR(n)` sempre tem uma contagem de `n` caracteres. Por exemplo, se você lançar “abc” para `CHAR(7)`, 4 espaços finais serão adicionados. 

As comparações de valores `CHAR` incluem espaços à esquerda e à direita. 

Se um comprimento for especificado para `CHAR` ou `VARCHAR`, as strings serão truncadas no comprimento especificado quando lidas. Se a string de dados subjacente for mais longa, a string de dados subjacente permanecerá inalterada.

Para escapar uma aspas simples em um `CHAR` ou `VARCHAR`, use uma aspas simples adicional.

Para converter um tipo de dados que não seja uma string em uma consulta DML, converta para o tipo de dados `VARCHAR`.

Para usar a função `substr` para retornar uma substring de comprimento específico proveniente de um tipo de dados `CHAR`, primeiro é necessário lançar o valor `CHAR` como `VARCHAR`. No exemplo a seguir, `col1` usa o tipo de dados `CHAR`.

```
substr(CAST(col1 AS VARCHAR), 1, 4)
```

## DECIMAL
<a name="data-types-considerations-decimal"></a>

Para especificar valores decimais como literais em consultas `SELECT`, como ao selecionar linhas com um valor decimal específico, é possível especificar o tipo `DECIMAL` e listar o valor decimal como um literal entre aspas simples na consulta, como nos exemplos a seguir.

```
SELECT * FROM my_table
WHERE decimal_value = DECIMAL '0.12'
```

```
SELECT DECIMAL '44.6' + DECIMAL '77.2'
```

# Trabalhar com dados de timestamp
<a name="data-types-timestamps"></a>

Esta seção descreve algumas considerações para trabalhar com dados de timestamp no Athena.

**nota**  
O tratamento dos timestamps mudou um pouco entre as versões anteriores do mecanismo do Athena e o mecanismo do Athena versão 3. Para obter informações sobre erros relacionados ao timestamp que podem ocorrer no mecanismo do Athena versão 3 e soluções sugeridas, consulte [Alterações de timestamp](engine-versions-reference-0003.md#engine-versions-reference-0003-timestamp-changes) na referência [Mecanismo Athena versão 3](engine-versions-reference-0003.md).

## Formato para gravar dados de timestamp em objetos do Amazon S3
<a name="data-types-timestamps-writing-to-s3-objects"></a>

O formato no qual os dados de timestamp devem ser gravados em objetos do Amazon S3 depende do tipo de dados da coluna e da [biblioteca SerDe](https://docs.aws.amazon.com/athena/latest/ug/supported-serdes.html) utilizada.
+ Se você tiver uma coluna de tabela do tipo `DATE`, o Athena espera que a coluna ou propriedade correspondente dos dados seja uma string no formato ISO `YYYY-MM-DD` ou um tipo de data incorporado, como aqueles para Parquet ou ORC.
+ Se você tiver uma coluna de tabela do tipo `TIME`, o Athena espera que a coluna ou propriedade correspondente dos dados seja uma string no formato ISO `HH:MM:SS` ou um tipo de hora incorporado, como aqueles para Parquet ou ORC.
+ Se você tiver uma coluna de tabela do tipo `TIMESTAMP`, o Athena espera que a coluna ou propriedade correspondente dos dados seja uma string no formato `YYYY-MM-DD HH:MM:SS.SSS` (observe o espaço entre a data e a hora) ou um tipo de hora incorporado, como aqueles para Parquet, ORC ou Ion. Observe que o Athena não garante o comportamento com timestamps inválidos (por exemplo `0000-00-00 08:00:00.000`).
**nota**  
Os timestamps do OpenCsvSerDe são uma exceção e devem ser codificados como epochs UNIX com resolução de milissegundos.

## Garantir que os dados particionados por tempo correspondam ao campo de timestamp em um registro
<a name="data-types-timestamps-time-partitioned-data-and-timestamp-fields"></a>

O produtor dos dados deve garantir que os valores da partição estejam alinhados com os dados na partição. Por exemplo, se os dados tiverem uma propriedade `timestamp` e você usar o Firehose para carregá-los no Amazon S3, será necessário usar o [particionamento dinâmico](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html) porque o particionamento padrão do Firehose é baseado em hora real do relógio.

## Usar string como o tipo de dados para chaves de partição
<a name="data-types-timestamps-partition-key-types"></a>

Por motivos de performance, é preferível usar `STRING` como tipo de dados para chaves de partição. Embora o Athena reconheça valores de partição no formato `YYYY-MM-DD` como datas quando você usa o tipo `DATE`, isso pode levar a uma performance ruim. Por isso, recomenda-se usar o tipo de dados `STRING` para chaves de partição.

## Como gravar consultas em campos de timestamp que também são particionados por tempo
<a name="data-types-timestamps-how-to-write-queries-for-timestamp-fields-that-are-also-time-partitioned"></a>

A forma como você grava consultas em campos de timestamp que são particionados por hora depende do tipo de tabela que você deseja consultar.

### Tabelas Hive
<a name="data-types-timestamps-hive-tables"></a>

Com as tabelas Hive mais usadas no Athena, o mecanismo de consulta não tem conhecimento das relações entre as colunas e as chaves de partição. Por isso, você sempre deve adicionar predicados às consultas tanto para a coluna como para a chave de partição.

Por exemplo, suponha que você tenha uma coluna `event_time` e uma chave de partição `event_date` e queira consultar eventos entre 23:00 e 03:00. Nesse caso, é necessário incluir predicados em sua consulta para a coluna e a chave de partição, como no exemplo a seguir.

```
WHERE event_time BETWEEN start_time AND end_time 
  AND event_date BETWEEN start_time_date AND end_time_date
```

### Tabelas Iceberg
<a name="data-types-timestamps-iceberg-tables"></a>

Com as tabelas Iceberg, é possível usar valores de partição computados, o que simplifica suas consultas. Por exemplo, suponha que sua tabela do Iceberg tenha sido criada com uma cláusula `PARTITIONED BY` como esta:

```
PARTITIONED BY (event_date month(event_time))
```

Nesse caso, o mecanismo de consulta remove automaticamente as partições com base nos valores dos predicados `event_time`. Por isso, sua consulta só precisa especificar um predicado para `event_time`, como no exemplo a seguir.

```
WHERE event_time BETWEEN start_time AND end_time
```

Para obter mais informações, consulte [Criar tabelas do Iceberg](querying-iceberg-creating-tables.md).

Ao usar o particionamento oculto do Iceberg para uma coluna de timestamp, o Iceberg pode criar uma partição em uma coluna de tabela construída derivada de uma coluna de timestamp e transformada em uma data para proporcionar um particionamento mais eficaz. Por exemplo, ele pode criar `event_date` a partir da coluna de timestamp `event_time` e particionar automaticamente em `event_date`. Nesse caso, o **tipo** da partição é uma **data**.

Para usufruir da performance ideal da consulta ao usar a partição, filtre por intervalos de dias inteiros para habilitar o pushdown de predicados. Por exemplo, a consulta a seguir não seria submetida a pushdown porque o intervalo não pode ser convertido em uma única partição de data, mesmo que esteja dentro de um único dia:

```
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-18 12:00:00'
```

Em vez disso, use um intervalo de dias inteiros para permitir o pushdown de predicados e melhorar a performance da consulta, como no exemplo a seguir.

```
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-19 00:00:00'
```

Você também pode usar a sintaxe `BETWEEN start_time AND end_time` ou usar os intervalos de vários dias, desde que as partes dos timestamps sejam `00:00:00`.

Para obter mais informações, consulte a [postagem do blog do Trino](https://trino.io/blog/2023/04/11/date-predicates.html).

# Consultas, funções e operadores em DML
<a name="dml-queries-functions-operators"></a>

Em geral, o mecanismo de consulta DML do Athena é compatível com a sintaxe do Trino e do Presto e acrescenta suas próprias melhorias. O Athena não é compatível com todos os recursos do Trino ou Presto. Para obter mais informações, consulte os tópicos das instruções específicas nesta seção e [Considerações e limitações](other-notable-limitations.md). Para obter informações sobre as funções, consulte [Funções no Amazon Athena](functions.md). Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md). 

Para obter mais informações sobre instruções DDL, consulte [Instruções DDL](ddl-reference.md). Para ver uma lista de instruções DDL não permitidas, consulte [DDL incompatível](unsupported-ddl.md).

**Topics**
+ [

# SELECT
](select.md)
+ [

# INSERT INTO
](insert-into.md)
+ [

# VALUES
](values-statement.md)
+ [

# DELETE
](delete-statement.md)
+ [

# UPDATE
](update-statement.md)
+ [

# MERGE INTO
](merge-into-statement.md)
+ [

# OPTIMIZE
](optimize-statement.md)
+ [

# VACUUM
](vacuum-statement.md)
+ [EXPLAIN e EXPLAIN ANALYZE](athena-explain-statement.md)
+ [

# PREPARE
](sql-prepare.md)
+ [

# UNLOAD
](unload.md)
+ [Funções](functions.md)
+ [

# Usar fusos horários compatíveis
](athena-supported-time-zones.md)

# SELECT
<a name="select"></a>

Recupera linhas de dados de zero ou mais tabelas.

**nota**  
Este tópico fornece informações resumidas para referência. Informações abrangentes sobre o uso de `SELECT` e a linguagem SQL estão além do escopo desta documentação. Para obter informações sobre como usar o SQL específico do Athena, consulte [Considerações e limitações das consultas SQL no Amazon Athena](other-notable-limitations.md) e [Executar consultas SQL no Amazon Athena](querying-athena-tables.md). Para ver um exemplo de como criar um banco de dados, criar uma tabela e executar uma consulta `SELECT` na tabela do Athena, consulte [Conceitos básicos](getting-started.md).

## Resumo
<a name="synopsis"></a>

```
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
```

**nota**  
Palavras reservadas em instruções SQL SELECT devem ficar entre aspas duplas. Para obter mais informações, consulte [Palavras-chave reservadas para escape e em instruções de SQL SELECT](reserved-words.md#list-of-reserved-words-sql-select).

## Parâmetros
<a name="select-parameters"></a>

**[ WITH with\$1query [, ....] ]**  
Você pode usar `WITH` para nivelar consultas aninhadas ou para simplificar subconsultas.  
O uso da cláusula `WITH` para criar consultas recursivas é possível a partir da versão 3 do mecanismo Athena. A profundidade de recursão máxima é 10.  
A cláusula `WITH` precede a lista `SELECT` em uma consulta e define uma ou mais subconsultas a serem usadas dentro da consulta `SELECT`.   
Cada subconsulta define uma tabela temporária, semelhante a uma definição de exibição, que você pode referenciar na cláusula `FROM`. As tabelas são usadas apenas quando a consulta é executada.   
`with_query`A sintaxe é:  

```
subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
```
Em que:  
+  `subquery_table_name` é um nome exclusivo para uma tabela temporária que define os resultados da subconsulta de cláusula `WITH`. Cada `subquery` deve ter um nome de tabela que possa ser referenciado na cláusula `FROM`.
+  `column_name [, ...]` é uma lista opcional de nomes de coluna de saída. O número de nomes de coluna deve ser igual a ou menor que o número de colunas definido por `subquery`.
+  `subquery` é uma instrução da consulta qualquer.

**[ ALL \$1 DISTINCT ] select\$1expression**  
 `select_expression` determina as linhas a serem selecionadas. Uma `select_expression` pode usar um dos seguintes formatos:  

```
expression [ [ AS ] column_alias ] [, ...]
```

```
row_expression.* [ AS ( column_alias [, ...] ) ]
```

```
relation.*
```

```
*
```
+ A sintaxe `expression [ [ AS ] column_alias ]` especifica uma coluna de saída. A sintaxe opcional `[AS] column_alias` especifica um nome de título personalizado a ser usado para a coluna na saída.
+ Para `row_expression.* [ AS ( column_alias [, ...] ) ]`, `row_expression` é uma expressão arbitrária do tipo de dados `ROW`. Os campos da linha definem as colunas de saída a serem incluídas no resultado.
+ Para `relation.*`, as colunas de `relation` são incluídas no resultado. Essa sintaxe não permite o uso de aliases de coluna.
+ O asterisco `*` especifica que todas as colunas sejam incluídas no conjunto de resultados.
+ No conjunto de resultados, a ordem das colunas é igual à ordem de sua especificação pela expressão de seleção. Se uma expressão de seleção retornar várias colunas, a ordem das colunas segue a ordem usada na relação de origem ou na expressão do tipo de linha.
+ Quando os aliases de coluna são especificados, os aliases substituem os nomes de campos de coluna ou linha pré-existentes. Se a expressão de seleção não tiver nomes de coluna, nomes de colunas anônimas com índice zero (`_col0`,`_col1` e `_col2, ...`) serão exibidos na saída.
+  `ALL` é o padrão. Usar `ALL` será tratado da mesma maneira como se tivesse sido omitido. Todas as linhas de todas as colunas são selecionadas, e as duplicações são mantidas.
+ Use `DISTINCT` para retornar somente valores distintos quando uma coluna contém valores duplicados.

**FROM from\$1item [, ...]**  
Indica a entrada para a consulta, em que `from_item` pode ser uma exibição, um construto de união ou uma subconsulta conforme descrito abaixo.  
O `from_item` pode ser:  
+  `table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]` 

  Em que `table_name` é o nome da tabela de destino da qual selecionar linhas, `alias` é o nome para indicar a saída da instrução `SELECT` e `column_alias` define as colunas para o `alias` especificado.
 **-OU-**   
+  `join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]` 

  Em que `join_type` é um dos:
  +  `[ INNER ] JOIN` 
  +  `LEFT [ OUTER ] JOIN` 
  +  `RIGHT [ OUTER ] JOIN` 
  +  `FULL [ OUTER ] JOIN` 
  +  `CROSS JOIN` 
  +  `ON join_condition | USING (join_column [, ...])` Em que usar `join_condition` permite especificar nomes de coluna para chaves de união em várias tabelas e usar `join_column` exige que `join_column` exista em ambas as tabelas.

**[ WHERE condição ]**  
Filtra os resultados de acordo com a `condition` que você especificar, em que `condition` costuma ter a sintaxe abaixo.  

```
column_name operator value [[[AND | OR] column_name operator value] ...]
```
O *operador* pode ser um dos comparadores `=`, `>`, `<`, `>=`, `<=`, `<>`, `!=`.   
As expressões de subconsulta a seguir também podem ser usadas na cláusula `WHERE`.  
+ `[NOT] BETWEEN integer_A AND integer_B`: especifica um intervalo entre dois inteiros, como no exemplo a seguir. Se o tipo de dados da coluna for `varchar`, a coluna deverá ser convertida para inteiro primeiro.

  ```
  SELECT DISTINCT processid FROM "webdata"."impressions"
  WHERE cast(processid as int) BETWEEN 1500 and 1800
  ORDER BY processid
  ```
+ `[NOT] LIKE value`: pesquisa o padrão especificado. Use o sinal de porcentagem (`%`) como caractere curinga, conforme mostrado no exemplo a seguir.

  ```
  SELECT * FROM "webdata"."impressions"
  WHERE referrer LIKE '%.org'
  ```
+ `[NOT] IN (value[, value[, ...])`: especifica uma lista de valores possíveis para uma coluna, como no exemplo a seguir.

  ```
  SELECT * FROM "webdata"."impressions"
  WHERE referrer IN ('example.com','example.net','example.org')
  ```

**[ GROUP BY [ ALL \$1 DISTINCT ] grouping\$1expressions [, ...] ]**  
Divide a saída da instrução `SELECT` em linhas com valores correspondentes.  
 `ALL` e `DISTINCT` determinam se conjuntos de agrupamentos duplicados produzem linhas de saída distintas. Se omitido, `ALL` será pressuposto.   
`grouping_expressions` permite realizar operações de agrupamento complexas. Você pode usar operações de agrupamento complexas para realizar uma análise que exija agregação de vários conjuntos de colunas em uma única consulta.  
O elemento `grouping_expressions` pode ser qualquer função, como `SUM`, `AVG` ou `COUNT`, executada nas colunas de entrada.   
As expressões `GROUP BY` podem agrupar a saída por nomes de coluna de entrada não exibidos na saída da instrução `SELECT`.   
Todas as expressões de saída devem ser funções agregadas ou colunas presentes na cláusula `GROUP BY`.   
Você pode usar uma única consulta para realizar uma análise que exija a agregação de vários conjuntos de colunas.   
O Athena aceita agregações complexas que usam `GROUPING SETS`, `CUBE` e `ROLLUP`. `GROUP BY GROUPING SETS` especifica várias listas de colunas para agrupamento. `GROUP BY CUBE` gera todos os conjuntos de agrupamento possíveis para um determinado conjunto de colunas. `GROUP BY ROLLUP` gera todos os subtotais possíveis para um determinado conjunto de colunas. As operações de agrupamento complexas não permitem agrupamento de expressões compostas de colunas de entrada. Somente nomes de coluna são permitidos.   
Você normalmente pode usar `UNION ALL` para obter os mesmos resultados dessas operações `GROUP BY`, mas consultas que usam `GROUP BY` têm a vantagem de ler os dados uma vez, e `UNION ALL` lê os dados subjacentes três vezes e podem produzir resultados inconsistentes quando a fonte de dados está sujeita a alterações. 

**[ HAVING condition ]**  
Usada com funções de agregação e a cláusula `GROUP BY`. Controla quais grupos são selecionados, eliminando grupos que não atendam a `condition`. A filtragem ocorrerá depois de grupos, e as agregações serão calculadas.

**[ \$1 UNION \$1 INTERSECT \$1 EXCEPT \$1 [ ALL \$1 DISTINCT ] union\$1query] ]**  
`UNION`, `INTERSECT` e `EXCEPT` combinam os resultados de mais de uma instrução `SELECT` em uma única consulta. `ALL` ou `DISTINCT` controla a exclusividade das linhas incluídas no conjunto final de resultados.   
`UNION` combina as linhas resultantes da primeira consulta com as linhas resultantes da segunda consulta. Para eliminar duplicatas, `UNION` cria uma tabela de hash, que consome memória. Para melhor performance, considere usar `UNION ALL` se a consulta não exigir eliminação de duplicatas. Várias cláusulas `UNION` são processadas da esquerda para a direita, a menos que você use parênteses para definir explicitamente a ordem de processamento.  
`INTERSECT` retorna apenas as linhas que estão presentes nos resultados da primeira e da segunda consultas.  
`EXCEPT` retorna as linhas dos resultados da primeira consulta, excluindo as linhas encontradas pela segunda consulta.  
`ALL` faz com que todas as linhas sejam incluídas, mesmo se elas forem idênticas.  
`DISTINCT` faz com que apenas as linhas exclusivas sejam incluídas no conjunto de resultados combinados.

**[ ORDER BY expression [ ASC \$1 DESC ] [ NULLS FIRST \$1 NULLS LAST] [, ...] ]**  
Classifica um conjunto de resultados por um ou mais de saída `expression`.   
Quando a cláusula contém várias expressões, o conjunto de resultados é classificado de acordo com o primeiro `expression`. Em seguida, o segundo `expression` é aplicado a linhas que tenham valores correspondentes da primeira expressão, e assim por diante.   
Cada `expression` pode especificar colunas de saída de `SELECT` ou um número ordinal para uma coluna de saída por posição, a partir de um.  
`ORDER BY` é avaliada como a última etapa após qualquer cláusula `GROUP BY` ou `HAVING`. `ASC` e `DESC` determinam se os resultados são classificados em ordem crescente ou decrescente. A ordem de classificação padrão é a ordem decrescente (`ASC`). A ordem nula padrão é `NULLS LAST`, independentemente da ordem de classificação crescente ou decrescente.

**[ Contagem de DESLOCAMENTO [ LINHA \$1 LINHAS ] ]**  
Use a cláusula `OFFSET` para descartar várias linhas iniciais do conjunto de resultados. Se a cláusula `ORDER BY` estiver presente, a cláusula `OFFSET` será avaliada em um conjunto de resultados classificados e o conjunto permanecerá classificado após as linhas ignoradas serem descartadas. Se a consulta não tiver cláusula `ORDER BY`, a definição de quais linhas serão descartadas é arbitrária. Se a contagem especificada por `OFFSET` for igual ou exceder o tamanho do conjunto de resultados, o resultado final será vazio. 

**LIMIT [ count \$1 ALL ]**  
Restringe o número de linhas no conjunto de resultados a `count`. `LIMIT ALL` é igual à omissão da cláusula `LIMIT`. Se a consulta não tiver a cláusula `ORDER BY`, os resultados serão arbitrários.

**TABLESAMPLE [ BERNOULLI \$1 SYSTEM ] (porcentagem)**  
Operador operacional para selecionar linhas de uma tabela com base em um método de amostragem.  
 `BERNOULLI` seleciona cada linha para estar no exemplo da tabela com uma probabilidade de `percentage`. Todos os blocos físicos da tabela são examinados, e determinadas linhas são ignoradas com base em uma comparação entre o `percentage` de exemplo e um valor aleatório calculado no runtime   
Com `SYSTEM`, a tabela é dividida em segmentos lógicos de dados, e a tabela mostra um exemplo dessa granularidade.   
Todas as linhas de um determinado segmento são selecionadas, ou o segmento é ignorado com base em uma comparação entre o `percentage` de exemplo e um valor aleatório calculado no runtime. A amostragem de `SYSTEM` depende do conector. Esse método não garante probabilidades de amostragem independentes.

**[ UNNEST (array\$1or\$1map) [WITH ORDINALITY] ]**  
Expande uma matriz ou um mapa para uma relação. As matrizes são expandidas para uma única coluna. Os mapas são expandidos para duas colunas (*chave*, *valor*).   
Você pode usar `UNNEST` com vários argumentos, que são expandidos para várias colunas com o máximo de linhas do maior argumento de cardinalidade.   
Outras colunas são preenchidas com nulos.   
A cláusula `WITH ORDINALITY` adiciona uma coluna de ordinalidade ao final.  
 `UNNEST` costuma ser usado com um `JOIN` e pode fazer referência a colunas de relações no lado esquerdo do `JOIN`.

## Obter os locais de arquivos dos dados de origem no Amazon S3
<a name="select-path"></a>

Para ver o local do arquivo do Amazon S3 referente aos dados em uma linha da tabela, você pode usar `"$path"` em uma consulta `SELECT`, como no seguinte exemplo:

```
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
```

Essa consulta retorna um resultado semelhante a este:

```
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
```

Para retornar uma lista classificada e exclusiva dos caminhos de nome de arquivo do S3 para os dados em uma tabela, você pode usar `SELECT DISTINCT` e `ORDER BY`, como no exemplo a seguir.

```
SELECT DISTINCT "$path" AS data_source_file
FROM sampledb.elb_logs
ORDER By data_source_file ASC
```

Para retornar somente os nomes de arquivo sem o caminho, você pode especificar `"$path"` como um parâmetro para a função `regexp_extract`, conforme mostrado no exemplo a seguir.

```
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file
FROM sampledb.elb_logs
ORDER By data_source_file ASC
```

Para retornar os dados de um arquivo específico, especifique o arquivo na cláusula `WHERE`, como no exemplo a seguir.

```
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
```

Para obter mais informações e exemplos, consulte o artigo da Central de Conhecimento [Como posso ver o arquivo de origem do Amazon S3 para uma linha em uma tabela do Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/find-s3-source-file-athena-table-row/)

**nota**  
No Athena, as colunas ocultas de metadados do Hive ou do Iceberg `$bucket`, `$file_modified_time`, `$file_size` e `$partition` não são compatíveis para visualizações.

## Caractere de escape para aspas simples
<a name="select-escaping"></a>

 Para inserir caracteres de escape em aspas simples, preceda-as com outras aspas simples, conforme o exemplo a seguir. Não confunda isso com aspas duplas. 

```
Select 'O''Reilly'
```

**Resultados**  
`O'Reilly`

## Recursos adicionais
<a name="select-additional-resources"></a>

Para obter mais informações sobre como usaras instruções `SELECT` no Athena, consulte os recursos abaixo.


| Para obter informações sobre este tópico | consulte esta referência | 
| --- | --- | 
| Executar consultas no Athena | [Executar consultas SQL no Amazon Athena](querying-athena-tables.md) | 
| Usar SELECT para criar uma tabela | [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md) | 
| Inserir dados de uma consulta SELECT em outra tabela | [INSERT INTO](insert-into.md) | 
| Usar funções integradas nas instruções SELECT | [Funções no Amazon Athena](functions.md) | 
| Usar funções definidas pelo usuário nas instruções SELECT | [Consultar com funções definidas pelo usuário](querying-udf.md) | 
| Consultar metadados do catálogo de dados | [Consultar o AWS Glue Data Catalog](querying-glue-catalog.md) | 

# INSERT INTO
<a name="insert-into"></a>

Insere novas linhas em uma tabela de destino com base em uma instrução de consulta `SELECT` executada em uma tabela de origem ou com base em um conjunto de `VALUES` fornecidos como parte da instrução. Quando a tabela de origem é baseada em dados subjacentes em um formato, como CSV ou JSON, e a tabela de destino é baseada em outro formato, como Parquet ou ORC, você pode usar as consultas `INSERT INTO` para transformar os dados selecionados no formato da tabela de destino. 

## Considerações e limitações
<a name="insert-into-limitations"></a>

Considere o seguinte ao usar as consultas `INSERT` com o Athena.
+ Ao executar uma consulta `INSERT` em uma tabela com dados subjacentes criptografados no Amazon S3, os arquivos de saída que a consulta `INSERT` grava não são criptografados por padrão. Recomendamos que você criptografe os resultados da consulta `INSERT` se estiver inserindo em tabelas com dados criptografados. 

  Para obter mais informações sobre como criptografar resultados da consulta usando o console, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md). Para habilitar a criptografia usando a AWS CLI ou a API do Athena, use as propriedades `EncryptionConfiguration` da ação [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) para especificar as opções de criptografia do Amazon S3 de acordo com os seus requisitos.
+ Para instruções `INSERT INTO`, a configuração do proprietário do bucket esperado não se aplica ao local da tabela de destino no Amazon S3. A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Para obter mais informações, consulte [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).
+ Para obter instruções `INSERT INTO` em conformidade com ACID, consulte a seção `INSERT INTO` em [Atualizar dados nas tabelas do Iceberg](querying-iceberg-updating-iceberg-table-data.md).

### Formatos compatíveis e SerDes
<a name="insert-into-supported-formats"></a>

É possível executar uma consulta `INSERT` em tabelas criadas de dados com os seguintes formatos e SerDes.


| Formato de dados | SerDe | 
| --- | --- | 
|  Avro  |  org.apache.hadoop.hive.serde2.avro.AvroSerDe  | 
| Ion | com.amazon.ionhiveserde.IonHiveSerDe | 
|  JSON  |  org.apache.hive.hcatalog.data.JsonSerDe  | 
|  ORC  |  org.apache.hadoop.hive.ql.io.orc.OrcSerde  | 
|  Parquet  |  org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe  | 
|  Arquivo de texto  |  org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe  Há suporte a arquivos TSV e delimitados personalizados.   | 
| CSV | org.apache.hadoop.hive.serde2.OpenCSVSerde Há suporte a operações de escrita somente em tipos string. No Athena, não é possível escrever em tabelas que contêm tipos não string no esquema do Glue. Para obter mais informações, consulte [CSV SerDe](csv-serde.md#csv-serde-opencsvserde-considerations-non-string).  | 

### Tabelas em bucket sem suporte
<a name="insert-into-bucketed-tables-not-supported"></a>

`INSERT INTO` não é compatível com tabelas em bucket. Para obter mais informações, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md).

### Consultas federadas sem suporte
<a name="insert-into-federated-queries-not-supported"></a>

`INSERT INTO` não é suportado para consultas federadas. Tentar fazer isso pode gerar a mensagem de erro: This operation is currently not supported for external catalogs (Atualmente, esta operação não é suportada para catálogos externos). Para obter informações sobre consultas federadas, consulte [Usar a consulta federada do Amazon Athena](federated-queries.md).

### Particionamento
<a name="insert-into-limitations-partitioning"></a>

Considere os pontos desta seção ao usar o particionamento com as consultas `INSERT INTO` ou `CREATE TABLE AS SELECT`.

#### Limites
<a name="insert-into-partition-limits"></a>

A instrução `INSERT INTO` comporta a gravação de no máximo 100 combinações de partições na tabela de destino. Se você executar a cláusula `SELECT` em uma tabela com mais de 100 partições, a consulta falhará a menos que a consulta `SELECT` seja limitada a 100 partições ou menos.

Para obter informações sobre como contornar essa limitação, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

#### Ordem das colunas
<a name="insert-into-partition-detection"></a>

As instruções `INSERT INTO` ou `CREATE TABLE AS SELECT` esperam que a coluna particionada seja a última na lista de colunas projetadas em uma instrução `SELECT`. 

Se a tabela de origem não for particionada ou for particionada em colunas diferentes em comparação com a tabela de destino, as consultas como `INSERT INTO destination_table SELECT * FROM source_table` vão considerar os valores na última coluna da tabela de origem como os valores de uma coluna de partição na tabela de destino. Tenha isso em mente ao tentar criar uma tabela particionada com base em uma tabela não particionada.

#### Recursos
<a name="insert-into-partition-resources"></a>

Para obter mais informações sobre como usar `INSERT INTO` com particionamento, consulte os recursos abaixo.
+ Para inserir dados particionados em uma tabela particionada, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).
+ Para inserir dados não particionados em uma tabela particionada, consulte [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md). 

### Arquivos gravados no Amazon S3
<a name="insert-into-files-written-to-s3"></a>

O Athena grava arquivos nos locais dos dados de origem no Amazon S3 como resultado do comando `INSERT`. Cada operação `INSERT` cria um novo arquivo, em vez de anexar a um arquivo existente. Os locais de arquivos dependem da estrutura da tabela e da consulta `SELECT`, se houver. O Athena gera um arquivo manifesto de dados para cada consulta `INSERT`. O manifesto rastreia os arquivos que a consulta gravou. Ele é salvo no local dos resultados das consultas do Athena no Amazon S3. Para obter mais informações, consulte [Identificar arquivos de saída de consultas](querying-finding-output-files.md#querying-identifying-output-files).

### Evitar atualizações altamente transacionais
<a name="insert-into-transactional-caveat"></a>

Quando você usa `INSERT INTO` para adicionar linhas a uma tabela no Amazon S3, o Athena não reescreve nem modifica arquivos existentes. Em vez disso, ele grava as linhas como um ou mais novos arquivos. Como tabelas com [muitos arquivos pequenos resultam em desempenho inferior de consultas](performance-tuning-data-optimization-techniques.md#performance-tuning-avoid-having-too-many-files), e operações de gravação e leitura, como `PutObject` e `GetObject`, resultam em custos mais altos no Amazon S3, considere as seguintes opções ao usar `INSERT INTO`:
+ Execute operações `INSERT INTO` com menor frequência em lotes maiores de linhas.
+ Para grandes volumes de ingestão de dados, considere usar um serviço como o [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html).
+ Evite completamente o uso de `INSERT INTO`. Em vez disso, acumule linhas em arquivos maiores e faça o upload deles diretamente para o Amazon S3, onde poderão ser consultados pelo Athena.

### Localizar arquivos órfãos
<a name="insert-into-files-partial-data"></a>

Se uma instrução `INSERT INTO` ou `CTAS` falhar, os dados órfãos poderão ser deixados no local de dados e ser lidos em consultas subsequentes. Para localizar arquivos órfãos para inspeção ou exclusão, é possível usar o arquivo do manifesto de dados que o Athena oferece para rastrear a lista de arquivos a serem gravados. Para obter mais informações, consulte [Identificar arquivos de saída de consultas](querying-finding-output-files.md#querying-identifying-output-files) e [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation).

## INSERT INTO...SELECT
<a name="insert-into-select"></a>

Especifica a consulta a ser executada em uma tabela, `source_table`, que determina as linhas a serem inseridas em uma segunda tabela, `destination_table`. Se a consulta `SELECT` especificar colunas na `source_table`, as colunas deverão corresponder precisamente àquelas na `destination_table`.

Para obter mais informações sobre consultas `SELECT`, consulte [SELECT](select.md).

### Resumo
<a name="insert-into-select-synopsis"></a>

```
INSERT INTO destination_table 
SELECT select_query 
FROM source_table_or_view
```

### Exemplos
<a name="insert-into-select-examples"></a>

Selecione todas as linhas na tabela `vancouver_pageviews` e insira-as na tabela `canada_pageviews`:

```
INSERT INTO canada_pageviews 
SELECT * 
FROM vancouver_pageviews;
```

Selecione apenas as linhas na tabela `vancouver_pageviews` em que a coluna `date` tenha um valor entre `2019-07-01` e `2019-07-31`, e insira-as em `canada_july_pageviews`:

```
INSERT INTO canada_july_pageviews
SELECT *
FROM vancouver_pageviews
WHERE date
    BETWEEN date '2019-07-01'
        AND '2019-07-31';
```

Selecione os valores nas colunas `city` e `state` na tabela `cities_world` somente dessas linhas com um valor `usa` na coluna `country` e insira-os nas colunas `city` e `state` na tabela `cities_usa`:

```
INSERT INTO cities_usa (city,state)
SELECT city,state
FROM cities_world
    WHERE country='usa'
```

## INSERT INTO...VALUES
<a name="insert-into-values"></a>

Insere linhas em uma tabela existente especificando colunas e valores. As colunas especificadas e os tipos de dados associados devem corresponder precisamente às colunas e aos tipos de dados na tabela de destino.

**Importante**  
Não recomendamos inserir linhas com `VALUES` porque o Athena gera arquivos para cada operação `INSERT`. Isso pode fazer com que muitos arquivos pequenos sejam criados e degradem a performance de consulta da tabela. Para identificar arquivos que uma consulta `INSERT` cria, examine o arquivo manifesto de dados. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md).

### Resumo
<a name="insert-into-values-synopsis"></a>

```
INSERT INTO destination_table [(col1,col2,...)] 
VALUES (col1value,col2value,...)[,
       (col1value,col2value,...)][,
       ...]
```

### Exemplos
<a name="insert-into-values-examples"></a>

Nos exemplos a seguir, a tabela de cidades tem três colunas: `id`, `city`, `state`, `state_motto`. A coluna `id` é do tipo `INT`, e todas as outras colunas são do tipo `VARCHAR`.

Insira uma única linha na tabela `cities`, com todos os valores da coluna especificados:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')
```

Insira duas linhas na tabela `cities`:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'),
       (3,'Boise','ID','Esto perpetua')
```

# VALUES
<a name="values-statement"></a>

Cria uma tabela em linha de literais. A tabela pode ser anônima ou você pode usar a cláusula `AS` para especificar um nome de tabela, nomes de colunas ou ambos.

## Resumo
<a name="values-statement-synopsis"></a>

```
VALUES row [, ...]
```

## Parâmetros
<a name="values-statement-parameters"></a>

**linha**  
O parâmetro `row` pode ser uma única expressão ou `( column_expression [, ...] )`.

## Exemplos
<a name="values-statement-examples"></a>

Retornar uma tabela com uma coluna e três linhas:

```
VALUES 1, 2, 3
```

Retornar uma tabela com duas colunas e três linhas:

```
VALUES
    (1, 'a'),
    (2, 'b'),
    (3, 'c')
```

Retornar uma tabela com as colunas `id` e `name`:

```
SELECT * FROM (
    VALUES
        (1, 'a'),
        (2, 'b'),
        (3, 'c')
) AS t (id, name)
```

Criar uma tabela denominada `customers` com as colunas `id` e `name`:

```
CREATE TABLE customers AS
SELECT * FROM (
    VALUES
        (1, 'a'),
        (2, 'b'),
        (3, 'c')
) AS t (id, name)
```

## Consulte também
<a name="values-statement-see-also"></a>

[INSERT INTO...VALUES](insert-into.md#insert-into-values)

# DELETE
<a name="delete-statement"></a>

Exclui linhas em uma tabela do Apache Iceberg. `DELETE` é transacional e é compatível somente com tabelas do Apache Iceberg.

## Resumo
<a name="delete-statement-synopsis"></a>

Para excluir as linhas de uma tabela do Iceberg, use a sintaxe a seguir.

```
DELETE FROM [db_name.]table_name [WHERE predicate]
```

Para obter mais informações e exemplos, consulte a seção `DELETE` da [Atualizar dados nas tabelas do Iceberg](querying-iceberg-updating-iceberg-table-data.md).

# UPDATE
<a name="update-statement"></a>

Atualiza linhas em uma tabela do Apache Iceberg. `UPDATE` é transacional e é compatível somente com tabelas do Apache Iceberg. A instrução funciona somente em linhas existentes e não pode ser usada para inserir ou acrescentar uma linha.

## Resumo
<a name="update-statement-synopsis"></a>

Para atualizar as linhas em uma tabela do Iceberg, use a sintaxe a seguir.

```
UPDATE [db_name.]table_name SET xx=yy[,...] [WHERE predicate]
```

Para obter mais informações e exemplos, consulte a seção `UPDATE` da [Atualizar dados nas tabelas do Iceberg](querying-iceberg-updating-iceberg-table-data.md).

# MERGE INTO
<a name="merge-into-statement"></a>

Atualiza, exclui ou insere linhas de forma condicional em uma tabela do Apache Iceberg. Uma única instrução pode combinar ações de atualização, exclusão e inserção.

**nota**  
`MERGE INTO` é transacional e é compatível somente com tabelas do Apache Iceberg na versão 3 do mecanismo do Athena.

## Resumo
<a name="merge-into-statement-synopsis"></a>

Para atualizar, excluir ou inserir linhas de forma condicional em uma tabela do Iceberg, use a sintaxe a seguir.

```
MERGE INTO target_table [ [ AS ]  target_alias ]
USING { source_table | query } [ [ AS ] source_alias ]
ON search_condition
when_clause [...]
```

A *when\$1clause* corresponde a uma das seguintes:

```
WHEN MATCHED [ AND condition ]
    THEN DELETE
```

```
WHEN MATCHED [ AND condition ]
    THEN UPDATE SET ( column = expression [, ...] )
```

```
WHEN NOT MATCHED [ AND condition ]
    THEN INSERT (column_name[, column_name ...]) VALUES (expression, ...)
```

`MERGE` é compatível com um número arbitrário de cláusulas `WHEN` com diferentes condições `MATCHED`. As cláusulas de condição executam as operações `DELETE`, `UPDATE` ou `INSERT` na primeira cláusula `WHEN` selecionada pelo estado `MATCHED` e pela condição de correspondência.

Para cada linha de origem, as cláusulas `WHEN` são processadas por ordem. Somente a primeira cláusula `WHEN` correspondente é executada. As cláusulas subsequentes são ignoradas. Um erro de usuário é gerado quando uma única linha da tabela de destino corresponde a mais de uma linha de origem.

Se uma linha de origem não corresponder a nenhuma cláusula `WHEN` e não houver uma cláusula `WHEN NOT MATCHED`, a linha de origem será ignorada.

Nas cláusulas `WHEN` que têm operações `UPDATE`, as expressões de valor da coluna podem se referir a qualquer campo de destino ou de origem. No caso de `NOT MATCHED`, as expressões `INSERT` podem se referir a qualquer campo de origem.

**Exemplo**  
O exemplo a seguir mescla linhas da segunda tabela com a primeira tabela, se as linhas não existirem na primeira tabela. As colunas listadas na cláusula `VALUES` devem ser prefixadas pelo alias da tabela de origem. As colunas de destino listadas na cláusula `INSERT` *não* devem ter esse prefixo.

```
MERGE INTO iceberg_table_sample as ice1
USING iceberg2_table_sample as ice2
ON ice1.col1 = ice2.col1
WHEN NOT MATCHED 
THEN INSERT (col1)
      VALUES (ice2.col1)
```

Para obter mais exemplos de `MERGE INTO`, consulte [Atualizar dados nas tabelas do Iceberg](querying-iceberg-updating-iceberg-table-data.md).

# OPTIMIZE
<a name="optimize-statement"></a>

Otimize as linhas em uma tabela do Apache Iceberg ao gravar novamente arquivos de dados em um layout mais otimizado com base em no tamanho e no número de arquivos excluídos associados.

**nota**  
`OPTIMIZE` é transacional e é compatível somente para tabelas do Apache Iceberg.

## Sintaxe
<a name="optimize-statement-syntax"></a>

O resumo da sintaxe a seguir mostra como otimizar o layout de dados para uma tabela Iceberg.

```
OPTIMIZE [db_name.]table_name REWRITE DATA USING BIN_PACK
  [WHERE predicate]
```

**nota**  
Somente colunas de partição são permitidas no *predicado* da cláusula `WHERE`. Especificar uma coluna sem partição fará com que a consulta falhe. 

A ação de compactação é cobrada pela quantidade de dados verificados durante o processo de regravação. A ação `REWRITE DATA` usa predicados para selecionar arquivos que contenham linhas iguais. Se alguma linha no arquivo corresponder ao predicado, o arquivo será selecionado para otimização. Assim, para controlar o número de arquivos afetados pela operação de compactação, você pode especificar uma cláusula `WHERE`.

## Configurar propriedades de compactação
<a name="optimize-statement-configuring-compaction-properties"></a>

Para controlar o tamanho dos arquivos a serem selecionados para compactação e o tamanho do arquivo resultante após a compactação, você pode usar parâmetros de propriedade de tabela. Você pode usar o comando [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) para configurar as [propriedades de tabela](querying-iceberg-creating-tables.md#querying-iceberg-table-properties) a seguir.

## Recursos adicionais
<a name="optimize-statement-additional-resources"></a>

[Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md)

# VACUUM
<a name="vacuum-statement"></a>

A instrução `VACUUM` realiza a manutenção da tabela para as tabelas do Apache Iceberg ao realizar a [expiração de snapshots](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots) e a [remoção do arquivo órfão](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files).

**nota**  
`VACUUM` é transacional e é compatível somente com tabelas do Apache Iceberg na versão 3 do mecanismo do Athena.

A instrução `VACUUM` otimiza as tabelas do Iceberg ao reduzir o consumo de armazenamento. Para obter mais informações sobre o uso de `VACUUM`, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md). Como a instrução `VACUUM` faz chamadas de API para o Amazon S3, as cobranças se aplicam às solicitações associadas ao Amazon S3.

**Atenção**  
Se você executar uma operação de expiração de snapshot, não poderá mais fazer viagens no tempo para snapshots expirados.

## Resumo
<a name="vacuum-statement-synopsis"></a>

Para remover os arquivos de dados que não são mais necessários para uma tabela do Iceberg, use a sintaxe a seguir.

```
VACUUM [database_name.]target_table
```
+ O `VACUUM` espera que os dados do Iceberg estejam em uma pasta do Amazon S3 em vez de em um bucket do Amazon S3. Por exemplo, se seus dados do Iceberg estiverem em `s3://amzn-s3-demo-bucket`/ em vez de `s3://amzn-s3-demo-bucket/myicebergfolder/`, a instrução `VACUUM` falhará com a mensagem de erro GENERIC\$1INTERNAL\$1ERROR: Path missing in file system location: `s3://amzn-s3-demo-bucket`.
+ Para que o `VACUUM` possa excluir arquivos de dados, sua função de execução de consulta deve ter as permissões `s3:DeleteObject` no bucket em que suas tabelas, metadados, snapshots e arquivos de dados do Iceberg estão localizados. Se a permissão não estiver presente, a consulta de `VACUUM` será bem-sucedida, mas os arquivos não serão excluídos. 
+ Para executar `VACUUM` em uma tabela com um nome que comece com um sublinhado (por exemplo, `_mytable`), coloque o nome da tabela entre acentos maiúsculos, como no exemplo a seguir. Se você prefixar o nome da tabela com um nome de banco de dados, não coloque o nome do banco de dados entre aspas. Observe que aspas duplas não funcionarão no lugar dos acentos. 

  Esse comportamento é específico do `VACUUM`. As instruções `CREATE` e `INSERT INTO` não exigem acentos graves para nomes de tabelas que começam com sublinhados.

  ```
  VACUUM `_mytable`
  VACUUM my_database.`_mytable`
  ```

## Operações realizadas
<a name="vacuum-statement-operations-performed"></a>

`VACUUM` realiza as seguintes operações:
+ Remove os snapshots que são mais antigos do que o tempo especificado pela propriedade de tabela `vacuum_max_snapshot_age_seconds`. Por padrão, essa propriedade é definida para 432 mil segundos (cinco dias).
+ Remove os snapshots que não estão dentro do período de retenção e que excedem o número especificado pela propriedade de tabela `vacuum_min_snapshots_to_keep`. O padrão é um.

  É possível especificar essas propriedades de tabela em sua instrução `CREATE TABLE`. Após a criação da tabela, é possível usar a instrução [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) para atualizá-la. 
+ Remove todos os metadados e os arquivos de dados inacessíveis como resultado da remoção do snapshot. Você pode configurar o número de arquivos de metadados antigos a serem retidos definindo a propriedade da tabela `vacuum_max_metadata_files_to_keep`. O valor padrão é 100.
+ Remove arquivos órfãos que são mais antigos do que o tempo especificado na propriedade de tabela `vacuum_max_snapshot_age_seconds`. Arquivos órfãos corresponde a arquivos no diretório de dados da tabela que não fazem parte do estado da tabela.

Para obter mais informações sobre como criar e gerenciar tabelas do Apache Iceberg no Athena, consulte [Criar tabelas do Iceberg](querying-iceberg-creating-tables.md) e [Gerenciar tabelas do Iceberg](querying-iceberg-managing-tables.md).

# Usar EXPLAIN e EXPLAIN ANALYZE no Athena
<a name="athena-explain-statement"></a>

A instrução `EXPLAIN` mostra o plano de execução lógico ou distribuído de uma instrução SQL especificada ou valida a instrução SQL. Você pode gerar os resultados no formato de texto ou em um formato de dados para renderização em gráfico.

**nota**  
É possível visualizar representações gráficas de planos lógicos e distribuídos para suas consultas no console do Athena sem usar a sintaxe `EXPLAIN`. Para obter mais informações, consulte [Visualização de planos de execução para consultas SQL](query-plans.md).

O `EXPLAIN ANALYZE` mostra o plano de execução distribuído de uma instrução SQL especificada e o custo computacional de cada operação em uma consulta SQL. Você pode gerar os resultados no formato de texto ou JSON. 

## Considerações e limitações
<a name="athena-explain-statement-considerations-and-limitations"></a>

As instruções `EXPLAIN` e `EXPLAIN ANALYZE` no Athena têm as limitações a seguir.
+ Como as consultas `EXPLAIN` não verificam os dados, o Athena não cobra por elas. Entretanto, como as consultas `EXPLAIN` fazem chamadas ao AWS Glue para recuperar metadados de tabela, poderá haver cobranças do Glue se as chamadas ultrapassarem o [limite do nível gratuito do Glue](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Categories=categories%23analytics&all-free-tier.q=glue&all-free-tier.q_operator=AND).
+ Como consultas `EXPLAIN ANALYZE` são executadas, elas verificam os dados, e o Athena cobra pela quantidade de dados verificados.
+ As informações de filtragem de linha ou de célula definidas no Lake Formation e as informações de estatísticas de consulta não são mostradas na saída de `EXPLAIN` e de `EXPLAIN ANALYZE`.

## Sintaxe de EXPLAIN
<a name="athena-explain-statement-syntax-athena-engine-version-2"></a>

```
EXPLAIN [ ( option [, ...]) ] statement
```

*opção* pode ser uma das seguintes:

```
FORMAT { TEXT | GRAPHVIZ | JSON }
TYPE { LOGICAL | DISTRIBUTED | VALIDATE | IO }
```

Se a opção `FORMAT` não for especificada, o padrão de saída será o formato `TEXT`. O tipo`IO` fornece informações sobre as tabelas e os esquemas lidos pela consulta. 

## Sintaxe de EXPLAIN ANALYZE
<a name="athena-explain-analyze-statement"></a>

Além da saída incluída em `EXPLAIN`, a saída de `EXPLAIN ANALYZE` também inclui estatísticas de runtime para a consulta especificada, como o uso da CPU, o número de linhas da entrada e o número de linhas da saída.

```
EXPLAIN ANALYZE [ ( option [, ...]) ] statement
```

*opção* pode ser uma das seguintes:

```
FORMAT { TEXT | JSON }
```

Se a opção `FORMAT` não for especificada, o padrão de saída será o formato `TEXT`. Porque todas as consultas para `EXPLAIN ANALYZE` são `DISTRIBUTED`, a opção `TYPE` não está disponível para `EXPLAIN ANALYZE`. 

A *instrução* pode ser uma das seguintes:

```
SELECT
CREATE TABLE AS SELECT
INSERT
UNLOAD
```

## Exemplos de EXPLAIN
<a name="athena-explain-statement-examples"></a>

Os exemplos a seguir representam a progressão de `EXPLAIN`, do mais simples ao mais complexo.

### Exemplo 1: uso da a instrução EXPLAIN para mostrar um plano de consulta no formato de texto
<a name="athena-explain-statement-example-text-query-plan"></a>

No exemplo a seguir, `EXPLAIN` mostra o plano de execução de uma consulta `SELECT` nos logs do Elastic Load Balancing. O formato é o padrão para saída de texto.

```
EXPLAIN 
SELECT 
   request_timestamp, 
   elb_name, 
   request_ip 
FROM sampledb.elb_logs;
```

#### Resultados
<a name="athena-explain-statement-example-text-query-plan-results"></a>

```
- Output[request_timestamp, elb_name, request_ip] => [[request_timestamp, elb_name, request_ip]]
    - RemoteExchange[GATHER] => [[request_timestamp, elb_name, request_ip]]
        - TableScan[awsdatacatalog:HiveTableHandle{schemaName=sampledb, tableName=elb_logs, 
analyzePartitionValues=Optional.empty}] => [[request_timestamp, elb_name, request_ip]]
                LAYOUT: sampledb.elb_logs
                request_ip := request_ip:string:2:REGULAR
                request_timestamp := request_timestamp:string:0:REGULAR
                elb_name := elb_name:string:1:REGULAR
```

### Exemplo 2: uso de EXPLAIN para representar um plano de consulta graficamente
<a name="athena-explain-statement-example-graph-a-query-plan"></a>

É possível utilizar o console do Athena para representar um plano de consulta graficamente para você. Insira uma instrução `SELECT` como a seguinte no editor de consultas do Athena e escolha **EXPLAIN**.

```
SELECT 
      c.c_custkey,
      o.o_orderkey,
      o.o_orderstatus
   FROM tpch100.customer c 
   JOIN tpch100.orders o 
       ON c.c_custkey = o.o_custkey
```

A página **Explain** (Explicar) do editor de consultas do Athena é aberta e mostra um plano distribuído e um plano lógico para a consulta. O gráfico a seguir mostra o plano lógico do exemplo.

![\[Gráfico do plano de consulta renderizado pelo editor de consulta do Athena.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/athena-explain-statement-tpch.png)


**Importante**  
Alguns filtros de partição podem não estar visíveis no gráfico de árvore do operador aninhado, mesmo que o Athena os aplique à sua consulta. Para verificar o efeito desses filtros, execute `EXPLAIN` ou `EXPLAIN ANALYZE` na sua consulta e visualize os resultados.

Para obter mais informações sobre como usar os recursos de gráfico do plano de consulta no console do Athena, consulte [Visualização de planos de execução para consultas SQL](query-plans.md).

### Exemplo 3: uso da instrução EXPLAIN para verificar redução da partição
<a name="athena-explain-statement-example-verify-partition-pruning"></a>

Quando você usa um predicado de filtragem em uma chave particionada para consultar uma tabela particionada, o mecanismo de consulta aplica o predicado à chave particionada para reduzir a quantidade de dados lidos.

O exemplo a seguir usa uma consulta `EXPLAIN` para verificar a remoção da partição de uma consulta `SELECT` em uma tabela particionada. Primeiro, a instrução `CREATE TABLE` cria a tabela `tpch100.orders_partitioned`. A tabela é particionada na coluna `o_orderdate`.

```
CREATE TABLE `tpch100.orders_partitioned`(
  `o_orderkey` int, 
  `o_custkey` int, 
  `o_orderstatus` string, 
  `o_totalprice` double, 
  `o_orderpriority` string, 
  `o_clerk` string, 
  `o_shippriority` int, 
  `o_comment` string)
PARTITIONED BY ( 
  `o_orderdate` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/<your_directory_path>/'
```

A tabela `tpch100.orders_partitioned` tem várias partições em `o_orderdate`, como mostrado pelo comando `SHOW PARTITIONS`.

```
SHOW PARTITIONS tpch100.orders_partitioned;

o_orderdate=1994
o_orderdate=2015
o_orderdate=1998
o_orderdate=1995
o_orderdate=1993
o_orderdate=1997
o_orderdate=1992
o_orderdate=1996
```

A consulta `EXPLAIN` a seguir verifica a remoção da partição com base na instrução `SELECT` especificada.

```
EXPLAIN 
SELECT 
   o_orderkey, 
   o_custkey, 
   o_orderdate 
FROM tpch100.orders_partitioned
WHERE o_orderdate = '1995'
```

#### Resultados
<a name="athena-explain-statement-example-verify-partition-pruning-results"></a>

```
Query Plan
- Output[o_orderkey, o_custkey, o_orderdate] => [[o_orderkey, o_custkey, o_orderdate]]
    - RemoteExchange[GATHER] => [[o_orderkey, o_custkey, o_orderdate]]
        - TableScan[awsdatacatalog:HiveTableHandle{schemaName=tpch100, tableName=orders_partitioned, 
analyzePartitionValues=Optional.empty}] => [[o_orderkey, o_custkey, o_orderdate]]
                LAYOUT: tpch100.orders_partitioned
                o_orderdate := o_orderdate:string:-1:PARTITION_KEY
                    :: [[1995]]
                o_custkey := o_custkey:int:1:REGULAR
                o_orderkey := o_orderkey:int:0:REGULAR
```

O texto em negrito no resultado mostra que o predicado `o_orderdate = '1995'` foi aplicado a `PARTITION_KEY`.

### Exemplo 4: uso de uma consulta EXPLAIN para verificar ordem e tipo de junção
<a name="athena-explain-statement-example-check-join-order-and-type"></a>

A consulta `EXPLAIN` a seguir verifica o tipo e a ordem de junção da instrução `SELECT`. Use uma consulta como esta para examinar o uso da memória de consulta para que você possa reduzir as chances de receber um erro `EXCEEDED_LOCAL_MEMORY_LIMIT`.

```
EXPLAIN (TYPE DISTRIBUTED)
   SELECT 
      c.c_custkey, 
      o.o_orderkey,
      o.o_orderstatus
   FROM tpch100.customer c 
   JOIN tpch100.orders o 
       ON c.c_custkey = o.o_custkey 
   WHERE c.c_custkey = 123
```

#### Resultados
<a name="athena-explain-statement-example-check-join-order-and-type-results"></a>

```
Query Plan
Fragment 0 [SINGLE]
    Output layout: [c_custkey, o_orderkey, o_orderstatus]
    Output partitioning: SINGLE []
    Stage Execution Strategy: UNGROUPED_EXECUTION
    - Output[c_custkey, o_orderkey, o_orderstatus] => [[c_custkey, o_orderkey, o_orderstatus]]
        - RemoteSource[1] => [[c_custkey, o_orderstatus, o_orderkey]]

Fragment 1 [SOURCE]
    Output layout: [c_custkey, o_orderstatus, o_orderkey]
    Output partitioning: SINGLE []
    Stage Execution Strategy: UNGROUPED_EXECUTION
    - CrossJoin => [[c_custkey, o_orderstatus, o_orderkey]]
            Distribution: REPLICATED
        - ScanFilter[table = awsdatacatalog:HiveTableHandle{schemaName=tpch100, 
tableName=customer, analyzePartitionValues=Optional.empty}, grouped = false, 
filterPredicate = ("c_custkey" = 123)] => [[c_custkey]]
                LAYOUT: tpch100.customer
                c_custkey := c_custkey:int:0:REGULAR
        - LocalExchange[SINGLE] () => [[o_orderstatus, o_orderkey]]
            - RemoteSource[2] => [[o_orderstatus, o_orderkey]]

Fragment 2 [SOURCE]
    Output layout: [o_orderstatus, o_orderkey]
    Output partitioning: BROADCAST []
    Stage Execution Strategy: UNGROUPED_EXECUTION
    - ScanFilterProject[table = awsdatacatalog:HiveTableHandle{schemaName=tpch100, 
tableName=orders, analyzePartitionValues=Optional.empty}, grouped = false, 
filterPredicate = ("o_custkey" = 123)] => [[o_orderstatus, o_orderkey]]
            LAYOUT: tpch100.orders
            o_orderstatus := o_orderstatus:string:2:REGULAR
            o_custkey := o_custkey:int:1:REGULAR
            o_orderkey := o_orderkey:int:0:REGULAR
```

A consulta de exemplo foi otimizada em uma junção cruzada para uma performance melhor. Os resultados mostram que `tpch100.orders` será distribuído como o tipo de distribuição `BROADCAST`. Isso indica que a tabela `tpch100.orders` será distribuída para todos os nós que executam a operação de junção. O tipo de distribuição `BROADCAST` exige que todos os resultados filtrados da tabela `tpch100.orders` estejam dentro da capacidade de memória de cada nó que executa a operação de junção.

No entanto, a tabela `tpch100.customer` é menor que `tpch100.orders`. Como `tpch100.customer` requer menos memória, você pode reescrever a consulta como `BROADCAST tpch100.customer` em vez de `tpch100.orders`. Desse modo, a consulta tem menos chance de receber o erro `EXCEEDED_LOCAL_MEMORY_LIMIT`. Essa estratégia considera os seguintes pontos:
+ `tpch100.customer.c_custkey` é exclusivo na tabela `tpch100.customer`.
+ Existe um relacionamento de mapeamento um para muitos entre `tpch100.customer` e `tpch100.orders`.

O exemplo a seguir mostra a consulta reescrita.

```
SELECT 
    c.c_custkey,
    o.o_orderkey,
    o.o_orderstatus
FROM tpch100.orders o
JOIN tpch100.customer c -- the filtered results of tpch100.customer are distributed to all nodes.
    ON c.c_custkey = o.o_custkey 
WHERE c.c_custkey = 123
```

### Exemplo 5: uso de uma consulta EXPLAIN para remover predicados sem efeito
<a name="athena-explain-statement-example-remove-unneeded-predicates"></a>

Você pode usar uma consulta `EXPLAIN` para verificar a eficácia dos predicados de filtragem. Você pode usar os resultados para remover os predicados que não têm efeito, como no exemplo a seguir.

```
EXPLAIN
   SELECT 
      c.c_name
   FROM tpch100.customer c
   WHERE c.c_custkey = CAST(RANDOM() * 1000 AS INT)
   AND c.c_custkey BETWEEN 1000 AND 2000
   AND c.c_custkey = 1500
```

#### Resultados
<a name="athena-explain-statement-example-remove-unneeded-predicates-results"></a>

```
Query Plan
- Output[c_name] => [[c_name]]
    - RemoteExchange[GATHER] => [[c_name]]
        - ScanFilterProject[table = 
awsdatacatalog:HiveTableHandle{schemaName=tpch100, 
tableName=customer, analyzePartitionValues=Optional.empty}, 
filterPredicate = (("c_custkey" = 1500) AND ("c_custkey" = 
CAST(("random"() * 1E3) AS int)))] => [[c_name]]
                LAYOUT: tpch100.customer
                c_custkey := c_custkey:int:0:REGULAR
                c_name := c_name:string:1:REGULAR
```

O `filterPredicate` nos resultados mostra que o otimizador mesclou os três predicados originais em dois predicados e alterou a ordem de aplicação deles.

```
filterPredicate = (("c_custkey" = 1500) AND ("c_custkey" = CAST(("random"() * 1E3) AS int)))
```

Como os resultados mostram que o predicado `AND c.c_custkey BETWEEN 1000 AND 2000` não tem efeito, você pode removê-lo sem alterar os resultados da consulta.

Para obter informações sobre os termos usados nos resultados das consultas `EXPLAIN`, veja [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md).

## Exemplos de EXPLAIN ANALYZE
<a name="athena-explain-analyze-examples"></a>

Os exemplos a seguir mostram exemplos de consultas e saídas de `EXPLAIN ANALYZE`.

### Exemplo 1: uso de EXPLAIN ANALYZE para mostrar um plano de consulta e o custo computacional em formato de texto
<a name="athena-explain-analyze-example-cflogs-text"></a>

No exemplo a seguir, `EXPLAIN ANALYZE` mostra o plano de execução e os custos computacionais de uma consulta `SELECT` em logs do CloudFront. O formato é o padrão para saída de texto.

```
EXPLAIN ANALYZE SELECT FROM cloudfront_logs LIMIT 10
```

#### Resultados
<a name="athena-explain-analyze-example-cflogs-text-results"></a>

```
 Fragment 1
     CPU: 24.60ms, Input: 10 rows (1.48kB); per task: std.dev.: 0.00, Output: 10 rows (1.48kB)
     Output layout: [date, time, location, bytes, requestip, method, host, uri, status, referrer,\
       os, browser, browserversion]
Limit[10] => [[date, time, location, bytes, requestip, method, host, uri, status, referrer, os,\
  browser, browserversion]]
             CPU: 1.00ms (0.03%), Output: 10 rows (1.48kB)
             Input avg.: 10.00 rows, Input std.dev.: 0.00%
LocalExchange[SINGLE] () => [[date, time, location, bytes, requestip, method, host, uri, status, referrer, os,\
 browser, browserversion]]
                 CPU: 0.00ns (0.00%), Output: 10 rows (1.48kB)
                 Input avg.: 0.63 rows, Input std.dev.: 387.30%
RemoteSource[2] => [[date, time, location, bytes, requestip, method, host, uri, status, referrer, os,\
  browser, browserversion]]
                     CPU: 1.00ms (0.03%), Output: 10 rows (1.48kB)
                     Input avg.: 0.63 rows, Input std.dev.: 387.30%

 Fragment 2
     CPU: 3.83s, Input: 998 rows (147.21kB); per task: std.dev.: 0.00, Output: 20 rows (2.95kB)
     Output layout: [date, time, location, bytes, requestip, method, host, uri, status, referrer, os,\
       browser, browserversion]
LimitPartial[10] => [[date, time, location, bytes, requestip, method, host, uri, status, referrer, os,\
  browser, browserversion]]
             CPU: 5.00ms (0.13%), Output: 20 rows (2.95kB)
             Input avg.: 166.33 rows, Input std.dev.: 141.42%
TableScan[awsdatacatalog:HiveTableHandle{schemaName=default, tableName=cloudfront_logs,\
  analyzePartitionValues=Optional.empty}, 
grouped = false] => [[date, time, location, bytes, requestip, method, host, uri, st
                 CPU: 3.82s (99.82%), Output: 998 rows (147.21kB)
                 Input avg.: 166.33 rows, Input std.dev.: 141.42%
                 LAYOUT: default.cloudfront_logs
                 date := date:date:0:REGULAR
                 referrer := referrer:string:9:REGULAR
                 os := os:string:10:REGULAR
                 method := method:string:5:REGULAR
                 bytes := bytes:int:3:REGULAR
                 browser := browser:string:11:REGULAR
                 host := host:string:6:REGULAR
                 requestip := requestip:string:4:REGULAR
                 location := location:string:2:REGULAR
                 time := time:string:1:REGULAR
                 uri := uri:string:7:REGULAR
                 browserversion := browserversion:string:12:REGULAR
                 status := status:int:8:REGULAR
```

### Exemplo 2: uso de EXPLAIN ANALYZE para mostrar um plano de consulta em formato JSON
<a name="athena-explain-analyze-example-cflogs-json"></a>

O exemplo a seguir mostra o plano de execução e os custos computacionais de uma consulta `SELECT` em logs do CloudFront. O exemplo especifica JSON como formato de saída.

```
EXPLAIN ANALYZE (FORMAT JSON) SELECT * FROM cloudfront_logs LIMIT 10
```

#### Resultados
<a name="athena-explain-analyze-example-cflogs-json-results"></a>

```
{ 
    "fragments": [{ 
        "id": "1", 
 
        "stageStats": { 
            "totalCpuTime": "3.31ms", 
            "inputRows": "10 rows", 
            "inputDataSize": "1514B", 
            "stdDevInputRows": "0.00", 
            "outputRows": "10 rows", 
            "outputDataSize": "1514B" 
        }, 
        "outputLayout": "date, time, location, bytes, requestip, method, host,\
           uri, status, referrer, os, browser, browserversion", 
 
        "logicalPlan": { 
            "1": [{ 
                "name": "Limit", 
                "identifier": "[10]", 
                "outputs": ["date", "time", "location", "bytes", "requestip", "method", "host",\
                  "uri", "status", "referrer", "os", "browser", "browserversion"], 
                "details": "", 
                "distributedNodeStats": { 
                    "nodeCpuTime": "0.00ns", 
                    "nodeOutputRows": 10, 
                    "nodeOutputDataSize": "1514B", 
                    "operatorInputRowsStats": [{ 
                        "nodeInputRows": 10.0, 
                        "nodeInputRowsStdDev": 0.0 
                    }] 
                }, 
                "children": [{ 
                    "name": "LocalExchange", 
                    "identifier": "[SINGLE] ()", 
                    "outputs": ["date", "time", "location", "bytes", "requestip", "method", "host",\
                      "uri", "status", "referrer", "os", "browser", "browserversion"], 
                    "details": "", 
                    "distributedNodeStats": { 
                        "nodeCpuTime": "0.00ns", 
                        "nodeOutputRows": 10, 
                        "nodeOutputDataSize": "1514B", 
                        "operatorInputRowsStats": [{ 
                            "nodeInputRows": 0.625, 
                            "nodeInputRowsStdDev": 387.2983346207417 
                        }] 
                    }, 
                    "children": [{ 
                        "name": "RemoteSource", 
                        "identifier": "[2]", 
                        "outputs": ["date", "time", "location", "bytes", "requestip", "method", "host",\
                          "uri", "status", "referrer", "os", "browser", "browserversion"], 
                        "details": "", 
                        "distributedNodeStats": { 
                            "nodeCpuTime": "0.00ns", 
                            "nodeOutputRows": 10, 
                            "nodeOutputDataSize": "1514B", 
                            "operatorInputRowsStats": [{ 
                                "nodeInputRows": 0.625, 
                                "nodeInputRowsStdDev": 387.2983346207417 
                            }] 
                        }, 
                        "children": [] 
                    }] 
                }] 
            }] 
        } 
    }, { 
        "id": "2", 
 
        "stageStats": { 
            "totalCpuTime": "1.62s", 
            "inputRows": "500 rows", 
            "inputDataSize": "75564B", 
            "stdDevInputRows": "0.00", 
            "outputRows": "10 rows", 
            "outputDataSize": "1514B" 
        }, 
        "outputLayout": "date, time, location, bytes, requestip, method, host, uri, status,\
           referrer, os, browser, browserversion", 
 
        "logicalPlan": { 
            "1": [{ 
                "name": "LimitPartial", 
                "identifier": "[10]", 
                "outputs": ["date", "time", "location", "bytes", "requestip", "method", "host", "uri",\
                  "status", "referrer", "os", "browser", "browserversion"], 
                "details": "", 
                "distributedNodeStats": { 
                    "nodeCpuTime": "0.00ns", 
                    "nodeOutputRows": 10, 
                    "nodeOutputDataSize": "1514B", 
                    "operatorInputRowsStats": [{ 
                        "nodeInputRows": 83.33333333333333, 
                        "nodeInputRowsStdDev": 223.60679774997897 
                    }] 
                }, 
                "children": [{ 
                    "name": "TableScan", 
                    "identifier": "[awsdatacatalog:HiveTableHandle{schemaName=default,\
                       tableName=cloudfront_logs, analyzePartitionValues=Optional.empty},\
                       grouped = false]", 
                    "outputs": ["date", "time", "location", "bytes", "requestip", "method", "host", "uri",\
                       "status", "referrer", "os", "browser", "browserversion"], 
                    "details": "LAYOUT: default.cloudfront_logs\ndate := date:date:0:REGULAR\nreferrer :=\
                       referrer: string:9:REGULAR\nos := os:string:10:REGULAR\nmethod := method:string:5:\
                       REGULAR\nbytes := bytes:int:3:REGULAR\nbrowser := browser:string:11:REGULAR\nhost :=\
                       host:string:6:REGULAR\nrequestip := requestip:string:4:REGULAR\nlocation :=\
                       location:string:2:REGULAR\ntime := time:string:1: REGULAR\nuri := uri:string:7:\
                       REGULAR\nbrowserversion := browserversion:string:12:REGULAR\nstatus :=\
                       status:int:8:REGULAR\n", 
                    "distributedNodeStats": { 
                        "nodeCpuTime": "1.62s", 
                        "nodeOutputRows": 500, 
                        "nodeOutputDataSize": "75564B", 
                        "operatorInputRowsStats": [{ 
                            "nodeInputRows": 83.33333333333333, 
                            "nodeInputRowsStdDev": 223.60679774997897 
                        }] 
                    }, 
                    "children": [] 
                }] 
            }] 
        } 
    }] 
}
```

## Recursos adicionais
<a name="athena-explain-statement-additional-resources"></a>

Para obter mais informações, consulte os recursos a seguir.
+  [Noções básicas dos resultados da instrução EXPLAIN do Athena](athena-explain-statement-understanding.md)
+  [Visualização de planos de execução para consultas SQL](query-plans.md)
+  [Visualizar estatísticas e detalhes de execução para consultas concluídas](query-stats.md)
+ Documentação Trino [https://trino.io/docs/current/sql/explain.html](https://trino.io/docs/current/sql/explain.html)
+ Documentação Trino [https://trino.io/docs/current/sql/explain-analyze.html](https://trino.io/docs/current/sql/explain-analyze.html)
+  [Otimize o desempenho de consultas federadas usando EXPLAIN e EXPLAIN ANALYZE no Amazon Athena](https://aws.amazon.com/blogs/big-data/optimize-federated-query-performance-using-explain-and-explain-analyze-in-amazon-athena/) no *Blog de Big Data da AWS*. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/7JUyTqglmNU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/7JUyTqglmNU)


# Noções básicas dos resultados da instrução EXPLAIN do Athena
<a name="athena-explain-statement-understanding"></a>

Esse tópico apresenta uma rápida orientação sobre os termos operacionais usados nos resultados da instrução `EXPLAIN` do Athena.

## Tipos de saída da instrução EXPLAIN
<a name="athena-explain-statement-understanding-explain-plan-types"></a>

`EXPLAIN`As saídas da instrução podem ser de um destes dois tipos:
+ **Plano lógico**: mostra o plano lógico que o mecanismo SQL usa para executar uma instrução. A sintaxe para essa opção é `EXPLAIN` ou `EXPLAIN (TYPE LOGICAL)`.
+ **Plano distribuído**: mostra um plano de execução em um ambiente distribuído. A saída mostra fragmentos, que são os estágios de processamento. Cada fragmento do plano é processado por um ou mais nós. Os dados podem ser trocados entre os nós que processam os fragmentos. A sintaxe para essa opção é `EXPLAIN (TYPE DISTRIBUTED)`.

  Na saída de um plano de distribuição, os fragmentos (estágios de processamento) são indicados por `Fragment` *número* [*fragment\$1type*], em que *número* é um número inteiro com base zero e *fragment\$1type* especifica como o fragmento é executado pelos nós. Os tipos de fragmento, que mostram insights do layout da troca de dados, estão descritos na tabela a seguir.  
**Tipos de fragmento do plano distribuído**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/athena-explain-statement-understanding.html)

## Exchange
<a name="athena-explain-statement-understanding-exchange-types"></a>

Os termos relacionados à troca descrevem como os dados são trocados entre os nós de processamento. As transferências podem ser locais ou remotas. 

**LocalExchange [*exchange\$1type*] **  
Transfere os dados localmente nos nós de processamento para estágios diferentes de uma consulta. O valor de *exchange\$1type* pode ser um dos tipos de troca lógicos ou distribuídos, conforme descrito mais adiante nesta seção.

**RemoteExchange [*exchange\$1type*] **  
Transfere os dados entre os nós de processamento para estágios diferentes de uma consulta. O valor de *exchange\$1type* pode ser um dos tipos de troca lógicos ou distribuídos, conforme descrito mais adiante nesta seção.

### Tipos de troca lógicos
<a name="athena-explain-statement-understanding-exchange-types-logical"></a>

Os tipos de troca a seguir descrevem as ações executadas durante a fase de troca de um plano lógico.
+ **`GATHER`** – um único nó de processamento combina a saída de todos os outros nós de processamento. Por exemplo, o último estágio de uma consulta selecionada coleta os resultados de todos os nós e grava esses resultados no Amazon S3.
+ **`REPARTITION`** – envia os dados da linha para um operador específico com base no esquema de particionamento que deverá ser aplicado ao próximo operador.
+ **`REPLICATE`** – copia os dados da linha para todos os operadores.

### Tipos de troca distribuídos
<a name="athena-explain-statement-understanding-exchange-types-distributed"></a>

Os tipos de troca a seguir indicam o layout dos dados quando eles são trocados entre os nós em um plano distribuído.
+ **`HASH`** – a troca distribui os dados para vários destinos usando uma função hash.
+ **`SINGLE`** – a troca distribui os dados para um único destino.

## Verificação
<a name="athena-explain-statement-understanding-scanning"></a>

Os termos a seguir descrevem como os dados são verificados durante uma consulta.

**TableScan **  
Verifica os dados de origem de uma tabela do Amazon S3 ou de um conector do Apache Hive e aplica a remoção de partição gerada do predicado de filtro.

**ScanFilter **  
Verifica os dados de origem de uma tabela do Amazon S3 ou de um conector do Hive e aplica a remoção de partição gerada do predicado de filtro e dos outros predicados de filtro não aplicados por meio da remoção de partição.

**ScanFilterProject **  
Primeiramente, verifica os dados de origem de uma tabela do Amazon S3 ou de um conector do Hive e aplica a remoção de partição gerada do predicado de filtro e dos outros predicados de filtro não aplicados por meio da remoção de partição. Na sequência, modifica o layout da memória dos dados de saída para uma nova projeção a fim de melhorar a performance dos estágios posteriores.

## Ingressar
<a name="athena-explain-statement-understanding-join"></a>

Faz a junção dos dados entre duas tabelas. É possível categorizar as junções por tipo de junção e por tipo de distribuição.

### Tipos de junção
<a name="athena-explain-statement-understanding-join-types"></a>

Os tipos de junção definem como é feita a operação de junção.

**CrossJoin**: gera o produto cartesiano de duas tabelas unidas.

**InnerJoin**: seleciona os registros que têm valores correspondentes nas duas tabelas.

**LeftJoin**: seleciona todos os registros da tabela esquerda e os registros correspondentes da tabela direita. Se não houver nenhuma correspondência, o resultado no lado direito será NULL.

**RightJoin**: seleciona todos os registros da tabela direita e os registros correspondentes da tabela esquerda. Se não houver nenhuma correspondência, o resultado no lado direito será NULL.

**FullJoin**: seleciona todos os registros em que há correspondência com os registros da tabela esquerda ou direita. A tabela unida contém todos os registros das duas tabelas e preenche as correspondências ausentes com NULL em um dos lados.

**nota**  
Por motivos de performance, o mecanismo de consulta pode reescrever uma consulta de junção com um tipo de junção diferente para retornar os mesmos resultados. Por exemplo, uma consulta de junção interna com predicado em uma tabela pode ser reescrita como `CrossJoin`. Isso leva o predicado à fase de verificação da tabela para que menos dados sejam verificados.

### Tipos de distribuição de junção
<a name="athena-explain-statement-understanding-join-distribution-types"></a>

Os tipos de distribuição definem como os dados são trocados entre os nós de processamento quando a operação de junção é executada.

**Particionada**: as tabelas tanto esquerda quanto direita são particionadas por hash em todos os nós de processamento. A distribuição particionada consome menos memória em cada nó. A distribuição particionada pode ser muito mais lenta do que as junções replicadas. As junções particionadas são ideais para unir duas tabelas grandes.

**Replicada**: uma tabela é particionada por hash em todos os nós de processamento, e a outra tabela é replicada para todos os nós de processamento para executar a operação de junção. A distribuição replicada pode ser muito mais rápida do que as junções particionadas, mas consome mais memória em cada nó de processamento. Se a tabela replicada for muito grande, o nó de processamento poderá receber um erro de memória insuficiente. As junções replicadas são ideais quando uma das tabelas unidas é pequena.

# PREPARE
<a name="sql-prepare"></a>

Cria uma instrução SQL com o nome `statement_name` para execução posterior. A instrução pode incluir parâmetros representados por pontos de interrogação. Para fornecer valores para os parâmetros e executar a instrução preparada, utilize [EXECUTE](sql-execute.md).

## Resumo
<a name="sql-prepare-synopsis"></a>

```
PREPARE statement_name FROM statement
```

A tabela a seguir descreve os parâmetros.


****  

| Parâmetro | Descrição | 
| --- | --- | 
| statement\$1name | O nome da instrução que será preparada. O nome deve ser exclusivo no grupo de trabalho. | 
| statement | Uma consulta SELECT, CTAS ou INSERT INTO. | 

**nota**  
O número máximo de instruções preparadas em um grupo de trabalho é mil.

## Exemplos
<a name="sql-prepare-examples"></a>

O seguinte exemplo prepara uma consulta selecionada sem parâmetros.

```
PREPARE my_select1 FROM 
SELECT * FROM nation
```

O seguinte exemplo prepara uma consulta selecionada que inclui parâmetros. Os valores para `productid` e `quantity` serão fornecido pela cláusula `USING` de uma instrução `EXECUTE`:

```
PREPARE my_select2 FROM 
SELECT order FROM orders WHERE productid = ? and quantity < ?
```

O seguinte exemplo prepara uma consulta de inserção.

```
PREPARE my_insert FROM 
INSERT INTO cities_usa (city, state) 
SELECT city, state 
FROM cities_world 
WHERE country = ?
```

## Recursos adicionais
<a name="sql-prepare-additional-resources"></a>

[Usar instruções preparadas](querying-with-prepared-statements-querying.md)

[EXECUTE](sql-execute.md)

[DEALLOCATE PREPARE](sql-deallocate-prepare.md)

[INSERT INTO](insert-into.md)

# EXECUTE
<a name="sql-execute"></a>

Executa uma instrução preparada com o nome `statement_name`. Os valores dos parâmetros para os pontos de interrogação na declaração preparada estão definidos na cláusula `USING` em uma lista separada por vírgulas. Para criar uma instrução preparada, utilize [PREPARE](sql-prepare.md).

## Resumo
<a name="sql-execute-synopsis"></a>

```
EXECUTE statement_name [ USING parameter1[, parameter2, ... ] ]
```

## Exemplos
<a name="sql-execute-examples"></a>

O seguinte exemplo prepara e executa uma consulta sem parâmetros.

```
PREPARE my_select1 FROM 
SELECT name FROM nation 
EXECUTE my_select1
```

O seguinte exemplo prepara e executa uma consulta com um único parâmetro.

```
PREPARE my_select2 FROM 
SELECT * FROM "my_database"."my_table" WHERE year = ? 
EXECUTE my_select2 USING 2012
```

Isso é equivalente a:

```
SELECT * FROM "my_database"."my_table" WHERE year = 2012
```

O seguinte exemplo prepara e executa uma consulta com dois parâmetros.

```
PREPARE my_select3 FROM 
SELECT order FROM orders WHERE productid = ? and quantity < ? 
EXECUTE my_select3 USING 346078, 12
```

## Recursos adicionais
<a name="sql-execute-additional-resources"></a>

[Usar instruções preparadas](querying-with-prepared-statements-querying.md)

[PREPARE](sql-prepare.md)

[INSERT INTO](insert-into.md)

# DEALLOCATE PREPARE
<a name="sql-deallocate-prepare"></a>

Remove a instrução preparada com o nome especificado do conjunto de instruções preparadas no grupo de trabalho atual.

## Resumo
<a name="sql-deallocate-prepare-synopsis"></a>

```
DEALLOCATE PREPARE statement_name
```

## Exemplos
<a name="sql-deallocate-prepare-examples"></a>

O exemplo a seguir remove a instrução preparada `my_select1` do grupo de trabalho atual.

```
DEALLOCATE PREPARE my_select1
```

## Recursos adicionais
<a name="sql-deallocate-prepare-additional-resources"></a>

[Usar instruções preparadas](querying-with-prepared-statements-querying.md)

[PREPARE](sql-prepare.md)

# UNLOAD
<a name="unload"></a>

Grava os resultados da consulta de uma instrução `SELECT` no formato de dados especificado. Os formatos permitidos para `UNLOAD` são Apache Parquet, ORC, Apache Avro e JSON. CSV é o único formato de saída compatível com o comando `SELECT` do Athena, mas você pode usar o comando `UNLOAD`, que é compatível com vários formatos de saída, para delimitar sua consulta `SELECT` e reescrever sua saída em um dos formatos compatíveis com `UNLOAD`. 

Você pode usar a instrução `CREATE TABLE AS` (CTAS) para gerar dados em formatos não CSV, e as instruções CTAS exigem a criação de uma tabela no Athena. A instrução `UNLOAD` é útil quando você quer gerar os resultados de uma consulta `SELECT` em um formato não CSV, mas não quer a tabela associada. Por exemplo, uma aplicação downstream pode exigir que os resultados de uma consulta `SELECT` estejam no formato JSON, e o Parquet ou o ORC pode ter uma performance melhor do que o CSV se você pretende usar os resultados da consulta `SELECT` para realizar outras análises.

## Considerações e limitações
<a name="unload-considerations-and-limitations"></a>

Quando você usar a instrução `UNLOAD` no Athena, lembre-se dos seguintes pontos:
+ **Sem ordenação global de arquivos**: os resultados de `UNLOAD` são gravados em vários arquivos em paralelo. Se a consulta `SELECT` na instrução `UNLOAD` especificar uma ordem de classificação, o conteúdo de cada arquivo estará na ordem classificada, mas os arquivos não serão classificados entre eles.
+ **Dados órfãos não excluídos**: em caso de falha, o Athena não tenta excluir os dados órfãos. Esse comportamento é o mesmo nas instruções CTAS e `INSERT INTO`.
+ **Partições máximas**: o número máximo de partições que podem ser usadas com `UNLOAD` é 100.
+ **Arquivos manifesto e de metadados**: o Athena gera um arquivo de metadados e um arquivo manifesto de dados para cada consulta `UNLOAD`. O manifesto rastreia os arquivos que a consulta gravou. Os dois arquivos são salvos no local dos resultados das consultas do Athena no Amazon S3. Para obter mais informações, consulte [Identificar arquivos de saída de consultas](querying-finding-output-files.md#querying-identifying-output-files).
+ **Criptografia**: os arquivos de saída de `UNLOAD` são criptografados de acordo com a configuração de criptografia usada no Amazon S3. Para definir a configuração para criptografar o resultado de `UNLOAD`, você pode usar a [API EncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html).
+ **Instruções preparadas**: `UNLOAD` pode ser usado com instruções preparadas. Para obter informações sobre instruções preparadas no Athena, consulte [Usar consultas parametrizadas](querying-with-prepared-statements.md).
+ **Cotas de serviço**: o `UNLOAD` usa cotas de consultas em DML. Para obter informações sobre cotas, consulte [Service Quotas](service-limits.md).
+ **Proprietário do bucket esperado**: a configuração esperada do proprietário do bucket não se aplica ao local de destino do Amazon S3 especificado na consulta `UNLOAD`. A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Para obter mais informações, consulte [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).

## Sintaxe
<a name="unload-syntax"></a>

A instrução `UNLOAD` usa a sintaxe a seguir.

```
UNLOAD (SELECT col_name[, ...] FROM old_table) 
TO 's3://amzn-s3-demo-bucket/my_folder/' 
WITH ( property_name = 'expression' [, ...] )
```

Exceto ao gravar nas partições, o destino `TO` deve especificar um local no Amazon S3 que não tenha dados. Antes de gravar no local especificado, a consulta `UNLOAD` verifica se o local do bucket está vazio. Como `UNLOAD` não grava dados no local especificado se ele já tiver dados, `UNLOAD` não substitui os dados existentes. Para reutilizar um local de bucket como destino para `UNLOAD`, exclua os dados do local do bucket e execute a consulta novamente. 

Observe que, quando `UNLOAD` grava em partições, esse comportamento é diferente. Se você executar a mesma consulta `UNLOAD` várias vezes com a mesma instrução `SELECT`, o mesmo local `TO` e as mesmas partições, cada consulta `UNLOAD` descarrega os dados no Amazon S3 no local e nas partições especificadas.

### Parâmetros
<a name="unload-parameters"></a>

Veja abaixo os valores possíveis para *property\$1name*.

** format = '*file\$1format*' **  
Obrigatório. Especifica o formato de arquivo da saída. Os valores possíveis para *file\$1format* são `ORC`, `PARQUET`, `AVRO`, `JSON` ou`TEXTFILE`.

** compression = '*compression\$1format*' **  
Opcional. Essa opção é específica aos formatos ORC e Parquet. Para ORC, o padrão é `zlib`, e para Parquet, o padrão é `gzip`. Para obter informações sobre formatos de compactação compatíveis, consulte [Suporte a compactação no Athena](https://docs.aws.amazon.com/athena/latest/ug/compression-formats.html).   
Essa opção não se aplica ao formato `AVRO`. O Athena usa `gzip` para os formatos `JSON` e `TEXTFILE`.

**compression\$1level = *compression\$1level* **  
Opcional. O nível de compactação a ser usado para compactação ZSTD. Essa propriedade se aplica apenas à compactação ZSTD. Para obter mais informações, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).

** field\$1delimiter = '*delimiter*' **  
Opcional. Especifica um delimitador de campo de caractere único para arquivos em CSV, TSV e outros formatos de texto. O exemplo a seguir especifica o delimitador como vírgula.  

```
WITH (field_delimiter = ',')
```
Atualmente, não há suporte para delimitadores de campo de vários caracteres. Se você não especificar um delimitador de campo, o caractere octal `\001` (^A) será usado.

** partitioned\$1by = ARRAY[ *col\$1name*[,...] ] **  
Opcional. Uma lista matriz de colunas pela qual a saída é particionada.  
Em sua instrução `SELECT`, verifique se os nomes das colunas particionadas estão listados por último na lista de colunas. 

## Exemplos
<a name="unload-examples"></a>

O exemplo a seguir grava a saída de uma consulta `SELECT` no local do Amazon S3 `s3://amzn-s3-demo-bucket/unload_test_1/` usando o formato JSON.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/unload_test_1/' 
WITH (format = 'JSON')
```

O exemplo a seguir grava a saída de uma consulta `SELECT` no formato Parquet usando a compactação Snappy.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/' 
WITH (format = 'PARQUET',compression = 'SNAPPY')
```

O exemplo a seguir grava quatro colunas no formato de texto, com a saída particionada pela última coluna.

```
UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) 
TO 's3://amzn-s3-demo-bucket/ partitioned/' 
WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1'])
```

O exemplo a seguir descarrega os resultados da consulta no local especificado usando o formato de arquivo Parquet, a compressão ZSTD e o nível 4 de compressão ZSTD.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/' 
WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
```

## Recursos adicionais
<a name="unload-additional-resources"></a>
+ [Simplifique seus pipelines de ETL e ML usando o recurso Amazon Athena UNLOAD](https://aws.amazon.com/blogs/big-data/simplify-your-etl-and-ml-pipelines-using-the-amazon-athena-unload-feature/) no *AWSBlog de Big Data*. 

# Funções no Amazon Athena
<a name="functions"></a>

Para obter informações sobre as mudanças nas funções entre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md). Para ver uma lista dos fusos horários que podem ser usados com o operador `AT TIME ZONE`, consulte [Usar fusos horários compatíveis](athena-supported-time-zones.md).

**Topics**
+ [Mecanismo Athena versão 3](functions-env3.md)

# Funções do mecanismo do Athena versão 3
<a name="functions-env3"></a>

As funções no mecanismo Athena versão 3 são baseadas no Trino. Para obter informações sobre as funções, operadores e expressões do Trino, consulte [Functions and operators](https://trino.io/docs/current/functions.html) (Funções e operadores) e as seguintes subseções na documentação do Trino.
+  [Aggregate](https://trino.io/docs/current/functions/aggregate.html) 
+  [Array](https://trino.io/docs/current/functions/array.html) 
+  [Binário](https://trino.io/docs/current/functions/binary.html) 
+  [Bitwise](https://trino.io/docs/current/functions/bitwise.html) 
+  [Color (Cor)](https://trino.io/docs/current/functions/color.html) 
+  [Comparação](https://trino.io/docs/current/functions/comparison.html) 
+  [Condicional](https://trino.io/docs/current/functions/conditional.html) 
+  [Conversão](https://trino.io/docs/current/functions/conversion.html) 
+  [Data e hora](https://trino.io/docs/current/functions/datetime.html) 
+  [Decimal](https://trino.io/docs/current/functions/decimal.html) 
+  [Geoespacial](https://trino.io/docs/current/functions/geospatial.html) 
+  [Log de HyperLogLog](https://trino.io/docs/current/functions/hyperloglog.html) 
+  [Endereço IP](https://trino.io/docs/current/functions/ipaddress.html) 
+  [JSON](https://trino.io/docs/current/functions/json.html) 
+  [Lambda](https://trino.io/docs/current/functions/lambda.html) 
+  [Lógico](https://trino.io/docs/current/functions/logical.html) 
+  [Machine learning](https://trino.io/docs/current/functions/ml.html) 
+  [Mapa](https://trino.io/docs/current/functions/map.html) 
+  [Math (Matemática)](https://trino.io/docs/current/functions/math.html) 
+  [Resumo quantil](https://trino.io/docs/current/functions/qdigest.html) 
+  [Expressão regular](https://trino.io/docs/current/functions/regexp.html) 
+  [Sessão](https://trino.io/docs/current/functions/session.html) 
+  [Definir resumo](https://trino.io/docs/current/functions/setdigest.html) 
+  [String](https://trino.io/docs/current/functions/string.html) 
+  [Tabela](https://trino.io/docs/current/functions/table.html) 
+  [Teradata](https://trino.io/docs/current/functions/teradata.html) 
+  [Resumo em T](https://trino.io/docs/current/functions/tdigest.html) 
+  [URL](https://trino.io/docs/current/functions/url.html) 
+  [UUID](https://trino.io/docs/current/functions/uuid.html) 
+  [Window](https://trino.io/docs/current/functions/window.html) 

## função invoker\$1principal()
<a name="functions-env3-invoker-principal"></a>

A função `invoker_principal` é exclusiva da versão 3 do mecanismo do Athena e não é encontrada no Trino.

Retorna um `VARCHAR` que contém o ARN da entidade principal (perfil do IAM ou identidade do Identity Center) que executou a consulta chamando a função. Por exemplo, se o invocador da consulta usa as permissões de um perfil do IAM para executar a consulta, a função retornará o ARN do perfil do IAM. A função que executa a consulta deve permitir a ação `LakeFormation:GetDataLakePrincipal`. 

### Uso
<a name="functions-invoker-principal-usage"></a>

```
SELECT invoker_principal()
```

A tabela a seguir mostra um exemplo de resultado.


****  

| \$1 | \$1col0 | 
| --- | --- | 
| 1 | arn:aws:iam::111122223333:role/Admin | 

# Usar fusos horários compatíveis
<a name="athena-supported-time-zones"></a>

É possível utilizar o operador `AT TIME ZONE` em uma instrução para especificar o fuso horário do carimbo de data/hora que será retornado, como no seguinte exemplo:

```
SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles' AS la_time;
```

**Resultados**

```
la_time

2012-10-30 18:00:00.000 America/Los_Angeles
```

Para obter uma lista de fusos horários compatíveis com o Athena, expanda [Lista de fusos horários compatíveis](#athena-supported-time-zones-list) no final deste tópico.

## Funções e exemplos de fuso horário
<a name="athena-supported-time-zones-functions-examples"></a>

Veja a seguir algumas funções e exemplos adicionais relacionados a fuso horário.
+ **at\$1timezone(*timestamp*, *zone*)**: retorna o valor de *timestamp* no horário local correspondente para *zone*.

  **Exemplo**

  ```
  SELECT at_timezone(timestamp '2021-08-22 00:00 UTC', 'Canada/Newfoundland')
  ```

  **Resultado**

  ```
  2021-08-21 21:30:00.000 Canada/Newfoundland
  ```
+ **timezone\$1hour(*timestamp*)**: retorna a hora do deslocamento do fuso horário do timestamp como um `bigint`.

  **Exemplo**

  ```
  SELECT timezone_hour(timestamp '2021-08-22 04:00 UTC' AT TIME ZONE 'Canada/Newfoundland')
  ```

  **Resultado**

  ```
  -2
  ```
+ **timezone\$1minute(*timestamp*)**: retorna a hora do deslocamento do fuso horário do *timestamp* como um `bigint`.

  **Exemplo**

  ```
  SELECT timezone_minute(timestamp '2021-08-22 04:00 UTC' AT TIME ZONE 'Canada/Newfoundland')
  ```

  **Resultado**

  ```
  -30
  ```
+ **with\$1timezone(*timestamp*, *zone*)**: retorna um timestamp com fuso horário dos valores *timestamp* e *zone* especificado.

  **Exemplo**

  ```
  SELECT with_timezone(timestamp '2021-08-22 04:00', 'Canada/Newfoundland')
  ```

  **Resultado**

  ```
  2021-08-22 04:00:00.000 Canada/Newfoundland
  ```

## Lista de fusos horários compatíveis
<a name="athena-supported-time-zones-list"></a>

A lista a seguir contém os fusos horários que podem ser usados com o operador `AT TIME ZONE` no Athena. Para obter funções e exemplos adicionais relacionados a fuso horário, consulte [Funções e exemplos de fuso horário](#athena-supported-time-zones-functions-examples).

```
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
Africa/Kinshasa
Africa/Lagos
Africa/Libreville
Africa/Lome
Africa/Luanda
Africa/Lubumbashi
Africa/Lusaka
Africa/Malabo
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Mogadishu
Africa/Monrovia
Africa/Nairobi
Africa/Ndjamena
Africa/Niamey
Africa/Nouakchott
Africa/Ouagadougou
Africa/Porto-Novo
Africa/Sao_Tome
Africa/Timbuktu
Africa/Tripoli
Africa/Tunis
Africa/Windhoek
America/Adak
America/Anchorage
America/Anguilla
America/Antigua
America/Araguaina
America/Argentina/Buenos_Aires
America/Argentina/Catamarca
America/Argentina/ComodRivadavia
America/Argentina/Cordoba
America/Argentina/Jujuy
America/Argentina/La_Rioja
America/Argentina/Mendoza
America/Argentina/Rio_Gallegos
America/Argentina/Salta
America/Argentina/San_Juan
America/Argentina/San_Luis
America/Argentina/Tucuman
America/Argentina/Ushuaia
America/Aruba
America/Asuncion
America/Atikokan
America/Atka
America/Bahia
America/Bahia_Banderas
America/Barbados
America/Belem
America/Belize
America/Blanc-Sablon
America/Boa_Vista
America/Bogota
America/Boise
America/Buenos_Aires
America/Cambridge_Bay
America/Campo_Grande
America/Cancun
America/Caracas
America/Catamarca
America/Cayenne
America/Cayman
America/Chicago
America/Chihuahua
America/Coral_Harbour
America/Cordoba
America/Costa_Rica
America/Creston
America/Cuiaba
America/Curacao
America/Danmarkshavn
America/Dawson
America/Dawson_Creek
America/Denver
America/Detroit
America/Dominica
America/Edmonton
America/Eirunepe
America/El_Salvador
America/Ensenada
America/Fort_Nelson
America/Fort_Wayne
America/Fortaleza
America/Glace_Bay
America/Godthab
America/Goose_Bay
America/Grand_Turk
America/Grenada
America/Guadeloupe
America/Guatemala
America/Guayaquil
America/Guyana
America/Halifax
America/Havana
America/Hermosillo
America/Indiana/Indianapolis
America/Indiana/Knox
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Tell_City
America/Indiana/Vevay
America/Indiana/Vincennes
America/Indiana/Winamac
America/Indianapolis
America/Inuvik
America/Iqaluit
America/Jamaica
America/Jujuy
America/Juneau
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Knox_IN
America/Kralendijk
America/La_Paz
America/Lima
America/Los_Angeles
America/Louisville
America/Lower_Princes
America/Maceio
America/Managua
America/Manaus
America/Marigot
America/Martinique
America/Matamoros
America/Mazatlan
America/Mendoza
America/Menominee
America/Merida
America/Metlakatla
America/Mexico_City
America/Miquelon
America/Moncton
America/Monterrey
America/Montevideo
America/Montreal
America/Montserrat
America/Nassau
America/New_York
America/Nipigon
America/Nome
America/Noronha
America/North_Dakota/Beulah
America/North_Dakota/Center
America/North_Dakota/New_Salem
America/Ojinaga
America/Panama
America/Pangnirtung
America/Paramaribo
America/Phoenix
America/Port-au-Prince
America/Port_of_Spain
America/Porto_Acre
America/Porto_Velho
America/Puerto_Rico
America/Punta_Arenas
America/Rainy_River
America/Rankin_Inlet
America/Recife
America/Regina
America/Resolute
America/Rio_Branco
America/Rosario
America/Santa_Isabel
America/Santarem
America/Santiago
America/Santo_Domingo
America/Sao_Paulo
America/Scoresbysund
America/Shiprock
America/Sitka
America/St_Barthelemy
America/St_Johns
America/St_Kitts
America/St_Lucia
America/St_Thomas
America/St_Vincent
America/Swift_Current
America/Tegucigalpa
America/Thule
America/Thunder_Bay
America/Tijuana
America/Toronto
America/Tortola
America/Vancouver
America/Virgin
America/Whitehorse
America/Winnipeg
America/Yakutat
America/Yellowknife
Antarctica/Casey
Antarctica/Davis
Antarctica/DumontDUrville
Antarctica/Macquarie
Antarctica/Mawson
Antarctica/McMurdo
Antarctica/Palmer
Antarctica/Rothera
Antarctica/South_Pole
Antarctica/Syowa
Antarctica/Troll
Antarctica/Vostok
Arctic/Longyearbyen
Asia/Aden
Asia/Almaty
Asia/Amman
Asia/Anadyr
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Ashkhabad
Asia/Atyrau
Asia/Baghdad
Asia/Bahrain
Asia/Baku
Asia/Bangkok
Asia/Barnaul
Asia/Beirut
Asia/Bishkek
Asia/Brunei
Asia/Calcutta
Asia/Chita
Asia/Choibalsan
Asia/Chongqing
Asia/Chungking
Asia/Colombo
Asia/Dacca
Asia/Damascus
Asia/Dhaka
Asia/Dili
Asia/Dubai
Asia/Dushanbe
Asia/Gaza
Asia/Harbin
Asia/Hebron
Asia/Ho_Chi_Minh
Asia/Hong_Kong
Asia/Hovd
Asia/Irkutsk
Asia/Istanbul
Asia/Jakarta
Asia/Jayapura
Asia/Jerusalem
Asia/Kabul
Asia/Kamchatka
Asia/Karachi
Asia/Kashgar
Asia/Kathmandu
Asia/Katmandu
Asia/Khandyga
Asia/Kolkata
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuching
Asia/Kuwait
Asia/Macao
Asia/Macau
Asia/Magadan
Asia/Makassar
Asia/Manila
Asia/Muscat
Asia/Nicosia
Asia/Novokuznetsk
Asia/Novosibirsk
Asia/Omsk
Asia/Oral
Asia/Phnom_Penh
Asia/Pontianak
Asia/Pyongyang
Asia/Qatar
Asia/Qyzylorda
Asia/Rangoon
Asia/Riyadh
Asia/Saigon
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Tel_Aviv
Asia/Thimbu
Asia/Thimphu
Asia/Tokyo
Asia/Tomsk
Asia/Ujung_Pandang
Asia/Ulaanbaatar
Asia/Ulan_Bator
Asia/Urumqi
Asia/Ust-Nera
Asia/Vientiane
Asia/Vladivostok
Asia/Yakutsk
Asia/Yangon
Asia/Yekaterinburg
Asia/Yerevan
Atlantic/Azores
Atlantic/Bermuda
Atlantic/Canary
Atlantic/Cape_Verde
Atlantic/Faeroe
Atlantic/Faroe
Atlantic/Jan_Mayen
Atlantic/Madeira
Atlantic/Reykjavik
Atlantic/South_Georgia
Atlantic/St_Helena
Atlantic/Stanley
Australia/ACT
Australia/Adelaide
Australia/Brisbane
Australia/Broken_Hill
Australia/Canberra
Australia/Currie
Australia/Darwin
Australia/Eucla
Australia/Hobart
Australia/LHI
Australia/Lindeman
Australia/Lord_Howe
Australia/Melbourne
Australia/NSW
Australia/North
Australia/Perth
Australia/Queensland
Australia/South
Australia/Sydney
Australia/Tasmania
Australia/Victoria
Australia/West
Australia/Yancowinna
Brazil/Acre
Brazil/DeNoronha
Brazil/East
Brazil/West
CET
CST6CDT
Canada/Atlantic
Canada/Central
Canada/Eastern
Canada/Mountain
Canada/Newfoundland
Canada/Pacific
Canada/Saskatchewan
Canada/Yukon
Chile/Continental
Chile/EasterIsland
Cuba
EET
EST5EDT
Egypt
Eire
Europe/Amsterdam
Europe/Andorra
Europe/Astrakhan
Europe/Athens
Europe/Belfast
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Bucharest
Europe/Budapest
Europe/Busingen
Europe/Chisinau
Europe/Copenhagen
Europe/Dublin
Europe/Gibraltar
Europe/Guernsey
Europe/Helsinki
Europe/Isle_of_Man
Europe/Istanbul
Europe/Jersey
Europe/Kaliningrad
Europe/Kiev
Europe/Kirov
Europe/Lisbon
Europe/Ljubljana
Europe/London
Europe/Luxembourg
Europe/Madrid
Europe/Malta
Europe/Mariehamn
Europe/Minsk
Europe/Monaco
Europe/Moscow
Europe/Nicosia
Europe/Oslo
Europe/Paris
Europe/Podgorica
Europe/Prague
Europe/Riga
Europe/Rome
Europe/Samara
Europe/San_Marino
Europe/Sarajevo
Europe/Simferopol
Europe/Skopje
Europe/Sofia
Europe/Stockholm
Europe/Tallinn
Europe/Tirane
Europe/Tiraspol
Europe/Ulyanovsk
Europe/Uzhgorod
Europe/Vaduz
Europe/Vatican
Europe/Vienna
Europe/Vilnius
Europe/Volgograd
Europe/Warsaw
Europe/Zagreb
Europe/Zaporozhye
Europe/Zurich
GB
GB-Eire
Hongkong
Iceland
Indian/Antananarivo
Indian/Chagos
Indian/Christmas
Indian/Cocos
Indian/Comoro
Indian/Kerguelen
Indian/Mahe
Indian/Maldives
Indian/Mauritius
Indian/Mayotte
Indian/Reunion
Iran
Israel
Jamaica
Japan
Kwajalein
Libya
MET
MST7MDT
Mexico/BajaNorte
Mexico/BajaSur
Mexico/General
NZ
NZ-CHAT
Navajo
PRC
PST8PDT
Pacific/Apia
Pacific/Auckland
Pacific/Bougainville
Pacific/Chatham
Pacific/Chuuk
Pacific/Easter
Pacific/Efate
Pacific/Enderbury
Pacific/Fakaofo
Pacific/Fiji
Pacific/Funafuti
Pacific/Galapagos
Pacific/Gambier
Pacific/Guadalcanal
Pacific/Guam
Pacific/Honolulu
Pacific/Johnston
Pacific/Kiritimati
Pacific/Kosrae
Pacific/Kwajalein
Pacific/Majuro
Pacific/Marquesas
Pacific/Midway
Pacific/Nauru
Pacific/Niue
Pacific/Norfolk
Pacific/Noumea
Pacific/Pago_Pago
Pacific/Palau
Pacific/Pitcairn
Pacific/Pohnpei
Pacific/Ponape
Pacific/Port_Moresby
Pacific/Rarotonga
Pacific/Saipan
Pacific/Samoa
Pacific/Tahiti
Pacific/Tarawa
Pacific/Tongatapu
Pacific/Truk
Pacific/Wake
Pacific/Wallis
Pacific/Yap
Poland
Portugal
ROK
Singapore
Turkey
US/Alaska
US/Aleutian
US/Arizona
US/Central
US/East-Indiana
US/Eastern
US/Hawaii
US/Indiana-Starke
US/Michigan
US/Mountain
US/Pacific
US/Pacific-New
US/Samoa
W-SU
WET
```

# Instruções DDL
<a name="ddl-reference"></a>

Use as instruções da linguagem de definição de dados (DDL) compatível apresentadas aqui diretamente no Athena. O mecanismo de consulta do Athena é baseado em parte na [DDL do HiveQL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL). O Athena não aceita todas as instruções DDL, e há algumas diferenças entre a DDL do HiveQL e do Athena. Para obter mais informações, consulte os tópicos de referência nesta seção e em [DDL incompatível](unsupported-ddl.md).

**Topics**
+ [

# DDL incompatível
](unsupported-ddl.md)
+ [

# ALTER DATABASE SET DBPROPERTIES
](alter-database-set-dbproperties.md)
+ [

# ALTER TABLE ADD COLUMNS
](alter-table-add-columns.md)
+ [

# ALTER TABLE ADD PARTITION
](alter-table-add-partition.md)
+ [

# ALTER TABLE CHANGE COLUMN
](alter-table-change-column.md)
+ [

# ALTER TABLE DROP PARTITION
](alter-table-drop-partition.md)
+ [

# ALTER TABLE RENAME PARTITION
](alter-table-rename-partition.md)
+ [

# ALTER TABLE REPLACE COLUMNS
](alter-table-replace-columns.md)
+ [

# ALTER TABLE SET LOCATION
](alter-table-set-location.md)
+ [

# ALTER TABLE SET TBLPROPERTIES
](alter-table-set-tblproperties.md)
+ [

# ALTER VIEW DIALECT
](alter-view-dialect.md)
+ [

# CREATE DATABASE
](create-database.md)
+ [

# CREATE TABLE
](create-table.md)
+ [

# CREATE TABLE AS
](create-table-as.md)
+ [CREATE VIEW](create-view.md)
+ [

# DESCRIBE
](describe-table.md)
+ [

# DESCRIBE VIEW
](describe-view.md)
+ [

# DROP DATABASE
](drop-database.md)
+ [

# DROP TABLE
](drop-table.md)
+ [

# DROP VIEW
](drop-view.md)
+ [

# MSCK REPAIR TABLE
](msck-repair-table.md)
+ [

# SHOW COLUMNS
](show-columns.md)
+ [

# SHOW CREATE TABLE
](show-create-table.md)
+ [

# SHOW CREATE VIEW
](show-create-view.md)
+ [SHOW DATABASES](show-databases.md)
+ [

# SHOW PARTITIONS
](show-partitions.md)
+ [

# SHOW TABLES
](show-tables.md)
+ [

# SHOW TBLPROPERTIES
](show-tblproperties.md)
+ [

# SHOW VIEWS
](show-views.md)

# DDL incompatível
<a name="unsupported-ddl"></a>

As instruções DDL a seguir não são aceitas no Athena. Para obter as instruções DDL compatíveis com as tabelas do Iceberg no Athena, consulte [Evoluir o esquema de tabelas do Iceberg](querying-iceberg-evolving-table-schema.md) e [Executar outras operações de DDL em tabelas do Iceberg](querying-iceberg-additional-operations.md).
+ ALTER INDEX
+ ALTER TABLE *table\$1name* ARCHIVE PARTITION
+ ALTER TABLE *table\$1name* CLUSTERED BY
+ ALTER TABLE *table\$1name* DROP COLUMN (compatível com as tabelas do Iceberg)
+ ALTER TABLE *table\$1name* EXCHANGE PARTITION
+ ALTER TABLE *table\$1name* NOT CLUSTERED
+ ALTER TABLE *table\$1name* NOT SKEWED
+ ALTER TABLE *table\$1name* NOT SORTED
+ ALTER TABLE *table\$1name* NOT STORED AS DIRECTORIES
+ ALTER TABLE *table\$1name* partitionSpec CHANGE COLUMNS
+ ALTER TABLE *table\$1name* partitionSpec COMPACT
+ ALTER TABLE *table\$1name* partitionSpec CONCATENATE
+ ALTER TABLE *table\$1name* partitionSpec SET FILEFORMAT
+ ALTER TABLE *table\$1name* RENAME TO (compatível com as tabelas do Iceberg)
+ ALTER TABLE *table\$1name* SET SERDEPROPERTIES
+ ALTER TABLE *table\$1name* SET SKEWED LOCATION
+ ALTER TABLE *table\$1name* SKEWED BY
+ ALTER TABLE *table\$1name* TOUCH
+ ALTER TABLE *table\$1name* UNARCHIVE PARTITION
+ COMMIT
+ CREATE INDEX
+ CRIAR PERFIL
+ CREATE TABLE *table\$1name* LIKE *existing\$1table\$1name* 
+ CREATE TEMPORARY MACRO
+ DELETE FROM
+ DESCRIBE DATABASE
+ DFS
+ DROP INDEX
+ DROP ROLE
+ DROP TEMPORARY MACRO
+ EXPORT TABLE
+ GRANT ROLE
+ IMPORT TABLE
+ LOCK DATABASE
+ LOCK TABLE
+ REVOKE ROLE
+ ROLLBACK
+ SHOW COMPACTIONS
+ SHOW CURRENT ROLES
+ SHOW GRANT
+ SHOW INDEXES
+ SHOW LOCKS
+ SHOW PRINCIPALS
+ SHOW ROLE GRANT
+ SHOW ROLES
+ MOSTRAR ESTATÍSTICAS
+ SHOW TRANSACTIONS
+ START TRANSACTION
+ UNLOCK DATABASE
+ UNLOCK TABLE

# ALTER DATABASE SET DBPROPERTIES
<a name="alter-database-set-dbproperties"></a>

Cria uma ou mais propriedades para um banco de dados. O uso de `DATABASE` e `SCHEMA` é intercambiável. Eles são iguais.

## Resumo
<a name="synopsis"></a>

```
ALTER {DATABASE|SCHEMA} database_name
  SET DBPROPERTIES ('property_name'='property_value' [, ...] )
```

## Parâmetros
<a name="parameters"></a>

**SET DBPROPERTIES ('property\$1name'='property\$1value' [, ...]**  
Especifica uma propriedade ou propriedades para o banco de dados chamado `property_name` e estabelece o valor para cada uma das propriedades, respectivamente como `property_value`. Se `property_name` já existir, o valor anterior será substituído por `property_value`.

## Exemplos
<a name="examples"></a>

```
ALTER DATABASE jd_datasets
  SET DBPROPERTIES ('creator'='John Doe', 'department'='applied mathematics');
```

```
ALTER SCHEMA jd_datasets
  SET DBPROPERTIES ('creator'='Jane Doe');
```

# ALTER TABLE ADD COLUMNS
<a name="alter-table-add-columns"></a>

Adicione uma ou mais colunas a uma tabela existente. Quando a sintaxe opcional de `PARTITION` é usada, os metadados da partição são atualizados. 

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name 
  [PARTITION 
   (partition_col1_name = partition_col1_value
   [,partition_col2_name = partition_col2_value][,...])]
  ADD COLUMNS (col_name data_type)
```

## Parâmetros
<a name="parameters"></a>

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
Cria uma partição com as combinações de nome/valor de coluna que você especificar. Coloque `partition_col_value` entre aspas somente se o tipo de dados da coluna for uma string.

**ADD COLUMNS (col\$1name data\$1type [,col\$1name data\$1type,...])**  
Adiciona colunas após colunas existentes, mas antes das colunas de partição.

## Exemplos
<a name="examples"></a>

```
ALTER TABLE events ADD COLUMNS (eventowner string)
```

```
ALTER TABLE events PARTITION (awsregion='us-west-2') ADD COLUMNS (event string)
```

```
ALTER TABLE events PARTITION (awsregion='us-west-2') ADD COLUMNS (eventdescription string)
```

## Observações
<a name="alter-table-add-columns-notes"></a>
+ Para ver uma nova coluna de tabela no painel de navegação do editor de consultas do Athena depois de executar `ALTER TABLE ADD COLUMNS`, atualize manualmente a lista de tabelas no editor e expanda a tabela outra vez.
+ `ALTER TABLE ADD COLUMNS` não funciona em colunas com o tipo de dados `date`. Para contornar esse problema, use o tipo de dados `timestamp`.

# ALTER TABLE ADD PARTITION
<a name="alter-table-add-partition"></a>

Cria uma ou mais colunas de partição para a tabela. Cada partição consiste em uma ou mais combinações de nome/valor de coluna distintas. Um diretório de dados à parte é criado para cada combinação especificada, o que pode melhorar a performance da consulta em algumas circunstâncias. As colunas particionadas não existem dentro da própria tabela de dados. Dessa forma, se usar o nome de uma coluna com o mesmo nome de uma coluna na própria tabela, você receberá um erro. Para obter mais informações, consulte [Particionar dados](partitions.md).

No Athena, uma tabela e suas partições devem usar os mesmos formatos de dados, mas os esquemas podem ser diferentes. Para obter mais informações, consulte [Atualizar tabelas com partições](updates-and-partitions.md).

Para obter informações sobre as permissões no nível do recurso necessárias nas políticas do IAM (incluindo `glue:CreatePartition`), consulte [Permissões da API do AWS Glue: referência de ações e recursos](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html) e [Configurar o acesso a bancos de dados e tabelas no AWS Glue Data Catalog](fine-grained-access-to-glue-resources.md). Para obter informações sobre solução de problemas de permissões ao usar o Athena, consulte a seção [Permissões](troubleshooting-athena.md#troubleshooting-athena-permissions) do tópico [Solucionar problemas no Athena](troubleshooting-athena.md).

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name ADD [IF NOT EXISTS]
  PARTITION
  (partition_col1_name = partition_col1_value
  [,partition_col2_name = partition_col2_value]
  [,...])
  [LOCATION 'location1']
  [PARTITION
  (partition_colA_name = partition_colA_value
  [,partition_colB_name = partition_colB_value
  [,...])]
  [LOCATION 'location2']
  [,...]
```

## Parâmetros
<a name="parameters"></a>

Ao adicionar uma partição, você especifica um ou mais pares de nome/valor de coluna para a partição e o caminho do Amazon S3 onde residem os arquivos de dados dessa partição.

**[IF NOT EXISTS]**  
Suprimirá o erro se uma partição com a mesma definição já existir.

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
Cria uma partição com as combinações de nome/valor de coluna que você especificar. Coloque `partition_col_value` entre caracteres de string somente se o tipo de dados da coluna for uma string.

**[LOCATION 'location']**  
Especifica o diretório no qual armazenar a partição definida pela instrução anterior. A cláusula `LOCATION` é opcional quando os dados usam particionamento no estilo Hive (`pk1=v1/pk2=v2/pk3=v3`). Com o particionamento no estilo Hive, o URI completo do Amazon S3 é estruturado automaticamente com base na localização da tabela, nos nomes das chaves de partição e nos valores de chave de partição. Para obter mais informações, consulte [Particionar dados](partitions.md).

## Considerações
<a name="alter-table-add-partition-considerations"></a>

O Amazon Athena não impõe um limite específico ao número de partições que você pode adicionar em uma única instrução DDL `ALTER TABLE ADD PARTITION`. No entanto, se você precisar adicionar um número significativo de partições, considere dividir a operação em lotes menores para evitar possíveis problemas de desempenho. O exemplo a seguir usa comandos sucessivos para adicionar partições individualmente e usa `IF NOT EXISTS` para evitar a adição de duplicatas.

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')
```

 Ao trabalhar com partições no Athena, lembre-se dos seguintes pontos:
+ Embora o Athena ofereça suporte a consulta a tabelas do AWS Glue com 10 milhões de partições, o Athena não pode ler mais de 1 milhão de partições em uma única varredura.
+ Para otimizar suas consultas e reduzir o número de partições verificadas, considere estratégias como remoção de partições ou uso de índices de partição.

Para considerações adicionais sobre como trabalhar com partições no Athena, consulte [Particionar dados](partitions.md). 

## Exemplos
<a name="examples"></a>

O exemplo a seguir adiciona uma única partição a uma tabela para dados particionados no estilo Hive.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-14', country = 'IN');
```

O exemplo a seguir adiciona múltiplas partições a uma tabela para dados particionados no estilo Hive.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN')
  PARTITION (dt = '2016-06-01', country = 'IN');
```

Quando a tabela não serve para dados particionados no estilo Hive, a cláusula `LOCATION` é obrigatória e deve ser o URI completo do Amazon S3 para o prefixo que contém os dados da partição.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/'
  PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';
```

Para ignorar erros quando a partição já existe, use a cláusula `IF NOT EXISTS`, como no exemplo a seguir.

```
ALTER TABLE orders ADD IF NOT EXISTS
  PARTITION (dt = '2016-05-14', country = 'IN');
```

## Arquivos de zero byte no formato `_$folder$`
<a name="alter-table-add-partition-zero-byte-folder-files"></a>

Se você executar uma instrução `ALTER TABLE ADD PARTITION` e especificar erroneamente uma partição que já existe e uma localização incorreta do Amazon S3, serão criados arquivos de espaço reservado de zero byte do formato `partition_value_$folder$` no Amazon S3. Você precisa remover esses arquivos manualmente.

Para evitar que isso aconteça, use a sintaxe `ADD IF NOT EXISTS` na instrução `ALTER TABLE ADD PARTITION`, como no exemplo a seguir.

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]
```

# ALTER TABLE CHANGE COLUMN
<a name="alter-table-change-column"></a>

Altera o nome, o tipo, a ordem ou o comentário de uma coluna em uma tabela.

## Resumo
<a name="alter-table-change-column-synopsis"></a>

```
ALTER TABLE [db_name.]table_name
  CHANGE [COLUMN] col_old_name col_new_name column_type 
  [COMMENT col_comment] [FIRST|AFTER column_name]
```

## Exemplos
<a name="alter-table-change-column-example"></a>

O exemplo a seguir altera o nome da coluna de `area` para `zip`, torna o tipo de dados inteiro e coloca a coluna renomeada depois da coluna `id`.

```
ALTER TABLE example_table CHANGE COLUMN area zip int AFTER id
```

O exemplo a seguir adiciona um comentário à coluna `zip` nos metadados para `example_table`. Para ver o comentário, use o comando da AWS CLI [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/get-table-metadata.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/get-table-metadata.html) ou acesse o esquema da tabela no console do AWS Glue. 

```
ALTER TABLE example_table CHANGE COLUMN zip zip int COMMENT 'USA zipcode'
```

# ALTER TABLE DROP PARTITION
<a name="alter-table-drop-partition"></a>

Descarta uma ou mais partições especificadas para a tabela nomeada.

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (partition_spec) [, PARTITION (partition_spec)]
```

## Parâmetros
<a name="alter-table-drop-partition-parameters"></a>

**[SE EXISTIR]**  
Suprime a mensagem de erro se a partição especificada não existir.

**PARTIÇÃO (partition\$1spec)**  
Cada `partition_spec` especifica uma combinação de nome de coluna e valor no formato `partition_col_name = partition_col_value [,...]`.

## Exemplos
<a name="alter-table-drop-partition-examples"></a>

```
ALTER TABLE orders 
DROP PARTITION (dt = '2014-05-14', country = 'IN');
```

```
ALTER TABLE orders 
DROP PARTITION (dt = '2014-05-14', country = 'IN'), PARTITION (dt = '2014-05-15', country = 'IN');
```

## Observações
<a name="alter-table-drop-partition-notes"></a>

A instrução `ALTER TABLE DROP PARTITION` não fornece uma sintaxe única para descartar todas as partições de uma só vez nem suporta critérios de filtragem para especificar um intervalo de partições a serem eliminadas.

Como solução de contorno, use as ações [GetPartitions](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-GetPartitions) e [BatchDeletePartition](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-BatchDeletePartition) da API do AWS Glue no desenvolvimento de scripts. A ação `GetPartitions` suporta expressões de filtro complexas como as de uma expressão `WHERE` em SQL. Depois de usar `GetPartitions` para criar uma lista filtrada das partições a serem excluídas, você pode usar a ação `BatchDeletePartition` para excluir as partições em lotes de 25.

# ALTER TABLE RENAME PARTITION
<a name="alter-table-rename-partition"></a>

Renomeia um valor de partição.

**nota**  
ALTER TABLE RENAME PARTITION não renomeia as colunas de partição. Para alterar o nome de uma coluna de partição, você pode usar o console do AWS Glue. Para obter mais informações, consulte [Renomear uma coluna de partição no AWS Glue](#alter-table-rename-partition-column-name) adiante neste documento. 

## Resumo
<a name="synopsis"></a>

Para a tabela chamada `table_name`, renomeia o valor da partição especificado por `partition_spec` para o valor especificado por `new_partition_spec`.

```
ALTER TABLE table_name PARTITION (partition_spec) RENAME TO PARTITION (new_partition_spec)
```

## Parâmetros
<a name="parameters"></a>

**PARTIÇÃO (partition\$1spec)**  
Cada `partition_spec` especifica uma combinação de nome de coluna e valor no formato `partition_col_name = partition_col_value [,...]`.

## Exemplos
<a name="examples"></a>

```
ALTER TABLE orders 
PARTITION (dt = '2014-05-14', country = 'IN') RENAME TO PARTITION (dt = '2014-05-15', country = 'IN');
```

## Renomear uma coluna de partição no AWS Glue
<a name="alter-table-rename-partition-column-name"></a>

Use o procedimento a seguir para renomear colunas de partição no console do AWS Glue.

**Para renomear uma coluna de partição de tabela no console do AWS Glue**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, selecione **Tabelas**.

1. Na página **Tabelas**, use a caixa de pesquisa **Filtrar tabelas** para localizar a tabela que você deseja alterar.

1. Na coluna **Nome**, escolha o link da tabela que você deseja alterar.

1. Na página de detalhes da tabela, na seção **Esquema**, siga um destes procedimentos:
   + Para fazer a alteração do nome no formato JSON, escolha **Editar esquema como JSON**.
   + Para alterar o nome diretamente, escolha **Editar esquema**. Esse procedimento escolhe **Editar esquema**.

1. Marque a caixa de seleção referente à coluna particionada que você deseja renomear e escolha **Editar**.

1. Na caixa de diálogo **Editar entrada do esquema**, em **Nome**, insira o novo nome para a coluna de partição.

1. Selecione **Salvar como nova versão da tabela**. Essa ação atualiza o nome da coluna da partição e preserva o histórico de evolução do esquema sem criar outra cópia física dos dados.

1. Para comparar as versões da tabela, na página de detalhes da tabela, escolha **Ações** e, em seguida, **Comparar versões**.

## Recursos adicionais
<a name="alter-table-rename-partition-additional-resources"></a>

 Para obter mais informações sobre particionamento, consulte [Particionar dados](partitions.md).

# ALTER TABLE REPLACE COLUMNS
<a name="alter-table-replace-columns"></a>

Remove todas as colunas existentes de uma tabela criada com [LazySimpleSerDe](lazy-simple-serde.md) e as substitui pelo conjunto de colunas especificado. Quando a sintaxe opcional de `PARTITION` é usada, os metadados da partição são atualizados. Você também pode usar `ALTER TABLE REPLACE COLUMNS` para descartar as colunas especificando apenas as colunas que deseja manter.

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name 
  [PARTITION 
   (partition_col1_name = partition_col1_value
   [,partition_col2_name = partition_col2_value][,...])]
  REPLACE COLUMNS (col_name data_type [, col_name data_type, ...])
```

## Parâmetros
<a name="parameters"></a>

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
Especifica uma partição com as combinações de nome/valor de coluna que você especificar. Coloque `partition_col_value` entre aspas somente se o tipo de dados da coluna for uma string.

**REPLACE COLUMNS (col\$1name data\$1type [,col\$1name data\$1type,...])**  
Substitui as colunas existentes pelos nomes e tipos de dados de coluna especificados.

## Observações
<a name="alter-table-replace-columns-notes"></a>
+ Para ver a alteração nas colunas de tabela no painel de navegação do editor de consultas do Athena após executar `ALTER TABLE REPLACE COLUMNS`, pode ser necessário atualizar manualmente a tabela no editor e depois expandir a tabela outra vez.
+ `ALTER TABLE REPLACE COLUMNS` não funciona em colunas com o tipo de dados `date`. Para contornar esse problema, use o tipo de dados `timestamp` na tabela.
+ Observe que, mesmo que se você for substituir apenas uma coluna, a sintaxe deverá ser `ALTER TABLE table-name REPLACE COLUMNS`, com *columns* no plural. Você deve especificar não apenas a coluna que deseja substituir, mas as colunas que deseja manter, do contrário, as colunas que não especificadas serão descartadas. Essa sintaxe e esse comportamento derivam da DDL do Apache Hive. Para referência, consulte [Add/Replace Columns](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns) (Adicionar/substituir colunas) na documentação do Apache. 

## Exemplo
<a name="alter-table-replace-columns-example"></a>

No exemplo a seguir, a tabela `names_cities`, que foi criada usando o [LazySimpleSerDe](lazy-simple-serde.md), tem três colunas chamadas `col1`, `col2` e `col3`. Todas as colunas são do tipo `string`. Para mostrar as colunas na tabela, o comando a seguir usa a instrução [SHOW COLUMNS](show-columns.md).

```
SHOW COLUMNS IN names_cities
```

Resultado da consulta:

```
col1
col2
col3
```

O comando `ALTER TABLE REPLACE COLUMNS` a seguir substitui os nomes das colunas por `first_name`,`last_name` e `city`. Os dados de origem subjacentes não são afetados.

```
ALTER TABLE names_cities
REPLACE COLUMNS (first_name string, last_name string, city string)
```

Para testar o resultado, `SHOW COLUMNS` é executado novamente.

```
SHOW COLUMNS IN names_cities
```

Resultado da consulta:

```
first_name
last_name
city
```

Outra maneira de mostrar os novos nomes de coluna é exibir a [previsualização da tabela](creating-tables-showing-table-information.md) no editor de consultas do Athena ou executar o sua própria consulta `SELECT`.

# ALTER TABLE SET LOCATION
<a name="alter-table-set-location"></a>

Altera o local da tabela chamada `table_name` e, como opção, uma partição com `partition_spec`.

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name [ PARTITION (partition_spec) ] SET LOCATION 'new location'
```

## Parâmetros
<a name="alter-table-set-location-parameters"></a>

**PARTIÇÃO (partition\$1spec)**  
Especifica a partição com parâmetros `partition_spec` cujo local você deseja alterar. O `partition_spec` especifica uma combinação nome/valor na forma `partition_col_name = partition_col_value`.

**SET LOCATION 'new location'**  
Especifica o novo local, que deve ser um local do Amazon S3. Para obter informações sobre sintaxe, consulte [Local da tabela no Amazon S3](tables-location-format.md).

## Exemplos
<a name="alter-table-set-location-examples"></a>

```
ALTER TABLE customers PARTITION (zip='98040', state='WA') SET LOCATION 's3://amzn-s3-demo-bucket/custdata/';
```

# ALTER TABLE SET TBLPROPERTIES
<a name="alter-table-set-tblproperties"></a>

Adiciona propriedades de metadados personalizadas ou predefinidas a uma tabela e define seus valores atribuídos. Para ver as propriedades em uma tabela, use o comando [SHOW TBLPROPERTIES](show-tblproperties.md).

As [tabelas gerenciadas](https://cwiki.apache.org/confluence/display/Hive/Managed+vs.+External+Tables) do Apache Hive não são permitidas, portanto, a definição de `'EXTERNAL'='FALSE'` não tem efeito.

## Resumo
<a name="synopsis"></a>

```
ALTER TABLE table_name SET TBLPROPERTIES ('property_name' = 'property_value' [ , ... ])
```

## Parâmetros
<a name="parameters"></a>

**SET TBLPROPERTIES ('property\$1name' = 'property\$1value' [ , ... ])**  
Especifica as propriedades de metadados a serem adicionadas como `property_name` e o valor para cada uma como `property value`. Se `property_name` já existir, o valor será definido como o `property_value` recém-especificado.  
As propriedades de tabela predefinidas a seguir têm usos especiais.     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/alter-table-set-tblproperties.html)

## Exemplos
<a name="examples"></a>

O exemplo a seguir adiciona uma nota de comentário às propriedades da tabela.

```
ALTER TABLE orders 
SET TBLPROPERTIES ('notes'="Please don't drop this table.");
```

O exemplo a seguir modifica a tabela `existing_table` para usar o formato de arquivo Parquet com compactação ZSTD nível 4.

```
ALTER TABLE existing_table 
SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = 4)
```

# ALTER VIEW DIALECT
<a name="alter-view-dialect"></a>

Adiciona ou remove um dialeto do mecanismo de uma visualização do AWS Glue Data Catalog. Aplica-se somente às visualizações do AWS Glue Data Catalog. Requer permissões do administrador ou definidor do `Lake Formation`.

Para obter mais informações sobre visualizações do AWS Glue Data Catalog, consulte [Usar visualizações do Catálogo de Dados no Athena](views-glue.md).

## Sintaxe
<a name="alter-view-dialect-syntax"></a>

```
ALTER VIEW name [ FORCE ] [ ADD|UPDATE ] DIALECT AS query
```

```
ALTER VIEW name [ DROP ] DIALECT
```

**FORCE**  
A palavra-chave `FORCE` faz com que as informações conflitantes do dialeto do mecanismo em uma visualização sejam substituídas pela nova definição. A palavra-chave `FORCE` é útil quando uma atualização em uma visualização do Catálogo de Dados resulta em definições de visualizações conflitantes entre os dialetos dos mecanismos existentes. Suponha que uma visualização do Catálogo de Dados tenha os dialetos do Athena e do Amazon Redshift e que a atualização resulte em um conflito com o Amazon Redshift na definição de visualização. Nesse caso, é possível usar a palavra-chave `FORCE` para permitir que a atualização seja concluída e marcar o dialeto do Amazon Redshift como obsoleto. Quando mecanismos marcados como obsoletos consultam a visualização, a consulta apresenta falhas. Os mecanismos lançam uma exceção para rejeitar resultados obsoletos. Para corrigir isso, atualize os dialetos obsoletos na visualização.

**ADD**  
Adiciona um novo dialeto do mecanismo à visualização do Catálogo de Dados. O mecanismo especificado ainda não deve existir na visualização do Catálogo de Dados.

**UPDATE**  
Atualiza um dialeto do mecanismo que já existe na visualização do Catálogo de Dados.

**DROP**  
Descarta um dialeto do mecanismo existente de uma visualização do Catálogo de Dados. Após descartar um mecanismo de uma visualização do Catálogo de Dados, a visualização do Catálogo de Dados não poderá ser consultada pelo mecanismo que foi descartado. Outros dialetos do mecanismo na visualização ainda podem consultar a visualização.

**DIALECT AS**  
Apresenta uma consulta SQL específica para o mecanismo.

## Exemplos
<a name="alter-view-dialect-syntax-examples"></a>

```
ALTER VIEW orders_by_date FORCE ADD DIALECT 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
GROUP BY orderdate
```

```
ALTER VIEW orders_by_date FORCE UPDATE DIALECT 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
GROUP BY orderdate
```

```
ALTER VIEW orders_by_date DROP DIALECT
```

# CREATE DATABASE
<a name="create-database"></a>

Cria um banco de dados. O uso de `DATABASE` e `SCHEMA` é intercambiável. Eles significam a mesma coisa.

**nota**  
Para ver um exemplo de como criar um banco de dados, criar uma tabela e executar uma consulta `SELECT` na tabela do Athena, consulte [Conceitos básicos](getting-started.md).

## Resumo
<a name="synopsis"></a>

```
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] database_name
  [COMMENT 'database_comment']
  [LOCATION 'S3_loc']
  [WITH DBPROPERTIES ('property_name' = 'property_value') [, ...]]
```

Para obter restrições sobre nomes de bancos de dados no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).

## Parâmetros
<a name="parameters"></a>

**[IF NOT EXISTS]**  
Fará o erro ser suprimido se um banco de dados chamado `database_name` já existir.

**[COMMENT database\$1comment]**  
Estabelece o valor de metadados para a propriedade de metadados interna chamada `comment` e o valor fornecido por você para `database_comment`. No AWS Glue, o conteúdo de `COMMENT` é gravado no campo `Description` das propriedades do banco de dados.

**[LOCATION S3\$1loc]**  
Especifica o local onde arquivos de banco de dados e metastore existirão como `S3_loc`. O local deve ser um local do Amazon S3.

**[WITH DBPROPERTIES ('property\$1name' = 'property\$1value') [, ...] ]**  
Permite especificar propriedades de metadados personalizados para a definição do banco de dados.

## Exemplos
<a name="examples"></a>

```
CREATE DATABASE clickstreams;
```

```
CREATE DATABASE IF NOT EXISTS clickstreams
  COMMENT 'Site Foo clickstream data aggregates'
  LOCATION 's3://amzn-s3-demo-bucket/clickstreams/'
  WITH DBPROPERTIES ('creator'='Jane D.', 'Dept.'='Marketing analytics');
```

## Visualizar as propriedades do banco de dados
<a name="create-database-viewing-properties"></a>

Para visualizar as propriedades de um banco de dados criado no AWSDataCatalog usando `CREATE DATABASE`, você pode usar o comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html) da AWS CLI, como no seguinte exemplo:

```
aws glue get-database --name <your-database-name>
```

Na saída do JSON, o resultado é semelhante ao seguinte:

```
{
    "Database": {
        "Name": "<your-database-name>",
        "Description": "<your-database-comment>",
        "LocationUri": "s3://amzn-s3-demo-bucket",
        "Parameters": {
            "<your-database-property-name>": "<your-database-property-value>"
        },
        "CreateTime": 1603383451.0,
        "CreateTableDefaultPermissions": [
            {
                "Principal": {
                    "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                },
                "Permissions": [
                    "ALL"
                ]
            }
        ]
    }
}
```

Para obter mais informações sobre a AWS CLI, consulte o [Manual do usuário da AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/).

# CREATE TABLE
<a name="create-table"></a>

Cria uma tabela com o nome e os parâmetros especificados por você. 

**nota**  
Esta página contém informações de referência resumidas. Para obter mais informações sobre como criar tabelas no Athena e um exemplo de instrução `CREATE TABLE`, consulte [Criar tabelas no Athena](creating-tables.md). Para ver um exemplo de como criar um banco de dados, criar uma tabela e executar uma consulta `SELECT` na tabela do Athena, consulte [Conceitos básicos](getting-started.md).

## Resumo
<a name="synopsis"></a>

```
CREATE EXTERNAL TABLE [IF NOT EXISTS]
 [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
 [ROW FORMAT row_format]
 [STORED AS file_format] 
 [WITH SERDEPROPERTIES (...)]
 [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
 [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['encryption_option'='SSE_S3 | SSE_KMS | CSE_KMS',] ['kms_key'='aws_kms_key_arn',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]
```

## Parâmetros
<a name="parameters"></a>

**EXTERNAL**  
Especifica que a tabela é baseada em um arquivo de dados subjacente existente no Amazon S3, no `LOCATION` que você especificar. Exceto ao criar tabelas do [Iceberg](querying-iceberg-creating-tables.md), use sempre a palavra-chave `EXTERNAL`. Se você usar `CREATE TABLE` sem a palavra-chave `EXTERNAL` para tabelas que não são do Iceberg, o Athena emitirá um erro. Quando você cria uma tabela externa, os dados referenciados devem estar em conformidade com o formato padrão ou o formato especificado por você com as cláusulas `ROW FORMAT`, `STORED AS` e `WITH SERDEPROPERTIES`.

**[IF NOT EXISTS]**  
Este parâmetro verifica se já existe uma tabela com o mesmo nome. Se existir, o parâmetro retornará `TRUE` e o Amazon Athena cancelará a ação `CREATE TABLE`. Como o cancelamento ocorre antes que o Athena chame o catálogo de dados, ele não emite um evento AWS CloudTrail.

**[db\$1name.]table\$1name**  
Especifica um nome para a tabela a ser criada. O parâmetro `db_name` opcional especifica o banco de dados no qual a tabela existe. Se omitido, o banco de dados atual será assumido. Se o nome da tabela inclui números, coloque `table_name` entre aspas, por exemplo `"table123"`. Se `table_name` começar com um sublinhado, use acentos graves, por exemplo, ``_mytable``. Os caracteres especiais (que não sejam sublinhado) não são compatíveis.  
Os nomes de tabela do Athena não diferenciam maiúsculas de minúsculas. No entanto, se você trabalhar com o Apache Spark, o Spark exigirá nomes de tabela em letras minúsculas. Para restrições sobre nomes de tabelas no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).

**[ ( col\$1name data\$1type [COMMENT col\$1comment] [, ...] ) ]**  
Especifica o nome de cada coluna a ser criada, além do tipo de dados da coluna. Os nomes de coluna não permitem caracteres especiais além de sublinhado `(_)`. Se `col_name` começar com um sublinhado, coloque o nome da coluna entre acentos graves, por exemplo ``_mycolumn``. Para restrições sobre nomes de colunas no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).  
O valor `data_type` pode ser qualquer um dos seguintes:  
+ `boolean` – os valores são `true` e `false`.
+ `tinyint`: um inteiro com sinal de 8 bits no formato de complemento de dois, com um valor mínimo de -2^7 e um valor máximo de 2^7-1.
+ `smallint`: um inteiro com sinal de 16 bits no formato de complemento de dois, com um valor mínimo de -2^15 e um valor máximo de 2^15-1.
+ `int`: nas consultas em Data Definition Language (DDL), como `CREATE TABLE`, use a palavra-chave `int` para representar um número inteiro. Em outras consultas, use a palavra-chave `integer`, em que `integer` é representado por um valor com sinal de 32 bits no formato de complemento de dois, com um valor mínimo de -2^31 e um valor máximo de 2^31-1. No driver JDBC, `integer` é retornado para garantir a compatibilidade com os aplicativos de análise de negócios.
+ `bigint`: um inteiro com sinal de 64 bits no formato de complemento de dois, com um valor mínimo de -2^63 e um valor máximo de 2^63-1.
+ `double`: um número com sinal de ponto flutuante de precisão dupla de 64 bits. O intervalo é de 4.94065645841246544e-324d a 1.79769313486231570e\$1308d, positivo ou negativo. `double` segue o padrão para aritmética de ponto flutuante do IEEE (IEEE 754).
+ `float`: um número com sinal de ponto flutuante de precisão única de 32 bits. O intervalo é de 1.40129846432481707e-45 a 3.40282346638528860e\$138, positivo ou negativo. `float` segue o padrão para aritmética de ponto flutuante do IEEE (IEEE 754). Equivalente a `real` no Presto. No Athena, use `float` nas instruções DDL, como `CREATE TABLE`, e `real` nas funções SQL, como `SELECT CAST`. O crawler do AWS Glue retorna os valores em `float`, e o Athena converte os tipos `real` e `float` internamente (leia as notas de release [5 de junho de 2018](release-notes.md#release-note-2018-06-05)).
+ `decimal [ (precision, scale) ]`, onde `precision` é o número total de dígitos e `scale` (opcional) é o número de dígitos na parte fracionada, o padrão é 0. Por exemplo, use estas definições de tipo: `decimal(11,5)`, `decimal(15)`. O valor máximo para *precisão* é 38 e o valor máximo para *escala* é 38.

  Para especificar valores decimais como literais, como ao selecionar filas com um valor decimal específico em uma expressão de consulta DDL, especifique a definição de tipo `decimal` e liste o valor decimal como um literal (em aspas simples) na consulta, como neste exemplo: `decimal_value = decimal '0.12'`.
+ `char` – os dados de caractere de comprimento fixo, com um tamanho especificado entre 1 e 255, como `char(10)`. Para obter mais informações, consulte [CHAR Hive data type](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-char) (Tipo de dado CHAR do Hive).
+ `varchar` – os dados de caractere de comprimento variável, com um tamanho especificado entre 1 e 65535, como `varchar(10)`. Para obter mais informações, consulte [VARCHAR Hive data type](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-varchar) (Tipo de dado VARCHAR do Hive). 
+ `string`: um literal de string entre aspas simples ou duplas.
**nota**  
Os tipos de dados que não são de string não podem ser convertidos em `string` no Athena. Em vez disso, converta-os em `varchar`.
+ `binary`: (para dados em Parquet)
+ `date` – Uma data no formato ISO, como `YYYY-MM-DD`. Por exemplo, `date '2008-09-15'`. Uma exceção é o OpenCSVSerDe, que usa o número de dias decorridos desde 1° de janeiro de 1970. Para obter mais informações, consulte [Open CSV SerDe para processamento de CSV](csv-serde.md).
+ `timestamp`: instante de data e hora em um formato compatível com [https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html](https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html) até uma resolução máxima de milissegundos, como `yyyy-MM-dd HH:mm:ss[.f...]`. Por exemplo, `timestamp '2008-09-15 03:04:05.324'`. Uma exceção é o OpenCSVSerDe, que usa os dados de `TIMESTAMP` no formato numérico UNIX (por exemplo, `1579059880000`). Para obter mais informações, consulte [Open CSV SerDe para processamento de CSV](csv-serde.md).
+ `array` < data\$1type >
+ `map` < primitive\$1type, data\$1type >
+ `struct` < col\$1name : data\$1type [comment col\$1comment] [, ...] >

**[COMMENT table\$1comment]**  
Cria a propriedade da tabela `comment` e a preenche com o `table_comment` especificado por você.

**[PARTITIONED BY (col\$1name data\$1type [ COMMENT col\$1comment ], ... ) ]**  
Cria uma tabela particionada com uma ou mais colunas de partição que tenham `col_name`, `data_type` e `col_comment` especificados. A tabela pode ter uma ou mais partições, que consistem em uma combinação distinta de nome e valor de coluna. Um diretório de dados à parte é criado para cada combinação especificada, o que pode melhorar a performance da consulta em algumas circunstâncias. As colunas particionadas não existem na própria tabela de dados. Se você usar um valor para `col_name` que é o mesmo valor usado na coluna da tabela, obterá um erro. Para obter mais informações, consulte [Particionar dados](partitions.md).  
Depois de criar uma tabela com partições, execute uma consulta que consista na cláusula [MSCK REPAIR TABLE](msck-repair-table.md) para atualizar metadados de partição, por exemplo, `MSCK REPAIR TABLE cloudfront_logs;`. Para partições que não são compatíveis com o Hive, use o [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) a fim de carregar as partições para que você consiga consultar os dados.

**[CLUSTERED BY (col\$1name, col\$1name, ...) INTO num\$1buckets BUCKETS]**  
Divide, com ou sem particionamento, os dados nas colunas `col_name` especificadas em subconjuntos de dados chamados *buckets*. O parâmetro `num_buckets` especifica o número de buckets que serão criados. A criação de buckets pode melhorar a performance de algumas consultas em grandes conjuntos de dados.

**[ROW FORMAT row\$1format]**  
Especifica o formato de linha da tabela e os dados de origem subjacente, se aplicável. Para `row_format`, você pode especificar um ou mais delimitadores com a cláusula `DELIMITED` ou, como alternativa, usar a cláusula `SERDE` conforme descrito abaixo. Se `ROW FORMAT` for omitido ou `ROW FORMAT DELIMITED` for especificado, um SerDe nativo será usado.  
+ [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]
+ [DELIMITED COLLECTION ITEMS TERMINATED BY char]
+ [MAP KEYS TERMINATED BY char]
+ [LINES TERMINATED BY char]
+ [NULL DEFINED AS char]

  Disponível somente com o Hive 0.13 e quando o formato de arquivo em STORED AS (ARMAZENADO COMO) for `TEXTFILE`.
 **--OU--**   
+ SERDE 'serde\$1name' [WITH SERDEPROPERTIES ("property\$1name" = "property\$1value", "property\$1name" = "property\$1value" [, ...] )]

  O `serde_name` indica o SerDe a ser usado. A cláusula `WITH SERDEPROPERTIES` permite fornecer uma ou mais propriedades personalizadas permitidas pelo SerDe.

**[STORED AS formato do arquivo]**  
Especifica o formato de arquivo para dados da tabela. Se omitido, `TEXTFILE` será o padrão. As opções de `file_format` são:  
+ SEQUENCEFILE
+ TEXTFILE
+ RCFILE
+ ORC
+ PARQUET
+ AVRO
+ ION
+ INPUTFORMAT input\$1format\$1classname OUTPUTFORMAT output\$1format\$1classname

**[LOCATION 's3://amzn-s3-demo-bucket/[folder]/']**  
Especifica o local dos dados subjacentes no Amazon S3 dos quais a tabela é criada. O caminho do local deve ser um nome de bucket ou um nome de bucket e uma ou mais pastas. Se você estiver usando partições, especifique a raiz dos dados particionados. Para obter mais informações sobre a localização da tabela, consulte [Especificar um local de tabela no Amazon S3](tables-location-format.md). Para obter informações sobre formatos de dados e permissões, consulte [Considerações sobre o Amazon S3](creating-tables.md#s3-considerations).   
Use uma barra à direita para a pasta ou o bucket. Não use nomes de arquivo ou caracteres glob.  
 **Use:**  
`s3://amzn-s3-demo-bucket/`  
`s3://amzn-s3-demo-bucket/folder/`  
`s3://amzn-s3-demo-bucket/folder/anotherfolder/`  
 **Não use:**  
`s3://amzn-s3-demo-bucket`  
`s3://amzn-s3-demo-bucket/*`  
`s3://amzn-s3-demo-bucket/mydatafile.dat`

**[TBLPROPERTIES ( ['has\$1encrypted\$1data'='true \$1 false',] ['encryption\$1option'='SSE\$1S3 \$1 SSE\$1KMS \$1 CSE\$1KMS',] ['kms\$1key'='aws\$1kms\$1key\$1arn',] ['classification'='classification\$1value',] property\$1name=property\$1value [, ...] ) ]**  
Especifica pares de chave/valor de metadados personalizados para a definição da tabela, além das propriedades da tabela predefinidas, como `"comment"`.  
**has\$1encrypted\$1data**: o Athena tem uma propriedade integrada, `has_encrypted_data`. Defina essa propriedade como `true` para indicar que o conjunto de dados subjacente especificado por `LOCATION` está criptografado com CSE-KMS. Se omitido e se as configurações do grupo de trabalho não substituírem as configurações do lado do cliente, a pressuposição será `false`. Se omitido ou definido como `false` quando os dados subjacentes estiverem criptografados, a consulta resultará em um erro. Para obter mais informações, consulte [Criptografia em repouso](encryption.md).  
**encryption\$1option**: defina essa propriedade como `SSE_S3`, `SSE_KMS` ou `CSE_KMS` para indicar o nível mais alto de criptografia usado no conjunto de dados subjacente especificado por `LOCATION`. Para obter mais informações, consulte [Criptografia em repouso](encryption.md).  
**kms\$1key**: defina essa propriedade como o ARN da chave do AWS KMS usada para criptografar e descriptografar arquivos de dados da tabela. O Athena usa essa chave para criptografar arquivos de dados de tabela ao gravar com criptografia `SSE_KMS` ou `CSE_KMS` e para descriptografar arquivos de dados de tabela criptografados com CSE-KMS. Essa propriedade somente é necessária quando `encryption_option` é definido como `SSE_KMS` ou `CSE_KMS`. Para obter mais informações, consulte [Criptografia em repouso](encryption.md).  
**classificação**: as tabelas criadas para o Athena no console do CloudTrail adicionam `cloudtrail` como um valor para a propriedade `classification`. Para executar trabalhos ETL, o AWS Glue requer a criação de uma tabela com a propriedade `classification` para indicar o tipo de dados do AWS Glue como `csv`, `parquet`, `orc`, `avro` ou `json`. Por exemplo, `'classification'='csv'`. Os trabalhos ETL falharão se você não especificar essa propriedade. Você poderá especificá-la mais tarde usando o console do AWS Glue, a API ou a CLI. Para obter mais informações, consulte [Criação de tabelas para trabalhos de ETL](schema-classifier.md) e [Criar trabalhos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job.html) no *Guia do desenvolvedor do AWS Glue*.  
**compression\$1level**: a propriedade `compression_level` especifica o nível de compactação a ser usado. Essa propriedade se aplica apenas à compactação ZSTD. Os valores possíveis são de 1 a 22. O valor padrão é 3. Para obter mais informações, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).  
Para obter mais informações sobre outras propriedades de tabelas, consulte [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md).

## Exemplos
<a name="create-table-examples"></a>

A instrução de exemplo `CREATE TABLE` a seguir cria uma tabela com base em dados de planetas separados por tabulações armazenados no Amazon S3. 

```
CREATE EXTERNAL TABLE planet_data (
  planet_name string,
  order_from_sun int,
  au_to_sun float,
  mass float,
  gravity_earth float,
  orbit_years float,
  day_length float
  )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/tsv/'
```

Observe os seguintes pontos:
+ A cláusula `ROW FORMAT DELIMITED` indica que os dados são delimitados por um caractere específico.
+ A cláusula `FIELDS TERMINATED BY '\t'` especifica que os campos nos dados do TSV sejam separados pelo caractere de tabulação ('\$1t').
+ A cláusula `STORED AS TEXTFILE` indica que os dados sejam armazenados como arquivos de texto simples no Amazon S3.

Para consultar os dados, você pode usar uma instrução simples `SELECT` como a seguinte:

```
SELECT * FROM planet_data
```

Para usar o exemplo para criar sua própria tabela TSV no Athena, substitua os nomes das tabelas e colunas pelos nomes e tipos de dados de sua própria tabela e colunas e atualize a cláusula `LOCATION` para apontar para o caminho do Amazon S3 em que seus arquivos TSV estão armazenados.

Para obter mais informações sobre como criar tabelas, consulte [Criar tabelas no Athena](creating-tables.md).

# CREATE TABLE AS
<a name="create-table-as"></a>

Cria uma tabela preenchida com os resultados de uma consulta [SELECT](select.md). Para criar uma tabela vazia, use [CREATE TABLE](create-table.md). `CREATE TABLE AS` combina uma instrução DDL `CREATE TABLE` com uma instrução DML `SELECT` e, portanto, tecnicamente contém DDL e DML. Observe que, embora `CREATE TABLE AS` esteja agrupado aqui com outras instruções DDL, as consultas CTAS no Athena são tratadas como DML para fins de cotas de serviço. Para obter informações sobre as cotas de serviço do Athena, consulte [Service Quotas](service-limits.md).

**nota**  
Para instruções CTAS, a configuração esperada do proprietário do bucket não se aplica ao local da tabela de destino no Amazon S3. A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Para ter mais informações, consulte [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).

Para obter outras informações sobre `CREATE TABLE AS` que não fazem parte do escopo deste tópico de referência, consulte [Criar uma tabela com base em resultados de consultas (CTAS)](ctas.md).

**Topics**
+ [

## Resumo
](#synopsis)
+ [

## Propriedades da tabela CTAS
](#ctas-table-properties)
+ [

## Exemplos
](#ctas-table-examples)

## Resumo
<a name="synopsis"></a>

```
CREATE TABLE table_name
[ WITH ( property_name = expression [, ...] ) ]
AS query
[ WITH [ NO ] DATA ]
```

Em que:

**COM ( property\$1name = expression [, ...] )**  
Uma lista de propriedades opcionais da tabela CTAS, algumas das quais são específicas do formato de armazenamento de dados. Consulte [Propriedades da tabela CTAS](#ctas-table-properties).

**consulta**  
A consulta [SELECT](select.md) que é usada para criar uma tabela.  
Se você planeja criar uma consulta com partições, especifique os nomes das colunas particionadas por último na lista de colunas na `SELECT` instrução.

**[ WITH [ NO ] DATA ]**  
Se `WITH NO DATA` for usado, uma tabela vazia com o mesmo esquema da tabela original será criada.

**nota**  
Para incluir cabeçalhos de coluna na saída do resultado da consulta, você pode usar uma consulta `SELECT` simples em vez de uma consulta CTAS. Você pode recuperar os resultados no local dos resultados da consulta ou baixá-los diretamente usando o console do Athena. Para ter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). 

## Propriedades da tabela CTAS
<a name="ctas-table-properties"></a>

Cada tabela CTAS no Athena tem uma lista de propriedades opcionais que você especifica usando `WITH (property_name = expression [, ...] )`. Para obter mais informações sobre como usar esses parâmetros, consulte [Exemplos de consultas CTAS](ctas-examples.md).

** `WITH (property_name = expression [, ...], )` **    
 `table_type = ['HIVE', 'ICEBERG']`   
Opcional. O padrão é `HIVE`. Especifica o tipo de tabela da tabela resultante.  
Exemplo:  

```
WITH (table_type ='ICEBERG')
```  
 `external_location = [location]`   
Como as tabelas do Iceberg não são externas, essa propriedade não se aplicará a elas. Para definir o local raiz de uma tabela do Iceberg em uma instrução CTAS, use a propriedade `location`, que será descrita posteriormente nesta seção.
Opcional. O local no qual o Athena salvará sua consulta CTAS no Amazon S3.  
Exemplo:  

```
 WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')
```
O Athena não usa o mesmo caminho duas vezes para os resultados das consultas. Se você especificar o local manualmente, verifique se o local especificado no Amazon S3 não contém dados. O Athena nunca tenta excluir os dados. Para usar o mesmo local novamente, exclua os dados manualmente. Caso contrário, a consulta CTAS falhará.  
Se você executar uma consulta CTAS que especifica um `external_location` em um grupo de trabalho que [impõe um local para os resultados de consultas](workgroups-settings-override.md), a consulta falhará com uma mensagem de erro. Para ver o local dos resultados de consultas especificado para o grupo de trabalho, [consulte os detalhes do grupo de trabalho](viewing-details-workgroups.md).  
Se o grupo de trabalho substituir a configuração de local dos resultados das consultas do lado do cliente, o Athena criará sua tabela no seguinte local:  

```
s3://amzn-s3-demo-bucket/tables/query-id/
```
Se você não usar a propriedade `external_location` para especificar um local, e o grupo de trabalho não substituir as configurações do lado do cliente, o Athena usará a [configuração do lado do cliente](query-results-specify-location-console.md) de local dos resultados das consultas para criar sua tabela no seguinte local:  

```
s3://amzn-s3-demo-bucket/Unsaved-or-query-name/year/month/date/tables/query-id/
```  
 `is_external = [boolean]`   
Opcional. Indica se a tabela corresponde a uma tabela externa. O padrão é true. Para tabelas do Iceberg, deve ser definido como “false” (falso).  
Exemplo:  

```
WITH (is_external = false)
```  
 `location = [location]`   
Obrigatório para tabelas do Iceberg. Especifica o local raiz da tabela do Iceberg que será criada a partir dos resultados da consulta.  
Exemplo:  

```
WITH (location ='s3://amzn-s3-demo-bucket/tables/iceberg_table/')
```  
 `field_delimiter = [delimiter]`   
Opcionais e específicos para formatos de armazenamento físico de dados com base em texto. O delimitador de campo de caractere único para arquivos em CSV, TSV e de texto. Por exemplo, `WITH (field_delimiter = ',')`. Atualmente, os delimitadores de campo de vários caracteres não são permitidos em consultas CTAS. Se você não especificar um delimitador do campo, `\001` será usado por padrão.  
 `format = [storage_format]`   
O formato de armazenamento dos resultados de consultas CTAS, como `ORC`, `PARQUET`, `AVRO`, `JSON`, `ION` ou `TEXTFILE`. Para tabelas do Iceberg, os formatos permitidos são `ORC`, `PARQUET` e `AVRO`. Se for omitido, `PARQUET` é usado por padrão. O nome deste parâmetro, `format`, deve estar listado em minúsculas, ou sua consulta CTAS falhará.   
Exemplo:  

```
WITH (format = 'PARQUET')
```  
 `bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]`   
Essa propriedade não se aplica para tabelas do Iceberg. Para tabelas do Iceberg, use o particionamento com transformação de bucket.
Uma lista matriz de buckets para dados do bucket. Se omitida, o Athena não armazenará os dados dessa consulta em bucket.  
 `bucket_count = [int]`   
Essa propriedade não se aplica para tabelas do Iceberg. Para tabelas do Iceberg, use o particionamento com transformação de bucket.
O número de buckets para armazenar seus dados em um bucket. Se omitido, o Athena não armazenará os dados em bucket. Exemplo:  

```
CREATE TABLE bucketed_table WITH (
  bucketed_by = ARRAY[column_name], 
  bucket_count = 30, format = 'PARQUET', 
  external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/'
) AS 
SELECT 
  * 
FROM 
  table_name
```  
 `partitioned_by = ARRAY[ col_name[,…] ]`   
Essa propriedade não se aplica para tabelas do Iceberg. Para usar transformações de partição para tabelas do Iceberg, use a propriedade `partitioning`, que será descrita posteriormente nesta seção.
Opcional. Uma lista matriz de colunas pela qual a tabela CTAS será particionada. Verifique se os nomes das colunas particionadas estão listados por último na lista de colunas da instrução `SELECT`.   
 `partitioning = ARRAY[partition_transform, ...]`   
Opcional. Especifica o particionamento da tabela do Iceberg que será criada. O Iceberg é compatível com uma ampla variedade de transformações e evoluções de partições. As transformações de partição estão resumidas na tabela a seguir.    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/create-table-as.html)
Exemplo:  

```
 WITH (partitioning = ARRAY['month(order_date)', 
                            'bucket(account_number, 10)', 
                            'country']))
```  
 `optimize_rewrite_min_data_file_size_bytes = [long]`   
Opcional. Configuração específica de otimização de dados. Arquivos menores que o valor especificado são incluídos para otimização. O padrão é 0,75 vezes o valor de `write_target_data_file_size_bytes`. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md).  
Exemplo:  

```
WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
```  
 `optimize_rewrite_max_data_file_size_bytes = [long]`   
Opcional. Configuração específica de otimização de dados. Arquivos maiores que o valor especificado são incluídos para otimização. O padrão é 1,8 vezes o valor de `write_target_data_file_size_bytes`. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md).  
Exemplo:  

```
WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
```  
 `optimize_rewrite_data_file_threshold = [int]`   
Opcional. Configuração específica de otimização de dados. Se houver menos arquivos de dados que exigem otimização do que o limite fornecido, os arquivos não serão regravados. Isso permite acumular mais arquivos de dados para produzir arquivos mais próximos do tamanho de destino e ignorar a computação desnecessária para gerar economia de custos. O padrão é 5. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md).  
Exemplo:  

```
WITH (optimize_rewrite_data_file_threshold = 5)
```  
 `optimize_rewrite_delete_file_threshold = [int]`   
Opcional. Configuração específica de otimização de dados. Se houver menos arquivos de exclusão associados a um arquivo de dados do que o limite, o arquivo de dados não será regravado. Isso permite acumular mais arquivos de exclusão para cada arquivo de dados a fim de gerar economia de custos. O padrão é 2. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md).  
Exemplo:  

```
WITH (optimize_rewrite_delete_file_threshold = 2)
```  
 `vacuum_min_snapshots_to_keep = [int]`   
Opcional. Configuração específica para vácuo. O número mínimo de snapshots mais recentes a serem retidos. O padrão é um. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [VACUUM](vacuum-statement.md).  
A propriedade `vacuum_min_snapshots_to_keep` requer a versão 3 do mecanismo do Athena. 
Exemplo:  

```
WITH (vacuum_min_snapshots_to_keep = 1)
```  
 `vacuum_max_snapshot_age_seconds = [long]`   
Opcional. Configuração específica para vácuo. Um período, em segundos, que representa o tempo pelo qual os snapshots serão retidos. O padrão é 432 mil (5 dias). Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte [VACUUM](vacuum-statement.md).  
A propriedade `vacuum_max_snapshot_age_seconds` requer a versão 3 do mecanismo do Athena. 
Exemplo:  

```
WITH (vacuum_max_snapshot_age_seconds = 432000)
```  
 `write_compression = [compression_format]`   
O tipo de compactação a ser usado para qualquer formato de armazenamento que permita que a compactação seja especificada. O valor `compression_format` especifica a compactação a ser usada quando os dados são gravados na tabela. Você pode especificar a compactação para os formatos de arquivo `TEXTFILE`, `JSON`, `PARQUET` e `ORC`.   
Por exemplo, se a propriedade `format` especificar `PARQUET` como o formato de armazenamento, o valor para `write_compression` especificará o formato de compactação para Parquet. Nesse caso, especificar um valor para `write_compression` é equivalente a especificar um valor para `parquet_compression`.   
Por exemplo, se a propriedade `format` especificar `ORC` como o formato de armazenamento, o valor para `write_compression` especificará o formato de compactação para ORC. Nesse caso, especificar um valor para `write_compression` é equivalente a especificar um valor para `orc_compression`.   
Não é possível especificar várias propriedades da tabela de formato de compactação na mesma consulta CTAS. Por exemplo, não é possível especificar `write_compression` e `parquet_compression` na mesma consulta. O mesmo se aplica a `write_compression` e `orc_compression`. Para obter mais informações sobre os tipos de compactação suportados para cada formato de arquivo, consulte [Usar compactação no Athena](compression-formats.md).  
 `orc_compression = [compression_format]`   
O tipo de compactação a ser usado para o formato de arquivo `ORC` quando dados `ORC` são gravados na tabela. Por exemplo, `WITH (orc_compression = 'ZLIB')`. As partes dentro do arquivo `ORC` (exceto o `ORC` Postscript) são compactadas usando a compactação que você especificar. Se não especificada, a compactação ZLIB será usada por padrão para `ORC`.  
Para consistência, recomendamos que você use a propriedade `write_compression` em vez de `orc_compression`. Use a propriedade `format` para especificar o formato de armazenamento como `ORC` e, em seguida, use a propriedade `write_compression` para especificar o formato de compactação que `ORC` usará.   
 `parquet_compression = [compression_format]`   
O tipo de compactação a ser usado para o formato de arquivo Parquet quando os dados do Parquet são gravados na tabela. Por exemplo, `WITH (parquet_compression = 'SNAPPY')`. Essa compactação é aplicada a blocos de colunas em arquivos Parquet. Se não especificada, a compactação GZIP será usada por padrão para Parquet.  
Para consistência, recomendamos que você use a propriedade `write_compression` em vez de `parquet_compression`. Use a propriedade `format` para especificar o formato de armazenamento como `PARQUET` e, em seguida, use a propriedade `write_compression` para especificar o formato de compactação que `PARQUET` usará.   
 `compression_level = [compression_level]`   
O nível de compressão a ser usado. Essa propriedade se aplica apenas à compressão ZSTD. Os valores possíveis são de 1 a 22. O valor padrão é 3. Para ter mais informações, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).

## Exemplos
<a name="ctas-table-examples"></a>

Para obter exemplos de consultas CTAS, consulte os seguintes recursos.
+  [Exemplos de consultas CTAS](ctas-examples.md) 
+  [Usar CTAS e INSERT INTO para ETL e análise de dados](ctas-insert-into-etl.md) 
+  [Use CTAS statements with Amazon Athena to reduce cost and improve performance](https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/) (Usar instruções CTAS com o Amazon Athena para reduzir custos e melhorar a performance) 
+  [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md) 

# CREATE VIEW e da CREATE PROTECTED MULTI DIALECT VIEW
<a name="create-view"></a>

Uma visualização é uma tabela lógica que pode ser referenciada por futuras consultas. As visualizações não contêm todos os dados e não gravam dados. Em vez disso, a consulta especificada pela exibição é executada sempre que você fizer referência à exibição por outra consulta. 
+ `CREATE VIEW` cria uma visualização do Athena a partir de uma consulta `SELECT` especificada. As visualizações do Athena funcionam dentro do Athena. Para obter mais informações sobre visualizações do Athena, consulte [Trabalhar com visualizações](views.md). 
+ `CREATE PROTECTED MULTI DIALECT VIEW` cria uma visualização do AWS Glue Data Catalog no AWS Glue Data Catalog. As visualizações do AWS Glue Data Catalog fornecem uma visualização única e comum entre os Serviços da AWS como o Amazon Athena e o Amazon Redshift. Para obter mais informações sobre visualizações do AWS Glue Data Catalog, consulte [Usar visualizações do Catálogo de Dados no Athena](views-glue.md).

## CREATE VIEW
<a name="create-view-ate"></a>

Cria uma visualização para uso no Athena.

### Resumo
<a name="synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW view_name AS query
```

A cláusula `OR REPLACE` opcional permite atualizar a exibição existente substituindo-a Para obter mais informações, consulte [Criar visualizações](views-console.md#creating-views).

### Exemplos
<a name="examples"></a>

Para criar uma exibição `test` a partir da tabela `orders`, use uma consulta semelhante à seguinte:

```
CREATE VIEW test AS
SELECT 
orderkey, 
orderstatus, 
totalprice / 2 AS half
FROM orders;
```

Para criar uma exibição `orders_by_date` a partir da tabela `orders`, use a seguinte consulta:

```
CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate;
```

Para atualizar uma exibição existente, use um exemplo semelhante ao seguinte:

```
CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders;
```

 Para obter mais informações sobre o uso de visualizações do Athena, consulte [Trabalhar com visualizações](views.md).

## CREATE PROTECTED MULTI DIALECT VIEW
<a name="create-protected-multi-dialect-view"></a>

Cria uma visualização do AWS Glue Data Catalog no AWS Glue Data Catalog. Uma visualização do Catálogo de Dados corresponde a um esquema de visualização única que funciona entre o Athena e outros mecanismos de SQL, como o Amazon Redshift e o Amazon EMR.

### Sintaxe
<a name="create-protected-multi-dialect-view-syntax"></a>

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS query
```

**OR REPLACE**  
(Opcional) Atualiza a visualização existente substituindo-a. Uma visualização do Catálogo de Dados não poderá ser substituída se dialetos SQL de outros mecanismos estiverem presentes na visualização. Se o mecanismo de chamada tiver o único dialeto SQL presente na visualização, a visualização poderá ser substituída.

**PROTECTED**  
Palavra-chave obrigatória. Especifica que a visualização está protegida contra vazamentos de dados. As visualizações do Catálogo de Dados podem ser criadas somente como uma visualização `PROTECTED`.

**MULTI DIALECT**  
Especifica que a visualização oferece suporte aos dialetos SQL de diferentes mecanismos de consulta e, portanto, que ela pode ser lida por esses mecanismos.

**SECURITY DEFINER**  
Especifica que a semântica do programador está em vigor para essa visualização. A semântica do programador significa que as permissões de leitura efetivas nas tabelas subjacentes pertencem à entidade principal ou ao perfil que definiu a visualização, e não à entidade principal que executa a leitura.

**SHOW VIEW JSON**  
(Opcional) Retorna o JSON para a especificação da visualização do Catálogo de Dados sem realmente criar uma visualização. Essa opção “dry-run” é útil quando você deseja validar o SQL para a visualização e retornar os metadados da tabela que serão usados pelo AWS Glue.

### Exemplo
<a name="create-protected-multi-dialect-view-syntax-example"></a>

O exemplo apresentado a seguir cria a visualização `orders_by_date` do Catálogo de Dados com base em uma consulta na tabela `orders`.

```
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date 
SECURITY DEFINER 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
WHERE order_city = 'SEATTLE' 
GROUP BY orderdate
```

Para obter mais informações sobre o uso de visualizações do AWS Glue Data Catalog, consulte [Usar visualizações do Catálogo de Dados no Athena](views-glue.md).

# DESCRIBE
<a name="describe-table"></a>

Mostra uma ou mais colunas, inclusive de partição, da tabela especificada. Esse comando é útil para examinar os atributos de colunas complexas.

## Resumo
<a name="synopsis"></a>

```
DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]
```

**Importante**  
A sintaxe para essa declaração é `DESCRIBE table_name`, não `DESCRIBE TABLE table_name`. O uso da última sintaxe resulta na mensagem de erro FAILED: SemanticException [Error 10001]: Table not found table (FALHA: SemanticException [Erro 10001]: Tabela não encontrada). 

## Parâmetros
<a name="parameters"></a>

**[EXTENDED \$1 FORMATTED]**  
Determina o formato da saída. A omissão desses parâmetros mostra nomes de colunas e os tipos de dados correspondentes, incluindo colunas de partição, em formato tabular. Especificando `FORMATTED` não só mostra nomes de colunas e tipos de dados em formato tabular, mas também traz informações detalhadas de tabela e armazenamento. `EXTENDED` mostra informações de coluna e tipos de dados em formato tabular, além de metadados detalhados para a tabela no formato serializado Thrift. Esse formato é menos legível e ajuda principalmente na depuração.

**[PARTITION partition\$1spec]**  
Se incluído, lista os metadados para a partição especificada por `partition_spec`, onde `partition_spec` está no formato `(partition_column = partition_col_value, partition_column = partition_col_value, ...)`.

**[col\$1name ( [.field\$1name] \$1 [.'\$1elem\$1'] \$1 [.'\$1key\$1'] \$1 [.'\$1value\$1'] )\$1 ]**  
Especifica a coluna e os atributos a serem examinados. Você pode especificar `.field_name` para um elemento de uma struct, `'$elem$'` para um elemento de matriz, `'$key$'` para uma chave de mapa e `'$value$'` para um valor de mapa. Você pode especificar isso de maneira recursiva para explorar mais a coluna complexa.

### Exemplos
<a name="examples"></a>

```
DESCRIBE orders
```

```
DESCRIBE FORMATTED mydatabase.mytable PARTITION (part_col = 100) columnA;
```

A consulta e a saída a seguir mostram informações de coluna e tipos de dados de uma tabela de `impressions` baseada em dados de amostra do Amazon EMR.

```
DESCRIBE impressions
```

```
requestbegintime          string                                         from deserializer   
adid                      string                                         from deserializer   
impressionid              string                                         from deserializer   
referrer                  string                                         from deserializer   
useragent                 string                                         from deserializer   
usercookie                string                                         from deserializer   
ip                        string                                         from deserializer   
number                    string                                         from deserializer   
processid                 string                                         from deserializer   
browsercokie              string                                         from deserializer   
requestendtime            string                                         from deserializer   
timers                    struct<modellookup:string,requesttime:string>  from deserializer   
threadid                  string                                         from deserializer   
hostname                  string                                         from deserializer   
sessionid                 string                                         from deserializer   
dt                        string

# Partition Information
# col_name                data_type                 comment             

dt                        string
```

Os exemplos de consulta e saída a seguir mostram o resultado da mesma tabela quando a opção `FORMATTED` é usada.

```
DESCRIBE FORMATTED impressions
```

```
requestbegintime          string                                         from deserializer
adid                      string                                         from deserializer
impressionid              string                                         from deserializer
referrer                  string                                         from deserializer
useragent                 string                                         from deserializer
usercookie                string                                         from deserializer
ip                        string                                         from deserializer
number                    string                                         from deserializer
processid                 string                                         from deserializer
browsercokie              string                                         from deserializer
requestendtime            string                                         from deserializer
timers                    struct<modellookup:string,requesttime:string>  from deserializer
threadid                  string                                         from deserializer
hostname                  string                                         from deserializer
sessionid                 string                                         from deserializer
dt                        string

# Partition Information
# col_name                data_type                 comment

dt                        string

# Detailed Table Information
Database:                 sampledb
Owner:                    hadoop
CreateTime:               Thu Apr 23 02:55:21 UTC 2020
LastAccessTime:           UNKNOWN
Protect Mode:             None
Retention:                0
Location:                 s3://us-east-1.elasticmapreduce/samples/hive-ads/tables/impressions
Table Type:               EXTERNAL_TABLE
Table Parameters:
        EXTERNAL                  TRUE
        transient_lastDdlTime     1587610521

# Storage Information
SerDe Library:                         org.openx.data.jsonserde.JsonSerDe
InputFormat:                           org.apache.hadoop.mapred.TextInputFormat
OutputFormat:                          org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
Compressed:                            No
Num Buckets:                           -1
Bucket Columns:                        []
Sort Columns:                          []
Storage Desc Params:
        paths                                  requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip
        serialization.format                   1
```

Os exemplos de consulta e saída a seguir mostram o resultado da mesma tabela quando a opção `EXTENDED` é usada. As informações detalhadas da tabela são geradas em uma única linha, mas foram formatadas aqui para facilitar a leitura.

```
DESCRIBE EXTENDED impressions
```

```
requestbegintime          string                                         from deserializer
adid                      string                                         from deserializer
impressionid              string                                         from deserializer
referrer                  string                                         from deserializer
useragent                 string                                         from deserializer
usercookie                string                                         from deserializer
ip                        string                                         from deserializer
number                    string                                         from deserializer
processid                 string                                         from deserializer
browsercokie              string                                         from deserializer
requestendtime            string                                         from deserializer
timers                    struct<modellookup:string,requesttime:string>  from deserializer
threadid                  string                                         from deserializer
hostname                  string                                         from deserializer
sessionid                 string                                         from deserializer
dt                        string

# Partition Information
# col_name                data_type                 comment

dt                        string

Detailed Table Information       Table(tableName:impressions, dbName:sampledb, owner:hadoop, createTime:1587610521, 
lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:requestbegintime, type:string, comment:null), 
FieldSchema(name:adid, type:string, comment:null), FieldSchema(name:impressionid, type:string, comment:null), 
FieldSchema(name:referrer, type:string, comment:null), FieldSchema(name:useragent, type:string, comment:null), 
FieldSchema(name:usercookie, type:string, comment:null), FieldSchema(name:ip, type:string, comment:null), 
FieldSchema(name:number, type:string, comment:null), FieldSchema(name:processid, type:string, comment:null), 
FieldSchema(name:browsercokie, type:string, comment:null), FieldSchema(name:requestendtime, type:string, comment:null), 
FieldSchema(name:timers, type:struct<modellookup:string,requesttime:string>, comment:null), FieldSchema(name:threadid, 
type:string, comment:null), FieldSchema(name:hostname, type:string, comment:null), FieldSchema(name:sessionid, 
type:string, comment:null)], location:s3://us-east-1.elasticmapreduce/samples/hive-ads/tables/impressions, 
inputFormat:org.apache.hadoop.mapred.TextInputFormat, 
outputFormat:org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, 
serdeInfo:SerDeInfo(name:null, serializationLib:org.openx.data.jsonserde.JsonSerDe, parameters:{serialization.format=1, 
paths=requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip}), bucketCols:[], sortCols:[], parameters:{}, 
skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), 
storedAsSubDirectories:false), partitionKeys:[FieldSchema(name:dt, type:string, comment:null)], 
parameters:{EXTERNAL=TRUE, transient_lastDdlTime=1587610521}, viewOriginalText:null, viewExpandedText:null, 
tableType:EXTERNAL_TABLE)
```

# DESCRIBE VIEW
<a name="describe-view"></a>

Mostra a lista de colunas para a visualização do Athena ou do AWS Glue Data Catalog especificada. Útil para examinar os atributos de uma visualização complexa. 

 Para visualizações do Catálogo de Dados, a saída da instrução é controlada pelo controle de acesso do Lake Formation e mostra somente as colunas às quais o chamador tem acesso.

## Resumo
<a name="synopsis"></a>

```
DESCRIBE [db_name.]view_name
```

## Exemplo
<a name="examples"></a>

```
DESCRIBE orders
```

Consulte também [SHOW COLUMNS](show-columns.md), [SHOW CREATE VIEW](show-create-view.md), [SHOW VIEWS](show-views.md) e [DROP VIEW](drop-view.md).

# DROP DATABASE
<a name="drop-database"></a>

Remove o banco de dados nomeado do catálogo. Se o banco de dados incluir tabelas, você deverá descartá-las antes de executar `DROP DATABASE` ou usar a cláusula `CASCADE`. O uso de `DATABASE` e `SCHEMA` é intercambiável. Eles significam a mesma coisa.

## Resumo
<a name="synopsis"></a>

```
DROP {DATABASE | SCHEMA} [IF EXISTS] database_name [RESTRICT | CASCADE]
```

## Parâmetros
<a name="parameters"></a>

**[SE EXISTIR]**  
Fará o erro ser suprimido se `database_name` não existir.

**[RESTRICT\$1CASCADE]**  
Determina como tabelas dentro de `database_name` são consideradas durante a operação `DROP`. Se você especificar `RESTRICT`, o banco de dados não será ignorado se ele contiver tabelas. Esse é o comportamento padrão. Especificar `CASCADE` faz o banco de dados e todas as tabelas serem ignorados.

## Exemplos
<a name="examples"></a>

```
DROP DATABASE clickstreams;
```

```
DROP SCHEMA IF EXISTS clickstreams CASCADE;
```

**nota**  
Quando você tenta eliminar um banco de dados cujo nome tem caracteres especiais (p. ex., `my-database`), você pode receber uma mensagem de erro. Para resolver esse problema, tente delimitar o nome do banco de dados com caracteres de crase (`). Para obter mais informações sobre nomenclatura de bancos de dados no Athena, consulte [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md).

# DROP TABLE
<a name="drop-table"></a>

Remove a definição da tabela de metadados da tabela nomeada `table_name`. Quando você descarta uma tabela externa, os dados subjacentes permanecem intactos.

## Resumo
<a name="synopsis"></a>

```
DROP TABLE [IF EXISTS] table_name
```

## Parâmetros
<a name="parameters"></a>

**[ IF EXISTS ]**  
Fará o erro ser suprimido se `table_name` não existir.

## Exemplos
<a name="examples"></a>

```
DROP TABLE fulfilled_orders
```

```
DROP TABLE IF EXISTS fulfilled_orders
```

Ao usar o editor de consultas do console do Athena para descartar uma tabela que tenha caracteres especiais diferentes de sublinhados (\$1), use acentos graves, como no exemplo a seguir.

```
DROP TABLE `my-athena-database-01.my-athena-table`
```

Ao usar o conector JDBC para soltar uma tabela que tenha caracteres especiais, os caracteres de acento grave não são necessários.

```
DROP TABLE my-athena-database-01.my-athena-table
```

# DROP VIEW
<a name="drop-view"></a>

Descarta (exclui) uma visualização existente do Athena ou do AWS Glue Data Catalog. A cláusula `IF EXISTS` opcional faz com que o erro seja suprimido se a exibição não existir.

Para visualizações do Catálogo de Dados, descarta a visualização somente se a sintaxe da visualização do Athena (dialeto) estiver presente na visualização do Catálogo de Dados. Por exemplo, se um usuário chamar `DROP VIEW` a partir do Athena, a visualização será descartada somente se o dialeto do Athena existir na visualização. Caso contrário, haverá falha na operação. O descarte de visualizações do Catálogo de Dados requer permissões de administrador ou definidor de visualizações do Lake Formation.

Para ter mais informações, consulte [Trabalhar com visualizações](views.md) e [Usar visualizações do Catálogo de Dados no Athena](views-glue.md).

## Resumo
<a name="synopsis"></a>

```
DROP VIEW [ IF EXISTS ] view_name
```

## Exemplos
<a name="examples"></a>

```
DROP VIEW orders_by_date
```

```
DROP VIEW IF EXISTS orders_by_date
```

Consulte também [CREATE VIEW e da CREATE PROTECTED MULTI DIALECT VIEW](create-view.md), [SHOW COLUMNS](show-columns.md), [SHOW CREATE VIEW](show-create-view.md), [SHOW VIEWS](show-views.md) e [DESCRIBE VIEW](describe-view.md).

# MSCK REPAIR TABLE
<a name="msck-repair-table"></a>

Use o comando `MSCK REPAIR TABLE` para atualizar os metadados no catálogo depois de adicionar partições compatíveis com o Hive. 

O comando `MSCK REPAIR TABLE` verifica um sistema de arquivos, como o Amazon S3, para procurar se há partições compatíveis com o Hive que foram adicionadas ao sistema de arquivos após a criação da tabela. `MSCK REPAIR TABLE` compara as partições nos metadados da tabela e as partições no S3. Se houver novas partições no local do S3 que você especificou quando criou a tabela, ele as adicionará aos metadados e à tabela do Athena.

Quando você adiciona partições físicas, os metadados no catálogo ficam inconsistentes com o layout dos dados no sistema de arquivos, e é necessário adicionar informações sobre as novas partições ao catálogo. Para atualizar os metadados, execute `MSCK REPAIR TABLE` para que você possa consultar os dados nas novas partições do Athena.

**nota**  
`MSCK REPAIR TABLE` somente adiciona partições aos metadados, não as remove. Para remover partições dos metadados depois que elas foram excluídas manualmente do Amazon S3, execute o comando `ALTER TABLE table-name DROP PARTITION`. Para obter mais informações, consulte [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md). 

## Considerações e limitações
<a name="msck-repair-table-considerations"></a>

Ao usar `MSCK REPAIR TABLE`, lembre-se dos seguintes pontos:
+ É possível que demore algum tempo para adicionar todas as partições. Se expirar, essa operação estará em um estado incompleto, quando somente algumas partições são adicionadas ao catálogo. Você deve executar `MSCK REPAIR TABLE` na mesma tabela até que todas as partições sejam adicionadas. Para obter mais informações, consulte [Particionar dados](partitions.md). 
+ Para as partições que não são compatíveis com o Hive, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para carregá-las para poder consultar os dados.
+ Os locais das partições que serão usados com o Athena devem aplicar o protocolo do `s3` (por exemplo, `s3://amzn-s3-demo-bucket/folder/`). No Athena, os locais que usam outros protocolos (por exemplo, `s3a://bucket/folder/`) resultam em falhas nas consultas `MSCK REPAIR TABLE` quando elas são executadas nas tabelas que os contêm. 
+ Como `MSCK REPAIR TABLE` verifica uma pasta e as subpastas para encontrar um esquema de partição correspondente, mantenha os dados das tabelas separadas em hierarquias de pastas separadas. Por exemplo, suponha que você tenha dados na tabela 1 em `s3://amzn-s3-demo-bucket1` e dados na tabela 2 em `s3://amzn-s3-demo-bucket1/table-2-data`. Se ambas as tabelas forem particionadas por string, `MSCK REPAIR TABLE` adicionará as partições da tabela 2 à tabela 1. Para evitar isso, use estruturas de pastas separadas, como `s3://amzn-s3-demo-bucket1` e `s3://amzn-s3-demo-bucket2`. Observe que esse comportamento é consistente com o Amazon EMR e o Apache Hive.
+ Devido a um problema conhecido, a `MSCK REPAIR TABLE` falha silenciosamente quando os valores da partição contêm dois pontos (`:`), por exemplo, quando o valor da partição é um carimbo de data/hora. Como solução alternativa, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md). 
+ `MSCK REPAIR TABLE` X não adiciona nomes de colunas de partição que começam com um sublinhado (\$1). Para contornar essa limitação, utilize [ALTER TABLE ADD PARTITION](alter-table-add-partition.md). 

## Resumo
<a name="synopsis"></a>

```
MSCK REPAIR TABLE table_name
```

## Exemplos
<a name="examples"></a>

```
MSCK REPAIR TABLE orders;
```

## Solução de problemas
<a name="msck-repair-table-troubleshooting"></a>

Depois que você executar `MSCK REPAIR TABLE`, se o Athena não adicionar as partições à tabela no AWS Glue Data Catalog, verifique o seguinte:
+ **Acesso do AWS Glue**: certifique-se de que o perfil do AWS Identity and Access Management (IAM) tenha uma política que permita a ação `glue:BatchCreatePartition`. Para obter mais informações, consulte [Permitir glue:BatchCreatePartition na política do IAM](#msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy) adiante neste documento.
+ **Acesso do Amazon S3**: certifique-se de que o perfil tenha uma política com permissões suficientes para acessar o Amazon S3, incluindo a ação [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html). Para ver um exemplo das ações do Amazon S3 que devem ser permitidas, consulte o exemplo de política de bucket em [Configurar o acesso entre contas do Athena aos buckets do Amazon S3](cross-account-permissions.md).
+ **Uso de maiúsculas e minúsculas em chaves de objeto do Amazon S3**: verifique se o caminho do Amazon S3 está em letras minúsculas em vez de minúsculas concatenadas (por exemplo, `userid` em vez de `userId`) ou use `ALTER TABLE ADD PARTITION` para especificar os nomes de chaves de objeto. Para obter mais informações, consulte [Alterar ou redefinir o caminho do Amazon S3](#msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path) adiante neste documento.
+ **Tempo limite de consulta esgotado**: é melhor usar `MSCK REPAIR TABLE` para criar uma tabela pela primeira vez ou quando há incerteza sobre a paridade entre os dados e os metadados da partição. Se você usa `MSCK REPAIR TABLE` para adicionar novas partições com frequência (por exemplo, diariamente) e sempre enfrenta problemas de tempo limite de consulta esgotado, considere usar [ALTER TABLE ADD PARTITION](alter-table-add-partition.md).
+ **Partições ausentes do sistema de arquivos**: se você excluir manualmente uma partição do Amazon S3 e executar `MSCK REPAIR TABLE`, poderá receber a mensagem de erro: Partições ausentes do sistema de arquivos. Isso ocorre porque `MSCK REPAIR TABLE` não remove partições obsoletas dos metadados da tabela. Em vez disso, execute [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) para remover as partições excluídas dos metadados da tabela. Do mesmo modo, veja que [SHOW PARTITIONS](show-partitions.md) lista apenas as partições nos metadados, e não as partições no sistema de arquivos.
+ **"Erro “NullPointerException name is null” (O nome de NullPointerException é nulo**

  Se você usar a operação de API do AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) ou o modelo [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) do CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedade `TableType` e, depois, executar uma consulta DDL, como `SHOW CREATE TABLE` ou `MSCK REPAIR TABLE`, poderá receber a mensagem de erro FALHA: o nome de NullPointerException é nulo. 

  Para resolver o erro, especifique um valor para o atributo [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` como parte da chamada de API `CreateTable` do AWS Glue ou do [modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). Os valores possíveis para `TableType` são `EXTERNAL_TABLE` ou `VIRTUAL_VIEW`.

  Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue `CreateTable` ou o modelo do `AWS::Glue::Table`. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedade `TableType` será definida automaticamente para você. 

As seções a seguir apresentam mais detalhes.

### Permitir glue:BatchCreatePartition na política do IAM
<a name="msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy"></a>

Analise as políticas do IAM vinculadas ao perfil que você usa para executar `MSCK REPAIR TABLE`. Quando você [usa o AWS Glue Data Catalog com o Athena](data-sources-glue.md), a política do IAM deve permitir a ação `glue:BatchCreatePartition`. Para ver um exemplo de uma política do IAM que permite a ação `glue:BatchCreatePartition`, consulte [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy).

### Alterar ou redefinir o caminho do Amazon S3
<a name="msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path"></a>

Se uma ou mais chaves de objeto no caminho do Amazon S3 estiverem em letras minúsculas concatenadas em vez de minúsculas, talvez `MSCK REPAIR TABLE` não adicione as partições ao AWS Glue Data Catalog. Por exemplo, se o caminho do Amazon S3 incluir o nome da chave do objeto `userId`, talvez as seguintes partições não sejam adicionadas ao AWS Glue Data Catalog:

```
s3://amzn-s3-demo-bucket/path/userId=1/

s3://amzn-s3-demo-bucket/path/userId=2/

s3://amzn-s3-demo-bucket/path/userId=3/
```

Para resolver esse problema, execute um dos seguintes procedimentos:
+ Use letras minúsculas em vez de minúsculas concatenadas ao criar chaves de objeto do Amazon S3:

  ```
  s3://amzn-s3-demo-bucket/path/userid=1/
  
  s3://amzn-s3-demo-bucket/path/userid=2/
  
  s3://amzn-s3-demo-bucket/path/userid=3/
  ```
+ Use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para redefinir o local, como no seguinte exemplo:

  ```
  ALTER TABLE table_name ADD [IF NOT EXISTS]
  PARTITION (userId=1)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/'
  PARTITION (userId=2)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/'
  PARTITION (userId=3)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
  ```

Embora os nomes de chave de objeto do Amazon S3 possam usar letras maiúsculas, os nomes de bucket do Amazon S3 devem estar sempre em letras minúsculas. Para obter mais informações, consulte [Diretrizes de nomeação de chave de objeto](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines) e [Regras de nomeação de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) no *Guia do usuário do Amazon S3*.

# SHOW COLUMNS
<a name="show-columns"></a>

Mostra somente os nomes das colunas para uma tabela especificada única, uma visualização do Athena ou uma visualização do Catálogo de Dados. Para obter informações mais detalhadas sobre visualizações do Athena, consulte o AWS Glue Data Catalog. Para obter informações e exemplos, consulte as seguintes seções do tópico [Consultar o AWS Glue Data Catalog](querying-glue-catalog.md):
+ Para visualizar os metadados de coluna, como tipo de dados, consulte [Listar ou pesquisar colunas de uma tabela ou visualização especificada](querying-glue-catalog-listing-columns.md). 
+ Para visualizar todas as colunas de todas as tabelas em um banco de dados específico no `AwsDataCatalog`, consulte [Listar ou pesquisar colunas de uma tabela ou visualização especificada](querying-glue-catalog-listing-columns.md). 
+ Para visualizar todas as colunas de todas as tabelas em todos os bancos de dados no `AwsDataCatalog`, consulte [Listar todas as colunas de todas as tabelas](querying-glue-catalog-listing-all-columns-for-all-tables.md).
+ Para visualizar as colunas que tabelas específicas têm em comum em um banco de dados, consulte [Listar colunas que tabelas específicas têm em comum](querying-glue-catalog-listing-columns-in-common.md).

Para visualizações do Catálogo de Dados, a saída da instrução é controlada pelo controle de acesso do Lake Formation e mostra somente as colunas às quais o chamador tem acesso.

## Resumo
<a name="synopsis"></a>

```
SHOW COLUMNS {FROM|IN} database_name.table_or_view_name
```

```
SHOW COLUMNS {FROM|IN} table_or_view_name [{FROM|IN} database_name]
```

É possível usar as palavras-chave `FROM` e `IN` de forma intercambiável. Se *table\$1or\$1view\$1name* ou *database\$1name* tiver caracteres especiais como hifens, coloque-os entre acentos graves (por exemplo, ``my-database`.`my-table``). Não coloque *table\$1or\$1view\$1name* ou *database\$1name* entre aspas simples ou duplas. Atualmente, o uso de `LIKE` e das expressões de correspondência de padrões não é permitido.

## Exemplos
<a name="examples"></a>

Os exemplos equivalentes a seguir mostram as colunas da tabela `orders` no banco de dados `customers`. Os dois primeiros exemplos consideram o banco de dados `customers` como o atual.

```
SHOW COLUMNS FROM orders
```

```
SHOW COLUMNS IN orders
```

```
SHOW COLUMNS FROM customers.orders
```

```
SHOW COLUMNS IN customers.orders
```

```
SHOW COLUMNS FROM orders FROM customers
```

```
SHOW COLUMNS IN orders IN customers
```

# SHOW CREATE TABLE
<a name="show-create-table"></a>

Analisa uma tabela existente chamada `table_name` para gerar a consulta que a criou.

## Resumo
<a name="synopsis"></a>

```
SHOW CREATE TABLE [db_name.]table_name
```

## Parâmetros
<a name="parameters"></a>

**TABLE [db\$1name.]table\$1name**  
O parâmetro `db_name` é opcional. Se omitido, o contexto assumirá como padrão o banco de dados atual.   
O nome da tabela é obrigatório.

## Exemplos
<a name="examples"></a>

```
SHOW CREATE TABLE orderclickstoday;
```

```
SHOW CREATE TABLE `salesdata.orderclickstoday`;
```

## Solução de problemas
<a name="show-create-table-troubleshooting"></a>

Se você usar a operação de API do AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) ou o modelo [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) do CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedade `TableType` e, depois, executar uma consulta DDL, como `SHOW CREATE TABLE` ou `MSCK REPAIR TABLE`, poderá receber a mensagem de erro FALHA: o nome de NullPointerException é nulo. 

Para resolver o erro, especifique um valor para o atributo [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` como parte da chamada de API `CreateTable` do AWS Glue ou do [modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). Os valores possíveis para `TableType` são `EXTERNAL_TABLE` ou `VIRTUAL_VIEW`.

Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue `CreateTable` ou o modelo do `AWS::Glue::Table`. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedade `TableType` será definida automaticamente para você. 

# SHOW CREATE VIEW
<a name="show-create-view"></a>

Mostra a instrução SQL que criou a visualização específica do Athena ou do Catálogo de Dados. O SQL retornado mostra a sintaxe de criação de visualização usada no Athena. A chamada a `SHOW CREATE VIEW` em visualizações do Catálogo de Dados requer permissões de administrador ou definidor de visualizações do Lake Formation.

## Resumo
<a name="synopsis"></a>

```
SHOW CREATE VIEW view_name
```

## Exemplos
<a name="examples"></a>

```
SHOW CREATE VIEW orders_by_date
```

Consulte também [CREATE VIEW e da CREATE PROTECTED MULTI DIALECT VIEW](create-view.md) e [DROP VIEW](drop-view.md).

# SHOW DATABASES
<a name="show-databases"></a>

Lista todos os bancos de dados definidos na metastore. Você pode usar `DATABASES` ou `SCHEMAS`. Eles significam a mesma coisa.

O equivalente programático de `SHOW DATABASES` é a ação da API [ListDatabases](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDatabases.html) do Athena. O método equivalente em AWS SDK para Python (Boto3) é [list\$1databases](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena/client/list_databases.html).

## Resumo
<a name="synopsis"></a>

```
SHOW {DATABASES | SCHEMAS} [LIKE 'regular_expression']
```

## Parâmetros
<a name="parameters"></a>

**[LIKE '*regular\$1expression*']**  
Filtra a lista de bancos de dados aos correspondentes à `regular_expression` especificada por você. Para correspondência de caracteres curinga, você pode usar a combinação `.*`, que associa qualquer caractere zero a multiplicações ilimitadas.

## Exemplos
<a name="examples"></a>

```
SHOW SCHEMAS;
```

```
SHOW DATABASES LIKE '.*analytics';
```

# SHOW PARTITIONS
<a name="show-partitions"></a>

Lista todas as partições em uma tabela do Athena em uma ordem não classificada.

## Resumo
<a name="synopsis"></a>

```
SHOW PARTITIONS table_name
```
+ Para exibir as partições em uma tabela e listá-las em uma ordem específica, consulte a seção [Listar partições de uma tabela específica](querying-glue-catalog-listing-partitions.md) na página [Consultar o AWS Glue Data Catalog](querying-glue-catalog.md).
+ Para visualizar o conteúdo de uma partição, consulte a seção [Consultar os dados](partitions.md#query-the-data) na página [Particionar dados](partitions.md).
+ `SHOW PARTITIONS` não lista as partições que foram projetadas pelo Athena, mas que não estão registradas no catálogo do AWS Glue. Para obter informações sobre a projeção de partições, consulte [Usar projeção de partições com o Amazon Athena](partition-projection.md).
+  `SHOW PARTITIONS` lista as partições nos metadados, não as partições no sistema de arquivos real. Para atualizar os metadados depois que você excluir manualmente as partições do Amazon S3, execute [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md). 

## Exemplos
<a name="examples"></a>

A consulta de exemplo a seguir mostra as partições da tabela `flight_delays_csv`, que inclui os dados da tabela de voos do Departamento de Transporte dos EUA. Para obter mais informações sobre a tabelas `flight_delays_csv` de exemplo, consulte [Lazy Simple SerDe para arquivos CSV, TSV e com delimitação personalizada](lazy-simple-serde.md). A tabela está particionada por ano.

```
SHOW PARTITIONS flight_delays_csv
```

**Resultados**

```
year=2007
year=2015
year=1999
year=1993
year=1991
year=2003
year=1996
year=2014
year=2004
year=2011
...
```

A consulta de exemplo a seguir mostra as partições da tabela `impressions`, que inclui amostra de dados de navegação na Web. Para obter mais informações sobre a tabelas `impressions` de exemplo, consulte [Particionar dados](partitions.md). A tabela está particionada pela coluna `dt` (data e hora).

```
SHOW PARTITIONS impressions
```

**Resultados**

```
dt=2009-04-12-16-00
dt=2009-04-13-18-15
dt=2009-04-14-00-20
dt=2009-04-12-13-00
dt=2009-04-13-02-15
dt=2009-04-14-12-05
dt=2009-04-14-06-15
dt=2009-04-12-21-15
dt=2009-04-13-22-15
...
```

### Listar partições em ordem de classificação
<a name="show-partitions-examples-ordering"></a>

Para ordenar as partições na lista de resultados, use a sintaxe `SELECT` a seguir, em vez de `SHOW PARTITIONS`.

```
SELECT * FROM database_name."table_name$partitions" ORDER BY column_name
```

A consulta a seguir mostra a lista das partições do exemplo de `flight_delays_csv`, mas agora classificada.

```
SELECT * FROM "flight_delays_csv$partitions" ORDER BY year
```

**Resultados**

```
year
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
...
```

Para obter mais informações, consulte a seção [Listar partições de uma tabela específica](querying-glue-catalog-listing-partitions.md) na página [Consultar o AWS Glue Data Catalog](querying-glue-catalog.md).

# SHOW TABLES
<a name="show-tables"></a>

Lista todas as tabelas base e exibe em um banco de dados.

**nota**  
O parâmetro [StatementType](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecution.html#athena-Type-QueryExecution-StatementType) para `SHOW TABLES` na operação da API [GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) é categorizado como `UTILITY`, e não `DDL`.

## Resumo
<a name="synopsis"></a>

```
SHOW TABLES [IN database_name] ['regular_expression']
```

## Parâmetros
<a name="parameters"></a>

**[IN database\$1name]**  
Especifica o `database_name` de quais tabelas serão listadas. Se omitido, o banco de dados do contexto atual é assumido.  
`SHOW TABLES` poderá falhar se `database_name` usar um [caractere sem suporte](tables-databases-columns-names.md), como o hífen. Como solução alternativa, tente delimitar o nome do banco de dados com acentos graves.

**['regular\$1expression']**  
Filtra a lista de tabelas às correspondentes ao `regular_expression` especificado por você. Para indicar qualquer caractere nas tabelas `AWSDataCatalog`, você pode usar a expressão curinga `*` ou `.*`. Para bancos de dados do Apache Hive, use a expressão curinga `.*`. Para indicar uma opção entre caracteres, use o caractere `|`.

## Exemplos
<a name="examples"></a>

**Example – mostrar todas as tabelas no banco de dados `sampledb`**  

```
SHOW TABLES IN sampledb
```
`Results`  

```
alb_logs
cloudfront_logs
elb_logs
flights_2016
flights_parquet
view_2016_flights_dfw
```

**Example – mostrar os nomes de todas as tabelas em `sampledb` que incluem a palavra “flights”**  

```
SHOW TABLES IN sampledb '*flights*'
```
`Results`  

```
flights_2016
flights_parquet
view_2016_flights_dfw
```

**Example – mostrar os nomes de todas as tabelas em `sampledb` que terminam com a palavra “logs”**  

```
SHOW TABLES IN sampledb '*logs'
```
`Results`  

```
alb_logs
cloudfront_logs
elb_logs
```

# SHOW TBLPROPERTIES
<a name="show-tblproperties"></a>

Lista as propriedades da tabela nomeada.

## Resumo
<a name="synopsis"></a>

```
SHOW TBLPROPERTIES table_name [('property_name')]
```

## Parâmetros
<a name="parameters"></a>

**[('property\$1name')]**  
Se incluído, somente o valor da propriedade chamada `property_name` será listado.

## Exemplos
<a name="examples"></a>

```
SHOW TBLPROPERTIES orders;
```

```
SHOW TBLPROPERTIES orders('comment');
```

# SHOW VIEWS
<a name="show-views"></a>

Lista as visualizações do Athena ou do Catálogo de Dados em uma lista de valores do tipo `STRING`. Cada valor na lista é o nome de uma visualização no banco de dados especificado ou no banco de dados atual se você omitir o nome do banco de dados. Use a cláusula `LIKE` opcional com uma expressão regular para restringir a lista de nomes de exibições. Para visualizações do Catálogo de Dados, lista somente as visualizações que usam a sintaxe do Athena SQL. Outras visualizações do Catálogo de Dados são filtradas.

## Resumo
<a name="synopsis"></a>

```
SHOW VIEWS [IN database_name] [LIKE 'regular_expression']
```

### Parâmetros
<a name="parameters"></a>

**[IN database\$1name]**  
Especifica o `database_name` do qual as exibições serão listadas. Se omitido, o banco de dados do contexto atual é assumido.

**[LIKE 'regular\$1expression']**  
Filtra a lista de exibições às correspondentes ao `regular_expression` especificado por você. Somente o caractere curinga `*`, o que indica qualquer caractere, ou `|`, o que indica uma escolha entre caracteres, podem ser usados.

## Exemplos
<a name="examples"></a>

```
SHOW VIEWS
```

```
SHOW VIEWS IN marketing_analytics LIKE 'orders*'
```

Consulte também [SHOW COLUMNS](show-columns.md), [SHOW CREATE VIEW](show-create-view.md), [DESCRIBE VIEW](describe-view.md) e [DROP VIEW](drop-view.md).

# Considerações e limitações das consultas SQL no Amazon Athena
<a name="other-notable-limitations"></a>

Ao executar consultas no Athena, tenha em mente as considerações e limitações a seguir.
+ **Procedimentos armazenados**: não há suporte para procedimentos armazenados.
+ **Número máximo de partições**: o número máximo de partições que você pode criar com instruções `CREATE TABLE AS SELECT` (CTAS) é 100. Para obter informações, consulte [CREATE TABLE AS](create-table-as.md). Para obter uma solução alternativa, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).
+ **Instruções não permitidas** — As seguintes instruções não são permitidas. Para ver uma lista completa de instruções de DDL não permitidas no Athena, consulte [DDL incompatível](unsupported-ddl.md).
  + `CREATE TABLE LIKE`Não há suporte ao .
  + `DESCRIBE INPUT` e `DESCRIBE OUTPUT` não são aceitos.
  + A instrução `MERGE` é compatível somente com formatos de tabela transacional. Para obter mais informações, consulte [MERGE INTO](merge-into-statement.md).
  + `UPDATE`As instruções não são compatíveis.
  + `DELETE FROM`Não há suporte ao .
+ **Conectores Trino e Presto **: não há compatibilidade com conectores [Trino](https://trino.io/docs/current/connector.html) nem [Presto](https://prestodb.io/docs/current/connector.html). Use a consulta federada do Amazon Athena para conectar origens de dados. Para obter mais informações, consulte [Usar a consulta federada do Amazon Athena](federated-queries.md).
+ **Tempo limite esgotado em tabelas com muitas partições**: o Athena pode esgotar o tempo limite ao consultar uma tabela com milhares de partições. Isso pode acontecer quando a tabela tem muitas partições que não são do tipo `string`. Quando você usa o tipo `string`, o Athena remove as partições no nível do metastore. No entanto, quando você usa outros tipos de dados, o Athena remove as partições do servidor. Quanto mais partições você tiver, mais tempo esse processo levará e maior será a probabilidade de suas consultas atingirem o tempo limite. Para resolver esse problema, defina o tipo de partição como `string` para que o Athena remova as partições no nível do metastore. Isso reduz a sobrecarga e evita que as consultas atinjam o tempo limite.
+ Compatibilidade com o **Amazon Glacier**: para obter informações sobre como consultar objetos restaurados do Amazon Glacier, consulte [Consultar os objetos restaurados do Amazon Glacier](querying-glacier.md).
+ **Arquivos tratados como ocultos**: o Athena trata os arquivos de origem que começam com sublinhado (`_`) ou ponto (`.`) como ocultos. Para contornar essa limitação, renomeie os arquivos.
+ **Limitação de tamanho de linha ou coluna**: o tamanho de uma única linha ou de suas colunas não pode exceder 32 MB. Esse limite pode ser excedido quando, por exemplo, uma linha contiver uma única coluna de 35 MB. Esse é um limite fixo do serviço e não pode ser alterado.
+ **Tamanho máximo da linha em um arquivo de texto**: o tamanho de uma única linha em um arquivo de texto tem um limite superior de 200 MB. Exceder esse limite pode gerar a mensagem de erro TextLineLengthLimitExceededException: Too many bytes before newline. Para contornar essa limitação, garanta que você não tenha uma única linha em um arquivo de texto com mais de 200 MB.
+ **Cláusula LIMIT máxima**: o número máximo de linhas que podem ser especificadas para a cláusula `LIMIT` é 

  9223372036854775807. Ao usar `ORDER BY`, o número máximo de linhas permitido para a cláusula LIMIT é 2.147.483.647. Exceder esse limite resultará na mensagem de erro NOT\$1SUPPORTED: ORDER BY LIMIT > 2147483647 is not supported [Não há suporte para ORDER BY LIMIT > 2147483647].
+ **information\$1schema**: as consultas de `information_schema` apresentam melhor desempenho se você tiver uma quantidade pequena a moderada de metadados do AWS Glue. Pode haver erros se você tiver uma grande quantidade de metadados. Para obter informações sobre como consultar o banco de dados `information_schema` para metadados do AWS Glue, consulte [Consultar o AWS Glue Data Catalog](querying-glue-catalog.md).
+  **Inicializações de matriz**: devido a uma limitação do Java, não é possível inicializar no Athena uma matriz que tenha mais de 254 argumentos. 
+ **Colunas ocultas de metadados**: as colunas de metadados ocultas do Hive ou do Iceberg `$bucket`, `$file_modified_time`, `$file_size` e `$partition` não são compatíveis para visualizações. Para obter informações sobre como usar a coluna `$path` de metadados no Athena, consulte [Obter os locais de arquivos dos dados de origem no Amazon S3](select.md#select-path).

Para obter informações sobre o tamanho máximo da cadeia de caracteres de consulta, cotas para tempos limite de consulta e cotas para o número ativo de consultas DML, acesse [Service Quotas](service-limits.md).

# Solucionar problemas no Athena
<a name="troubleshooting-athena"></a>

A equipe do Athena reuniu as seguintes informações de solução de problemas dos clientes. Elas não abrangem tudo, mas incluem orientações sobre alguns problemas comuns de performance, tempo limite e falta de memória.

**Topics**
+ [

## CREATE TABLE AS SELECT (CTAS)
](#troubleshooting-athena-create-table-as-select-ctas)
+ [

## Problemas no arquivo de dados
](#troubleshooting-athena-data-file-issues)
+ [

## Tabelas do Linux Foundation Delta Lake
](#troubleshooting-athena-delta-lake-tables)
+ [

## Consultas federadas
](#troubleshooting-athena-federated-queries)
+ [

## Erros relacionados ao JSON
](#troubleshooting-athena-json-related-errors)
+ [

## MSCK REPAIR TABLE
](#troubleshooting-athena-msck-repair-table)
+ [

## Problemas de saída
](#troubleshooting-athena-output-issues)
+ [

## Problemas do Parquet
](#troubleshooting-athena-parquet-issues)
+ [

## Problemas de particionamento
](#troubleshooting-athena-partitioning-issues)
+ [

## Permissões
](#troubleshooting-athena-permissions)
+ [

## Problemas de sintaxe da consulta
](#troubleshooting-athena-query-syntax-issues)
+ [

## Problemas de tempo limite de consulta
](#troubleshooting-athena-query-timeout-issues)
+ [

## Problemas de controle de utilização
](#troubleshooting-athena-throttling-issues)
+ [

## Visualizações
](#troubleshooting-athena-views)
+ [

## Grupos de trabalho
](#troubleshooting-athena-workgroups)
+ [

## Recursos adicionais
](#troubleshooting-athena-additional-resources)
+ [

# Catálogo de erros do Athena
](error-reference.md)

## CREATE TABLE AS SELECT (CTAS)
<a name="troubleshooting-athena-create-table-as-select-ctas"></a>

### Dados duplicados ocorrem com instruções CTAS simultâneas
<a name="troubleshooting-athena-duplicated-data-occurs-with-concurrent-ctas-statements"></a>

O Athena não mantém a validação simultânea de CTAS. Verifique se não há instruções CTAS duplicadas para o mesmo local ao mesmo tempo. Mesmo se uma instrução CTAS ou INSERT INTO falhar, os dados órfãos podem permanecer no local de dados especificado na instrução.

### HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS
<a name="troubleshooting-athena-ctas-hive-too-many-open-partitions"></a>

Ao usar uma instrução CTAS para criar uma tabela com mais de 100 partições, você pode receber o erro HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (Limite excedido de 100 gravadores abertos para partições/buckets). Para contornar essa limitação, é possível usar uma instrução CTAS e uma série de instruções `INSERT INTO` que criam ou inserem até 100 partições cada. Para obter mais informações, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

## Problemas no arquivo de dados
<a name="troubleshooting-athena-data-file-issues"></a>

### O Athena não pode ler arquivos ocultos
<a name="troubleshooting-athena-athena-cannot-read-hidden-files"></a>

O Athena trata os arquivos de origem que começam com sublinhado (\$1) ou ponto (.) como ocultos. Para contornar essa limitação, renomeie os arquivos.

### O Athena lê arquivos que eu excluí do crawler do AWS Glue
<a name="troubleshooting-athena-athena-reads-files-that-i-excluded-from-the-glue-crawler"></a>

O Athena não reconhece os [padrões de exclusão](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que você especifica para um crawler do AWS Glue. Por exemplo, se você tem um bucket do Amazon S3 com os arquivos `.csv` e `.json` e exclui os arquivos `.json` do crawler, o Athena consulta os dois grupos de arquivos. Para evitar isso, coloque os arquivos que você deseja excluir em um local diferente.

### HIVE\$1BAD\$1DATA: erro ao analisar o valor do campo
<a name="troubleshooting-athena-hive_bad_data-error-parsing-field-value"></a>

Esse erro pode ocorrer nos seguintes cenários:
+ O tipo de dados definido na tabela não corresponde aos dados de origem ou um único campo contém tipos de dados diferentes. Para ver as resoluções sugeridas, consulte [My Amazon Athena query fails with the error “HIVE\$1BAD\$1DATA: Error parsing field value for field x: For input string: ‘12312845691’”](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-parsing-field-value/) (Minha consulta do Amazon Athena falha com o erro “HIVE\$1BAD\$1DATA: erro ao analisar o valor do campo x: para a string de entrada: ‘12312845691’”) na Central de Conhecimento da AWS.
+ Há valores nulos em um campo de número inteiro. Uma solução alternativa é criar a coluna com os valores nulos como `string` e usar `CAST` para converter o campo em uma consulta especificando um valor padrão de `0` para nulos. Para obter mais informações, consulte [When I query CSV data in Athena, I get the error “HIVE\$1BAD\$1DATA: Error parsing field value “ for field x: For input string: ”””](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/) (Quando consulto dados CSV no Athena, aparece o erro “HIVE\$1BAD\$1DATA: erro ao analisar o valor do campo x: para a string de entrada: ‘’') na Central de Conhecimento da AWS.

### HIVE\$1CANNOT\$1OPEN\$1SPLIT: erro ao abrir divisão do Hive s3://amzn-s3-demo-bucket
<a name="troubleshooting-athena-hive_cannot_open_split-error-opening-hive-split-s3bucket-name"></a>

Esse erro pode ocorrer quando você consulta um prefixo de bucket do Amazon S3 que tenha um grande número de objetos. Para obter mais informações, consulte [Como resolver o erro "HIVE\$1CANNOT\$1OPEN\$1SPLIT: Error opening Hive split s3://amzn-s3-demo-bucket/: Slow down" no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/hive-cannot-open-split-503-athena/) na Central de Conhecimento da AWS.

### HIVE\$1CURSOR\$1ERROR: com.amazonaws.services.s3.model.AmazonS3Exception: a chave especificada não existe
<a name="troubleshooting-athena-hive_cursor_error-com.amazonaws.services.s3.model.amazons3exception-the-specified-key-does-not-exist"></a>

Geralmente, esse erro ocorre quando um arquivo é removido durante a execução de uma consulta. Execute novamente a consulta ou examine o fluxo de trabalho para ver se outro trabalho ou processo está modificando os arquivos durante a execução da consulta.

### HIVE\$1CURSOR\$1ERROR: fim inesperado do stream de entrada
<a name="troubleshooting-athena-hive_cursor_error-unexpected-end-of-input-stream"></a>

Essa mensagem indica que o arquivo está corrompido ou vazio. Verifique a integridade do arquivo e execute a consulta novamente.

### HIVE\$1FILESYSTEM\$1ERROR: Incorrect fileSize *1234567* for file (HIVE\$1FILESYSTEM\$1ERROR: tamanho de arquivo 1234567 incorreto para o arquivo)
<a name="troubleshooting-athena-hive_filesystem_error-incorrect-file-size"></a>

Essa mensagem pode ocorrer quando um arquivo foi alterado entre o planejamento da consulta e a execução da consulta. Geralmente ocorre quando um arquivo no Amazon S3 é substituído no local (por exemplo, um `PUT` é executado em uma chave em que um objeto já existe). O Athena não suporta a exclusão ou a substituição do conteúdo de um arquivo quando uma consulta está em execução. Para evitar esse erro, agende trabalhos que substituam ou excluam arquivos para quando consultas não são executadas ou simplesmente grave os dados em novos arquivos ou partições.

### HIVE\$1UNKNOWN\$1ERROR: não é possível criar o formato de entrada
<a name="troubleshooting-athena-hive_unknown_error-unable-to-create-input-format"></a>

Esse erro pode ser resultado de problemas como estes:
+ O crawler do AWS Glue não conseguiu classificar o formato de dados
+ Certas propriedades de definição de tabela do AWS Glue estão vazias
+ O Athena não é compatível com o formato de dados dos arquivos no Amazon S3

Para obter mais informações, consulte [Como resolvo o erro “não é possível criar o formato de entrada” no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-unable-to-create-input-format/) (em inglês) ou assista ao [vídeo](https://www.youtube.com/watch?v=CGzXW3hRa8g) na Central de Conhecimento da AWS.

### O local do S3 especificado para salvar os resultados das consultas é inválido.
<a name="troubleshooting-athena-the-s3-location-provided-to-save-your-query-results-is-invalid."></a>

Verifique se você especificou um local válido do S3 para os resultados das consultas. Para obter mais informações, consulte [Especificar um local para resultados de consultas](query-results-specify-location.md)[Trabalhar com resultados de consultas e consultas recentes](querying.md) no tópico.

## Tabelas do Linux Foundation Delta Lake
<a name="troubleshooting-athena-delta-lake-tables"></a>

### O esquema das tabelas do Delta Lake não está sincronizado
<a name="troubleshooting-athena-delta-lake-table-schema-out-of-sync"></a>

Quando você consulta uma tabela do Delta Lake que tem um esquema no AWS Glue, pode receber a seguinte mensagem de erro:

```
INVALID_GLUE_SCHEMA: Delta Lake table schema in Glue does not match the most recent schema of the 
Delta Lake transaction log. Please ensure that you have the correct schema defined in Glue.
```

O esquema pode ficar desatualizado se for modificado no AWS Glue depois de ser adicionado ao Athena. Para atualizar o esquema, faça uma das etapas a seguir:
+ No AWS Glue, execute o [crawler do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html).
+ No Athena, [descarte a tabela ](drop-table.md) e torne a [criá-la](create-table.md).
+ Adicione manualmente as colunas que estiverem faltando, usando a instrução [ALTER TABLE ADD COLUMNS](alter-table-add-columns.md) no Athena ou [editando o esquema da tabela no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details). 

## Consultas federadas
<a name="troubleshooting-athena-federated-queries"></a>

### Tempo limite ao chamar ListTableMetadata
<a name="troubleshooting-athena-federated-queries-list-table-metadata-timeout"></a>

Uma chamada para a API [ListTableMetadata](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTableMetadata.html) pode atingir o tempo limite se houver muitas tabelas na fonte de dados, se a fonte de dados estiver lenta ou se a rede estiver lenta. Para solucionar esse problema, experimente as seguintes etapas:
+ **Verifique o número de tabelas**: se você tiver mais de 1.000 tabelas, tente reduzir esse número. Para uma resposta mais rápida de `ListTableMetadata`, recomendamos ter menos de 1000 tabelas por catálogo.
+ **Verifique a configuração do Lambda** — Monitorar o comportamento da função do Lambda é fundamental. Ao usar catálogos federados, examine os logs de execução da função do Lambda. Com base nos resultados, ajuste os valores de memória e tempo limite. Para identificar possíveis problemas de tempo limite, revise sua configuração do Lambda. Para obter mais informações, consulte [Configurar o tempo de limite da função (console)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-timeout-console) no *Guia do desenvolvedor do AWS Lambda*.
+ **Verifique os logs da fonte de dados federada** — Examine os logs e as mensagens de erro da fonte de dados federada para ver se há algum problema ou erro. Os logs podem fornecer informações valiosas sobre a causa do tempo limite.
+ **Use `StartQueryExecution` para buscar os metadados**: se você tiver mais de 1.000 tabelas, recuperar os metadados usando o conector federado pode levar mais tempo que o esperado. Como a natureza assíncrona de [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) garante que o Athena execute a consulta da maneira ideal, considere usar `StartQueryExecution` como alternativa a `ListTableMetadata`. Os exemplos da AWS CLI a seguir mostram como `StartQueryExecution` pode ser usado em vez de `ListTableMetadata` para obter todos os metadados das tabelas do catálogo de dados.

  Primeiro, execute uma consulta que obtenha todas as tabelas, como no exemplo a seguir.

  ```
  aws athena start-query-execution --region us-east-1 \
  --query-string "SELECT table_name FROM information_schema.tables LIMIT 50" \
  --work-group "your-work-group-name"
  ```

  Em seguida, recupere os metadados de uma tabela individual, como no exemplo a seguir.

  ```
  aws athena start-query-execution --region us-east-1 \
  --query-string "SELECT * FROM information_schema.columns \
  WHERE table_name = 'your-table-name' AND \
  table_catalog = 'your-catalog-name'" \
  --work-group "your-work-group-name"
  ```

  O tempo necessário para obter os resultados depende do número de tabelas do catálogo.

Para obter mais informações sobre como solucionar problemas de consultas federadas, acesse [Common\$1Problems](https://github.com/awslabs/aws-athena-query-federation/wiki/Common_Problems) na seção awslabs/aws-athena-query-federation do GitHub ou consulte a documentação de cada [conector de fonte de dados do Athena](connectors-available.md).

## Erros relacionados ao JSON
<a name="troubleshooting-athena-json-related-errors"></a>

### Erros de dados NULL ou incorretos ao tentar ler dados JSON
<a name="troubleshooting-athena-null-or-incorrect-data-errors-when-trying-to-read-json-data"></a>

Os erros de dados NULL ou incorretos quando você tenta ler dados JSON podem ter diversas causas. Para identificar as linhas que estão causando erros quando você usa o OpenX SerDe, defina `ignore.malformed.json` como `true`. Registros malformados serão retornados como NULL. Para obter mais informações, consulte [Recebo erros ao tentar ler dados JSON no Amazon Athena](https://aws.amazon.com/premiumsupport/knowledge-center/error-json-athena/) (em inglês) ou assista ao [vídeo](https://youtu.be/ME7Pv1qPFLM) na Central de Conhecimento da AWS.

### HIVE\$1BAD\$1DATA: erro ao analisar o valor do campo 0: java.lang.String não pode ser convertido em org.openx.data.jsonserde.json.JSONObject
<a name="troubleshooting-athena-hive-bad-data-openx-json-serde"></a>

O [OpenX JSON SerDe](openx-json-serde.md) gera esse erro quando não consegue analisar uma coluna em uma consulta do Athena. Isso poderá acontecer se você definir uma coluna como `map` ou `struct`, mas os dados subjacentes são, na verdade, `string`, `int` ou outro tipo primitivo.

### HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON object - JSONException: Duplicate key (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido - JSONException: chave duplicada)
<a name="troubleshooting-athena-hive_cursor_error-row-is-not-a-valid-json-object---jsonexception-duplicate-key"></a>

Esse erro ocorre ao usar o Athena para consultar recursos de AWS Config que têm várias etiquetas com o mesmo nome com letras maiúsculas e minúsculas diferentes. A solução é executar `CREATE TABLE` usando `WITH SERDEPROPERTIES 'case.insensitive'='false'` e mapear os nomes. Para obter mais informações sobre `case.insensitive` e mapeamento, consulte [Bibliotecas SerDe JSON](json-serde.md). Para obter mais informações, consulte [Como resolvo o erro “HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido - JSONException: chave duplicada” ao ler arquivos do AWS Config no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/json-duplicate-key-error-athena-config/) no Centro de Conhecimento da AWS.

### Mensagens HIVE\$1CURSOR\$1ERROR com JSON formatado para impressão
<a name="troubleshooting-athena-json-serde-hive-cursor-error"></a>

As bibliotecas [Hive JSON SerDe](hive-json-serde.md) e [OpenX JSON SerDe](openx-json-serde.md) esperam que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) (Arquivos de dados do JSON) na documentação do OpenX SerDe no GitHub.

### Vários registros JSON retornam SELECT COUNT de 1
<a name="troubleshooting-athena-multiple-json-records-return-a-select-count-of-1"></a>

Se você usa [OpenX JSON SerDe](openx-json-serde.md), verifique se os registros estão separados por um caractere de nova linha. Para obter mais informações, consulte [A consulta SELECT COUNT no Amazon Athena retorna somente um registro, embora o arquivo JSON de entrada tenha vários registros](https://aws.amazon.com/premiumsupport/knowledge-center/select-count-query-athena-json-records/) (em inglês) na Central de Conhecimento da AWS.

### Não é possível consultar uma tabela criada por um crawler do AWS Glue que usa um classificador JSON personalizado
<a name="troubleshooting-athena-cannot-query-a-table-created-by-a-glue-crawler-that-uses-a-custom-json-classifier"></a>

O mecanismo do Athena não é compatível com [classificadores JSON personalizados](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-json). Para resolver esse problema, crie uma nova tabela sem o classificador personalizado. Para transformar o JSON, você pode usar CTAS ou criar uma visualização. Por exemplo, se você trabalha com arrays, pode usar a opção UNNEST para nivelar o JSON. Outra opção é usar um trabalho ETL AWS Glue que aceita o classificador personalizado, converter os dados em parquet no Amazon S3 e consultá-los no Athena.

## MSCK REPAIR TABLE
<a name="troubleshooting-athena-msck-repair-table"></a>

Para obter informações sobre problemas relacionados a MSCK REPAIR TABLE, consulte as seções [Considerações e limitações](msck-repair-table.md#msck-repair-table-considerations) e [Solução de problemas](msck-repair-table.md#msck-repair-table-troubleshooting) da página [MSCK REPAIR TABLE](msck-repair-table.md).

## Problemas de saída
<a name="troubleshooting-athena-output-issues"></a>

### Não é possível verificar/criar bucket de saída
<a name="troubleshooting-athena-unable-to-verifycreate-output-bucket"></a>

Esse erro poderá ocorrer se o local de resultados das consultas especificado não existir ou se as permissões apropriadas não estiverem presentes. Para obter mais informações, consulte [How do I resolve the “unable to verify/create output bucket” error in Amazon Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-output-bucket-error/) (Como resolvo o erro “Não é possível verificar/criar bucket de saída” no Amazon Athena?) na Central de Conhecimento da AWS.

### O resultado de TIMESTAMP é vazio
<a name="troubleshooting-athena-timestamp-result-is-empty"></a>

O Athena requer o formato de TIMESTAMP do Java. Para obter mais informações, consulte [Quando consulto uma tabela no Amazon Athena, o resultado de TIMESTAMP é vazio](https://aws.amazon.com/premiumsupport/knowledge-center/query-table-athena-timestamp-empty/) (em inglês) na Central de Conhecimento da AWS.

### Armazenar saída de consulta do Athena em um formato diferente de CSV
<a name="troubleshooting-athena-store-athena-query-output-in-a-format-other-than-csv"></a>

Por padrão, o Athena só gera arquivos de saída no formato CSV. Para gerar os resultados de uma consulta `SELECT` em outro formato, você pode usar a instrução `UNLOAD`. Para obter mais informações, consulte [UNLOAD](unload.md). Você também pode usar uma consulta do CTAS que usa a [propriedade de tabela](create-table-as.md#ctas-table-properties) `format` para configurar o formato de saída. Ao contrário de `UNLOAD`, a técnica CTAS requer a criação de uma tabela. Para obter mais informações, consulte [Como posso armazenar uma saída de consulta do Athena em um formato diferente de CSV, como um formato compactado?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-query-output-different-format/) (em inglês) na Central de Conhecimento da AWS.

### O local do S3 especificado para salvar os resultados das consultas é inválido
<a name="troubleshooting-athena-the-s3-location-provided-to-save-your-query-results-is-invalid"></a>

Você poderá receber essa mensagem de erro se o local do bucket de saída não estiver na mesma região onde você executa sua consulta. Para evitar isso, especifique um local de resultados de consulta na região onde você executa a consulta. Para obter as etapas, consulte [Especificar um local para resultados de consultas](query-results-specify-location.md).

## Problemas do Parquet
<a name="troubleshooting-athena-parquet-issues"></a>

### org.apache.parquet.io.GroupColumnIO não pode ser convertido em org.apache.parquet.io.PrimitiveColumnIO
<a name="troubleshooting-athena-org.apache.parquet.io.groupcolumnio-cannot-be-cast-to-org.apache.parquet.io.primitivecolumnio"></a>

Esse erro é causado por uma incompatibilidade de esquema do parquet. Uma coluna com um tipo não primitivo (por exemplo, `array`) foi declarado como um tipo primitivo (por exemplo, `string`) no AWS Glue. Para solucionar esse problema, verifique o esquema de dados nos arquivos e compare-o com o esquema declarado no AWS Glue.

### Problemas estatísticos do Parquet
<a name="troubleshooting-athena-parquet-statistics-issues"></a>

Quando você lê dados Parquet, pode receber mensagens de erro como as seguintes:

```
HIVE_CANNOT_OPEN_SPLIT: Index x out of bounds for length y
HIVE_CURSOR_ERROR: Failed to read x bytes
HIVE_CURSOR_ERROR: FailureException at Malformed input: offset=x
HIVE_CURSOR_ERROR: FailureException at java.io.IOException: 
can not read class org.apache.parquet.format.PageHeader: Socket is closed by peer.
```

Para contornar esse problema, use a instrução [CREATE TABLE](create-table.md) ou [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) para definir a `parquet.ignore.statistics` propriedade Parquet SerDe como `true`, como nos exemplos a seguir. 

Exemplo de CREATE TABLE

```
...
ROW FORMAT SERDE  
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ('parquet.ignore.statistics'='true')  
STORED AS PARQUET 
...
```

Exemplo de ALTER TABLE

```
ALTER TABLE ... SET TBLPROPERTIES ('parquet.ignore.statistics'='true')
```

Para obter mais informações sobre o Parquet Hive SerDe, consulte [Parquet SerDe](parquet-serde.md). 

## Problemas de particionamento
<a name="troubleshooting-athena-partitioning-issues"></a>

### MSCK REPAIR TABLE não remove partições obsoletas
<a name="troubleshooting-athena-msck-repair-table-does-not-remove-stale-partitions"></a>

Se você excluir uma partição manualmente no Amazon S3 e executar MSCK REPAIR TABLE, poderá receber a mensagem de erro Partições ausentes do sistema de arquivos. Isso ocorre porque MSCK REPAIR TABLE não remove as partições obsoletas dos metadados da tabela. Use [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) para remover as partições obsoletas manualmente. Para obter mais informações, consulte a seção “Solução de problemas” do tópico [MSCK REPAIR TABLE](msck-repair-table.md).

### Falha em MSCK REPAIR TABLE
<a name="troubleshooting-athena-msck-repair-table-failure"></a>

Quando uma grande quantidade de partições (por exemplo, mais de 100.000) são associadas a uma tabela específica, pode haver falha em `MSCK REPAIR TABLE` devido às limitações de memória. Para contornar esse limite, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) no lugar dele.

### MSCK REPAIR TABLE detecta partições, mas não as adiciona ao AWS Glue
<a name="troubleshooting-athena-msck-repair-table-detects-partitions-but-doesnt-add-them-to-glue"></a>

Esse problema poderá ocorrer se um caminho do Amazon S3 estiver em maiúsculas e minúsculas, em vez de apenas minúsculas, ou se uma política do IAM não permitir a ação `glue:BatchCreatePartition`. Para obter mais informações, consulte [MSCK REPAIR TABLE detecta partições no Athena, mas não as adiciona ao AWS Glue Data Catalog](https://aws.amazon.com/premiumsupport/knowledge-center/athena-aws-glue-msck-repair-table/) (em inglês) na Central de Conhecimento da AWS.

### Os intervalos de projeção de partições com o formato de data dd-MM-yyyy-HH-mm-ss ou yyyy-MM-dd não funcionam
<a name="troubleshooting-athena-partition-projection-ranges-with-the-date-format-of-dd-mm-yyyy-hh-mm-ss-or-yyyy-mm-dd-do-not-work"></a>

Para funcionar corretamente, o formato de data deve ser definido como `yyyy-MM-dd HH:00:00`. Para obter mais informações, consulte a publicação do Stack Overflow [Athena Partition Projection Not Working As Expected](https://stackoverflow.com/questions/63943920/athena-partition-projection-not-working-as-expected) (A projeção de partições do Athena não está funcionado como esperado).

### PARTITITION BY não é compatível com o tipo BIGINT
<a name="troubleshooting-athena-partition-by-doesnt-support-the-bigint-type"></a>

Converta o tipo de dados em `string` e tente novamente.

### Não há partições significativas disponíveis
<a name="troubleshooting-athena-no-meaningful-partitions-available"></a>

Geralmente, essa mensagem de erro significa que as configurações de partição foram corrompidas. Para resolver esse problema, descarte a tabela e crie outra com novas partições.

### A projeção de partições não funciona em conjunto com as partições do intervalo
<a name="troubleshooting-athena-partition-projection-does-not-work-in-conjunction-with-range-partitions"></a>

Verifique se a unidade do intervalo de tempo [projection.*<columnName>*.interval.unit](partition-projection-supported-types.md#partition-projection-date-type) corresponde ao delimitador das partições. Por exemplo, se as partições forem delimitadas por dias, uma unidade de intervalo de horas não funcionará.

### Erro de projeção de partição quando o intervalo é especificado por hífen
<a name="troubleshooting-athena-partition-projection-range-issue-with-hyphen"></a>

Especificar a propriedade da tabela `range` com um hífen em vez de uma vírgula produz um erro como INVALID\$1TABLE\$1PROPERTY: For input string: "*number*-*number*". Certifique-se de que os valores do intervalo estejam separados por uma vírgula, não por um hífen. Para obter mais informações, consulte [Tipo integer](partition-projection-supported-types.md#partition-projection-integer-type).

### HIVE\$1UNKNOWN\$1ERROR: não é possível criar o formato de entrada
<a name="troubleshooting-athena-hive_unknown_error-unable-to-create-input-format-1"></a>

Uma ou mais das partições do Glue são declaradas em um formato diferente porque cada uma tem um formato próprio de entrada específico que é independente. Verifique como suas partições estão definidas no AWS Glue.

### HIVE\$1PARTITION\$1SCHEMA\$1MISMATCH
<a name="troubleshooting-athena-hive_partition_schema_mismatch"></a>

Se o esquema de uma partição for diferente do esquema da tabela, uma consulta poderá falhar com a mensagem de erro HIVE\$1PARTITION\$1SCHEMA\$1MISMATCH.

Para cada tabela no AWS Glue Data Catalog que tenha colunas de partição, o esquema é armazenado no nível de tabela e para cada partição individual dentro da tabela. O esquema de partições é preenchido por um crawler do AWS Glue com base no exemplo de dados lido dentro da partição.

Quando o Athena executa uma consulta, ela valida o esquema da tabela e o esquema de todas as partições necessárias para a consulta. A validação compara os tipos de dados da coluna em ordem e verifica se eles correspondem às colunas que se sobrepõem. Isso evita operações inesperadas, como adicionar ou remover colunas no meio de uma tabela. Se o Athena detectar que o esquema de uma partição é diferente do esquema da tabela, o Athena talvez não possa processar a consulta e emita uma falha com `HIVE_PARTITION_SCHEMA_MISMATCH`.

Existem algumas maneiras de corrigir esse problema. Primeiro, se os dados tiverem sido adicionados acidentalmente, você poderá remover os arquivos de dados que causam a diferença no esquema, ignorar a partição e rastrear novamente os dados. Segundo, você pode descartar a partição individual e executar `MSCK REPAIR` no Athena para recriá-la usando o esquema da tabela. Essa segunda opção só funcionará se você tiver certeza de que o esquema aplicado continuará lendo os dados corretamente.

### A tabela SemanticException não foi particionada, mas a especificação da partição existe
<a name="troubleshooting-athena-semanticexception-table-is-not-partitioned-but-partition-spec-exists"></a>

Esse erro pode ocorrer quando não há partições definidas na instrução `CREATE TABLE`. Para obter mais informações, consulte [Como solucionar o erro "FALHA: a tabela SemanticException não foi particionada, mas a especificação da partição existe" no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-failed-semanticexception-table/) (em inglês) na Central de Conhecimento da AWS.

### Arquivos de zero byte no formato `_$folder$`
<a name="troubleshooting-athena-alter-table-add-partition-zero-byte-folder-files"></a>

Se você executar uma instrução `ALTER TABLE ADD PARTITION` e especificar erroneamente uma partição que já existe e uma localização incorreta do Amazon S3, serão criados arquivos de espaço reservado de zero byte do formato `partition_value_$folder$` no Amazon S3. Você precisa remover esses arquivos manualmente.

Para evitar que isso aconteça, use a sintaxe `ADD IF NOT EXISTS` em sua instrução `ALTER TABLE ADD PARTITION`, assim:

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITIION […]
```

### Zero registro retornado dos dados particionados
<a name="troubleshooting-athena-zero-records-returned-from-partitioned-data"></a>

Esse problema pode ocorrer por vários motivos. Para saber as causas possíveis e as resoluções, consulte [Criei uma tabela no Amazon Athena com partições definidas, mas quando consulto a tabela, zero registro é retornado](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/) (em inglês) na Central de Conhecimento da AWS.

Consulte também [HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS](#troubleshooting-athena-ctas-hive-too-many-open-partitions).

## Permissões
<a name="troubleshooting-athena-permissions"></a>

### Erro de acesso negado ao consultar o Amazon S3
<a name="troubleshooting-athena-access-denied-error-when-querying-amazon-s3"></a>

Isso pode ocorrer quando você não tem permissão para ler os dados no bucket, permissão para gravar no bucket de resultados ou o caminho do Amazon S3 contém um endpoint de região como `us-east-1.amazonaws.com`. Para obter mais informações, consulte [When I run an Athena query, I get an “access denied” error](https://aws.amazon.com/premiumsupport/knowledge-center/access-denied-athena/) (Quando executo uma consulta do Athena, recebo um erro “Acesso negado”) na Central de Conhecimento da AWS.

### Acesso negado com o erro de código de status 403 ao executar consultas DDL em dados criptografados no Amazon S3
<a name="troubleshooting-athena-access-denied-error-when-querying-amazon-s3-encrypted"></a>

Você poderá receber a mensagem de erro Acesso negado (serviço: Amazon S3; código de status: 403; código de erro: AccessDenied; ID da solicitação: *<request\$1id>*) se as seguintes condições forem verdadeiras:

1. Execute uma consulta DDL, como `ALTER TABLE ADD PARTITION` ou `MSCK REPAIR TABLE`.

1. Você tem um bucket com a [criptografia padrão](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html) configurada para usar `SSE-S3`.

1. O bucket também tem uma política como a seguinte que força as solicitações `PutObject` a especificar os cabeçalhos `PUT` `"s3:x-amz-server-side-encryption": "true"` e `"s3:x-amz-server-side-encryption": "AES256"`.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::<resource-name>/*",
               "Condition": {
                   "Null": {
                       "s3:x-amz-server-side-encryption": "true"
                   }
               }
           },
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::<resource-name>/*",
               "Condition": {
                   "StringNotEquals": {
                       "s3:x-amz-server-side-encryption": "AES256"
                   }
               }
           }
       ]
   }
   ```

------

Nesse caso, a solução recomendada é remover a política de bucket, como a que foi mostrada acima, quando a criptografia padrão do bucket já está presente.

### Acesso negado com código de status 403 ao consultar um bucket do Amazon S3 em outra conta
<a name="troubleshooting-athena-access-denied-with-status-code-403-when-querying-an-amazon-s3-bucket-in-another-account"></a>

Esse erro pode ocorrer quando você tenta consultar logs escritos por outro AWS service (Serviço da AWS) e a segunda conta é o proprietária do bucket, mas não tem os objetos no bucket. Para obter mais informações, consulte [I get the Amazon S3 exception “access denied with status code: 403” in Amazon Athena when I query a bucket in another account](https://aws.amazon.com/premiumsupport/knowledge-center/athena-access-denied-status-code-403/) (Vejo a exceção do Amazon S3 “Acesso negado com código de status: 403” no Amazon Athena quando consulto um bucket em outra conta) na Central de Conhecimento da AWS.

### Usar credenciais de função do IAM para se conectar ao driver JDBC do Athena
<a name="troubleshooting-athena-use-IAM-role-credentials-to-connect-to-the-athena-jdbc-driver"></a>

Você pode recuperar as credenciais temporárias de uma função para autenticar o [conector JDBC ao Athena](connect-with-jdbc.md). As credenciais temporárias têm uma vida útil máxima de 12 horas. Para obter mais informações, consulte [Como posso usar minhas credenciais de função do IAM ou alternar para outra função do IAM ao me conectar ao Athena usando o driver JDBC?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-iam-jdbc-driver/) (em inglês) na Central de Conhecimento da AWS.

### O descritor de armazenamento de tabela obrigatório não está preenchido
<a name="troubleshooting-athena-access-denied-table-storage"></a>

Isso pode ocorrer quando você tenta consultar ou visualizar uma tabela para a qual não tem permissões. Para isso, a solução recomendada é conceder permissões `DESCRIBE` e `SELECT` sobre os recursos via AWS Lake Formation. Se seu recurso for compartilhado entre contas, onde o recurso original existe na conta A e você deseja consultar um recurso vinculado na conta B, é necessário garantir que seu perfil tenha permissão `DESCRIBE` sobre o recurso original na conta A e permissão `SELECT` sobre o recurso vinculado na conta B.

## Problemas de sintaxe da consulta
<a name="troubleshooting-athena-query-syntax-issues"></a>

### FAILED: NullPointerException name is null (FALHA: o nome de NullPointerException é nulo)
<a name="troubleshooting-athena-nullpointerexception-name-is-null"></a>

Se você usar a operação de API do AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) ou o modelo [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) do CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedade `TableType` e, depois, executar uma consulta DDL, como `SHOW CREATE TABLE` ou `MSCK REPAIR TABLE`, poderá receber a mensagem de erro FALHA: o nome de NullPointerException é nulo. 

Para resolver o erro, especifique um valor para o atributo [TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` como parte da chamada de API `CreateTable` do AWS Glue ou do [modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). Os valores possíveis para `TableType` são `EXTERNAL_TABLE` ou `VIRTUAL_VIEW`.

Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue `CreateTable` ou o modelo do `AWS::Glue::Table`. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedade `TableType` será definida automaticamente para você. 

### Função não registrada
<a name="troubleshooting-athena-function-not-registered"></a>

Esse erro ocorre quando você tenta usar uma função que o Athena não permite. Para ver a lista de funções permitidas pelo Athena, consulte [Funções no Amazon Athena](functions.md) ou execute a instrução `SHOW FUNCTIONS` no editor de consultas. Você também pode escrever sua própria [User Defined Function (UDF – Função definida pelo usuário)](querying-udf.md). Para obter mais informações, consulte [Como resolver o erro de sintaxe “função não registrada” no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-syntax-function-not-registered/) (em inglês) na Central de Conhecimento da AWS.

### Exceções GENERIC\$1INTERNAL\$1ERROR
<a name="troubleshooting-athena-generic-internal-error"></a>

`GENERIC_INTERNAL_ERROR`As exceções podem ter várias causas, incluindo as seguintes:
+ **GENERIC\$1INTERNAL\$1ERROR: Null** (GENERIC\$1INTERNAL\$1ERROR: nulo): você pode ver essa exceção em qualquer uma das seguintes condições:
  + Existe discrepância de esquema entre o tipo de dados de uma coluna na definição de tabela e o tipo de dados real do conjunto de dados.
  + Você está executando uma consulta (CTAS) `CREATE TABLE AS SELECT` com uma sintaxe inexata.
+ **GENERIC\$1INTERNAL\$1ERROR: parent builder is null** (GENERIC\$1INTERNAL\$1ERROR: o criador pai é nulo): você pode ver essa exceção quando consulta uma tabela de colunas com tipo de dado `array` e está usando a biblioteca OpenCSVSerde. O formato OpenCSVSerde não suporta o tipo de dados `array`.
+ **GENERIC\$1INTERNAL\$1ERROR: Value exceeds MAX\$1INT** (GENERIC\$1INTERNAL\$1ERROR: o valor excede MAX\$1INT): você pode ver essa exceção quando a coluna de dados de origem é definida com o tipo de dados `INT` e tem um valor numérico maior que 2.147.483.647.
+ **GENERIC\$1INTERNAL\$1ERROR: Value exceeds MAX\$1BYTE** (GENERIC\$1INTERNAL\$1ERROR: o valor excede MAX\$1BYTE): você pode ver essa exceção quando a coluna de dados de origem tem um valor numérico que excede o tamanho permitido para o tipo de dados`BYTE`. O tipo de dado `BYTE` é equivalente a `TINYINT`. `TINYINT` é um número inteiro com sinal de 8 bits no formato de complemento de dois com um valor mínimo de -128 e um valor máximo de 127.
+ **GENERIC\$1INTERNAL\$1ERROR: Number of partition values does not match number of filters** (GENERIC\$1INTERNAL\$1ERROR: o número de partições não corresponde ao número de filtros): você pode ver essa exceção se tiver partições inconsistentes nos dados do Amazon Simple Storage Service (Amazon S3). Você pode ter partições inconsistentes em qualquer uma das seguintes condições:
  + As partições no Amazon S3 foram alteradas (exemplo: novas partições foram adicionadas).
  + O número de colunas de partição na tabela não corresponde às dos metadados da partição.

Para obter informações mais detalhadas sobre cada um desses erros, consulte [How do I resolve the error “GENERIC\$1INTERNAL\$1ERROR" when I query a table in Amazon Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-generic-internal-error/) na Central de Conhecimento da AWS.

### O número de grupos correspondentes não corresponde ao número de colunas
<a name="troubleshooting-athena-number-of-matching-groups-doesnt-match-the-number-of-columns"></a>

Esse erro ocorre ao usar [Regex SerDe](regex-serde.md) em uma instrução CREATE TABLE e o número de grupos correspondentes de regex não corresponde ao número de colunas que você especificou para a tabela. Para obter mais informações, consulte [How do I resolve the RegexSerDe error “number of matching groups doesn't match the number of columns” in Amazon Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/regexserde-error-athena-matching-groups/) (Como resolvo o erro RegexSerDe “O número de grupos correspondentes não corresponde ao número de colunas” no Amazon Athena?) na Central de Conhecimento da AWS.

### queryString não atende à restrição: o tamanho do membro deve ser menor ou igual a 262144
<a name="troubleshooting-athena-querystring-failed-to-satisfy-constraint-member-must-have-length-less-than-or-equal-to-262144"></a>

O tamanho máximo da string de consulta no Athena (262.144 bytes) não é uma cota ajustável. O AWS Support não pode aumentar a cota para você, mas você pode tentar resolver o problema dividindo as consultas longas em tamanhos menores. Para obter mais informações, consulte [Como posso aumentar o tamanho máximo da string de consulta no Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-query-string-length/) (em inglês) na Central de Conhecimento da AWS.

### SYNTAX\$1ERROR: a coluna não pode ser resolvida
<a name="troubleshooting-athena-syntax_error-column-cannot-be-resolved"></a>

Esse erro pode ocorrer quando você consulta uma tabela criada por um crawler do AWS Glue de um arquivo CSV codificado em UTF-8 que tem uma Byte Order Mark (BOM – Marca de ordem de byte). O AWS Glue não reconhece as BOMs e as altera para pontos de interrogação, que o Amazon Athena não reconhece. A solução é remover o ponto de interrogação no Athena ou no AWS Glue.

### Excesso de argumentos para chamada de função
<a name="troubleshooting-athena-too-many-arguments"></a>

No mecanismo Athena versão 3, as funções não podem receber mais de 127 argumentos. Essa limitação é proposital. Se você usar uma função com mais de 127 parâmetros, ocorrerá uma mensagem de erro como esta:

TOO\$1MANY\$1ARGUMENTS: linha *nnn*:*nn*: excesso de argumentos para a chamada da função *function\$1name*().

Para resolver esse problema, utilize menos parâmetros por chamada de função.

## Problemas de tempo limite de consulta
<a name="troubleshooting-athena-query-timeout-issues"></a>

Se você tiver erros de tempo limite nas suas consultas do Athena, verifique os logs do CloudTrail. O tempo limite das consultas pode ser atingido devido ao controle de utilização das APIs do AWS Glue ou do Lake Formation. Quando esses erros ocorrem, as mensagens de erro correspondentes podem indicar um problema de tempo limite de consulta em vez de um problema de controle de utilização. Para solucionar o problema, você pode verificar os logs do CloudTrail antes de entrar em contato com o Suporte. Para obter mais informações, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md) e [Registrar em log as chamadas de API do Amazon Athena com o AWS CloudTrail](monitor-with-cloudtrail.md).

Vaja informações sobre problemas de tempo limite de consulta com as consultas federadas quando você chama a API `ListTableMetadata` em [Tempo limite ao chamar ListTableMetadata](#troubleshooting-athena-federated-queries-list-table-metadata-timeout).

## Problemas de controle de utilização
<a name="troubleshooting-athena-throttling-issues"></a>

Se suas consultas excederem os limites dos serviços dependentes, como o Amazon S3, AWS KMS, AWS Glue ou AWS Lambda, as mensagens a seguir podem ser esperadas. Para resolver esses problemas, reduza o número de chamadas simultâneas originadas da mesma conta.


****  

| Serviço | A mensagem de erro | 
| --- | --- | 
| AWS Glue | AWSGlueException: Rate exceeded. (AWSGlueException: Taxa excedida. | 
| AWS KMS | Você excedeu a taxa na qual pode chamar o KMS. Reduza a frequência de suas chamadas. | 
| AWS Lambda |  Rate exceeded (Taxa excedida TooManyRequestsException  | 
| Amazon S3 | AmazonS3Exception: Please reduce your request rate. (AmazonS3Exception: Reduza sua taxa de solicitação. | 

Para obter informações sobre formas de evitar o controle de utilização do Amazon S3 ao usar o Athena, consulte [Prevenir o controle de utilização do Amazon S3](performance-tuning-s3-throttling.md).

## Visualizações
<a name="troubleshooting-athena-views"></a>

### Visualizações criadas no shell do Apache Hive não funcionam no Athena
<a name="troubleshooting-athena-views-created-in-hive-shell-do-not-work-in-athena"></a>

Devido a suas implementações fundamentalmente diferentes, as visualizações criadas no shell do Apache Hive não são compatíveis com o Athena. Para resolver esse problema, recrie as visualizações no Athena.

### A visualização é obsoleta e deve ser recriada
<a name="troubleshooting-athena-view-is-stale-it-must-be-re-created"></a>

Você pode receber esse erro se a tabela subjacente a uma visualização foi alterada ou descartada. A resolução é recriar a visualização. Para obter mais informações, consulte [How can I resolve the “view is stale; it must be re-created” error in Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-view-is-stale-error/) (Como posso resolver o erro “A visualização é obsoleta e deve ser recriada” no Athena?) na Central de Conhecimento da AWS.

## Grupos de trabalho
<a name="troubleshooting-athena-workgroups"></a>

Para obter informações sobre como solucionar problemas de grupos de trabalho, consulte [Solucionar erros de grupo de trabalho](workgroups-troubleshooting.md).

## Recursos adicionais
<a name="troubleshooting-athena-additional-resources"></a>

As páginas a seguir apresentam mais informações para solucionar problemas com o Amazon Athena.
+ [Catálogo de erros do Athena](error-reference.md)
+ [Service Quotas](service-limits.md)
+ [Considerações e limitações das consultas SQL no Amazon Athena](other-notable-limitations.md)
+ [DDL incompatível](unsupported-ddl.md)
+ [Nomear bancos de dados, tabelas e colunas](tables-databases-columns-names.md)
+ [Tipos de dados no Amazon Athena](data-types.md)
+ [Escolha de um SerDe para seus dados](supported-serdes.md)
+ [Usar compactação no Athena](compression-formats.md)
+ [Escapar palavras-chave reservadas em consultas](reserved-words.md)
+ [Solucionar erros de grupo de trabalho](workgroups-troubleshooting.md)

Os seguintes recursos da AWS também podem ajudar:
+  [Tópicos do Athena na Central de Conhecimento da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/#Amazon_Athena) 
+  [Perguntas do Amazon Athena em AWS re:Post](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena)
+  [Publicações do Athena no blog sobre big data da AWS](https://aws.amazon.com/blogs/big-data/tag/amazon-athena/) 

Geralmente, a solução de problemas requer consulta e descoberta iterativas por um especialista ou de uma comunidade de ajudantes. Se continuar a enfrentar problemas após tentar as sugestões nesta página, entre em contato com o AWS Support (no Console de gerenciamento da AWS, clique em **Suporte**, **Central de Suporte**), ou faça uma pergunta no [AWS re:Post](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena) usando a tag **Amazon Athena**.

# Catálogo de erros do Athena
<a name="error-reference"></a>

O Athena fornece informações de erro padronizadas para ajudar você a compreender consultas com falha e tomar medidas após uma falha de consulta. O recurso `AthenaError` inclui um campo `ErrorCategory` e um campo `ErrorType`. `ErrorCategory` especifica se a causa da consulta com falha é um erro do sistema, erro do usuário ou outro erro. `ErrorType` fornece informações mais detalhadas sobre a origem da falha. Ao combinar esses dois campos, você entende melhor as circunstâncias relacionadas e as causas do erro específico que ocorreu.

## Categoria do erro
<a name="error-reference-error-category"></a>

A seguinte tabela lista os valores da categoria de erro do Athena e seus significados.


****  

| Categoria do erro | Origem | 
| --- | --- | 
| 1 | SYSTEM | 
| 2 | USER | 
| 3 | OUTRO | 

## Referência de tipos de erros
<a name="error-reference-error-type-reference"></a>

A seguinte tabela lista os valores do tipo de erro do Athena e seus significados.


****  

| Tipo de erro | Descrição | 
| --- | --- | 
| 0 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 1 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 2 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 3 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 4 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 5 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 6 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 7 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 8 | A consulta esgotou recursos esgotados nesse fator de escala | 
| 100 | Erro de serviço interno | 
| 200 | O mecanismo de consulta apresentou um erro interno | 
| 201 | O mecanismo de consulta apresentou um erro interno | 
| 202 | O mecanismo de consulta apresentou um erro interno | 
| 203 | Erro do driver | 
| 204 | Erro no metastore | 
| 205 | O mecanismo de consulta apresentou um erro interno | 
| 206 | Tempo limite da consulta | 
| 207 | O mecanismo de consulta apresentou um erro interno | 
| 208 | O mecanismo de consulta apresentou um erro interno | 
| 209 | Falha no cancelamento da consulta | 
| 210 | Tempo limite da consulta | 
| 211 | O mecanismo de consulta apresentou um erro interno | 
| 212 | O mecanismo de consulta apresentou um erro interno | 
| 213 | O mecanismo de consulta apresentou um erro interno | 
| 214 | O mecanismo de consulta apresentou um erro interno | 
| 215 | O mecanismo de consulta apresentou um erro interno | 
| 216 | O mecanismo de consulta apresentou um erro interno | 
| 217 | O mecanismo de consulta apresentou um erro interno | 
| 218 | O mecanismo de consulta apresentou um erro interno | 
| 219 | O mecanismo de consulta apresentou um erro interno | 
| 220 | O mecanismo de consulta apresentou um erro interno | 
| 221 | O mecanismo de consulta apresentou um erro interno | 
| 222 | O mecanismo de consulta apresentou um erro interno | 
| 223 | O mecanismo de consulta apresentou um erro interno | 
| 224 | O mecanismo de consulta apresentou um erro interno | 
| 225 | O mecanismo de consulta apresentou um erro interno | 
| 226 | O mecanismo de consulta apresentou um erro interno | 
| 227 | O mecanismo de consulta apresentou um erro interno | 
| 228 | O mecanismo de consulta apresentou um erro interno | 
| 229 | O mecanismo de consulta apresentou um erro interno | 
| 230 | O mecanismo de consulta apresentou um erro interno | 
| 231 | O mecanismo de consulta apresentou um erro interno | 
| 232 | O mecanismo de consulta apresentou um erro interno | 
| 233 | Erro no Iceberg | 
| 234 | Erro no Lake Formation | 
| 235 | O mecanismo de consulta apresentou um erro interno | 
| 236 | O mecanismo de consulta apresentou um erro interno | 
| 237 | Erro de serialização | 
| 238 | Falha ao carregar metadados no Amazon S3 | 
| 239 | Erro geral de persistência | 
| 240 | Falha no envio da consulta | 
| 300 | Erro de serviço interno | 
| 301 | Erro de serviço interno | 
| 302 | Erro de serviço interno | 
| 303 | Erro de serviço interno | 
| 400 | Erro de serviço interno | 
| 401 | Falha na gravação de resultados da consulta no Amazon S3 | 
| 402 | Falha na gravação de resultados da consulta no Amazon S3 | 
| 1000 | Erro do usuário | 
| 1001 | Erro de dados | 
| 1.002 | Erro de dados | 
| 1003 | Falha na tarefa DDL | 
| 1004 | Erro de esquema | 
| 1005 | Erro de serialização | 
| 1006 | Erro de sintaxe | 
| 1007 | Erro de dados | 
| 1008 | Consulta rejeitada | 
| 1009 | Falha na consulta | 
| 1010 | Erro de serviço interno | 
| 1011 | Cancelamento da consulta pelo usuário | 
| 1012 | O mecanismo de consulta apresentou um erro interno | 
| 1013 | O mecanismo de consulta apresentou um erro interno | 
| 1014 | Cancelamento da consulta pelo usuário | 
| 1100 | Argumento inválido fornecido | 
| 1101 | Propriedade inválida fornecida | 
| 1102 | O mecanismo de consulta apresentou um erro interno | 
| 1103 | Propriedade de tabela inválida fornecida | 
| 1104 | O mecanismo de consulta apresentou um erro interno | 
| 1105 | O mecanismo de consulta apresentou um erro interno | 
| 1106 | Argumento de função inválido fornecido | 
| 1107 | Exibição inválida | 
| 1108 | Falha no registro da função | 
| 1109 | Caminho fornecido do Amazon S3 não encontrado | 
| 1110 | Tabela ou exibição fornecida inexistente | 
| 1200 | Consulta sem suporte | 
| 1201 | Decodificador fornecido sem suporte | 
| 1202 | Tipo de consulta sem suporte | 
| 1300 | Erro geral de não encontrado | 
| 1301 | Entidade geral não encontrada | 
| 1302 | Arquivo não encontrado | 
| 1303 | Função ou implementação de função fornecida não encontrada | 
| 1304 | O mecanismo de consulta apresentou um erro interno | 
| 1305 | O mecanismo de consulta apresentou um erro interno | 
| 1306 | Bucket do Amazon S3 não encontrado | 
| 1307 | Mecanismo selecionado não encontrado | 
| 1308 | O mecanismo de consulta apresentou um erro interno | 
| 1400 | Erros de controle de utilização | 
| 1401 | Falha na consulta devido a controle de utilização de AWS Glue | 
| 1402 | Falha na consulta devido a muitas versões de tabela na AWS Glue | 
| 1403 | A consulta falhou como resultado do controle de utilização do Amazon S3 | 
| 1404 | A consulta falhou como resultado do controle de utilização do Amazon Athena | 
| 1405 | A consulta falhou como resultado do controle de utilização do Amazon Athena | 
| 1406 | A consulta falhou como resultado do controle de utilização do Amazon Athena | 
| 1500 | Erro de permissão | 
| 1501 | Erro de permissão do Amazon S3 | 
| 1602 |  Excedeu o limite da capacidade reservada. Capacidade insuficiente para executar esta consulta.  | 
| 1700 | A consulta falhou devido a uma exceção interna do Lake Formation | 
| 1701 | A consulta falhou devido a uma exceção interna do AWS Glue | 
| 9999 | Erro de serviço interno | 

# Exemplos de código
<a name="code-samples"></a>

Os exemplos apresentados neste tópico usam o SDK para Java 2.x como ponto de partida para a criação de aplicações do Athena.

**nota**  
Para obter informações sobre como programar o Athena usando outros AWS SDKs específicos de linguagem, consulte os seguintes recursos:  
AWS Command Line Interface (`[athena](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/index.html#cli-aws-athena)`)
AWS SDK para .NET ([https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Athena/NAthenaModel.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Athena/NAthenaModel.html)) 
AWS SDK para C\$1\$1 (`[Aws::Athena::AthenaClient](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-athena/html/class_aws_1_1_athena_1_1_athena_client.html)`)
AWS SDK para Go ([https://docs.aws.amazon.com/sdk-for-go/api/service/athena/](https://docs.aws.amazon.com/sdk-for-go/api/service/athena/)) 
AWS SDK para JavaScript v3 ([https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/athena/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/athena/)) 
AWS SDK para PHP 3.x ([https://docs.aws.amazon.com/aws-sdk-php/v3/api/namespace-Aws.Athena.html](https://docs.aws.amazon.com/aws-sdk-php/v3/api/namespace-Aws.Athena.html)) 
AWS SDK para Python (Boto3) ([https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html)) 
AWS SDK para Ruby v3 ([https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Athena/Client.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Athena/Client.html)) 

Para obter mais informações sobre como executar os exemplos de código para Java nesta seção, consulte [Amazon Athena Java readme](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/athena) no [repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples) no GitHub. Para obter a referência de programação em Java para o Athena, consulte [AthenaClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/athena/AthenaClient.html) no AWS SDK for Java 2.x.

**nota**  
Estes exemplos usam constantes (por exemplo, `ATHENA_SAMPLE_QUERY`) para strings, definidas em uma declaração da classe `ExampleConstants.java`. Substitua essas constantes pelas próprias strings ou constantes definidas.

**Topics**
+ [

# Constantes
](constants.md)
+ [

# Criar um cliente para acessar o Athena
](create-a-client-to-access-athena.md)
+ [

# Iniciar a execução da consulta
](start-query-execution.md)
+ [

# Interromper a execução da consulta
](stop-query-execution.md)
+ [

# Listar execuções de consulta
](list-query-executions.md)
+ [

# Criar uma consulta nomeada
](create-a-named-query.md)
+ [

# Excluir uma consulta nomeada
](delete-a-named-query.md)
+ [

# Listar consultas nomeadas
](list-named-queries.md)

# Constantes
<a name="constants"></a>

A classe `ExampleConstants.java` demonstra como consultar uma tabela criada pelo tutorial [Conceitos básicos](getting-started.md) no Athena.

```
package aws.example.athena;

public class ExampleConstants {

    public static final int CLIENT_EXECUTION_TIMEOUT = 100000;
    public static final String ATHENA_OUTPUT_BUCKET = "s3://bucketscott2"; // change the Amazon S3 bucket name to match
                                                                           // your environment
    // Demonstrates how to query a table with a comma-separated value (CSV) table.
    // For information, see
    // https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html
    public static final String ATHENA_SAMPLE_QUERY = "SELECT * FROM scott2;"; // change the Query statement to match
                                                                              // your environment
    public static final long SLEEP_AMOUNT_IN_MS = 1000;
    public static final String ATHENA_DEFAULT_DATABASE = "mydatabase"; // change the database to match your database

}
```

# Criar um cliente para acessar o Athena
<a name="create-a-client-to-access-athena"></a>

A classe `AthenaClientFactory.java` mostra como criar e configurar um cliente do Amazon Athena.

```
package aws.example.athena;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.AthenaClientBuilder;

public class AthenaClientFactory {
    private final AthenaClientBuilder builder = AthenaClient.builder()
            .region(Region.US_WEST_2)
            .credentialsProvider(ProfileCredentialsProvider.create());

    public AthenaClient createClient() {
        return builder.build();
    }
}
```

# Iniciar a execução da consulta
<a name="start-query-execution"></a>

O `StartQueryExample` mostra como enviar uma consulta ao Athena, aguardar até que os resultados estejam disponíveis e processá-los.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.QueryExecutionContext;
import software.amazon.awssdk.services.athena.model.ResultConfiguration;
import software.amazon.awssdk.services.athena.model.StartQueryExecutionRequest;
import software.amazon.awssdk.services.athena.model.StartQueryExecutionResponse;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.GetQueryExecutionRequest;
import software.amazon.awssdk.services.athena.model.GetQueryExecutionResponse;
import software.amazon.awssdk.services.athena.model.QueryExecutionState;
import software.amazon.awssdk.services.athena.model.GetQueryResultsRequest;
import software.amazon.awssdk.services.athena.model.GetQueryResultsResponse;
import software.amazon.awssdk.services.athena.model.ColumnInfo;
import software.amazon.awssdk.services.athena.model.Row;
import software.amazon.awssdk.services.athena.model.Datum;
import software.amazon.awssdk.services.athena.paginators.GetQueryResultsIterable;
import java.util.List;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class StartQueryExample {

    public static void main(String[] args) throws InterruptedException {
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        String queryExecutionId = submitAthenaQuery(athenaClient);
        waitForQueryToComplete(athenaClient, queryExecutionId);
        processResultRows(athenaClient, queryExecutionId);
        athenaClient.close();
    }

    // Submits a sample query to Amazon Athena and returns the execution ID of the
    // query.
    public static String submitAthenaQuery(AthenaClient athenaClient) {
        try {
            // The QueryExecutionContext allows us to set the database.
            QueryExecutionContext queryExecutionContext = QueryExecutionContext.builder()
                    .database(ExampleConstants.ATHENA_DEFAULT_DATABASE)
                    .build();

            // The result configuration specifies where the results of the query should go.
            ResultConfiguration resultConfiguration = ResultConfiguration.builder()
                    .outputLocation(ExampleConstants.ATHENA_OUTPUT_BUCKET)
                    .build();

            StartQueryExecutionRequest startQueryExecutionRequest = StartQueryExecutionRequest.builder()
                    .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY)
                    .queryExecutionContext(queryExecutionContext)
                    .resultConfiguration(resultConfiguration)
                    .build();

            StartQueryExecutionResponse startQueryExecutionResponse = athenaClient
                    .startQueryExecution(startQueryExecutionRequest);
            return startQueryExecutionResponse.queryExecutionId();

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
        return "";
    }

    // Wait for an Amazon Athena query to complete, fail or to be cancelled.
    public static void waitForQueryToComplete(AthenaClient athenaClient, String queryExecutionId)
            throws InterruptedException {
        GetQueryExecutionRequest getQueryExecutionRequest = GetQueryExecutionRequest.builder()
                .queryExecutionId(queryExecutionId)
                .build();

        GetQueryExecutionResponse getQueryExecutionResponse;
        boolean isQueryStillRunning = true;
        while (isQueryStillRunning) {
            getQueryExecutionResponse = athenaClient.getQueryExecution(getQueryExecutionRequest);
            String queryState = getQueryExecutionResponse.queryExecution().status().state().toString();
            if (queryState.equals(QueryExecutionState.FAILED.toString())) {
                throw new RuntimeException(
                        "The Amazon Athena query failed to run with error message: " + getQueryExecutionResponse
                                .queryExecution().status().stateChangeReason());
            } else if (queryState.equals(QueryExecutionState.CANCELLED.toString())) {
                throw new RuntimeException("The Amazon Athena query was cancelled.");
            } else if (queryState.equals(QueryExecutionState.SUCCEEDED.toString())) {
                isQueryStillRunning = false;
            } else {
                // Sleep an amount of time before retrying again.
                Thread.sleep(ExampleConstants.SLEEP_AMOUNT_IN_MS);
            }
            System.out.println("The current status is: " + queryState);
        }
    }

    // This code retrieves the results of a query
    public static void processResultRows(AthenaClient athenaClient, String queryExecutionId) {
        try {
            // Max Results can be set but if its not set,
            // it will choose the maximum page size.
            GetQueryResultsRequest getQueryResultsRequest = GetQueryResultsRequest.builder()
                    .queryExecutionId(queryExecutionId)
                    .build();

            GetQueryResultsIterable getQueryResultsResults = athenaClient
                    .getQueryResultsPaginator(getQueryResultsRequest);
            for (GetQueryResultsResponse result : getQueryResultsResults) {
                List<ColumnInfo> columnInfoList = result.resultSet().resultSetMetadata().columnInfo();
                List<Row> results = result.resultSet().rows();
                processRow(results, columnInfoList);
            }

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    private static void processRow(List<Row> row, List<ColumnInfo> columnInfoList) {
        for (Row myRow : row) {
            List<Datum> allData = myRow.data();
            for (Datum data : allData) {
                System.out.println("The value of the column is " + data.varCharValue());
            }
        }
    }
}
```

# Interromper a execução da consulta
<a name="stop-query-execution"></a>

O `StopQueryExecutionExample` executa um exemplo de consulta, imediatamente interrompe a consulta e verifica o status dela para garantir que foi cancelada.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.StopQueryExecutionRequest;
import software.amazon.awssdk.services.athena.model.GetQueryExecutionRequest;
import software.amazon.awssdk.services.athena.model.GetQueryExecutionResponse;
import software.amazon.awssdk.services.athena.model.QueryExecutionState;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.QueryExecutionContext;
import software.amazon.awssdk.services.athena.model.ResultConfiguration;
import software.amazon.awssdk.services.athena.model.StartQueryExecutionRequest;
import software.amazon.awssdk.services.athena.model.StartQueryExecutionResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class StopQueryExecutionExample {
    public static void main(String[] args) {
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        String sampleQueryExecutionId = submitAthenaQuery(athenaClient);
        stopAthenaQuery(athenaClient, sampleQueryExecutionId);
        athenaClient.close();
    }

    public static void stopAthenaQuery(AthenaClient athenaClient, String sampleQueryExecutionId) {
        try {
            StopQueryExecutionRequest stopQueryExecutionRequest = StopQueryExecutionRequest.builder()
                    .queryExecutionId(sampleQueryExecutionId)
                    .build();

            athenaClient.stopQueryExecution(stopQueryExecutionRequest);
            GetQueryExecutionRequest getQueryExecutionRequest = GetQueryExecutionRequest.builder()
                    .queryExecutionId(sampleQueryExecutionId)
                    .build();

            GetQueryExecutionResponse getQueryExecutionResponse = athenaClient
                    .getQueryExecution(getQueryExecutionRequest);
            if (getQueryExecutionResponse.queryExecution()
                    .status()
                    .state()
                    .equals(QueryExecutionState.CANCELLED)) {

                System.out.println("The Amazon Athena query has been cancelled!");
            }

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    // Submits an example query and returns a query execution Id value
    public static String submitAthenaQuery(AthenaClient athenaClient) {
        try {
            QueryExecutionContext queryExecutionContext = QueryExecutionContext.builder()
                    .database(ExampleConstants.ATHENA_DEFAULT_DATABASE)
                    .build();

            ResultConfiguration resultConfiguration = ResultConfiguration.builder()
                    .outputLocation(ExampleConstants.ATHENA_OUTPUT_BUCKET)
                    .build();

            StartQueryExecutionRequest startQueryExecutionRequest = StartQueryExecutionRequest.builder()
                    .queryExecutionContext(queryExecutionContext)
                    .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY)
                    .resultConfiguration(resultConfiguration).build();

            StartQueryExecutionResponse startQueryExecutionResponse = athenaClient
                    .startQueryExecution(startQueryExecutionRequest);
            return startQueryExecutionResponse.queryExecutionId();

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
        return null;

    }
}
```

# Listar execuções de consulta
<a name="list-query-executions"></a>

O `ListQueryExecutionsExample` mostra como obter uma lista de IDs de execução de consulta.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.ListQueryExecutionsRequest;
import software.amazon.awssdk.services.athena.model.ListQueryExecutionsResponse;
import software.amazon.awssdk.services.athena.paginators.ListQueryExecutionsIterable;
import java.util.List;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListQueryExecutionsExample {
    public static void main(String[] args) {
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        listQueryIds(athenaClient);
        athenaClient.close();
    }

    public static void listQueryIds(AthenaClient athenaClient) {
        try {
            ListQueryExecutionsRequest listQueryExecutionsRequest = ListQueryExecutionsRequest.builder().build();
            ListQueryExecutionsIterable listQueryExecutionResponses = athenaClient
                    .listQueryExecutionsPaginator(listQueryExecutionsRequest);
            for (ListQueryExecutionsResponse listQueryExecutionResponse : listQueryExecutionResponses) {
                List<String> queryExecutionIds = listQueryExecutionResponse.queryExecutionIds();
                System.out.println("\n" + queryExecutionIds);
            }

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
```

# Criar uma consulta nomeada
<a name="create-a-named-query"></a>

O `CreateNamedQueryExample` mostra como criar uma consulta nomeada.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.CreateNamedQueryRequest;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */

public class CreateNamedQueryExample {
    public static void main(String[] args) {
        final String USAGE = """

                Usage:
                    <name>

                Where:
                    name - the name of the Amazon Athena query.\s
                """;

        if (args.length != 1) {
            System.out.println(USAGE);
            System.exit(1);
        }

        String name = args[0];
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        createNamedQuery(athenaClient, name);
        athenaClient.close();
    }

    public static void createNamedQuery(AthenaClient athenaClient, String name) {
        try {
            // Create the named query request.
            CreateNamedQueryRequest createNamedQueryRequest = CreateNamedQueryRequest.builder()
                    .database(ExampleConstants.ATHENA_DEFAULT_DATABASE)
                    .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY)
                    .description("Sample Description")
                    .name(name)
                    .build();

            athenaClient.createNamedQuery(createNamedQueryRequest);
            System.out.println("Done");

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
```

# Excluir uma consulta nomeada
<a name="delete-a-named-query"></a>

O `DeleteNamedQueryExample` mostra como excluir uma consulta nomeada usando o ID da consulta nomeada.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.DeleteNamedQueryRequest;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.CreateNamedQueryRequest;
import software.amazon.awssdk.services.athena.model.CreateNamedQueryResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class DeleteNamedQueryExample {
    public static void main(String[] args) {
        final String USAGE = """

                Usage:
                    <name>

                Where:
                    name - the name of the Amazon Athena query.\s
                """;

        if (args.length != 1) {
            System.out.println(USAGE);
            System.exit(1);
        }

        String name = args[0];
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        String sampleNamedQueryId = getNamedQueryId(athenaClient, name);
        deleteQueryName(athenaClient, sampleNamedQueryId);
        athenaClient.close();
    }

    public static void deleteQueryName(AthenaClient athenaClient, String sampleNamedQueryId) {
        try {
            DeleteNamedQueryRequest deleteNamedQueryRequest = DeleteNamedQueryRequest.builder()
                    .namedQueryId(sampleNamedQueryId)
                    .build();

            athenaClient.deleteNamedQuery(deleteNamedQueryRequest);

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    public static String getNamedQueryId(AthenaClient athenaClient, String name) {
        try {
            CreateNamedQueryRequest createNamedQueryRequest = CreateNamedQueryRequest.builder()
                    .database(ExampleConstants.ATHENA_DEFAULT_DATABASE)
                    .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY)
                    .name(name)
                    .description("Sample description")
                    .build();

            CreateNamedQueryResponse createNamedQueryResponse = athenaClient.createNamedQuery(createNamedQueryRequest);
            return createNamedQueryResponse.namedQueryId();

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
        return null;
    }
}
```

# Listar consultas nomeadas
<a name="list-named-queries"></a>

O `ListNamedQueryExample` mostra como obter uma lista de IDs de consultas nomeadas.

```
package aws.example.athena;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.athena.AthenaClient;
import software.amazon.awssdk.services.athena.model.AthenaException;
import software.amazon.awssdk.services.athena.model.ListNamedQueriesRequest;
import software.amazon.awssdk.services.athena.model.ListNamedQueriesResponse;
import software.amazon.awssdk.services.athena.paginators.ListNamedQueriesIterable;
import java.util.List;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListNamedQueryExample {
    public static void main(String[] args) {
        AthenaClient athenaClient = AthenaClient.builder()
                .region(Region.US_WEST_2)
                .build();

        listNamedQueries(athenaClient);
        athenaClient.close();
    }

    public static void listNamedQueries(AthenaClient athenaClient) {
        try {
            ListNamedQueriesRequest listNamedQueriesRequest = ListNamedQueriesRequest.builder()
                    .build();

            ListNamedQueriesIterable listNamedQueriesResponses = athenaClient
                    .listNamedQueriesPaginator(listNamedQueriesRequest);
            for (ListNamedQueriesResponse listNamedQueriesResponse : listNamedQueriesResponses) {
                List<String> namedQueryIds = listNamedQueriesResponse.namedQueryIds();
                System.out.println(namedQueryIds);
            }

        } catch (AthenaException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
```