

 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/). 

# Tipo de dados SUPER com visões materializadas
<a name="r_SUPER_MV"></a>

Com o Amazon Redshift, é possível usar visões materializadas para melhorar o desempenho e a flexibilidade de consultas executadas em tipo de dados SUPER. O tipo de dados SUPER permite armazenar um superconjunto de colunas das tabelas base em uma visão materializada, possibilitando que você consulte a visão materializada diretamente sem unir as tabelas base. As seções a seguir mostram como criar e usar visões materializadas com o tipo de dados SUPER no Amazon Redshift.

O Amazon Redshift dá suporte a visões materializadas que incorporam colunas de tipo de dados SUPER e consultas PartiQL. As visões materializadas podem ser atualizadas incrementalmente, enquanto o Amazon Redshift atualiza somente os dados que foram alterados nas tabelas base desde a última operação de atualização. Essa abordagem de atualização seletiva torna o processo de atualização mais eficiente do que os recálculos completos. Para obter mais informações sobre visões materializadas, consulte [Visões materializadas no Amazon Redshift](materialized-view-overview.md).

## Acelerar consultas do PartiQL
<a name="r_accelerate_mv"></a>

Você pode usar visões materializadas para acelerar consultas do PartiQL que navegam e/ou aninhem dados hierárquicos em colunas SUPER. Ao criar uma ou mais visões materializadas para destruir os valores SUPER em várias colunas e utilizar a organização colunar das consultas analíticas do Amazon Redshift, você pode essencialmente extrair e normalizar dados aninhados. O nível de normalização depende de quanto esforço você colocar para transformar os dados SUPER em dados colunares convencionais. 

Os tópicos a seguir mostram exemplos de como dividir ou fragmentar dados complexos em colunas menores, bem como criar colunas escalares a partir de dados fragmentados para melhorar o desempenho.

**Topics**
+ [Acelerar consultas do PartiQL](#r_accelerate_mv)
+ [Fragmentar dados semiestruturados em colunas SUPER com visões materializadas](r_shred_super.md)
+ [Criar colunas escalares do Amazon Redshift a partir de dados fragmentados](r_create_scalar.md)

# Fragmentar dados semiestruturados em colunas SUPER com visões materializadas
<a name="r_shred_super"></a>

Com o Amazon Redshift, é possível melhorar o desempenho das consultas fragmentando os dados em colunas SUPER por meio de visões materializadas. A fragmentação se refere ao processo de dividir tipos de dados complexos, como JSON ou XML semiestruturado, em colunas menores e mais niveladas. As colunas SUPER são uma forma especializada de armazenamento colunar otimizado para verificar rapidamente os dados fragmentados. 

As seções a seguir descrevem as etapas e considerações para fragmentar dados em colunas SUPER usando visões materializadas no Amazon Redshift.

O exemplo a seguir mostra uma visão materializada que fragmenta os dados aninhados com as colunas resultantes ainda sendo o tipo de dados SUPER.

```
SELECT c.c_name, o.o_orderstatus
FROM customer_orders_lineitem c, c.c_orders o;
```

O exemplo a seguir mostra uma visão materializada que cria colunas escalares convencionais do Amazon Redshift com base nos dados fragmentados.

```
SELECT c.c_name, c.c_orders[0].o_totalprice
FROM customer_orders_lineitem c;
```

Você pode criar uma única visão materializada super\$1mv para acelerar ambas as consultas.

Para responder à primeira consulta, você deve materializar o atributo o\$1orderstatus. Você pode omitir o atributo c\$1name porque ele não envolve navegação aninhada nem desaninhamento. Você também deve incluir na visão materializada o atributo c\$1custkey de customer\$1orders\$1lineitem para poder unir a tabela-base com a visão materializada.

Para responder à segunda consulta, você também deve materializar o atributo o\$1totalprice e o índice de array o\$1idx de c\$1orders. Assim, você pode acessar o índice 0 de c\$1orders.

```
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey) AS (
  SELECT c_custkey, o.o_orderstatus, o.o_totalprice, o_idx
  FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
```

Os atributos o\$1orderstatus e o\$1totalprice da visão materializada super\$1mv são SUPER.

A visão materializada super\$1mv será atualizada incrementalmente após alterações na tabela base customer\$1orders\$1lineitem.

```
REFRESH MATERIALIZED VIEW super_mv;
INFO: Materialized view super_mv was incrementally updated successfully.
```

Para reescrever a primeira consulta PartiQL como uma consulta SQL regular, junte customer\$1orders\$1lineitem com super\$1mv da seguinte forma.

```
SELECT c.c_name, v.o_orderstatus
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey;
```

Da mesma forma, você pode reescrever a segunda consulta PartiQL. O exemplo a seguir usa um filtro em o\$1idx = 0.

```
SELECT c.c_name, v.o_totalprice
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey
WHERE v.o_idx = 0;
```

No comando CREATE MATERIALIZED VIEW, especifique c\$1custkey como chave de distribuição e chave de classificação para super\$1mv. O Amazon Redshift executa uma junção de mesclagem eficiente, supondo que c\$1custkey também seja a chave de distribuição e a chave de classificação de customer\$1orders\$1lineitem. Se esse não for o caso, você pode especificar c\$1custkey como a chave de classificação e a chave de distribuição de customer\$1orders\$1lineitem da forma a seguir.

```
ALTER TABLE customer_orders_lineitem
ALTER DISTKEY c_custkey, ALTER SORTKEY (c_custkey);
```

Use a instrução EXPLAIN para verificar se o Amazon Redshift realiza uma junção de mesclagem nas consultas reescritas.

```
EXPLAIN
      SELECT c.c_name, v.o_orderstatus
      FROM customer_orders_lineitem c JOIN super_mv v ON c.c_custkey = v.c_custkey;
      
      QUERY PLAN                                              
      ------------------------------------------------------------------------------------------------------
      XN Merge Join DS_DIST_NONE  (cost=0.00..34701.82 rows=1470776 width=27)
      Merge Cond: ("outer".c_custkey = "inner".c_custkey)
      ->  XN Seq Scan on mv_tbl__super_mv__0 derived_table2  (cost=0.00..14999.86 rows=1499986 width=13)
      ->  XN Seq Scan on customer_orders_lineitem c  (cost=0.00..999.96 rows=99996 width=30)
      (4 rows)
```

# Criar colunas escalares do Amazon Redshift a partir de dados fragmentados
<a name="r_create_scalar"></a>

Dados sem esquema armazenados no SUPER podem afetar a performance do Amazon Redshift. Por exemplo, filtrar predicados ou condições de junção como varreduras restritas de intervalo não podem usar efetivamente mapas de zona. Usuários e ferramentas de BI podem usar exibições materializadas como a apresentação convencional dos dados e aumentar a performance das consultas analíticas.

A consulta a seguir verifica a visão materializada `super_mv` e filtros no `o_orderstatus`.

```
SELECT c.c_name, v.o_totalprice
FROM customer_orders_lineitem c
JOIN super_mv v ON c.c_custkey = v.c_custkey
WHERE v.o_orderstatus = 'F';
```

Inspecione `stl_scan` para verificar se o Amazon Redshift não pode usar efetivamente mapas de zona na varredura restrita por intervalo em `o_orderstatus`.

```
SELECT slice, is_rrscan FROM stl_scan
WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%';

 slice | is_rrscan 
-------+-----------
     0 | f
     1 | f
     5 | f
     4 | f
     2 | f
     3 | f
(6 rows)
```

O exemplo a seguir adapta a visão materializada `super_mv` para criar colunas escalares fora dos dados fragmentados. Nesse caso, o Amazon Redshift converte `o_orderstatus` de SUPER para VARCHAR. Além disso, especifica `o_orderstatus` como a chave de classificação para o `super_mv`.

```
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey, o_orderstatus) AS (
  SELECT c_custkey, o.o_orderstatus::VARCHAR AS o_orderstatus, o.o_totalprice, o_idx
  FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
```

Depois de executar novamente a consulta, verifique se o Amazon Redshift agora pode usar mapas de zona.

```
SELECT v.o_totalprice
FROM super_mv v
WHERE v.o_orderstatus = 'F';
```

Você pode verificar se a varredura com restrição de intervalo agora usa mapas de zona da seguinte maneira.

```
SELECT slice, is_rrscan FROM stl_scan
WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%';

 slice | is_rrscan 
-------+-----------
     0 | t
     1 | t
     2 | t
     3 | t
     4 | t
     5 | t
(6 rows)
```