

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Regravação automática de consulta para usar visões materializadas
<a name="materialized-view-auto-rewrite"></a>

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 visão materializada. Ao regravar consultas, o Amazon RedShift usa somente visões materializadas atualizadas.

## Observações de uso
<a name="mv_auto-rewrite_usage"></a>

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 visã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 visã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.

## Como funciona a regravação automática de consulta de visões materializadas
<a name="mv_auto-rewrite_behavior"></a>

Com base na otimização interna, o Amazon Redshift pode decidir invocar a regravação automática de consultas de visões materializadas de maneira transparente para oferecer a execução de consultas mais adequada e os menores tempos de consulta possíveis.

Por exemplo, suponha que o usuário A crie uma visão materializada M1 na tabela T1 com a consulta `SELECT * FROM T1`. O usuário A tem todos os privilégios SELECT em T1. O usuário A concede acesso à M1 a todos os usuários, incluindo o usuário B. No entanto, quando o usuário B tenta consultar T1 diretamente, o acesso é negado. Isso ocorre porque o usuário B não tem privilégios SELECT em T1.

Algum tempo depois, o usuário B tenta consultar novamente T1, mas dessa vez obtém resultados de T1. Isso ocorre porque a regravação automática de consultas usando a visão materializada regravou a consulta do usuário B na tabela T1 (`SELECT <cols> FROM T1`) em uma consulta na visão materializada M1 (`SELECT <cols> FROM M1`). 

## Limitações
<a name="mv_auto-rewrite_limitations"></a>

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 ou compartilhadas
  + 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 visão materializada especificada e se a opção [mv\_enable\_aqmv\_for\_session](r_mv_enable_aqmv_for_session.md) 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](r_STV_MV_INFO.md).