

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