

# 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.