

# 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`<br />`-1,8675309`<br />`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`<br />`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`<br />`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`<br />`01-01-2010,12-31-2018`<br />`NOW-3YEARS,NOW`<br />`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.<br />Essa coluna também pode conter strings de data relativas, formatadas neste padrão de expressão regular:<br />`\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?\|MONTHS?\|WEEKS?\|DAYS?\|HOURS?\|MINUTES?\|SECONDS?)\s*)?`<br />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`<br />`dd-MM-yyyy`<br />`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.\* compatível. | 
| projection.{{columnName}}.interval | `1`<br />`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.<br />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`<br />`MONTHS`<br />`WEEKS`<br />`DAYS`<br />`HOURS`<br />`MINUTES`<br />`SECONDS`<br />`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.<br />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).