

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del 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 datos SUPER y vistas materializadas
<a name="r_SUPER_MV"></a>

Con Amazon Redshift, puede utilizar las vistas materializadas para mejorar el rendimiento y la flexibilidad de las consultas que se ejecutan en el tipo de datos SUPER. El tipo de datos SUPER le permite almacenar un superconjunto de columnas de las tablas base en una vista materializada, lo que le permite consultar la vista materializada directamente sin unir las tablas base. En las siguientes secciones, se muestra cómo crear y utilizar vistas materializadas con el tipo de datos SUPER en Amazon Redshift.

Amazon Redshift admite vistas materializadas que incorporan columnas de tipo de datos SUPER y consultas PartiQL. Las vistas materializadas se pueden actualizar de forma incremental, mientras que Amazon Redshift solo actualiza los datos que han cambiado en las tablas base desde la última operación de actualización. Este enfoque de actualización selectiva hace que el proceso de actualización sea más eficiente que los recálculos completos. Para obtener más información acerca de las vistas materializadas, consulte [Vistas materializadas en Amazon Redshift](materialized-view-overview.md).

## Aceleración de consultas PartiQL
<a name="r_accelerate_mv"></a>

Puede utilizar vistas materializadas para acelerar las consultas PartiQL que navegan por los datos jerárquicos de las columnas SUPER o eliminan su anidamiento. Al crear una o más vistas materializadas para triturar los valores SUPER en varias columnas y utilizar la organización en columnas de las consultas de análisis de Amazon Redshift, puede básicamente extraer y normalizar los datos anidados. El nivel de normalización depende de cuánto esfuerzo destine a convertir los datos SUPER en datos convencionales divididos en columnas. 

En los temas siguientes se muestran ejemplos de cómo desglosar o triturar datos complejos en columnas más pequeñas, así como cómo crear columnas escalares a partir de datos triturados para mejorar el rendimiento.

**Topics**
+ [Aceleración de consultas PartiQL](#r_accelerate_mv)
+ [Fragmentación de datos semiestructurados en columnas SUPER con vistas materializadas](r_shred_super.md)
+ [Creación de columnas escalares de Amazon Redshift a partir de datos fragmentados](r_create_scalar.md)

# Fragmentación de datos semiestructurados en columnas SUPER con vistas materializadas
<a name="r_shred_super"></a>

Con Amazon Redshift, puede mejorar el rendimiento de las consultas al triturar los datos en columnas SUPER mediante vistas materializadas. La trituración se refiere al proceso de dividir tipos de datos complejos, como JSON o XML semiestructurados, en columnas más pequeñas y planas. Las columnas SUPER son una forma especializada de almacenamiento en columnas optimizada para escanear rápidamente los datos triturados. 

En las siguientes secciones se describen los pasos y las consideraciones para triturar datos en columnas SUPER mediante vistas materializadas en Amazon Redshift.

En el siguiente ejemplo, se muestra una definición de vista materializada que fragmenta los datos anidados, mientras las columnas resultantes siguen siendo del tipo de datos SUPER.

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

En el siguiente ejemplo, se muestra una definición de vista materializada que crea columnas escalares convencionales de Amazon Redshift a partir de los datos fragmentados.

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

Puede crear una única vista materializada super\$1mv para acelerar ambas consultas.

Para responder la primera consulta, debe materializar el atributo o\$1orderstatus. Puede omitir el atributo c\$1name porque no implica la navegación anidada ni la eliminación del anidamiento. También debe incluir en la vista materializada el atributo c\$1custkey de customer\$1orders\$1lineitem para poder unir la tabla base con la vista materializada.

Para responder la segunda consulta, también debe materializar el atributo o\$1totalprice y el índice de matriz o\$1idx de c\$1orders. Por consiguiente, puede acceder al í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
);
```

Los atributos o\$1orderstatus y o\$1totalprice de la vista materializada super\$1mv son de tipo SUPER.

La vista materializada super\$1mv se actualizará progresivamente luego de los cambios que se realicen en la tabla base customer\$1orders\$1lineitem.

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

Para volver a escribir la primera consulta PartiQL como una consulta SQL normal, una customer\$1orders\$1lineitem con super\$1mv de la siguiente manera.

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

Del mismo modo, puede reescribir la segunda consulta PartiQL. En el siguiente ejemplo, se utiliza un filtro en 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;
```

En el comando CREATE MATERIALIZED VIEW, especifique c\$1custkey como clave de distribución y de ordenación para super\$1mv. Amazon Redshift realiza una unión de combinación eficiente, suponiendo que c\$1custkey también es la clave de distribución y la clave de ordenación de customer\$1orders\$1lineitem. Si ese no es el caso, puede especificar c\$1custkey como la clave de ordenación y de distribución de customer\$1orders\$1lineitem de la siguiente manera.

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

Utilice la instrucción EXPLAIN para comprobar que Amazon Redshift realiza una unión de combinación en las 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)
```

# Creación de columnas escalares de Amazon Redshift a partir de datos fragmentados
<a name="r_create_scalar"></a>

Los datos sin esquemas almacenados en SUPER pueden afectar el rendimiento de Amazon Redshift. Por ejemplo, los predicados de filtro o las condiciones de unión como análisis de rango restringido no pueden utilizar eficazmente los mapas de zona. Los usuarios y las herramientas de BI pueden utilizar las vistas materializadas como la presentación convencional de los datos y aumentar el rendimiento de las consultas analíticas.

La siguiente consulta analiza la vista materializada `super_mv` y filtra en `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';
```

Inspeccione `stl_scan` para comprobar que Amazon Redshift no puede utilizar eficazmente los mapas de zona en el análisis de rango restringido a través de `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)
```

En el siguiente ejemplo, se adapta la vista materializada `super_mv` para crear columnas escalares a partir de los datos fragmentados. En este caso, Amazon Redshift convierte `o_orderstatus` de SUPER en VARCHAR. Además, especifique `o_orderstatus` como la clave de ordenación para `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
);
```

Después de volver a ejecutar la consulta, compruebe que Amazon Redshift ahora pueda utilizar mapas de zona.

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

Puede comprobar que el análisis de rango restringido ahora utiliza mapas de zona de la siguiente manera.

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