Mejora del rendimiento de las consultas en Amazon Redshift Spectrum - Amazon Redshift

Mejora del rendimiento de las consultas en Amazon Redshift Spectrum

Observe el plan de consulta para saber qué pasos se han enviado a la capa de Amazon Redshift Spectrum.

Los siguientes pasos se relacionan con las consultas en Redshift Spectrum:

  • S3 Seq Scan

  • S3 HashAggregate

  • S3 Query Scan

  • Seq Scan PartitionInfo

  • Partition Loop

En el siguiente ejemplo, se muestra el plan de consulta para una consulta que combina una tabla externa con una tabla local. Tenga en cuenta los pasos S3 Seq Scan y S3 HashAggregate que se ejecutaron sobre los datos en Amazon S3.

explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)

Tenga en cuenta los siguientes elementos en el plan de consulta:

  • El nodo S3 Seq Scan muestra que el filtro pricepaid > 30.00 se procesó en la capa de Redshift Spectrum.

    Un nodo de filtro bajo el nodo XN S3 Query Scan indica el procesamiento de predicados en Amazon Redshift sobre los datos devueltos desde la capa de Redshift Spectrum.

  • El nodo S3 HashAggregate indica agregación en la capa de Redshift Spectrum para el grupo por cláusula (group by spectrum.sales.eventid).

A continuación, se muestran maneras de mejorar el rendimiento de Redshift Spectrum:

  • Utilice archivos de datos con formato Apache Parquet. Parquet almacena datos en un formato de columnas, para que Redshift Spectrum pueda eliminar las columnas no necesarias para el examen. Cuando los datos están en formato de archivo de texto, Redshift Spectrum necesita examinar el archivo completo.

  • Utilice distintos archivos para optimizar el procesamiento en paralelo. Asegúrese de que los archivos tienen un tamaño superior a 64 MB. Evite sesgos de tamaños de datos al mantener todos los archivos con, aproximadamente, el mismo tamaño. Para obtener información sobre los archivos de Apache Parquet y las recomendaciones de configuración, consulte File Format: Configurations en la Documentación de Apache Parquet.

  • Utilice la menor cantidad posible de columnas en las consultas.

  • Guarde las tablas de hechos grandes en Amazon S3 y mantenga las tablas de dimensiones más pequeñas y de uso frecuente en la base de datos local de Amazon Redshift.

  • Actualice las estadísticas de la tabla externa al configurar el parámetro numRows del comando TABLE PROPERTIES. Utilice CREATE EXTERNAL TABLE o ALTER TABLE para establecer el parámetro numRows de TABLE PROPERTIES de manera que refleje la cantidad de filas en la tabla. Amazon Redshift no analiza las tablas externas para generar las estadísticas de las tablas que el optimizador de consultas emplea a la hora de crear un plan de consulta. Si no se establecen las estadísticas de la tabla que corresponden a una tabla externa, Amazon Redshift crea un plan de ejecución de consultas. Amazon Redshift genera este plan a partir de la suposición de que las tablas externas son las más grandes, mientras que las tablas locales son las más pequeñas.

  • El planificador de consultas de Amazon Redshift envía predicados y agrupaciones a la capa de consultas de Redshift Spectrum siempre que sea posible. Cuando se devuelven grandes cantidades de datos de Amazon S3, el procesamiento se ve limitado por los recursos del clúster. Redshift Spectrum escala automáticamente para procesar solicitudes grandes. Por lo tanto, el rendimiento general mejora siempre que pueda enviar el procesamiento a la capa de Redshift Spectrum.

  • Escriba las consultas para utilizar filtros y agregaciones que sean legibles y que se puedan enviar a la capa de Redshift Spectrum.

    Los siguientes son ejemplos de algunas operaciones que se pueden enviar a la capa de Redshift Spectrum:

    • cláusulas GROUP BY

    • Condiciones de comparación y condiciones de coincidencia de patrones, como LIKE.

    • Funciones de agregación, como COUNT, SUM, AVG, MIN y MAX.

    • Funciones de cadena.

    Entre las operaciones que no se pueden enviar a la capa de Redshift Spectrum se incluyen DISTINCT y ORDER BY.

  • Use particiones para limitar los datos por examinar. Particione los datos según los predicados más frecuentes de las consultas y, luego, depure las particiones al filtrar las columnas de partición. Para obtener más información, consulte Partición de tablas externas de Redshift Spectrum.

    Consulte SVL_S3PARTITION para ver las particiones totales y las particiones calificadas.

  • Utilice el generador de estadísticas de AWS Glue para calcular las estadísticas en el nivel de columna para las tablas de AWS Glue Data Catalog. Una vez que AWS Glue genera las estadísticas para las tablas del catálogo de datos, Amazon Redshift Spectrum las utiliza automáticamente para optimizar el plan de consultas. Para obtener más información sobre la computación de estadísticas en el nivel de columna mediante AWS Glue, consulte Trabajar con las estadísticas de las columnas en la Guía para desarrolladores de AWS Glue.