Melhorar a performance de consulta do Amazon Redshift Spectrum - Amazon Redshift

Melhorar a performance de consulta do Amazon Redshift Spectrum

Verifique o plano da consulta para saber quais etapas foram enviadas para a camada do Amazon Redshift Spectrum.

As etapas a seguir são relacionadas com a consulta do Redshift Spectrum:

  • S3 Seq Scan

  • S3 HashAggregate

  • S3 Query Scan

  • Seq Scan PartitionInfo

  • Partition Loop

O exemplo a seguir mostra o plano de uma consulta que une uma tabela externa a uma tabela local. Observe as etapas S3 Seq Scan e S3 HashAggregate que foram executadas com os dados do 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)

Observe os seguintes elementos no plano da consulta:

  • O nó S3 Seq Scan mostra que o filtro pricepaid > 30.00 foi processado na camada do Redshift Spectrum.

    Um nó de filtro sob o nó XN S3 Query Scan indica um processamento de predicado no Amazon Redshift, além dos dados obtidos da camada do Redshift Spectrum.

  • O nó S3 HashAggregate indica uma agregação na camada do Redshift Spectrum para a cláusula de 'group by' (group by spectrum.sales.eventid).

As recomendações a seguir representam maneiras de melhorar a performance do Redshift Spectrum:

  • Use arquivos de dados formatados pelo Apache Parquet. O Parquet armazena dados em um formato colunar, de maneira que o Redshift Spectrum pode eliminar colunas desnecessárias da varredura. Quando os dados estão em formato de arquivo de texto, o Redshift Spectrum precisa fazer a varredura do arquivo inteiro.

  • Use vários arquivos para otimizar o processamento paralelo. Mantenha os tamanhos de seus arquivos maiores que 64 MB. Evite a distorção do tamanho dos dados mantendo os arquivos com aproximadamente o mesmo tamanho. Para ter informações sobre os arquivos e recomendações de configuração do Apache Parquet, consulte File Format: Configurations na documentação do Apache Parquet.

  • Use o menor número possível de colunas nas consultas.

  • Coloque as tabelas de fatos grandes no Amazon S3 e mantenha as tabelas menores utilizadas com maior frequência no banco de dados local do Amazon Redshift.

  • Atualize as estatísticas das tabelas externas configurando o parâmetro numRows de TABLE PROPERTIES. Use CREATE EXTERNAL TABLE ou ALTER TABLE para definir o parâmetro TABLE PROPERTIES numRows para refletir o número de linhas na tabela. O Amazon Redshift não analisa as tabelas externas para gerar as estatísticas das tabelas que o otimizador de consultas utiliza para gerar um plano de consulta. Se as estatísticas da tabela não estiverem configuradas para uma tabela externa, o Amazon Redshift gerará um plano de execução de consulta. O Amazon Redshift gera esse plano baseado em uma suposição de que as tabelas externas são as maiores e as tabelas locais são as menores.

  • O planejador de consultas do Amazon Redshift envia predicados e agregações para a camada de consulta do Redshift Spectrum sempre que possível. Quando grandes quantidades de dados são retornadas do Amazon S3, o processamento é limitado pelos recursos do seu cluster. O Redshift Spectrum é automaticamente dimensionado para processar grandes solicitações. Assim, a performance geral é aprimorado sempre que você pode enviar processamento para a camada do Redshift Spectrum.

  • Ao escrever suas consultas, considere o uso de filtros e agregações que sejam elegíveis para o processamento na camada do Redshift Spectrum.

    Os exemplos a seguir mostram algumas operações que podem ser enviadas para a camada do Redshift Spectrum:

    • Cláusulas GROUP BY

    • Condições de comparação e de correspondência de padrões, tais como LIKE.

    • Funções agregadas, tais como COUNT, SUM, AVG, MIN e MAX.

    • Funções de string.

    As operações que não podem ser enviadas para a camada do Redshift Spectrum incluem DISTINCT e ORDER BY.

  • Use partições para limitar os dados para a varredura. Divida seus dados em partições com base nos predicados de consulta mais comuns e, em seguida, elimine as partições filtrando pelas colunas de partição. Para obter mais informações, consulte Dividir as tabelas externas do Redshift Spectrum.

    Consulte a SVL_S3PARTITION para visualizar as partições totais e as partições qualificadas.

  • Use o gerador de estatísticas do AWS Glue para calcular estatísticas no nível da coluna para tabelas do AWS Glue Data Catalog. Depois que o AWS Glue gera estatísticas para tabelas no catálogo de dados, o Amazon Redshift Spectrum usa automaticamente essas estatísticas para otimizar o plano de consulta. Para obter mais informações sobre como computar estatísticas no nível da coluna usando AWS Glue, consulte Working with column statistics no Guia do desenvolvedor do AWS Glue.