

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Exemplos de distribuição
<a name="c_Distribution_examples"></a>

Os seguintes exemplos mostram como os dados são distribuídos de acordo com as opções que você define na instrução CREATE TABLE.

## Exemplos de DISTKEY
<a name="c_Distribution_examples-distkey-examples"></a>

Observe o esquema da tabela USERS no banco de dados TICKIT. USERID é definida como a coluna SORTKEY e a coluna DISTKEY: 

```
select "column", type, encoding, distkey, sortkey 
from pg_table_def where tablename = 'users';
    
    column     |          type          | encoding | distkey | sortkey
---------------+------------------------+----------+---------+---------
 userid        | integer                | none     | t       |       1
 username      | character(8)           | none     | f       |       0
 firstname     | character varying(30)  | text32k  | f       |       0

...
```

USERID é uma boa escolha para a coluna de distribuição dessa tabela. Se você consultar a exibição de sistema SVV\$1DISKUSAGE, verá que a tabela é distribuída de forma bastante uniforme. Os números de coluna são baseados em zero, portanto USERID é a coluna 0.

```
select slice, col, num_values as rows, minvalue, maxvalue
from svv_diskusage
where name='users' and col=0 and rows>0
order by slice, col;

slice| col | rows  | minvalue | maxvalue
-----+-----+-------+----------+----------
0    | 0   | 12496 | 4        | 49987
1    | 0   | 12498 | 1        | 49988
2    | 0   | 12497 | 2        | 49989
3    | 0   | 12499 | 3        | 49990
(4 rows)
```

A tabela contém 49.990 linhas. As coluna de linhas (num\$1values) mostra que cada fatia contém aproximadamente o mesmo número de linhas. As colunas minvalue e maxvalue exibem o intervalo de valores em cada fatia. Cada fatia inclui quase todo o intervalo de valores, portanto, há uma boa chance de que cada fatia participe da execução de uma consulta que filtra uma variedade de IDs de usuário.

Este exemplo demonstra a distribuição em um pequeno sistema de teste. O número total de fatias é geralmente muito maior.

Se você normalmente realiza junções ou agrupamentos usando a coluna STATE, pode optar por distribuir na coluna STATE. O exemplo a seguir mostra um caso em que você cria uma nova tabela com os mesmos dados da tabela USERS, mas define DISTKEY para a coluna STATE. Neste caso, a distribuição não é igual. A fatia 0 (13.587 linhas) contém aproximadamente 30 por cento mais linhas do que a fatia 3 (10.150 linhas). Em uma tabela muito maior, essa quantidade de distorção de distribuição pode ter um impacto adverso no processamento de consultas.

```
create table userskey distkey(state) as select * from users;

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage
where name = 'userskey' and col=0 and rows>0
order by slice, col;

slice | col | rows  | minvalue | maxvalue
------+-----+-------+----------+----------
    0 |   0 | 13587 |        5 |    49989
    1 |   0 | 11245 |        2 |    49990
    2 |   0 | 15008 |        1 |    49976
    3 |   0 | 10150 |        4 |    49986
(4 rows)
```

## Exemplo de DISTSTYLE EVEN
<a name="c_Distribution_examples-diststyle-even-example"></a>

Se você criar uma nova tabela com os mesmos dados da tabela USERS, mas definir DISTSTYLE como EVEN, as linhas sempre serão distribuídas uniformemente ao longo das fatias. 

```
create table userseven diststyle even as 
select * from users;

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage
where name = 'userseven' and col=0 and rows>0
order by slice, col;

slice | col | rows  | minvalue | maxvalue
------+-----+-------+----------+----------
    0 |   0 | 12497 |        4 |    49990
    1 |   0 | 12498 |        8 |    49984
    2 |   0 | 12498 |        2 |    49988
    3 |   0 | 12497 |        1 |    49989  
(4 rows)
```

Entretanto, como a distribuição não é baseada em uma coluna específica, o processamento da consulta pode ser degradado, especialmente se a tabela estiver associada à outras tabelas. A falta de distribuição em uma coluna de junção frequentemente influencia o tipo de operação de junção que pode ser executada eficientemente. Operações de junção, agregação e agrupamento são otimizadas quando ambas as tabelas são distribuídas e classificadas em suas respectivas colunas de junção.

## Exemplo de DISTSTYLE ALL
<a name="c_Distribution_examples-diststyle-all-example"></a>

Se você criar uma nova tabela com os mesmos dados da tabela USERS, mas definir DISTSTYLE como ALL, todas as linhas serão distribuídas para a primeira fatia de cada nó. 

```
select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage
where name = 'usersall' and col=0 and rows > 0
order by slice, col;

slice | col | rows  | minvalue | maxvalue
------+-----+-------+----------+----------
    0 |   0 | 49990 |        4 |    49990
    2 |   0 | 49990 |        2 |    49990

(4 rows)
```