

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