Creación de columnas escalares de Amazon Redshift a partir de datos fragmentados
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)