

# Criar tabelas
<a name="tables-described"></a>

Embora a execução de um crawler seja o método recomendado para fazer o inventário dos dados em seus armazenamentos de dados, você pode adicionar tabelas de metadados ao AWS Glue Data Catalog manualmente. Essa abordagem permite que você tenha mais controle sobre as definições de metadados e as personalize de acordo com seus requisitos específicos.

Você também pode adicionar definições de tabela manualmente ao Catálogo de Dados das seguintes formas:
+ Use o console do AWS Glue para criar manualmente uma tabela no AWS Glue Data Catalog. Para obter mais informações, consulte [Criar tabelas usando o console](#console-tables).
+ Use a operação `CreateTable` em [API AWS Glue](aws-glue-api.md) para criar uma tabela no AWS Glue Data Catalog. Para obter mais informações, consulte [Ação CreateTable (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable).
+ Use modelos do CloudFormation. Para obter mais informações, consulte [AWS CloudFormation para AWS Glue](populate-with-cloudformation-templates.md).

Ao definir uma tabela manualmente usando o console ou uma API, você especifica o esquema da tabela e o valor de um campo de classificação que indica o tipo e o formato dos dados na fonte de dados. Se um crawler criar a tabela, o esquema e o formato dos dados serão determinados por um classificador integrado ou um classificador personalizado. Para obter mais informações sobre como criar uma tabela usando o console do AWS Glue, consulte [Criar tabelas usando o console](#console-tables).

**Topics**
+ [Partições de tabela](#tables-partition)
+ [Links de recursos de tabela](#tables-resource-links)
+ [Criar tabelas usando o console](#console-tables)
+ [Criar índices de partição](partition-indexes.md)
+ [Atualizar tabelas do Data Catalog criadas manualmente usando crawlers](#update-manual-tables)
+ [Propriedades da tabela do Data Catalog](#table-properties)

## Partições de tabela
<a name="tables-partition"></a>

Uma definição de tabela do AWS Glue de uma pasta do Amazon Simple Storage Service (Amazon S3) pode descrever uma tabela particionada. Por exemplo, para melhorar a performance da consulta, uma tabela particionada pode separar dados mensais em diferentes arquivos usando o nome do mês como uma chave. No AWS Glue, as definições de tabela incluem a chave de particionamento de uma tabela. Quando o AWS Glue avalia os dados nas pastas do Amazon S3 para catalogar uma tabela, ele determina se foi adicionada uma tabela individual ou particionada. 

Você pode criar índices de partição em uma tabela para buscar um subconjunto das partições em vez de carregar todas as partições na tabela. Para obter mais informações sobre como trabalhar com índices de partição, consulte [Criar índices de partição](partition-indexes.md).

Todas as condições a seguir precisam ser verdadeiras para que o AWS Glue crie uma tabela particionada para uma pasta do Amazon S3:
+ Os esquemas dos arquivos são semelhantes, conforme determinado pelo AWS Glue.
+ O formato de dados dos arquivos é o mesmo.
+ A compressão de dados dos arquivos é a mesma.

Por exemplo, você pode possuir um bucket do Amazon S3 chamado `my-app-bucket`, onde armazena dados de vendas de aplicações iOS e Android. Os dados são particionados por ano, mês e dia. Os arquivos de dados para vendas de aplicativos iOS e Android têm o mesmo esquema, formato de dados e formato de compactação. No AWS Glue Data Catalog, o crawler do AWS Glue cria uma definição de tabela com chaves de particionamento por ano, mês e dia. 

A seguinte listagem do Amazon S3 de `my-app-bucket` mostra algumas das partições. O símbolo `=` é usado para atribuir valores de chave de partição. 

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## Links de recursos de tabela
<a name="tables-resource-links"></a>


|  | 
| --- |
| O console do AWS Glue passou por uma atualização recente. A versão atual do console não é compatível com links de recursos de tabela. | 

O Data Catalog também pode conter *links de recursos* para tabelas. Um link de recurso de tabela é um link para uma tabela local ou compartilhada. No momento, você pode criar links de recursos somente no AWS Lake Formation. Depois de criar um link de recurso para uma tabela, você pode usar o nome do link de recurso onde quer que você use o nome da tabela. Junto com tabelas que você possui ou que são compartilhadas com você, links de recursos de tabelas são retornados por `glue:GetTables()` e aparecem como entradas na página **Tables** (Tabelas) do console do AWS Glue.

O Data Catalog também pode conter links de recursos de banco de dados.

Para obter mais informações sobre links de recursos, consulte [Criar links de recursos ](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) no *Guia do desenvolvedor do AWS Lake Formation*.

## Criar tabelas usando o console
<a name="console-tables"></a>

Uma tabela no AWS Glue Data Catalog é a definição de metadados que representa os dados em um datastore. Você cria tabelas quando executa um crawler ou manualmente no console do AWS Glue. A lista **Tables (Tabelas)** no console do AWS Glue exibe valores dos metadados da sua tabela. Você usa definições de tabela para especificar fontes e destino ao criar trabalhos de ETL (extração, transformação e carregamento). 

**nota**  
Com as mudanças recentes no console de gerenciamento da AWS, pode ser necessário modificar os perfis do IAM existentes para que tenham a permissão de [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables). Para a criação de um novo perfil, a permissão da API `SearchTables` já foi adicionada como padrão.

Para começar, 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/). Escolha a guia **Tables** e use o botão **Add tables** para criar tabelas com um crawler ou digitando atributos manualmente. 

### Adicionar tabelas ao console
<a name="console-tables-add"></a>

Para usar um crawler para adicionar tabelas, escolha **Add tables**, **Add tables using a crawler**. Em seguida, siga as instruções no assistente **Add crawler**. Quando o crawler for executado, as tabelas serão adicionadas ao AWS Glue Data Catalog. Para obter mais informações, consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md).

Se você conhecer os atributos necessários para criar uma definição de tabela do Amazon Simple Storage Service (Amazon S3) no Data Catalog, você poderá criá-la com o assistente de tabela. Escolha **Add tables**, **Add table manually** a siga as instruções no assistente **Add table**.

Ao adicionar uma tabela manualmente usando o console, considere o seguinte:
+ Se você planeja acessar a tabela a partir do Amazon Athena, forneça um nome somente com caracteres alfanuméricos e sublinhados. Para obter mais informações, consulte [Nomes do Athena](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters).
+ O local dos seus dados de origem deve ser um caminho do Amazon S3.
+ O formato dos dados deve corresponder a um dos formatos listados no assistente. A classificação correspondente, SerDe, e outras propriedades da tabela serão preenchidas automaticamente com base no formato escolhido. Você pode definir tabelas com os seguintes formatos:   
**Avro**  
Formato binário JSON do Apache Avro.  
**CSV**  
Valores separados por vírgula (CSV). Você também especifica o delimitador como vírgula, barra vertical, ponto e vírgula, tabulação ou Ctrl\$1A.  
**JSON**  
JavaScript Object Notation.  
**XML**  
Formato Extensible Markup Language. Especifique a tag XML que define uma linha nos dados. As colunas são definidas nas tags de linha.  
**Parquet**  
Armazenamento em colunas no Apache Parquet.  
**ORC**  
Formato Optimized Row Columnar (ORC). Um formato criado para armazenar dados do Hive com eficiência.
+ Você pode definir uma chave de partição para a tabela.
+ No momento, as tabelas particionadas que você cria com o console não podem ser usadas em trabalhos de ETL.

### Atributos da tabela
<a name="console-tables-attributes"></a>

Veja a seguir alguns atributos importantes da sua tabela:

**Nome**  
O nome é determinado quando a tabela é criada, e você não pode alterá-la. Você faz referência a um nome de tabela em muitas operações do AWS Glue.

**Banco de dados**  
O objeto do contêiner onde a sua tabela reside. Este objeto contém uma organização das suas tabelas que existe dentro do AWS Glue Data Catalog e pode diferir de uma organização no seu datastore. Quando você exclui um banco de dados, todas as tabelas contidas nele também são excluídas do Data Catalog. 

**Descrição**  
A descrição da tabela. Você pode escrever uma descrição para ajudá-lo a entender o conteúdo da tabela.

**Formato da tabela**  
Especifique a criação de uma tabela padrão do AWS Glue ou de uma tabela no formato do Apache Iceberg.  
O Data Catalog fornece as seguintes opções de otimização de tabelas para gerenciar o armazenamento de tabelas e melhorar o desempenho de consultas para tabelas Iceberg.  
+ **Compactação**: os arquivos de dados são mesclados e regravados para remover dados obsoletos e consolidar dados fragmentados em arquivos maiores e mais eficientes.
+ **Retenção de snapshots**: os snapshots são versões com carimbo de data e hora de uma tabela do Iceberg. As configurações de retenção de snapshots permitem que os clientes determinem por quanto tempo reter e quantos snapshots devem ser retidos. A configuração de um otimizador de retenção de snapshots pode ajudar a gerenciar a sobrecarga de armazenamento removendo snapshots antigos e desnecessários e seus arquivos subjacentes.
+ **Exclusão de arquivos órfãos**: arquivos órfãos são arquivos que não são mais referidos pelos metadados da tabela do Iceberg. Esses arquivos podem se acumular ao longo do tempo, especialmente após operações como exclusões de tabelas ou trabalhos de ETL com falha. Habilitar a exclusão de arquivos órfãos permite que o AWS Glue identifique e remova periodicamente esses arquivos desnecessários, liberando espaço de armazenamento.
Para obter mais informações, consulte [Otimizar tabelas Iceberg](table-optimizers.md).

**Configuração de otimização**  
É possível usar as configurações padrão ou personalizar as configurações para ativar os otimizadores de tabela.

**perfil do IAM**  
 Para executar a compactação, o serviço assume um perfil do IAM em seu nome. Você pode escolher um perfil do IAM usando o menu suspenso. Certifique-se de que o perfil tenha as permissões necessárias para habilitar a compactação.  
Para saber mais sobre as permissões necessárias para o perfil do IAM, consulte [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md).

**Local**  
O ponteiro para o local dos dados em um datastore que esta definição de tabela representa.

**Classificação**  
Um valor de categorização fornecido quando a tabela foi criada. Normalmente, ele é escrito quando um crawler é executado e especifica o formato dos dados da fonte.

**Data da última atualização**  
A hora e a data (UTC) em que esta tabela foi atualizada no Data Catalog.

**Data adicionada**  
A hora e a data (UTC) em que esta tabela foi adicionada ao Data Catalog.

**Suspenso**  
Se o AWS Glue descobrir que uma tabela do Data Catalog não existe mais no seu datastore original, ele marcará essa tabela como defasada no catálogo de dados. Se você executar um trabalho que faz referência a uma tabela obsoleta, ele falhará. Edite trabalhos que fazem referência a tabelas obsoletas para removê-las como fontes e destinos. Recomendamos que você elimine tabelas obsoletas quando elas não forem mais necessárias. 

**Conexão**  
Se o AWS Glue exigir conexão com seu datastore, o nome da conexão será associado à tabela.

### Exibir e gerenciar detalhes da tabela
<a name="console-tables-details"></a>

Para ver os detalhes de uma tabela existente, escolha o nome dela na lista e, em seguida, **Action, View details**.

Esses detalhes incluem propriedades da sua tabela e do seu esquema. Essa exibição mostra o esquema da tabela, incluindo os nomes de colunas na ordem definida para a tabela, os tipos de dados e as colunas de chaves para partições. Se uma coluna for de um tipo complexo, você poderá escolher **View properties** para exibir detalhes da estrutura desse campo, como mostrado no exemplo a seguir:

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

Para obter mais informações sobre as propriedades de uma tabela, como `StorageDescriptor`, consulte [Estrutura StorageDescriptor](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor).

Para alterar o esquema de uma tabela, escolha **Edit schema** para adicionar e remover colunas, alterar nomes de colunas e alterar tipos de dados.

 Para comparar diferentes versões de uma tabela, incluindo seu esquema, escolha **Compare versions** para ver uma comparação lado-a-lado de duas versões do esquema para uma tabela. Para obter mais informações, consulte [Comparar versões de esquema de tabelas](#console-tables-schema-comparison). 

Para exibir os arquivos que compõem uma partição do Amazon S3, escolha **View partition** (Visualizar partição). Para tabelas do Amazon S3, a coluna **Key** (Chave) exibe as teclas de partição usadas para particionar a tabela no datastore de origem. Particionar é uma maneira de separar uma tabela em partes relacionadas com base nos valores de uma coluna de chave, como data, local ou departamento. Para obter mais informações sobre partições, pesquise na Internet informações sobre "particionamento do Hive".

**nota**  
Para obter orientação detalhada para visualizar os detalhes de uma tabela, consulte o tutorial **Explore table** no console.

### Comparar versões de esquema de tabelas
<a name="console-tables-schema-comparison"></a>

 Ao comparar duas versões de esquema de tabela, você pode comparar alterações de linhas aninhadas expandindo-as e contraindo-as, comparar esquemas de duas versões lado a lado e visualizar as propriedades da tabela lado a lado. 

 Para comparar versões 

1.  No console do AWS Glue, escolha **Tabelas**, depois **Ações** e **Comparar versões**.   
![\[A captura de tela mostra o botão mostra Ações quando selecionado. O menu suspenso exibe a opção Comparar versões.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  Escolha uma versão para comparar no menu suspenso de versões. Ao comparar esquemas, a guia Esquema fica realçada em laranja. 

1.  Quando você compara tabelas entre duas versões, os esquemas de tabela são apresentados a você no lado esquerdo e no lado direito da tela. Isso permite que você determine visualmente as alterações comparando os campos de nome da coluna, tipo de dados, chave e comentários lado a lado. Quando há uma alteração, um ícone colorido exibe o tipo de alteração que foi feita. 
   +  Excluído: exibido por um ícone vermelho indica onde a coluna foi removida de uma versão anterior do esquema da tabela. 
   +  Editado ou movido: exibido por um ícone azul indica onde a coluna foi modificada ou movida em uma versão mais recente do esquema da tabela. 
   +  Adicionado: exibido por um ícone verde indica onde a coluna foi adicionada a uma versão mais recente do esquema da tabela. 
   +  Alterações aninhadas: exibido por um ícone amarelo indica onde a coluna aninhada contém as alterações. Escolha a coluna a ser expandida e visualize as colunas que foram excluídas, editadas, movidas ou adicionadas.   
![\[A captura de tela mostra a comparação do esquema da tabela entre duas versões. Do lado esquerdo, fica a versão mais antiga. Do lado direito, fica a versão mais recente. O ícone de exclusão fica ao lado de uma coluna que foi removida da versão anterior e não existe mais na versão mais recente.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  Use a barra de pesquisa de campos de filtro para exibir campos com base nos caracteres que você inserir aqui. Se você inserir um nome de coluna em qualquer uma das versões da tabela, os campos filtrados serão exibidos nas duas versões da tabela para mostrar onde as alterações ocorreram. 

1.  Para comparar propriedades, escolha a **guia Propriedades**. 

1.  Para parar de comparar versões, escolha **Interromper comparação** para retornar à lista de tabelas. 

# Criar índices de partição
<a name="partition-indexes"></a>

Ao longo do tempo, centenas de milhares de partições são adicionadas a uma tabela. A [API GetPartitions](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) é usada para buscar as partições na tabela. A API retorna partições que correspondem à expressão fornecida na solicitação.

Vamos usar como exemplo uma tabela *dados\$1vendas* que é particionada pelas chaves *País*, *Categoria*, *Ano*, *Mês* e *creationDate*. Para obter os dados de vendas para todos os itens vendidos da categoria *Livros* no ano de 2020 após *15/8/2020*, será necessário fazer uma solicitação `GetPartitions` com a expressão "Categoria = 'Livros' e creationDate > '2020-08-15'" ao Catálogo de Dados.

Se nenhum índice de partição estiver presente na tabela, o AWS Glue carrega todas as partições da tabela e, em seguida, filtra as partições carregadas usando a expressão de consulta fornecida pelo usuário na solicitação `GetPartitions`. A consulta leva mais tempo para ser executada à medida que o número de partições aumenta em uma tabela sem índices. Com um índice, a consulta `GetPartitions` tentará buscar um subconjunto das partições em vez de carregar todas as partições na tabela.

**Topics**
+ [Sobre índices de partição](#partition-index-1)
+ [Criar uma tabela com índices de partição](#partition-index-creating-table)
+ [Adicionar um índice de partição a uma tabela existente](#partition-index-existing-table)
+ [Descrever índices de partição em uma tabela](#partition-index-describing)
+ [Limitações no uso de índices de partição](#partition-index-limitations)
+ [Usar índices para uma chamada GetPartitions otimizada](#partition-index-getpartitions)
+ [Integração com mecanismos](#partition-index-integration-engines)

## Sobre índices de partição
<a name="partition-index-1"></a>

Ao criar um índice de partição, você especifica uma lista de chaves de partição que já existem em uma tabela específica. O índice de partição é uma sublista de chaves de partição definidas na tabela. Um índice de partição pode ser criado em qualquer permutação de chaves de partição definidas na tabela. Para a tabela *dados\$1vendas* acima os índices possíveis são (país, categoria, creationDate), (país, categoria, ano), (país, categoria), (país), (categoria, país, ano, mês), e assim por diante.

O Data Catalog concatenará os valores de partição na ordem fornecida no momento da criação do índice. O índice é criado consistentemente à medida que as partições são adicionadas à tabela. É possível criar índices para tipos de colunas string (string, char e varchar), numérico (int, bigint, long, tinyint e smallint) e data (aaaa-MM-dd). 

**Tipos de dados compatíveis**
+ Data: uma data no formato ISO, como `YYYY-MM-DD`. Por exemplo, data `2020-08-15`. O formato usa hífens (‐) para separar o ano, o mês e o dia. O intervalo permitido para datas de indexação se estende de `0000-01-01` até `9999-12-31`.
+ String: um literal de string entre aspas simples ou duplas. 
+ Char: dados de caractere de comprimento fixo, com um comprimento especificado entre 1 e 255, por exemplo, char(10).
+ Varchar: dados de caracteres de comprimento variável com um tamanho especificado entre 1 e 65535, como varchar(10).
+ Numérico: int, bigint, long, tinyint e smallint

Índices em dados dos tipos Numérico, String e Data são compatíveis com os operadores =, >, >=, <, <= e “between” (entre). Atualmente, a solução de indexação oferece suporte somente ao operador lógico `AND`. Subexpressões com os operadores “LIKE”, “IN”, “OR” e “NOT” são ignoradas na expressão para filtragem usando um índice. A filtragem da subexpressão ignorada é feita nas partições obtidas após a aplicação da filtragem de índice.

Para cada partição adicionada a uma tabela, há um item de índice correspondente criado. Para uma tabela com “n” partições , um índice de partição resultará em “n” itens de índice de partição. O índice de partição “m” na mesma tabela resultará em “m\$1n” itens de índice de partição. Cada item de índice de partição será cobrado de acordo com a política de preços AWS Glue para armazenamento no catálogo de dados. Para obter detalhes sobre o preço do objeto de armazenamento, consulte [Preço do AWS Glue](https://aws.amazon.com/glue/pricing/).

## Criar uma tabela com índices de partição
<a name="partition-index-creating-table"></a>

Você pode criar um índice de partição durante a criação da tabela. O `CreateTable` solicita uma lista de [objetos `PartitionIndex`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex) como uma entrada. Um máximo de três índices de partição pode ser criado em uma determinada tabela. Cada índice de partição requer um nome e uma lista de `partitionKeys` definidos para a tabela. Os índices criados em uma tabela podem ser obtidos usando a [API `GetPartitionIndexes`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes)

## Adicionar um índice de partição a uma tabela existente
<a name="partition-index-existing-table"></a>

Para adicionar um índice de partição a uma tabela existente, use a operação `CreatePartitionIndex`. Você só pode criar um `PartitionIndex` por operação `CreatePartitionIndex`. Adicionar um índice não afeta a disponibilidade de uma tabela, pois a tabela continua disponível enquanto os índices estão sendo criados.

O status do índice de uma partição adicionada é definido como CREATING (Criando) e a criação dos dados do índice é iniciada. Se o processo para criar os índices for bem-sucedido, indexStatus (status do índice) é atualizado para ACTIVE (Ativo) e, para um processo malsucedido, o status do índice é atualizado para FAILED (Falhou). A criação do índice pode falhar por vários motivos, e você pode usar a operação `GetPartitionIndexes` para recuperar os detalhes da falha. As possíveis falhas são:
+ ENCRYPTED\$1PARTITION\$1ERROR (Erro de partição criptografada): a criação de índice em uma tabela com partições criptografadas não é suportada.
+ INVALID\$1PARTITION\$1TYPE\$1DATA\$1ERROR (Erro de dados de tipo de partição inválidos): exibido quando o valor da `partitionKey` não é válido para o valor do tipo de dados da `partitionKey` correspondente. Por exemplo, uma `partitionKey` com o tipo de dados “int” tem um valor “foo”.
+ MISSING\$1PARTITION\$1VALUE\$1ERROR (Erro de valor de partição ausente): exibido quando o `partitionValue` para uma `indexedKey` não está presente. Isso pode acontecer quando uma tabela não é particionada de forma consistente.
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR (Erro de caractere de partição não suportado): exibido quando o valor de uma chave de partição indexada contém os caracteres \$1u0000, \$1u0001 ou \$1u0002
+ INTERNAL\$1ERROR (Erro interno): ocorreu um erro interno enquanto os índices eram criados. 

## Descrever índices de partição em uma tabela
<a name="partition-index-describing"></a>

Para buscar os índices de partição criados em uma tabela, use a operação `GetPartitionIndexes`. A resposta retorna todos os índices na tabela, juntamente com o status atual de cada índice (o `IndexStatus`).

O `IndexStatus` para um índice de partição será um dos seguintes:
+ `CREATING`: o índice está sendo criado e ainda não está disponível para uso.
+ `ACTIVE`: o índice está pronto para uso. As solicitações podem usar o índice para executar uma consulta otimizada.
+ `DELETING`: o índice está sendo excluído e não pode mais ser usado. Um índice no estado ativo pode ser excluído usando a solicitação `DeletePartitionIndex`, que move o status de ACTIVE (Ativo) para DELETING (Excluindo).
+ `FAILED`: falha na criação do índice em uma tabela existente. Cada tabela armazena os últimos dez índices com falha.

As possíveis transições de estado para índices criados em uma tabela existente são:
+ CREATING → ACTIVE → DELETING
+ CREATING → FAILED

## Limitações no uso de índices de partição
<a name="partition-index-limitations"></a>

Depois de criar um índice de partição, observe estas alterações na funcionalidade da tabela e da partição:

**Criação de uma nova partição (após a adição do índice)**  
Depois que um índice de partição é criado em uma tabela, todas as novas partições adicionadas à tabela serão validadas para as verificações de tipo de dados para chaves indexadas. O valor da partição das chaves indexadas será validado para o formato do tipo de dados. Se a verificação do tipo de dados falhar, a operação de criação de partição falhará. Para a tabela *dados\$1de\$1venda*, se um índice for criado para chaves (categoria, ano) em que a categoria é do tipo `string` e ano do tipo `int`, a criação da nova partição com um valor de ANO como “foo” falhará.

Depois que os índices estiverem habilitados, a adição de partições com valores de chave indexados com os caracteres U\$10000, U\$100001 e U\$10002 passará a falhar.

**Atualizações de tabelas**  
Depois que um índice de partição é criado em uma tabela, você não pode modificar os nomes de chave de partição para chaves de partição existentes e não pode alterar o tipo, ou ordem, das chaves registradas com o índice.

## Usar índices para uma chamada GetPartitions otimizada
<a name="partition-index-getpartitions"></a>

Quando você chama `GetPartitions` em uma tabela com um índice, pode incluir uma expressão e, se aplicável, o Data Catalog usará um índice, se possível. A primeira chave do índice deve ser inserida na expressão para os índices a serem usados na filtragem. A otimização de índice na filtragem é aplicada como um melhor esforço. O Data Catalog tenta usar a otimização de índice tanto quanto possível, mas no caso de um índice ausente, ou operador não suportado, ele volta para a implantação existente de carregamento de todas as partições. 

Para a tabela *dados\$1de\$1venda* anterior, vamos adicionar o índice [País, Categoria, Ano]. Se “País” não for inserido na expressão, o índice registrado não poderá filtrar partições usando índices. Você pode adicionar até três índices para suportar vários padrões de consulta.

Vamos pegar algumas expressões de exemplo e ver como os índices funcionam nelas:


| Expressões | Como o índice será usado | 
| --- | --- | 
|  País = 'EUA'  |  O índice será usado para filtrar partições.  | 
|  País = 'EUA' and Categoria = 'Sapatos'  |  O índice será usado para filtrar partições.  | 
|  Categoria = 'Sapatos'  |  Os índices não serão usados, pois “país” não foi fornecido na expressão. Todas as partições serão carregadas para retornar uma resposta.  | 
|  País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018'  |  O índice será usado para filtrar partições.  | 
|  País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018' and mês = 2  |  O índice será usado para buscar todas as partições com país = “EUA” e categoria = “sapatos” e ano > 2018. Em seguida, a filtragem com a expressão mês será realizada.  | 
|  País = 'EUA' AND Categoria = 'Sapatos' OR Ano > '2018'  |  Os índices não serão usados, pois há um operador `OR` na expressão.  | 
|  País = 'EUA' AND Categoria = 'Sapatos' AND (Ano = '2017' OR Ano = '2018')  |  O índice será usado para buscar todas as partições com país = “US” e categoria = “sapatos” e, em seguida, a filtragem com a expressão ano será realizada.  | 
|  País in ('EUA', 'Reino Unido') AND Categoria = 'Sapatos'  |  Os índices não serão usados para filtrar, pois o operador `IN` não é suportado no momento.  | 
|  País = 'EUA' AND Categoria in ('Sapatos', 'Livros')  |  O índice será usado para buscar todas as partições com país = “EUA”. A filtragem com a expressão Categoria será realizada em seguida.  | 
|  País = 'EUA' AND Categoria in ('Sapatos', 'Livros') AND (creationDate > '2023-9-01')  |  O índice será usado para buscar todas as partições com país = "EUA" e creationDate > "2023-9-01". A filtragem com a expressão Categoria será realizada em seguida.  | 

## Integração com mecanismos
<a name="partition-index-integration-engines"></a>

Redshift Spectrum, Amazon EMR e AWS Glue ETL Spark DataFrames são capazes de utilizar índices para buscar partições depois que os índices estiverem em um estado ACTIVE (Ativo) no AWS Glue. [Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) e [AWS Glue ETL Dynamic frames](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates) exigem que você siga etapas adicionais a fim de utilizar índices para melhorar consultas.

### Habilitar filtragem de partições
<a name="enable-partition-filtering-athena"></a>

Para ativar a filtragem de partições no Athena, é necessário atualizar as propriedades da tabela da seguinte forma:

1. No console do AWS Glue, escolha **Tabelas** em **Catálogo de Dados**.

1. Escolha uma tabela.

1. Em **Ações**, escolha **Editar tabela**.

1. Em **Propriedades da tabela**, adicione o seguinte:
   + Chave: `partition_filtering.enabled`
   + Valor: `true`

1. Escolha **Aplicar**.

Como alternativa, é possível definir esse parâmetro executando uma consulta [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) no Athena.

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## Atualizar tabelas do Data Catalog criadas manualmente usando crawlers
<a name="update-manual-tables"></a>

Você pode querer criar tabelas do AWS Glue Data Catalog manualmente e mantê-las atualizadas com crawlers do AWS Glue. Os crawlers em execução em uma programação podem adicionar novas partições e atualizar as tabelas com qualquer alteração de esquema. Isso também se aplica a tabelas migradas de um metastore do Apache Hive.

Para fazer isso, ao definir um crawler, em vez de especificar um ou mais armazenamentos de dados como a fonte de um crawl, você especifica uma ou mais tabelas do Data Catalog existentes. Em seguida, o crawler rastreia os armazenamentos de dados especificados pelas tabelas de catálogo. Nesse caso, nenhuma tabela nova é criada; em vez disso, suas tabelas criadas manualmente são atualizadas.

Veja a seguir os outros motivos pelos quais você pode querer criar manualmente tabelas de catálogo e especificar tabelas de catálogo como a origem do crawler:
+ Você deseja escolher o nome da tabela de catálogo e não depender do algoritmo de nomenclatura da tabela de catálogo.
+ Você deseja impedir que novas tabelas sejam criadas caso arquivos com um formato que possa interromper a detecção de partição sejam salvos por engano no caminho da fonte de dados.

Para obter mais informações, consulte [Etapa 2: escolher as fontes de dados e os classificadores](define-crawler-choose-data-sources.md).

## Propriedades da tabela do Data Catalog
<a name="table-properties"></a>

 As propriedades ou parâmetros da tabela, como são conhecidos na AWS CLI, são strings de chave e valor não validadas. Você pode definir suas próprias propriedades na tabela para permitir o uso do Data Catalog fora do AWS Glue. Outros serviços que usam o Data Catalog também podem fazer isso. AWS Glue define algumas propriedades da tabela ao executar trabalhos ou rastreadores. Salvo indicação em contrário, essas propriedades são para uso interno. Não podemos garantir que elas continuarão existindo em sua forma atual nem que o produto se comportará conforme esperado se essas propriedades forem alteradas manualmente. 

 Para obter mais informações sobre as propriedades da tabela definidas pelos crawlers do AWS Glue, consulte [Parâmetros definidos nas tabelas do Data Catalog pelo crawler](table-properties-crawler.md). 