Regravação automática de consulta para usar visões materializadas - Amazon Redshift

Regravação automática de consulta para usar visões materializadas

Você pode usar a regravação automática de consultas de visões materializadas no Amazon Redshift para que o Amazon Redshift regrave as consultas para usar visões materializadas. Isso acelera os workloads de consulta, mesmo para consultas que não fazem referência explícita a uma visualização materializada. Ao regravar consultas, o Amazon RedShift usa somente visões materializadas atualizadas.

Observações de uso

Para verificar se a regravação automática de consultas é usada para uma consulta, você pode inspecionar o plano de consulta ou STL_EXPLAIN. A seguir é mostrado uma instrução SELECT e a saída EXPLAIN do plano de consulta original.

SELECT catgroup, SUM(qtysold) AS sold FROM category c, event e, sales s WHERE c.catid = e.catid AND e.eventid = s.eventid GROUP BY 1; EXPLAIN XN HashAggregate (cost=920021.24..920021.24 rows=1 width=35) -> XN Hash Join DS_BCAST_INNER (cost=440004.53..920021.22 rows=4 width=35) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales s (cost=0.00..7.40 rows=740 width=6) -> XN Hash (cost=440004.52..440004.52 rows=1 width=37) -> XN Hash Join DS_BCAST_INNER (cost=0.01..440004.52 rows=1 width=37) Hash Cond: ("outer".catid = "inner".catid) -> XN Seq Scan on event e (cost=0.00..2.00 rows=200 width=6) -> XN Hash (cost=0.01..0.01 rows=1 width=35) -> XN Seq Scan on category c (cost=0.00..0.01 rows=1 width=35)

A seguir é mostrado a saída EXPLAIN após uma regravação automática bem-sucedida. Essa saída inclui uma varredura na visualização materializada no plano de consulta que substitui partes do plano de consulta original.

* EXPLAIN XN HashAggregate (cost=11.85..12.35 rows=200 width=41) -> XN Seq Scan on mv_tbl__tickets_mv__0 derived_table1 (cost=0.00..7.90 rows=790 width=41)

Somente visões materializadas atualizadas (novas) são consideradas para regravação automática de consultas, independentemente da estratégia de atualização, como automática, programada ou manual. Assim, a consulta original retorna resultados atualizados. Quando uma visualizações materializada é explicitamente referenciada em consultas, o Amazon Redshift acessa os dados armazenados atualmente na visualizações materializada. Esses dados podem não refletir as últimas alterações das tabelas base da visualização materializada.

É possível usar a regravação automática de consultas de visões materializadas criadas na versão de cluster 1.0.20949 ou posterior.

Você pode interromper a regravação automática de consulta no nível da sessão usando SET mv_enable_aqmv_for_session como FALSE.

Limitações

A seguir estão as limitações para usar a regravação automática de consultas de visões materializadas:

  • A regravação automática de consulta funciona com visões materializadas que não fazem referência ou incluem qualquer um dos seguintes itens:

    • Subconsultas

    • Esquerda, direita ou junções externas completas

    • Operações de conjunto

    • Todas as funções agregadas, exceto SUM, COUNT, MIN e MAX e AVG; (Essas são as únicas funções agregadas que funcionam com a reescrita automática de consultas.)

    • Todas as funções agregadas com DISTINCT

    • Todas as funções da janela

    • Cláusulas SELECT DISTINCT ou HAVING

    • Tabelas externas

    • Outras visões materializadas

  • A reescrita automática de consulta regrava consultas SELECT que se referem a tabelas definidas pelo usuário do Amazon Redshift. O Amazon Redshift não regrava as seguintes consultas:

    • Instruções CREATE TABLE AS

    • Instruções SELECT INTO

    • Consultas em catálogos ou tabelas de sistema

    • Consultas com junções externas ou uma cláusula SELECT DISTINCT

  • Se uma consulta não for regravada automaticamente, confira se você tem o privilégio SELECT na visualização materializada especificada e se a opção mv_enable_aqmv_for_session está definida como TRUE.

    Você também pode verificar se suas visões materializadas são elegíveis para regravação automática de consultas inspecionando STV_MV_INFO. Para obter mais informações, consulte STV_MV_INFO.