

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

# 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)
```